Parted - разметка дисков в Linux

Содержание

Parted - общая информация

Parted - утилита для разметки дисков (HDD, SSD, USB и других носителей информации) в Linux. Используется для создания и удаления разделов, изменения размера (увеличение и уменьшение), изменения места размещения раздела на диске, проверки целостности данных и копирования разделов. В случае ошибки или по незнанию можно безвозвратно удалить все данные на устройстве хранения, так что перед работой с этой утилитой необходимо быть предельно внимательным: "Семь раз отмерь, один раз отрежь". В отличие от утилиты fdisk, все изменения применяются немедленно, после ввода команды и нажатия enter.

У parted в Linux есть аналог с графическим интерфейсом: gparted, в котором все действия более наглядны и интуитивно понятнее. Поскольку графический интерфейс доступен далеко не на всех устройствах, под управлением Linux, parted не теряет своей актуальности.

Работать с утилитой можно в двух режимах: интерактивном и командном.

В интерактивном режиме, после ввода основной команды или запуска parted без параметров, выполняются различные действия над дисками. Выход из интерактивного режима - ввод команды quit (или в сокращенном варианте, буквы q) и нажатие enter. Так же организован интерактивный режим, например, в утилите mysql.

Командный режим - после parted указываются параметры, и по завершению выполнения команды можно продолжать работу в терминале Linux в штатном режиме. За один раз в одной строке утилите можно передать несколько различных команд, например: создать таблицу разделов, разметить один раздел, разметить второй раздел и отобразить информацию по разделам.

Чтобы не путаться с размерами разделов в parted, следует знать, что по новым стандартам 1 килобайт равен 1 000 байтам, 1 мегабайт равен 1 000 килобайтам, и так далее, а для корректного обозначения степеней двоек введены новые "двоичные" приставки: 1 кибибайт равен 1 024 байтам, 1 мебибайт равен 1 024 кибибайтам и равен 1 048 576 байтам и т.д. Подробнее тут: "Двоичные приставки".

Посмотреть справку по утилите разметки дисков parted:

# parted -h
# man parted
# parted /dev/sda help mktable

Больше информации по parted можно найти тут: GNU Parted User Manual (eng).

Тестирование работы parted

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

Поскольку в Linux все устройства представлены в виде файлов, в том числе устройства хранения данных, можно создать файл заданного размера и использовать его в качестве HDD для тестов утилиты.

# dd if=/dev/zero of=~/testhdd.iso bs=100M count=50

Утилита dd создает "пустой" файл testhdd.iso в пользовательской домашней директории размером 5000Mb (50 раз записывает нулями "куски" по 100 Mb). Далее все тестовые операции parted будут проводится с виртуальным носителем данных - файлом testhdd.iso.

После запуска введите 2 команды, чтобы узнать полный путь к файлу, расположенному в директории пользователя: он понадобится для указания parted полного пути к ранее созданному фалу-диску.

# cd ~
# pwd
/home/site

Перед тестированием работы parted настоятельно рекомендую сделать резервную копию, как минимум, с HDD /dev/sda, так как он наиболее подвержен риску быть случайно переразмеченным - выбирается в parted по умолчанию, если явно не указан другой носитель информации.

Выбор диска и режимы работы

Выбор диска - самая ответственная часть в работе с утилитой parted, так как случайно подключив "не тот" диск можно удалить важные данные.

Просмотреть, какие диски/устройства подключены можно при помощи parted и fdsik с опцией -l:

# parted -l
# fdisk -l

Подробную информацию по одному устройству можно просмотреть, добавив путь к нему (только в fdisk, parted все-равно покажет все диски):

# fdisk -l /dev/sda

Утилита fdisk по функционалу очень схожа с parted, и с её помощью также можно разметить разделы на диске, но это отдельная тема. Не смотря на то, что fdisk уже довольно давно понимает и работает с GPT, до сих пор при обнаружении устройства с GPT fdisk предупреждает, что поддержка GPT - экспериментальная: "WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.".

