Wielu z was zapewne zdaje sobie sprawę z zamieszania jakie powstało wraz z wprowadzeniem przez producentów dysków o sektorach 4k. Do tej pory dyski używały sektory 512B i wiele programów, zwłaszcza pod Windows sobie z tym nie radzi.
Niby w kernelu Linuxa od wersji 2.6.28 są już poprawki które ten problem załatwiają ale jednak było dużo zgłoszeń użytkowników o problemach.
Największym z nich jest ten, że obecnie dostępne dyski 4k działają w emulacji 512B i tak zgłaszają się systemowi i sterownikom. Linux jest w tej dobrej sytuacji, że sterowniki SATA już jakiś czas temu przestały być tworzone na bazie sterownika ATA i są robione na bazie sterownika SATA więc ich ten problem teoretycznie nie dotyczy.
Pozostaje jedynie kwestia tablicy partycji i to, czy program partycjonujący używa poleceń ATA do sprawdzenia geometrii dysku i otrzymuje dane z emulatora czy poleceń SCSI i otrzymuje prawdziwe dane fizyczne dysku z pominięciem emulacji.
Obecnie najczęściej używana jest tablica MBR gdyż to jest podstawa dla Windows i ograniczenie do sektorów 512B ale Linux może skorzystać z tablicy GUID (GUID Partition Table = GPT) dla której nie jest problemem zmienna wielkość sektorów na dysku.
W rezultacie, na dyskach z sektorami 4k gdy założy się partycje które nie zaczynają się od sektora wyrównanego co 4096B tylko co 512B są problemy z prędkością zapisu - prawdopodobnie przez konieczność synchronizacji sektorów co wymaga dodatkowego pustego obrotu talerza więc na dysku o prędkości 7200obr/min mamy prędkość zapisu jak dla dysku 3600obr/min.
Poczytajcie na sieci o nowych dyskach z prędkością zapisu rzędu 4-8MiB/s
Dobra, koniec przynudzania. Teraz praktyka.
Kupiłem dysk Samsung F4G 204UI 2T który jest dyskiem z sektorami 4k z emulacją sektorów 512B bez przełącznika.
Również Western Digital ma takie dyski, jest to seria WD Green WDxxEARS gdzie xx to 10 (1TB), 15 (1,5TB) i 20 (2TB) które również są dyskami 4k sector size z emulacją 512B ale posiadają zworkę aby tą emulację wyłączyć.
Producenci dysków WD i Samsung oferują dla Windows specjalne programiki które przesuwają partycje tak aby ich początki pokrywały się sektorami 4k aby obejść ten problem gdyż podobno dopiero Windows7 potrafi obsługiwać takie dyski bez emulacji.
Więc co z moim dyskiem? Nic. Nie robiłem nic. Włożyłem w kieszeń eSATA aby sprawdzić jak to jest i zrobiłem serię testów.
Oto program testowy:
Kod: Zaznacz cały
#!/bin/bash
for x in 512 1024 4096 8192 16384 32768
do
_COUNT=$(echo "scale=0; 2^30 / ${2}" |bc -l)
for y in {1..5}
do
(dd if=/dev/zero bs=${x} count=${_COUNT} of=/media/HD204UI/1Gdisk.test) 2>/tmp/dd.log && \
(awk '/skopiowane/ {print '${x}'";"$6";"$8}' /tmp/dd.log) >>/tmp/4ksector.test.log
done
done
Sformatowałem dysk w gParted z tablicą MBR i EXT4
Kod: Zaznacz cały
kitsune@kitsunes-zotac:~$ sudo parted /dev/sdf unit s print
Model: SAMSUNG HD204UI (scsi)
Dysk /dev/sdf: 3907029168s
Rozmiar sektora (logiczny/fizyczny): 512B/512B
Tablica partycji: msdos
Numer Początek Koniec Rozmiar System plików Nazwa Flaga
1 63s 3907029134s 3907029074s ext4
kitsune@kitsunes-zotac:
a oto wyniki (wielkość bloku danych; czas wykonania; prędkość w MB/s):
Kod: Zaznacz cały
512;48,5484;22,1
512;48,2837;22,2
512;48,9893;21,9
512;49,4604;21,7
512;48,1856;22,3
1024;27,1202;39,6
1024;28,1869;38,1
1024;28,7515;37,3
1024;28,2582;38,0
1024;27,5813;38,9
2048;16,8999;63,5
2048;17,0137;63,1
2048;16,8786;63,6
2048;17,0091;63,1
2048;17,081;62,9
4096;11,5174;93,2
4096;12,3651;86,8
4096;11,9812;89,6
4096;12,1045;88,7
4096;11,4113;94,1
16384;9,05405;119
16384;9,04635;119
16384;9,16957;117
16384;9,11231;118
16384;9,10361;118
32768;9,11906;118
32768;9,64798;111
32768;10,1718;106
32768;8,8966;121
32768;8,90196;121
Potem sformatowałem z GPT i EXT4
Kod: Zaznacz cały
kitsune@kitsunes-zotac:~$ sudo parted /dev/sdf unit s print
Model: SAMSUNG HD204UI (scsi)
Dysk /dev/sdf: 3907029168s
Rozmiar sektora (logiczny/fizyczny): 512B/512B
Tablica partycji: gpt
Numer Początek Koniec Rozmiar System plików Nazwa Flaga
1 34s 3907029134s 3907029101s ext4
kitsune@kitsunes-zotac:
a oto wyniki
Kod: Zaznacz cały
512;47,6996;22,5
512;48,6056;22,1
512;48,4047;22,2
512;49,3063;21,8
512;48,3339;22,2
1024;27,6635;38,8
1024;27,4038;39,2
1024;27,8167;38,6
1024;26,5115;40,5
1024;27,6227;38,9
2048;17,0104;63,1
2048;17,9731;59,7
2048;17,7795;60,4
2048;17,8089;60,3
2048;17,2595;62,2
4096;11,5843;92,7
4096;11,7736;91,2
4096;12,2645;87,5
4096;11,3233;94,8
4096;11,4354;93,9
16384;9,01469;119
16384;9,07027;118
16384;9,05964;119
16384;9,08232;118
16384;9,0815;118
32768;8,7088;123
32768;8,68712;124
32768;8,85407;121
32768;8,98628;119
32768;8,78074;122
Z chęcią po testowałbym dysk w Phoronix Test Suite ale na razie nie mam pomysłu jak go zmusić aby zrobił test na wybranym dysku zamiast na "/".