Optymalizacja rozmiaru sektora logicznego dla rozmiaru sektora fizycznego 4096 HDD

20

W przypadku wielu nowych dysków twardych rozmiar sektora fizycznego wynosi 4096. Czy byłoby możliwe, aby system używał rozmiaru sektora logicznego o tym samym rozmiarze, zamiast domyślnego rozmiaru sektora logicznego 512?

Czy przyspieszy zbiorcze odczyty i zapisy? Gdzie można to skonfigurować?

Matan
źródło
Zobacz unix.stackexchange.com/a/18542/1131 dla komentarzy dotyczących kwestii wyrównania. Najnowsze wersje mkfs.*powinny automatycznie używać optymalnego rozmiaru sektora. Możesz wykonać kilka mkfs.*testów i sprawdzić wynik (w pełnym wyniku programu mkfs lub w powiązanym programie narzędziowym fs).
maxschlepzig
Dzięki, ale nie ma problemów z wyrównaniem
Matan

Odpowiedzi:

29

512 bajtów nie jest tak naprawdę domyślnym rozmiarem sektora. To zależy od twojego sprzętu.

Możesz wyświetlić rozmiar sektora fizycznego / logicznego, który zgłasza twój dysk za pośrednictwem /syspseudo systemu plików, na przykład:

# cat /sys/block/sda/queue/physical_block_size
4096
# cat /sys/block/sda/queue/logical_block_size
512

Jaka jest różnica między tymi dwiema wartościami?

  • Jest physical_block_sizeto minimalny rozmiar bloku, który dysk może zapisać w operacji atomowej.
  • Jest logical_block_sizeto najmniejszy rozmiar, jaki dysk może zapisać (por. Dokumentacja jądra systemu Linux).

Tak więc, jeśli masz dysk 4k, ma sens, że twój stos pamięci (system plików itp.) Używa czegoś równego lub większego niż rozmiar sektora fizycznego.

Wartości te są również wyświetlane w najnowszych wersjach fdisk, na przykład:

# fdisk -l /dev/sda
[..]
Sector size (logical/physical): 512 bytes / 4096 bytes

W obecnych dystrybucjach linuksa programy (które powinny dbać o optymalny rozmiar sektora) podobnie mkfs.xfswybiorą domyślnie optymalny rozmiar sektora (np. 4096 bajtów).

Ale możesz również wyraźnie to określić za pomocą opcji, na przykład:

# mkfs.xfs -f -s size=4096 /dev/sda

Lub:

# mkfs.ext4 -F -b 4096 /dev/sda

W każdym razie większość mkfswariantów wyświetli również używany rozmiar bloku podczas wykonywania.

W przypadku istniejącego systemu plików rozmiar bloku można określić za pomocą polecenia:

# xfs_info /mnt
[..]
meta-data=                       sectsz=4096
data     =                       bsize=4096
naming   =version 2              bsize=4096
log      =internal               bsize=4096
         =                       sectsz=4096
realtime =none                   extsz=4096

Lub:

# tune2fs -l /dev/sda
Block size:               4096
Fragment size:            4096

Lub:

# btrfs inspect-internal dump-super /dev/sda | grep size
csum_size             4
sys_array_size        97
sectorsize            4096
nodesize              16384
leafsize              16384
stripesize            4096
dev_item.sector_size  4096

Podczas tworzenia systemu plików na partycji należy sprawdzić, czy adres początkowy partycji jest rzeczywiście dopasowany do rozmiaru bloku fizycznego. Na przykład spójrz na dane fdisk -lwyjściowe, przekonwertuj adresy początkowe na bajty, podziel je przez fizyczny rozmiar bloku - przypomnienie musi wynosić zero, jeśli partycje są wyrównane.