Во многих Linux-дистрибутивах файлы HDD находятся в /dev/sdX, где вместо X - буква диска, начиная с "a": /dev/sda; /dev/sdb и т.д.

Ниже, почти все примеры будут выполняться над виртуальным жестким диском - файлом, который был создан при помощи dd.

В интерактивном режиме утилита запускается так:

# parted
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /home/site/testhdd.iso
Using /home/site/testhdd.iso
(parted) print
Error: /home/site/testhdd.iso: unrecognised disk label
Model:  (file)
Disk /home/site/testhdd.iso: 5243MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
(parted)

Все, что находится после (parted) - набирается с клавиатуры пользователем, остальной текст - сообщения утилиты в ответ на команду.

Внимательные читатели обратили внимание, что сразу после запуска parted, без параметров, по умолчанию был выбран системный диск /dev/sda! И если не сменив устройство командой select путь/к/файлу.iso непреднамеренно совершить деструктивные действия, например ввести mktable, mkpart или др., то можно полностью разрушить системный диск /dev/sda (название выбираемого утилитой диска по умолчанию может отличаться от имени в вашей системе).

Выход из интерактивного режима - набрать quit (или первую букву команды - q) и нажать клавишу Enter.

Чтобы избежать нелепых ошибок, всегда перед запуском parted, указывайте путь к диску:

# parted /home/site/testhdd.iso
GNU Parted 3.1
Using /home/site/testhdd.iso
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)

Узнать информацию по диску можно и обычной командой, без интерактивного режима:

# parted /home/site/testhdd.iso print
Error: /home/site/testhdd.iso: unrecognised disk label
Model:  (file)
Disk /home/site/testhdd.iso: 5243MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
#

В командном режиме в parted можно за один раз отправить несколько команд, например сразу выполнить полную разметку файла-хранилища testhdd.iso:

parted -s /home/site/testhdd.iso -- mklabel gpt mkpart P1 ext2 1MiB 8MiB mkpart P2 ext4 8MiB -1 set 1 boot on

Опция -s нужна для подавления предупреждений parted, из за которых может сработать только часть команд, двойное тире (--) служит для предотвращения ошибки связанной со значением "-1" (invalid option).

Какой режим работы с parted выбрать: интерактивный или обычный командный - выбор за пользователем.

Выбор типа таблицы разделов - mklabel и mktable

Выбор или изменение типа разметки в parted уничтожит все данные на устройстве. Если необходимо конвертировать систему разметки из одного формата в другой без потери данных, тогда нужно искать специальную утилиту для операционной системы, из под которой будет проводиться конвертирование.

На большинстве HDD используется одна из двух таблиц разделов: GPT и MBR. Как выбрать систему разметки для диска - читайте тут: MBR или GPT.

Выбор способа разметки диска осуществляется командами mklabel или mktable - две идентичные по действию команды, которые отличаются только названием.

# parted /home/site/testhdd.iso mktable msdos

Этой командой блочное устройство (пустой файл) будет размечено в MBR (msdos - так называется тип разбивки устройства MBR в parted). Если вместо msdos указать gpt, носитель информации будет размечен в GPT.

Данные о разделах в MBR занимают один, первый сектор носителя информации, а информация о разделах GPT, как минимум, первые 33. Из-за этого назначать начало раздела можно минимум со 2-го (MBR) или 34 (GPT) сектора, но лучший, универсальный вариант начала первого раздела для большинства ситуаций - 2048 сектор.

Выравнивание разделов

Выравнивание влияет на скорость работы любых носителей информации и износостойкость (долговечность) SSD накопителей, пренебрегать этим параметром не стоит.

В большинстве случаев достаточно знать, что для корректного выравнивания (alignment) вновь создаваемых разделов достаточно запустить parted с опцией "-a opt" (optimal), а единицы измерения указывать в kB, MB или TB (подробнее смотрите в разделе: "Таблица единиц измерений"):

# parted -a opt /dev/sda

Проверить, насколько корректно и правильно разбит диск можно следующими командами:

