Создать раздел с выравниванием с помощью parted

68

Я делаю жесткий диск без SSD с parted, потому что я хочу таблицу разделов 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опцию. Допустимые типы выравнивания:

  • none - использовать минимальное выравнивание, разрешенное типом диска.
  • цилиндр - выравнивание перегородок на цилиндры.
  • минимальный - используйте минимальное выравнивание, как указано в информации о топологии диска. Это и значение opt будут использовать информацию о расположении, предоставленную диском, для выравнивания адресов таблицы логических разделов с фактическими физическими блоками на дисках. Минимальное значение - это минимальное выравнивание, необходимое для правильного выравнивания раздела по физическим блокам, что позволяет избежать снижения производительности.
  • Оптимальное использование оптимального выравнивания в соответствии с информацией о топологии диска. Это соответствует кратному размеру физического блока таким образом, чтобы гарантировать оптимальную производительность.

Другой полезный совет: вы можете установить размер в процентах, чтобы выровнять его. Начните с 0% и заканчивайте на 100%. Например:

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

Лик
источник
5
Должна ли команда не заканчиваться 0% 100%? Откуда 4096MBберутся?
njahnke
4
Значение 4096MB используется здесь только один пример , чтобы показать возможность смешивания% и конкретные цифры размера
Лик
3
Просто примечание, я должен был заключить '0%'в кавычки для моей оболочки, чтобы выполнить команду должным образом.
Адам Эберлин
@lik у вас есть предложение для этого поста unix.stackexchange.com/questions/248939/…
AnkurTank
1
Не print
обращая
9

Мое решение состояло в том, чтобы использовать gdisk, который может выполнять выравнивание разделов автоматически по 2048 секторам (1024 КБ) по умолчанию, хотя это можно изменить в экспертном меню.

Марк
источник
8

Из Arch Wiki :

При создании раздела parted может предупреждать о неправильном выравнивании разделов, но не указывает на правильное выравнивание. Например:

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

Предупреждение означает, что раздел startне выровнен.

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

Кроме того, чуть выше этого раздела они утверждают, что более точные двоичные единицы МЭК KiB, MiB, GiB и т. Д. Приемлемы для единиц, а также менее точные КБ, МБ, ГБ и т. Д.

Лично моя точная команда, которая решила это, была:

mkpart hd ext4 1024KiB 8470MB

Он не жаловался, я думаю, он хотел выравнивания 1 МБ.

Трэвис Родман
источник
Нет, я попробовал 1048576KiB, без игры в кости.
Behrooz
5

Незначительная коррекция. Насколько я понимаю, GPT-диски больше не имеют типов разделов, все они являются «первичными». Команда «mkpart primary» не создает основной раздел, как на дисках msdos, она просто создает раздел с именем primary. Вы также можете использовать команду

(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

Вы не можете создать раздел под названием «логический» внутри раздела под названием «расширенный».

Miksa
источник
спасибо, я просто потратил немало времени из-за этого плохого инструмента, и ты заставил меня понять, что происходит.
Флориан Хейгл
5

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

TL; DR: когда 1MiB является оптимальным выравниванием, указание 0% будет работать для дисков объемом 200MiB и больше. Для дисков меньшего размера или большего выравнивания указание 0G может работать, а 0% - нет. Смотрите ниже о том, почему.

Parted пытается удовлетворить ограничения выравнивания при создании раздела, но он также не будет слишком сильно отклоняться от запрошенных вами значений. То, что считается «слишком большим», зависит от того, как вы указали позиции.

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

Например, если вы укажете «10M», он попытается использовать любую позицию между 9,5M и 10,5M. То же самое относится и к процентам, поэтому, если вы укажете 0%, он будет использовать любое значение от 0% до 0,5% (очевидно, что оно не становится отрицательным).

Единственным исключением является то, что при использовании степени двух единиц (например, КиБ для 1024, в отличие от К для 1000) parted предполагает, что вы пытаетесь указать точную позицию, и учитывает только указанное вами значение.

Поскольку оптимальное выравнивание, как правило, кажется выровненным на 1 МБ, блокам K и M часто не хватает места для достижения оптимального выравнивания. Задание позиций в G должно иметь много места, но обычно тоже хорошо.

Вот почему 0% обычно работает, хотя даже это имеет ограничения.

Маттис Коойман
источник
Не могли бы вы обобщить практический TLDR вашего ответа: что именно должно быть сделано лучше, чем принятый ответ?
юркеннис
Хорошее предложение, я добавил TL; DR. На практике, я думаю, что 0% будет работать для всех, кроме действительно маленьких дисков, но мой ответ добавляет немного фона о том, как это работает точно.
Маттис Коойман