maxschlepzig
źródło
Dzięki, wyjaśnienie tego, co Linux opisuje jako logiczne i fizyczne rozmiary bloków, było bardzo pomocne. Niedawno wpadłem na sytuację, w której ten sam dysk twardy o pojemności 8 TB pojawił się jako 512-bajtowe bloki w jednej obudowie USB i bloki 4K w drugiej, zarówno logiczne, jak i fizyczne. Myślałem, że coś jest nie tak, ponieważ Linux nie widział mapy partycji po zmianie obudów, ale potem odkryłem, że GPT zaczyna się od drugiego bloku logicznego, więc było po prostu w niewłaściwym miejscu dla nowego wyrównania. Użyłem gdisk do odtworzenia pojedynczej dużej partycji, a wszystkie moje dane wciąż tam były (ext4 z blokami 4K).
Raptor007
Czy opisana metoda sprawdzania wyrównania jest wiarygodna? Użyłem narzędzia „parted” i zgłosiłem, że partycja dysku twardego jest wyrównana, ale przy podejściu zapytałem o rozmiar bloku fizycznego, otrzymałem 512, a następnie wziąłem adres początkowy partycji fdisk -l, podzieliłem przez 8, a następnie 512. reszta nie była
równa
1
@ user907860 Dlaczego dzielisz przez 8? A fdisk -lraporty Units = sectors of 1 * 512 = 512 bytesw jednym z moich systemów Linux - Tak więc, dla 512/4096 logicznego / fizycznego napędu z 2 partycji poczynając od 2048 i 1026048 I obliczeniowych 2048*512%4096i 1026048*512%4096- np w powłoce Pythona. Ponieważ oba wyrażenia są równe zero, te partycje są wyrównane do 4k.
maxschlepzig
dziękuję bardzo za wyjaśnienie, nie zauważyłem, że liczba to sektory, a nie bity. Głosowałem za odpowiedzią kilka miesięcy temu, niestety, nie mogę tego zrobić ponownie
user907860
2

Nie, nie jest to możliwe, ani nie miałoby znaczenia, gdyby tak było. IO zazwyczaj wykonuje się w jednostkach co najmniej 4096 bajtów, i zwykle znacznie więcej.

psusi
źródło
2
Nie jestem pewien, jak to stwierdzenie odnosi się do mojego pytania. Logiczny rozmiar sektora może oznaczać mniejsze porcje w pewnej części potoku IO oraz niepotrzebną emulację oprogramowania wewnętrznego dysku twardego. Chcesz to wyjaśnić?
Matan
2
@Matan, w ogóle nie mogę zrozumieć twojego komentarza. Wyjaśniłem, że IO nie wykonuje 512 bajtów naraz, więc fakt, że dysk jest adresowany w 512 bajtowych sektorach, nie ma znaczenia. Napęd musi wykonać emulację tylko wtedy, gdy spróbujesz wykonać zapis, który nie jest wyrównany do 4k, a ponieważ IO jest zwykle wykonywane w wielokrotnościach 4k, a nowoczesne narzędzia do partycjonowania zapewniają, że partycja zaczyna się na granicy 4k, to się nie stanie.
psusi
1
Ta „odpowiedź” jest całkowicie błędna, zarówno w jej twierdzeniach, jak i wnioskach. Rozmiar logiczny jest ustawiany podczas formatowania woluminu. Niedopasowanie wielkości logicznej do fizycznej ma określony koszt w technologiach takich jak pamięć flash.
Chris Stratton
@ChrisStratton, nie, myślisz o wielkości bloku / klastra systemu plików. Logiczny rozmiar sektora to rozmiar sektora, który dysk zgłasza do systemu operacyjnego, i może on tylko czytać i zapisywać jednostki tego rozmiaru lub wielokrotność tego rozmiaru, a sektory są ponumerowane w jednostkach tego rozmiaru. Porównaj z fizycznym rozmiarem sektora, gdzie niektóre dyski faktycznie odczytują i zapisują sektory 4k wewnętrznie, ale udawaj, że używają 512 bajtów sektorów dla wstecznej kompatybilności ze starszymi systemami operacyjnymi, które nie radzą sobie z sektorami logicznymi 4k.
psusi
Błędny. Problem występuje za każdym razem, gdy oprogramowanie próbuje działać na jednostkach mniejszych niż fizyczny rozmiar systemu pamięci masowej. Jest to szczególnie prawdziwe w przypadku jednostek logicznych mniejszych niż rozmiar bloku wymazywania flash - oprogramowanie ostatecznie musi duplikować nietknięte części do nowego bloku fizycznego, a to kosztuje skasowanie żywotności, niezależnie od tego, czy jest to zrobione przez kod systemu plików systemu operacyjnego czy kod wewnętrzny do napędu.
Chris Stratton,
1

Tak, jest to możliwe, jednak spowoduje to, że dysk zapełni się znacznie szybciej niż powinien. W przypadku plików mniejszych niż 512 KB każdy plik zajmuje wówczas pełne 4096 KB (4 MB) i wypełnia resztę sektora zerami z powodu niezdolności większości systemów plików (NTFS i podobnych) do umożliwienia współdzielenia sektorów przez pliki. Najlepszą opcją dla systemu plików byłoby zezwolenie na zmienne rozmiary sektorów, jednak zwiększa to rozmiar MFT (głównej tabeli plików) i zwiększa ryzyko uszkodzenia danych, jednocześnie zmniejszając możliwość łatwego odzyskiwania danych. Innymi słowy, granice nie byłyby w pełni znane oprogramowaniu do odzyskiwania. Tak więc, podczas gdy rozmiar sektora logicznego 4096K jest niesamowity dla dużych plików, dla zwykłego komputera do codziennego użytku to tylko kilka zer. Powiedziawszy to: istnieje możliwość przechowywania danych w samym MFT, jeśli chodzi o dane mniejsze niż rozmiar sektora logicznego. Oznacza to jednak, że MFT staje się ogromny, a dane byłyby zapisywane dwukrotnie (na dysku twardym znajdują się dwie kopie MFT). Będziesz także musiał określić maksymalny rozmiar MFT, który może powodować problemy, gdy albo osiągniesz maksimum, albo użycie dysku przekroczy to, co byłoby wolne dla MFT. Wszystko to opiera się na wykorzystaniu systemu plików NTFS. Z drugiej strony, NTFS pozwala na użycie kompresji natywnej dla plików na poziomie bloku dla dowolnego sektora logicznego o wielkości 4 MB lub mniejszej. To ograniczenie jest stosowane ze względu na sposób działania kompresji NTFS. 4 MB bloków jest odczytywanych i kompresowanych niezależnie od wielkości sektora logicznego. To oczywiście

Czy to trochę dla ciebie wyjaśnia?

D337z
źródło
Myślę, że ta odpowiedź byłaby lepsza, gdyby nie używał NTFS jako przykładowego systemu plików, ponieważ (chyba że zmieniło się to w ciągu ostatnich kilku lat) nie jest dobrze obsługiwany lub w ogóle pod Uniksem i przyjaciółmi
Fox
K oznacza Kilo, który jest prefiksem jednostki metrycznej oznaczającym tysiąc. 4 MiB to 1024 sektory, a nie 1, jak sugerujesz. 4096 bajtów to 4 KiB lub 0,00390625 MiB.
Aeyoun
To nie jest odpowiedź. OP mówi o wielkości sektora HDD, a nie o wielkości bloku systemu plików. To inna warstwa.
炸鱼 薯条 德里克
-1
Sector:

1) Logical Sector: Called Native Sector.

Manufacture default setting. user cannot change.

Before 2010 year: 512b/sector

After 2010 year: 4k/sector.

Few manufacture provide HDD tool to change native sector.

2) Physical Sector: Called Cluster(or allocation unit - FAT windows) or Block(Linux/Unix)

User can change physical sector size 512b,1k,2k,4k,... by format or partition tool. Physical sector contains one or few more native sectors.

(example1: if you have HDD 512b/native sector: user can set 4K/Physical sector. this mean 1 cluster = 4 native sector)

(example2: if you have HDD 4K/native sector: user can set 4K/Physical sector. this mead 1 cluster = 1 native sector)

3) File system deal with Physical sector(or block or Cluster) only.
Tomasz
źródło
Brakowało Ci spisania źródła tego cytatu. W innych rękach myślę, że jest to kopia twojego poprzedniego komentarza tutaj: superuser.com/a/1372494/141252
andras.tim