# parted /dev/sda align-check opt 1
# parted /dev/sda align-check min 1

Цифра в конце команды - номер раздела (посмотреть номера HDD с именем sda - # parted /dev/sda print). Если выравнивание в порядке, в ответ каждая команда вернет сообщение: "1 aligned".

Если необходимо точно задать размер раздела, не вдавайсь в подробности, то необходимо знать следующее:

  • Начало первого раздела должно начинаться с отступом 1 MiB (Мебибайт) от начала диска - это неофициальный стандарт при разметке дисков.
  • Начало и окончание разделов должно быть кратно 4 KiB (1 Кибибайт = 1024 байт) из-за дисков с размером сектора 4096 байт.

Узнать, сколько байт в секторе у отдельного диска можно на официальном сайте производителя по модели устройства или так:

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

Если хоть один из параметров "Sector size": "logical" или "physical" равен 4096 байт, то выравнивание необходимо проводить по 4096 байт, как написано выше.

Дополнительная информация по выравниванию разделов

Выравнивание разделов диска
Aligned (eng)

Создание разделов - mkpart

Перед созданием разделов на реальном HDD, SDD или другом носителе информации, обязательно ознакомьтесь с информацией по выравниванию разделов: "Выравнивание разделов".

Для создания раздела нужно указать его тип, файловую систему (не обязательно), стартовую позицию и окончание.

Для GPT-разметки в качестве типа раздела возможно указать любое имя, поскольку все разделы равны (нет primary, extended, logical). Изменить имя раздела можно позже, командой name. Количество разделов в GPT можно сказать не ограничено (ограничение 264 - весьма большое число). Более строгие ограничения присутствуют в операционных системах: например, в Linux - максимальное кол-во разделов - 255, а в Windows можно создать не более 128 разделов под GPT.

Для MBR возможно задать одно из 3 значений для типа раздела: primary, logical, extended. В MBR существует ограничение - максимум 4 первичных раздела (primary), и для того, чтобы его обойти, создается один расширенный раздел (extended), в котором уже размечается множество логических (logical).

Тип файловой системы - необязательный аргумент, который можно опустить, создавая новый раздел. Просмотреть доступные типы можно такой командой в секции FS-TYPE:

# parted /home/site/testhdd.iso help mkpart

При установке типа файловой системы на разделе, форматирование в выбранный тип ФС произведено не будет, но зато на нем останется пометка, о том, что раздел для такой-то файловой системы. В MBR, при создании раздела extended, указание файловой системы приведет к ошибке, так как этот раздел не форматируется, а служит только оболочкой для логических разделов.

Начало и окончание раздела задается целым или десятичным числом, содержащим до трех чисел после запятой (десятичного разделителя). Создать раздел размером 100МБ на носителе информации предварительно размеченном, как GPT, и после этого просмотреть результат, можно при помощи следующих команд:

# parted /home/site/testhdd.iso mktable gpt
# parted /home/site/testhdd.iso mkpart part1 1 100
# parted /home/site/testhdd.iso print

Для удобства можно заменить 3 команды одной:

# parted -s /home/site/testhdd.iso mktable gpt mkpart part1 1 100 print

По умолчанию, если как в примере, не указать единицы измерения для начала и окончания раздела, будут использованы MB. Список доступных единиц измерения для указания начала и окончания раздела размещен в таблице: "Единицы измерения в parted".

Регистр символов (строчные или прописные), в котором будет записана единица измерения - важен, чтобы убедиться в этом достаточно запустить две команды (полная очистка тестового файла-диска от разделов, установка GTP разметки, создание одного нового раздела и вывод данных в секторах):

# parted -s /home/site/testhdd.iso -- mktable gpt mkpart part_boot 1MiB 300MiB unit s print
# parted -s /home/site/testhdd.iso -- mktable gpt mkpart part_boot 1MiB 300miB unit s print

Окончание раздела записанное как 300MiB, создает раздел размером 612352 сектора, а 300miB - 612353 сектора. Разница даже в 1 сектор иногда может быть критична!

Отрицательные значения заданные для установки окончания раздела указывают parted, что нужно отступить от окончания доступного пространства носителя информации. Чтобы не возникало ошибок при использовании отрицательных значений - после указания носителя информации, необходимо поставить двойное тире: "--".

При необходимости разметить носитель информации с точностью до 512 байт, нужно указывать только следующие единицы измерения: сектора и любые *бибайты. Указав, например, MB, parted "на свое усмотрение" может увеличить или уменьшить на +/-500 KB размер раздела.

Всегда, при разметке любого физического носителя информации, следует оставлять в конце несколько мебибайт неразмеченного пространства. Винчестеры даже одного производителя и одной модели могут отличаться по размеру в несколько мебибайт. В ситуации, когда требуется быстро заменить вышедший из строя HDD, размеченный под "край" на новый, резервный, который немного меньше размером, могут возникнуть сложности с переносом данных - уменьшение раздела с данными даже на несколько секторов может занять довольно много веремени.

Следующей одной командой можно очистить тестовый диск-файл путем создания на нем типа разметки - GPT и разметить 2 раздела с именами "part_boot" и "part_data".

# parted -s /home/site/testhdd.iso -- mktable gpt mkpart part_boot 1MiB 300MiB mkpart part_data 300MiB -1MiB print

Удаление разделов - rm

Перед удалением раздела, нужно узнать его номер, при помощи команды print, в колонке "Number".

parted /home/site/testhdd.iso print

После этого, чтобы удалить раздел под номером 1, нужно запустить такую команду:

# parted /home/site/testhdd.iso rm 1

Чтобы сразу удалить все разделы в parted, запускается команда на создание типа таблицы разделов.

# parted /home/site/testhdd.iso mktable gpt
Warning: The existing disk label on /home/site/testhdd.iso will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No?

После ответа нажатием "y" или "Yes" и Enter на предупреждение, что данная команда разрушит все данные на диске, устройство будет полностью очищено от разделов.

Установка флага раздела - set

С помощью set устанавливаются флаги на разделы. Эту команду можно использовать для установки раздела, в качестве загрузочного.

Сделать раздел загрузочным для материнских плат с BIOS и типом разметки MBR можно так:

# parted /home/site/testhdd.iso set 1 bios_grub on

Для дисков с GPT и материнских плат с UEFI:

# parted /home/site/testhdd.iso set 1 boot on

Снять метку загрузочного раздела можно так:

# parted /home/site/testhdd.iso set 1 boot off

Выбор единиц измерения - unit

Для выбора отображаемых единиц измерений в команде print и задания единиц измерения по умолчанию, например для mkpart, используется команда unit. Задать отображение в секторах и посмотреть информацию о разделах можно так:

# parted /home/site/testhdd.iso unit s print

По умолчанию, команда print отображает границы разделов в универсальных единицах "compact", а mkpart, без указания единицы измерения для границ раздела, воспринимает числа, как Мегабайты.

Таблица единиц измерений, доступных в parted

Сокращение Единица измерения и пояснения
s Сектор, зачастую, но далеко не всегда, равен 512 байтам.
B Байт.
KiB Кибибайт (1 024 байт = 210 байт).
MiB Мебибайт (1 048 576 байт = 220 байт).
GiB Гибибайт (1 073 741 824 байт = 230 байт).
TiB Тебибайт (1 099 511 627 776 байт = 240 байт).
kB Килобайт (1 000 байт = 103 байт).
MB Мегабайт (1 000 000 байт = 106 байт).
GB Гигабайт (1 000 000 000 байт = 109 байт).
TB Терабайт (1 000 000 000 000 байт = 1012 байт).
% Процентное соотношение от размера всего устройства (0-100%).
cyl Цилиндры - связано с геометрией BIOS CHS
chs Цилиндры, головки, сектора - связано с геометрией BIOS CHS.
compact Это универсальная "единица измерения", которую нельзя использовать для указания начала и окончания раздела при его создании, но позволяет выводить результаты о разделах (print) в удобном для человека виде, например не 1 000 000 000 байт, а 1 GB. Это значение установлено по умолчанию для команды unit.

Ошибки и предупреждения

Error: You requested a partition from

Error: You requested a partition from XXX MB to YYY MB (sectors XXX..YYY).
The closest location we can manage is XXX kB to YYY MB (sectors XXX..YYY).

Эта ошибка возникает, если попытаться создать раздел, поверх существующего раздела или поверх участков диска, в которых располагается служебная информация с данными по разделам (тип MBR занимает первый сектор 1, тип разметки GPT содержится в секторах, как минимум, с первого по 33-ий).

Если ошибка возникла при создании первого раздела, рекомендуется отступить от начала диска 1 MiB (указать 1MiB в качестве начала раздела):

# parted /dev/sdX mkpart myname 1MiB 200MiB.

Если раздел не первый, нужно посмотреть, в каких границах расположены другие разделы, командой print:

# parted /dev/sdX print.

Во второй строке после ошибки: "The closest location we can manage is ...", содержится рекомендованная граница для создаваемого раздела.

Parted: invalid option

parted: invalid option -- XX

Если данная ошибка появилась после задания отрицательной границы раздела от окончания диска, например так:

# parted /dev/sdX mkpart Part_Name 1MiB -100s
В этом случае, ошибка: "Parted: invalid option" означает, что parted воспринял отрицательное число "-100" как опции со значениями 1, 0 и 0. Чтобы дать понять parted, что "-100" это не 3 цифровые опции, а отрицательная граница раздела (отступ от окончания доступного пространства), нужно после указания диска поставить опцию двойное тире: "--":

# parted /dev/sdX -- mkpart Part_Name 1MiB -100s

В этом случае отрицательное число будет интерпретировано как число со знаком минус, т.е. parted воспримет -100 как отрицательное число 100.

Если проблема не в отрицательной границе раздела, следует проверить корректность задания опций для parted. Все доступные опции утилита подсказывает сразу после вывода сообщения об ошибке: "Usage: parted [-hlmsv] [-a] [DEVICE [COMMAND [PARAMETERS]]...]". Также, посмотреть весь список опций можно запустив parted с параметром -h:

# parted -h

Warning: The resulting partition is not properly aligned for best performance

Предупреждение: "Warning: The resulting partition is not properly aligned for best performance." появляется после создания раздела с проблемным выравниванием. Что такое выравнивание (alignment) и как нужно выравнивать разделы читайте тут: "Выравнивание разделов".

Игнорировать предупреждение: "Warning: The resulting partition is not properly aligned for best performance." не стоит, так как это может повлечь за собой значительное замедление работы накопителя, а в случае с SSD-дисками, дополнительно еще и преждевременный выход его из строя, из-за серьезного увеличения нагрузки на запись.

Error: Invalid number

Ошибка: "Error: Invalid number" может появится при попытке создания раздела, границы которого заданы некорректно, либо при попытке в типе разметки MBR (msdos), присвоить тип файловой системы для раздела с типом "extended". Детальнее - тут: "Создание разделов - mkpart".

Postscriptum

P.S. Весь материал статьи написан на основе работы с утилитой parted версии 3.1, которая идет с актуальным, на дату публикации, дистрибутивом Centos 7.

P.P.S. Если вам будет интересно узнать о копировании (parted /device cp) и восстановлении (parted /device rescue) разделов пишите в комментариях, и статья обязательно будет дополнена.

Опубликовано: 2017/08/02
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/linux.php?txt=712" target="_blank">Parted - разметка дисков в Linux</a>
25844
Комментарии
Отличная статья! Лучшая из всего. что я читал.
Спасибо за статью. Очень подробно.
Здравствуйте и с Новым годом!А есть ли команд для очистки HDD полностью? Спасибо.
Добавить комментарий
Ваш e-mail: (не виден посетителям сайта)
Ваше имя:
Комментарий:
Символы с картинки:
Только выделенные поля формы добавления комментариев обязательны к заполнению.