Правильне вирівнювання розділів на жорсткому диску розширеного формату за допомогою Parted


15

Спочатку я створюю правильно вирівняний розділ у новій таблиці 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) 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

Зауважте, що цей диск використовує розширений формат, але правильно повідомляє розмір фізичного сектору 4096Bдо Parted. Давайте розглянемо його ще раз, використовуючи сектори як одиницю:

# 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
  • Чому він запустив розділ на, 2048sа не 34sякий є першим можливим сектором ?
  • 34sне є правильно вирівненим початковим сектором, якщо розмір фізичного сектора 4096Bі логічний (який є той, який ви вказали в Розділеному), розмір сектора 512B. Правильно вирівняний стартовий сектор - це розділення на 8(оскільки фізичний розмір сектора / розмір логічного сектора = 8). Але це означає, що 40sце перший правильно вирівняний стартовий сектор, але він не використовується. Чому?

Якщо ми спробуємо створити правильно вирівняний розділ 100MiBємності, починаючи 40sз нової таблиці розділів 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)
  • Ми все одно отримуємо Warning: The resulting partition is not properly aligned for best performance.попередження, хоча 40sі 204840 ( 204839s+ 1) обидва поділяються на 8. Чому?

Відповіді:


23

Розлучений просто надмірно консервативний. Звичайною практикою в наші дні є вирівнювання розділів за межами 1MiB (2048-сектора), оскільки це працює на дисках розширеного формату, на певних типах налаштувань RAID, які потребують вирівнювання, і на більшості SSD-дисків. Для диска розширеного формату, якщо вирівнювання є кратним 8, ви добре, а 2048 - кратне 8. Загублений простір на диску є непоганим - 0,0000336% від вашого загального дискового простору, якщо я математика правильно і нічого не вводити в помилку. Тому не хвилюйтеся з цього приводу; просто використовуйте вирівнювання 1MiB.


Так, втрачений простір на диску для мене не має значення. Мені просто хотілося знати, що я все розумію правильно. Я зараз перевіряю вихідний код Партеда, але це займає трохи більше часу, ніж у мене є час. Тому я просто продовжую використовувати 1MiB-вирівнювання. Дякуємо за допомогу ще раз!
Видалено

1
Варто зазначити, що це не просто консервативність проділу, а обмеження блокового шару Linux. Приводи ATA не надають optimal_io_sizeпідказки. Отже, немає можливості розрізнити "застарілі" пристрої ATA, які не надають, alignment_offsetта alignment_offsetза замовчуванням 0 та ті, які є alignment_offset=0. fdisk / parted використовувати вирівнювання розділів 1 МБ для таких дисків.
roolebo

1
І саме число - вирівнювання розділів на 1 МБ, схоже, походить від поведінки Windows Vista , на яку посилається в розділеному комітеті .
roolebo

1

Я, мабуть, додам, що в Linux можна потрапити в ситуацію, коли partedніколи не може пройти оптимальну і мінімальну перевірку вирівнювання одночасно.

Причиною цього є те, що parted(принаймні, у версії 3.2) покладається на libblkid, що, у свою чергу, повідомляє про значення з /sys/block/<disk>/queue/minimum_io_sizeта /sys/block/<disk>/queue/optimal_io_size(див. Io-limit.txt ).

Тож, хоча для диска розширеного формату перший, ймовірно, буде чимось на зразок 4k, останній може мати деяке шалене значення - наприклад 65535 * 512 == 33553920.

Тепер, якщо ми подивимось на вихідний код - "належне" або "найкраща продуктивність" вирівнювання визначається формулою в parted.c :: partition_align_check () :

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

де розміщений grain_sizeрозмір блоку вводу / виводу вище, geom.start- це зміщення розділу, а зміщення рівняння pa->offsetдосить часто дорівнює нулю.

За замовчуванням parted вважає, що 1 MiB є оптимальним, а ~ 4k - мінімальним (не зовсім так, це трохи спрощення) розміром блоку, тому ці значення співвідносяться; однак, якщо libblkidвирішить інакше, partedсхильний довіряти цьому і замінює це значення за замовчуванням у 1 МіБ на значення, знайдене в /sys/block/<disk>/queue/optimal_io_size. (У той же час, /sys/block/<disk>/queue/minimum_io_sizeцілком ймовірно, ви отримаєте те саме 4096 B.)

У такому випадку проділена оптимальна перевірка ніколи не пройде одночасно з мінімальною перевіркою, що, можливо, може бути трохи заплутаним.

Маючи це на увазі - якщо ви сумніваєтеся, подивіться на queue/optimal_io_sizeі queue/minimum_io_size, і якщо колишній не ділиться на останній, просто ігнорують проділ »попередження, і вирішити для себе чи ви хочете , щоб піти з оптимальною або мінімальної перевірки .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.