512e i 4kn

512e i 4kn

  • Comments 1
  • Likes

Dawno dawno temu (w połowie XX wieku), ktoś nie tak całkiem głupio wymyślił, żeby dane z dysków czytać porcjami zamiast bajt po bajcie. Powodów było całkiem sporo. Każda operacja odczytu ma pewien narzut, niemal niezależny od ilości czytanych danych, fizyczna postać talerzy z ruchomą głowicą też miała swoje znaczenie itp. W każdym razie, gdy nadeszły czasy MS-DOS, dyski w przyrodzie istniały i przynajmniej w temacie przesyłania danych między dyskami a systemem, żadna poważniejsza rewolucja nie nastąpiła. Na samym dole, przy warstwie sprzętu, podstawową jednostką wymiany danych z dyskiem pozostał sektor. Kto używał INT 13 do rozmowy z dyskiem, ten pamięta to doskonale. Nawet, jeżeli ktoś nie programował w Assemblerze, to i tak mając do czynienia z komputerami pewnie o sektorach słyszał. Ponieważ w pierwszych PCtach, we wczesnych latach osiemdziesiątych, najpierw stacje dysków a potem dyski twarde miały sektory o rozmiarze 512 bajtów to tak już jakoś zostało. To prawie taka sama "świętość" jak ośmiobitowy bajt. Niby da się inaczej, ale nikomu na serio nie przyszłoby do głowy, żeby to zmieniać. Zbyt dużo zamieszania, zbyt wielkie ryzyko jakiejś niezgodności, zbyt wiele zaszłości i starego kodu do przejrzenia... I choć nieraz informatyce zdarzało się o ograniczenia rozmiaru 512B potykać (na przykład w sytuacji, gdy osiągnięto granice możliwości adresowania danych w standardzie Cylinder/Head/Sector) to prościej było wymyślać objazdy w stylu LBA niż poważnie zająć się rozmiarem sektora.

W przypadku systemów Microsoft, na odwagę zebrano się dopiero w czasach jądra 6.0 czyli w systemie Windows Vista/Windows 2008. Producenci dysków wykorzystali tę szansę i około 2010 roku światło dzienne ujrzały dyski z sektorami 4kB – ośmiokrotnie większymi niż dotychczas. Rozmiar 4kB wybrany został nieprzypadkowo. Wynika on z najbardziej typowego rozmiaru porcji danych dla spotykanych w świecie IT rozwiązań mocno korzystających z pamięci masowych. Choć stawianie kolejnej twardej granicy wydaje się ryzykowne (znowu kiedyś potrzebna będzie rewolucja), to jednak na chwilę obecną ocenić można, że 4096 bajtów w sektorze nie jest taką złą ilością.

Oczywiście, wszystkie obawy o zgodność wstecz miały swoje powody. Dlatego, producenci dysków z sektorami 4k wymyślili, żeby zaopatrzyć swoje produkty w mechanizmy emulujące sektory 512B mimo, że dysk w środku podzielony był na większe kawałki. I choć mogło to sprawić trochę kłopotu (to nie jest wcale w pełni zgodnie ze starym formatem a zapis ośmiu kolejnych emulowanych sektorów wymaga faktycznego zapisu 32kB zamiast 4kB) to jednak było łatwiejsze do zniesienia dla wielu starszych aplikacji. I tak powstał standard 512e. Oczywiście, zaczęły się pojawiać również dyski z "prawdziwym" 4k, zwanym czasem 4kN – jak Native.

I tu zaczęło się zamieszanie. Jedne systemy wspierały taki format, inne – inny... Windows 7 SP1 radzi sobie z 512e, którego nie pojmuje Windows XP, a Windows 8/2012 oczywiście rozumie wszystko, co dotąd powstało.

OK. Pora przejść do konkretów. Co to oznacza dla mnie? Poprawna odpowiedź brzmi "to zależy". Na pewno pora w głowie skasować obecną tam od zawsze tożsamość 1 sektor = 512 bajtów. Tak już nie jest. A w zależności od tego, jak to jest ważne w praktyce, trzeba sobie samodzielnie określić co oznacza zmiana rozmiaru sektora. Pora też zwrócić uwagę na wszystkie "wynalazki" dotykające dysku bez pośrednictwa systemu plików i OS. Programy do backupu offline, narzędzia do klonowania, aplikacje do odzyskiwania danych czy do zmian w układzie partycji... To wszystko będzie dobrze działać tylko, jeżeli autor był świadomy zmian w architekturze dysków twardych. W przeciwnym przypadku, skutki mogą być trudne do przewidzenia. Microsoft zwraca również uwagę, że nie ma żadnej gwarancji, że rozmiar sektora nie zmieni się w czasie pracy systemu. Można sobie wyobrazić takie scenariusze (na przykład dane zmienią lokalizację) i trzeba być na to gotowym.

A jeżeli ktoś nie programuje? Co poza czujnością mu pozostaje? Na początek poleciłbym dość ciekawe linki:

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

512e

Autor: Grzegorz Tworek [MVP]

Comments
  • Grzegorzu, a mogę Ci podrzucić tajemniczy temat do wyjaśnienia:

    po co jest i jak korzystać z

    netsh int tcp show supplemental

    (support.microsoft.com/.../en-us)

    Ja się domyślam i stosuję u siebie, ale brak oficjalnej dokumentacji z MS

    Przydałoby się takie oficjalne "guidance" :-)

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment