Prawidłowe wyrównanie partycji na dysku HDD w zaawansowanym formacie za pomocą opcji Parted

15

Najpierw tworzę poprawnie wyrównaną partycję w nowej tabeli GPT, używając parted, określając wartości procentowe dla początku i końca partycji:

# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
(parted) mkpart primary 0% 1%
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  2097kB  1049kB               primary

(parted) quit

Zauważ, że ten dysk używa formatu zaawansowanego, ale poprawnie zgłasza rozmiar sektora fizycznego 4096Bdo Parted. Spójrzmy na to jeszcze raz, używając sektorów jako jednostki:

# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End    Size   File system  Name     Flags
 1      2048s  4095s  2048s               primary

(parted) quit
  • Dlaczego uruchomił partycję, 2048sa 34sktóry nie jest pierwszym możliwym sektorem ?
  • 34snie jest odpowiednio wyrównanym sektorem początkowym, jeśli rozmiar sektora fizycznego wynosi, 4096Ba logicznym (który określa się w częściowym podziale) jest rozmiar sektora 512B. Odpowiednio wyrównany sektor początkowy można podzielić przez 8(ponieważ rozmiar sektora fizycznego / rozmiar sektora logicznego = 8). Ale to oznacza, że 40sjest to pierwszy właściwie ustawiony sektor początkowy, ale nie jest używany. Dlaczego?

Jeśli spróbujemy utworzyć poprawnie wyrównaną partycję 100MiBpojemności, zaczynając od 40snowej tabeli partycji GPT:

# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
(parted) mkpart primary 40s 204839s
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
(parted) unit MiB
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 2861588MiB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start    End     Size    File system  Name     Flags
 1      0.02MiB  100MiB  100MiB  fat32        primary

(parted)
(parted) unit s
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End      Size     File system  Name     Flags
 1      40s    204839s  204800s  fat32        primary

(parted)
  • Mimo to otrzymujemy Warning: The resulting partition is not properly aligned for best performance.ostrzeżenie, 40sa 204840 ( 204839s+ 1) są podzielne przez 8. Dlaczego?
Usunięte
źródło

Odpowiedzi:

23

Parted jest po prostu zbyt konserwatywny. Obecnie powszechną praktyką jest wyrównywanie partycji na granicach 1MiB (sektor 2048), ponieważ działa to na dyskach Advanced Format, na niektórych typach konfiguracji RAID wymagających wyrównania i na większości dysków SSD. W przypadku dysku w formacie zaawansowanym, dopóki wyrównanie jest wielokrotnością 8, nic ci nie jest, a 2048 to wielokrotność 8. Utracone miejsce na dysku jest małe - 0,0000336% całkowitego miejsca na dysku, jeśli tak zrobię matematyka dobrze i niczego nie pomyliła. Więc nie przejmuj się tym; wystarczy użyć wyrównania 1MiB.

Rod Smith
źródło
Tak, utracone miejsce na dysku nie ma dla mnie znaczenia. Chciałem tylko wiedzieć, że wszystko rozumiem poprawnie. W tej chwili sprawdzam kod źródłowy Parted, ale zajmuje to trochę więcej czasu niż mam czas. Więc po prostu skorzystam z wyrównania 1MiB. Dzięki za pomoc!
Usunięte
1
Warto wspomnieć, że jest to nie tylko konserwatywność parted, ale raczej ograniczenie warstwy blokowej systemu Linux. Dyski ATA nie zapewniają optimal_io_sizepodpowiedzi. Stąd też nie sposób odróżnić „Legacy” urządzeń ATA, które nie przewidują alignment_offseti alignment_offsetdomyślne 0 i te, które, które mają alignment_offset=0. fdisk / parted używa wyrównania partycji 1 MB dla takich napędów.
roolebo
1
A sama liczba - wyrównanie partycji 1 MB wydaje się wynikać z zachowania systemu Windows Vista , jak podano w częściowym zatwierdzeniu .
roolebo
1

Dodam zapewne, że w Linuksie można spotkać się z sytuacją, w której partedmoże nigdy nie przejść jednocześnie optymalnej i minimalnej kontroli wyrównania.

Powodem tego jest to, że parted(przynajmniej w wersji 3.2) opiera się na libblkid, co z kolei raportuje wartości od /sys/block/<disk>/queue/minimum_io_sizea /sys/block/<disk>/queue/optimal_io_size(patrz IO-limits.txt ).

Podczas gdy dla dysku w formacie zaawansowanym ten pierwszy może być czymś w rodzaju 4k, drugi może mieć szaloną wartość - np 65535 * 512 == 33553920.

Teraz, gdy spojrzymy na kod źródłowy - „właściwe” lub „wyrównanie najlepszej wydajności” jest zdefiniowane przez formułę w parted.c :: partition_align_check () :

part->geom.start % pa->grain_size == pa->offset, 

gdzie grain_sizepochodzi z powyższego rozmiaru bloku I / O, geom.startto nasze przesunięcie partycji, a przesunięcie wyrównania pa->offsetjest często zerowe.

Domyślnie parted zakłada, że ​​1 MiB jest optymalny, a ~ 4k to minimalny (nie całkiem, to trochę uproszczenie) rozmiar bloku, więc te wartości byłyby skorelowane; jednak jeśli libblkidzdecyduje inaczej, partedzwykle mu zaufa i zastąpi domyślną wartość 1 MiB wartością znalezioną w /sys/block/<disk>/queue/optimal_io_size. (W tym samym czasie /sys/block/<disk>/queue/minimum_io_sizeprawdopodobnie da ci to samo 4096 B.)

W takim przypadku kontrola optymalna z podziałem nigdy nie przejdzie jednocześnie z kontrolą minimalną , co może być nieco mylące.

Mając to na uwadze - w razie wątpliwości, rzucić okiem na queue/optimal_io_sizei queue/minimum_io_size, a jeśli były, nie jest podzielna przez tę ostatnią, zignoruj rozstaliśmy”ostrzeżenia i sam zdecydować, czy chcesz iść z optymalnym lub minimalnej odprawy .

ジ ョ ー ジ
źródło