Створіть розділ, вирівняний за допомогою розділеного


66

Я розділяю жорсткий диск без SSD з розділеним, тому що я хочу таблицю розділів GPT.

parted /dev/sda mklabel gpt

Тепер я намагаюся створити розділи правильно вирівняними, тому я використовую наступну команду, щоб знати, з чого починається перший сектор:

parted /dev/sda unit s p free

Disk /dev/sda: 488397168s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End         Size        File system  Name      Flags
        34s    488397134s  488397101s  Free Space

Ми можемо бачити, що він починається в секторі 34 (це типова умова, коли використовується ця таблиця розділів).

Отже, щоб створити перший розділ, я спробував:

parted /dev/sda mkpart primary 63s 127s

вирівняти його по сектору 64, оскільки він кратний 8, але показано:

Попередження: Отриманий розділ неправильно вирівняний для найкращої роботи.

Логічний та фізичний розміри сектора на моєму жорсткому диску - це 512 байти:

cat /sys/block/sda/queue/physical_block_size
512

cat /sys/block/sda/queue/logical_block_size 
512

Як створити розділи, правильно вирівняні? Що я роблю неправильно?


Ви впевнені, що номери секторів починаються з нуля?
Бертон Самоград

1
Я також спробував parted /dev/sda mkpart primary 64s 128s(якщо він починається через 1), але він повертає те саме попередження.
Марк

Схоже, є команда, щоб перевірити, чи значення вирівняно: gnu.org/software/parted/manual/html_node/align_002dcheck.html . Може, спробуйте це з різними значеннями, використовуючи цикл for і виплюньте значення, які є нормальними?
Бертон Самоград

Бертоне, я не знав про цю команду, але її не можна використовувати, поки не буде розділу.
Марк

Вибачте з цього приводу, я не прочитав опис досить уважно.
Бертон Самоград

Відповіді:


68

Для вирівнювання розділу partedможна скористатися --alignопцією. Дійсні типи вирівнювання:

  • немає - Використовуйте мінімальне вирівнювання, дозволене типом диска.
  • циліндр - Вирівнювання перегородок до циліндрів.
  • мінімальний - Використовуйте мінімальне вирівнювання відповідно до даних про топологію диска. Це і значення opt використовуватиме інформацію про макет, надану на диску, для вирівнювання адрес таблиці логічних розділів фактичним фізичним блокам на дисках. Мінімальне значення - це мінімальне вирівнювання, необхідне для правильного вирівнювання розділу до фізичних блоків, що дозволяє уникнути погіршення продуктивності.
  • оптимально Використовуйте оптимальне вирівнювання відповідно до інформації про топологію диска. Це вирівнюється до кратного фізичного розміру блоку таким чином, щоб гарантувати оптимальну продуктивність.

Інша корисна порада - ви можете встановити розмір із відсотками, щоб вирівняти його. Почніть з 0% і закінчіть на 100%. Наприклад:

parted -a optimal /dev/sda mkpart primary 0% 4096MB


5
Якщо команда не закінчиться 0% 100%? Звідки береться 4096MB?
njahnke

4
Значення 4096MB використовується тут лише як приклад, щоб показати здатність змішування% та чисельності конкретного розміру
lik

3
Лише зауваження, я повинен був укласти '0%'лапки в мою оболонку, щоб правильно виконати команду.
Адам Еберлін

@lik, чи є у вас пропозиція щодо цієї публікації unix.stackexchange.com/questions/248939/…
AnkurTank

1
Не зважаючи на вищесказане, я щойно помітив, що розлучений printвикористовує кБ як 1000 байт ...
jiggunjer

9

Моїм рішенням було використання gdisk, який за замовчуванням може автоматично виконувати вирівнювання розділів у 2048 секторах (1024KiB), хоча це може бути змінено у меню експертів.


7

З Arch Wiki :

Створюючи розділ, parted може попереджати про неправильне вирівнювання розділу, але не натякає на правильне вирівнювання. Наприклад:

(parted) mkpart primary fat16 0 32M
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel?                                                     

Попередження означає, що розділ startне вирівняний.

Увійдіть, Ignoreщоб продовжити все-таки , роздрукуйте таблицю розділів у секторах, щоб побачити, де вона починається, і видаліть / відтворіть розділ із закругленим початковим сектором до збільшення потужностей 2, поки попередження не припиниться. В якості одного прикладу, на флешці з 512B секторами Parted хотів, щоб почалися розділи на сектори, кратні 2048, що є вирівнюванням 1 Мб.

