512e i 4kn

Dawno dawno temu (w polowie XX wieku), ktos nie tak calkiem glupio wymyslil, zeby dane z dysków czytac porcjami zamiast bajt po bajcie. Powodów bylo calkiem sporo. Kazda operacja odczytu ma pewien narzut, niemal niezalezny od ilosci czytanych danych, fizyczna postac talerzy z ruchoma glowica tez miala swoje znaczenie itp. W kazdym razie, gdy nadeszly czasy MS-DOS, dyski w przyrodzie istnialy i przynajmniej w temacie przesylania danych miedzy dyskami a systemem, zadna powazniejsza rewolucja nie nastapila. Na samym dole, przy warstwie sprzetu, podstawowa jednostka wymiany danych z dyskiem pozostal sektor. Kto uzywal INT 13 do rozmowy z dyskiem, ten pamieta to doskonale. Nawet, jezeli ktos nie programowal w Assemblerze, to i tak majac do czynienia z komputerami pewnie o sektorach slyszal. Poniewaz w pierwszych PCtach, we wczesnych latach osiemdziesiatych, najpierw stacje dysków a potem dyski twarde mialy sektory o rozmiarze 512 bajtów to tak juz jakos zostalo. To prawie taka sama "swietosc" jak osmiobitowy bajt. Niby da sie inaczej, ale nikomu na serio nie przyszloby do glowy, zeby to zmieniac. Zbyt duzo zamieszania, zbyt wielkie ryzyko jakiejs niezgodnosci, zbyt wiele zaszlosci i starego kodu do przejrzenia... I choc nieraz informatyce zdarzalo sie o ograniczenia rozmiaru 512B potykac (na przyklad w sytuacji, gdy osiagnieto granice mozliwosci adresowania danych w standardzie Cylinder/Head/Sector) to prosciej bylo wymyslac objazdy w stylu LBA niz powaznie zajac sie rozmiarem sektora.

W przypadku systemów Microsoft, na odwage zebrano sie dopiero w czasach jadra 6.0 czyli w systemie Windows Vista/Windows 2008. Producenci dysków wykorzystali te szanse i okolo 2010 roku swiatlo dzienne ujrzaly dyski z sektorami 4kB – osmiokrotnie wiekszymi niz dotychczas. Rozmiar 4kB wybrany zostal nieprzypadkowo. Wynika on z najbardziej typowego rozmiaru porcji danych dla spotykanych w swiecie IT rozwiazan mocno korzystajacych z pamieci masowych. Choc stawianie kolejnej twardej granicy wydaje sie ryzykowne (znowu kiedys potrzebna bedzie rewolucja), to jednak na chwile obecna ocenic mozna, ze 4096 bajtów w sektorze nie jest taka zla iloscia.

Oczywiscie, wszystkie obawy o zgodnosc wstecz mialy swoje powody. Dlatego, producenci dysków z sektorami 4k wymyslili, zeby zaopatrzyc swoje produkty w mechanizmy emulujace sektory 512B mimo, ze dysk w srodku podzielony byl na wieksze kawalki. I choc moglo to sprawic troche klopotu (to nie jest wcale w pelni zgodnie ze starym formatem a zapis osmiu kolejnych emulowanych sektorów wymaga faktycznego zapisu 32kB zamiast 4kB) to jednak bylo latwiejsze do zniesienia dla wielu starszych aplikacji. I tak powstal standard 512e. Oczywiscie, zaczely sie pojawiac równiez dyski z "prawdziwym" 4k, zwanym czasem 4kN – jak Native.

I tu zaczelo sie zamieszanie. Jedne systemy wspieraly taki format, inne – inny... Windows 7 SP1 radzi sobie z 512e, którego nie pojmuje Windows XP, a Windows 8/2012 oczywiscie rozumie wszystko, co dotad powstalo.

OK. Pora przejsc do konkretów. Co to oznacza dla mnie? Poprawna odpowiedz brzmi "to zalezy". Na pewno pora w glowie skasowac obecna tam od zawsze tozsamosc 1 sektor = 512 bajtów. Tak juz nie jest. A w zaleznosci od tego, jak to jest wazne w praktyce, trzeba sobie samodzielnie okreslic co oznacza zmiana rozmiaru sektora. Pora tez zwrócic uwage na wszystkie "wynalazki" dotykajace dysku bez posrednictwa systemu plików i OS. Programy do backupu offline, narzedzia do klonowania, aplikacje do odzyskiwania danych czy do zmian w ukladzie partycji... To wszystko bedzie dobrze dzialac tylko, jezeli autor byl swiadomy zmian w architekturze dysków twardych. W przeciwnym przypadku, skutki moga byc trudne do przewidzenia. Microsoft zwraca równiez uwage, ze nie ma zadnej gwarancji, ze rozmiar sektora nie zmieni sie w czasie pracy systemu. Mozna sobie wyobrazic takie scenariusze (na przyklad dane zmienia lokalizacje) i trzeba byc na to gotowym.

A jezeli ktos nie programuje? Co poza czujnoscia mu pozostaje? Na poczatek polecilbym dosc ciekawe linki:

A dla eksperymentatorów: fsutil fsinfo ntfsinfo c: i sprawdzenie co tam sie ciekawego pojawi w polach Bytes Per Sector i Bytes Per Physical Sector.

512e

Autor: Grzegorz Tworek [MVP]