Крім того, трохи вище цього розділу вони заявляють, що більш точні бінарні одиниці IEC KiB, MiB, GiB тощо, прийнятні як для одиниць, так і для менш точних KB, MB, GB та ін.

Особисто моя точна команда, яка вирішила це:

mkpart hd ext4 1024KiB 8470MB

Це не скаржилося, я думаю, що він хотів 1MB вирівнювання.


Ні, я спробував 1048576KiB, без кісток.
Бехроз

5

Незначна корекція. Як я розумію, на дисках GPT вже немає типів розділів, вони всі "первинні". Команда 'mkpart Primary' не створює основний розділ, як це робиться на дисках msdos, він просто створює розділ, який називається основним. Ви можете так само добре використовувати команду

(parted) mkpart Parted-FUN! 21476MB 4000787MB
(parted) print
Model: ATA ST4000DM000-1F21 (scsi)
Disk /dev/sdf: 4000787MB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start    End        Size       File system  Name         Flags
 1      1.05MB   17181MB    17180MB    ext4         raid-var
 2      17181MB  21476MB    4295MB                  raid-swap
 3      21476MB  4000786MB  3979310MB               Parted-FUN!

Це може спричинити плутанину, якщо ви спробуєте створити логічні розділи, я знаю, що це зробило для мене.

(parted) mkpart extended 21476MB 4000787MB
(parted) mkpart logical 21476MB 1000787MB
Warning: You requested a partition from 21476MB to 1000787MB.
The closest location we can manage is 4000786MB to 4000786MB.
Is this still acceptable to you?
Yes/No? Yes
(parted) print
Model: ATA ST4000DM000-1F21 (scsi)
Disk /dev/sdf: 4000787MB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start      End        Size       File system  Name       Flags
 1      1.05MB     17181MB    17180MB    ext4         raid-var
 2      17181MB    21476MB    4295MB                  raid-swap
 3      21476MB    4000786MB  3979310MB               extended
 4      4000786MB  4000786MB  0.00MB                  logical

Ви не можете створити розділ під назвою "логічний" всередині розділу, який називається "розширений".


дякую, я просто витратив зовсім небагато часу завдяки цьому поганому кліпу, і ти змусив мене зрозуміти, що відбувається.
Флоріан Хейгл

5

Прийнято відповідь на @lik показує , як ви можете вказати детально визначений вирівнювання. Однак parted завжди використовує це вирівнювання для перевірки результуючого розділу, але не завжди створює розділи з цим вирівнюванням.

TL; DR: Коли 1MiB - оптимальне вирівнювання, вказавши 0% буде працювати для дисків 200MiB і більше. Для менших дисків або більшого вирівнювання вказівка ​​0G може працювати там, де 0% не відповідає. Дивіться нижче про те, чому.

Розділений намагається задовольнити обмеження вирівнювання під час створення розділу, але також не надто сильно відхилиться від потрібних значень. Що вважається "занадто великим", залежить від того, як ви вказали позиції.

Коли ви задаєте початкову (або кінцеву) позицію для команди mkpart, вона внутрішньо генерує діапазон прийнятних значень. Цей діапазон орієнтований на вказане вами значення і розширюється порівну з обох сторін удвічі меншим розміром одиниці, яку ви використовували (ось що я читаю з коду , коментарі говорять про один повний розмір одиниці з обох кінців).

Наприклад, коли ви вкажете "10M", він спробує використовувати будь-яку позицію між 9.5M і 10.5M. Те саме стосується відсотків, тому якщо ви вкажете 0%, воно використовуватиме будь-яке значення між 0% і 0,5% (очевидно, це не має негативного значення).

Один виняток полягає в тому, що при використанні потужностей двох одиниць (наприклад, KiB для 1024, на відміну від K для 1000) при розбитті передбачається, що ви намагаєтеся вказати точну позицію і враховуєте лише точне значення, яке ви вказали.

Оскільки, як правило, оптимальне вирівнювання, як правило, відповідає 1MiB, у блоків K і M часто не буде достатньо місця для досягнення оптимального вирівнювання. Визначення позицій у G повинно мати багато місця, але зазвичай це також нормально.

Отже, тому 0% зазвичай працює, хоча навіть це має обмеження.


Не могли б ви підсумувати практичну TLDR своєї відповіді: що саме слід краще зробити іншим способом порівняно з прийнятою відповіддю?
yurkennis

Гарна пропозиція, я додав TL; DR. На практиці я думаю, що 0% буде працювати на всіх, але насправді невеликих дисках, але моя відповідь додає трохи відомостей про те, як саме це працює.
Matthijs Kooijman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.