Linux. Команда parted
Команда parted
предназначена для создания, удаления и изменения размеров разделов диска. Умеет работать в командном или интерактивном режиме. В интерактивной режиме есть справка по всем командам + справка по каждой команде — это существенно упрощает работу.
Блочные устройства
Наиболее известным блочным устройством, вероятно, будет первый диск IDE в системе, который будет называться /dev/hda
. Если в системе есть SCSI диски, то первый из них будет называться /dev/sda
. Как нетрудно догадаться, второй IDE диск будет называться /dev/hdb
, второй SCSI диск — /dev/sdb
.
Блочные устройства представляют абстрактный интерфейс к диску. Пользовательские программы могут использовать эти блочные устройства для взаимодействия с диском, не беспокоясь о том, что у вас за диски — IDE, SCSI или какие-то другие. Программы могут легко адресовать место на диске, как последовательность блоков по 512 байт с произвольным доступом.
Посмотреть диски в системе можно с помощью команды parted
.
$ sudo parted -l Модель: ATA VBOX HARDDISK (scsi) Диск /dev/sda: 26,8GB Размер сектора (логич./физич.): 512B/512B Таблица разделов: gpt Флаги диска: Номер Начало Конец Размер Файловая система Имя Флаги 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 540MB 538MB fat32 EFI System Partition загрузочный, esp 3 540MB 26,8GB 26,3GB ext4 Модель: ATA VBOX HARDDISK (scsi) Диск /dev/sdb: 2147MB Размер сектора (логич./физич.): 512B/512B Таблица разделов: gpt Флаги диска: Номер Начало Конец Размер Файловая система Имя Флаги 1 1049kB 1074MB 1073MB home 2 1074MB 2146MB 1073MB data
Разделы диска
В Linux файловые системы создаются с помощью команды mkfs
, указывая в качестве аргумента конкретное блочное устройство.
Хотя возможно использовать блочные устройства, представляющие весь диск целиком, такие как /dev/hda
или /dev/sda
, для единственной файловой системы, это редко применяется на практике. Вместо этого дисковые блочные устройства разделяются на более удобные блочные устройства меньшего размера, называемые разделами.
Таблица разделов определяет, как именно разбито пространство на целом диске. На данный момент существует два стандарта таблицы разделов — MBR (основная загрузочная запись) и GPT (таблица разделов GUID). MBR был первым стандартом, на смену которому приходит GPT. MBR имеет ограничение в том, что позволяет конфигурировать не более четырех основных разделов и максимальный размер раздела не может превышать 2TB.
Для таблиц типа MBR существует три вида разделов — основной, расширенный и логический. Для MBR возможно создать только четыре основных раздела, поэтому, если необходимо создать более четырех разделов, то один из основных разделов необходимо определить в качестве расширенного. Расширенный раздел является, по сути, контейнером для одного или нескольких логических разделов, и к тому же диск может содержать только один расширенный раздел.
Внутри же расширенного раздела все данные хранятся в логических разделах. Чтобы можно было хранить данные внутри расширенного раздела, необходимо сначала создать внутри него логический раздел. В Linux основные или расширенные разделы нумеруются от 1 до 4.
Таким образом, устройство /dev/sda
может иметь четыре основных раздела — /dev/sda1
, /dev/sda2
, /dev/sda3
и /dev/sda4
. Или, может иметь один основной раздел — /dev/sda1
и один расширенный – /dev/sda2
.
Если определены логические разделы, то их нумерация начинается с 5, то есть первый логический раздел на устройстве /dev/sda
будет называться /dev/sda5
, даже если на диске не определен основной раздел, а определен только один расширенный /dev/sda1
.
Получается, что если нужно иметь на диске с MBR таблицей больше четырех разделов, необходимо создать один расширенный раздел за счет основного.
Что же касается таблицы разделов типа GPT, то ограничений на размер и количество разделов практически нет.
Команда parted
В командном режиме можно сразу выполнить нужное действие с диском и вернуться к работе в терминале. Например, создаем на диске таблицу разделов GPT, создаем раздел с именем data
и типом файловой системы ext4
, выделяем под этот раздел все место на диске.
$ sudo parted --align opt /dev/sdb mktable gpt mkpart data ext4 0% 100%
Справка по команде
$ parted --help Использование: parted [КЛЮЧ]... [УСТРОЙСТВО [КОМАНДА [ПАРАМЕТРЫ]...]...] Применяет КОМАНДУ с ПАРАМЕТРАМИ к УСТРОЙСТВУ. Если ни одной КОМАНДЫ не задано, программа работает в интерактивном режиме. КЛЮЧИ: -h, --help отображает это справочное сообщение -l, --list выводит раскладку разделов всех блочных устройств -m, --machine отображает вывод для обработки компьютером -s, --script никогда не запрашивает вмешательство пользователя -v, --version отображает версию -a, --align=[none|cyl|min|opt] выравнивание новых разделов КОМАНДЫ: align-check ТИП N проверить, что раздел N выровнен согласно ТИПУ(min|opt) help [КОМАНДА] распечатать общую справку или справку по КОМАНДЕ mklabel,mktable ТИП_МЕТКИ создать новую метку диска (таблицу раздела) mkpart ТИП_РАЗД [ТИП_ФС] НАЧ КОН создать раздел name НОМЕР ИМЯ назначить ИМЯ разделу с НОМЕРом print [devices|free|list,all|НОМЕР] отобразить таблицу разделов, доступные устройства, свободное место, все найденные разделы или определённый раздел quit выйти из программы rescue НАЧАЛО КОНЕЦ восстановить потерянный раздел в промежутке от НАЧАЛА до КОНЦА resizepart НОМЕР КОНЕЦ изменить размер раздела НОМЕР rm НОМЕР удалить раздел НОМЕР select УСТРОЙСТВО выбор устройства для редактирования disk_set ФЛАГ СОСТОЯНИЕ изменить ФЛАГ на выбранном устройстве disk_toggle [ФЛАГ] переключить состояние ФЛАГА на выбранном устройстве set НОМЕР ФЛАГ СОСТОЯНИЕ изменить ФЛАГ на разделе НОМЕР toggle [НОМЕР [ФЛАГ]] переключить состояние ФЛАГА на разделе НОМЕР unit ЕДИНИЦА использовать для измерений данную ЕДИНИЦУ version отображает текущую версию GNU Parted и информацию о лицензии
В интерактивном режиме работы все команды выполняются последовательно, одна за другой. При этом, в отличие от fdisk
— изменения записываются на диск сразу, отменить ошибочное действие нельзя.
$ sudo parted --align opt /dev/sdb GNU Parted 3.4 Используется /dev/sdb Добро пожаловать в GNU Parted! Наберите 'help' для просмотра списка команд. (parted) help align-check ТИП N проверить, что раздел N выровнен согласно ТИПУ(min|opt) help [КОМАНДА] распечатать общую справку или справку по КОМАНДЕ mklabel,mktable ТИП_МЕТКИ создать новую метку диска (таблицу раздела) mkpart ТИП_РАЗД [ТИП_ФС] НАЧ КОН создать раздел name НОМЕР ИМЯ назначить ИМЯ разделу с НОМЕРом print [devices|free|list,all|НОМЕР] отобразить таблицу разделов, доступные устройства, свободное место, все найденные разделы или определённый раздел quit выйти из программы rescue НАЧАЛО КОНЕЦ восстановить потерянный раздел в промежутке от НАЧАЛА до КОНЦА resizepart НОМЕР КОНЕЦ изменить размер раздела НОМЕР rm НОМЕР удалить раздел НОМЕР select УСТРОЙСТВО выбор устройства для редактирования disk_set ФЛАГ СОСТОЯНИЕ изменить ФЛАГ на выбранном устройстве disk_toggle [ФЛАГ] переключить состояние ФЛАГА на выбранном устройстве set НОМЕР ФЛАГ СОСТОЯНИЕ изменить ФЛАГ на разделе НОМЕР toggle [НОМЕР [ФЛАГ]] переключить состояние ФЛАГА на разделе НОМЕР unit ЕДИНИЦА использовать для измерений данную ЕДИНИЦУ version отображает текущую версию GNU Parted и информацию о лицензии
Если планируется создание или изменение разделов диска — команду лучше запускать с опцией --align opt
. Это позволит избежать предупреждения о необходимости выравнивания раздела для лучшей производительности. Опция позволяет не выравнивать раздел вручную, а доверить это утилите parted
.
Warning: The resulting partition is not properly aligned for best performance.
Создание разделов MBR
У меня есть диск размером 2Гб, давайте создадим таблицу разделов MBR и несколько разделов — основной, расширенный и два логических внутри расширенного.
$ sudo parted --align opt /dev/sdb GNU Parted 3.4 Используется /dev/sdb Добро пожаловать в GNU Parted! Наберите 'help' для просмотра списка команд.
Создаем таблицу разделов
(parted) mktable msdos
Смотрим, что получилось
(parted) print
Модель: ATA VBOX HARDDISK (scsi)
Диск /dev/sdb: 2147MB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: msdos
Флаги диска:
Номер Начало Конец Размер Тип Файловая система Флаги
Создаем primary
раздел
(parted) mkpart primary 0% 50% (parted) print Модель: ATA VBOX HARDDISK (scsi) Диск /dev/sdb: 2147MB Размер сектора (логич./физич.): 512B/512B Таблица разделов: msdos Флаги диска: Номер Начало Конец Размер Тип Файловая система Флаги 1 1049kB 1074MB 1073MB primary lba
Создаем extended
раздел
(parted) mkpart extended 50% 100% (parted) print Модель: ATA VBOX HARDDISK (scsi) Диск /dev/sdb: 2147MB Размер сектора (логич./физич.): 512B/512B Таблица разделов: msdos Флаги диска: Номер Начало Конец Размер Тип Файловая система Флаги 1 1049kB 1074MB 1073MB primary lba 2 1074MB 2147MB 1074MB extended lba
Создаем логические разделы
(parted) mkpart logical 50% 75% (parted) mkpart logical 75% 100% (parted) print Модель: ATA VBOX HARDDISK (scsi) Диск /dev/sdb: 2147MB Размер сектора (логич./физич.): 512B/512B Таблица разделов: msdos Флаги диска: Номер Начало Конец Размер Тип Файловая система Флаги 1 1049kB 1074MB 1073MB primary lba 2 1074MB 2147MB 1074MB extended lba 5 1075MB 1611MB 536MB logical lba 6 1612MB 2147MB 536MB logical lba
lba
говорит о том, что доступ к разделу осуществляется с использованием адресации LBA (Logical Block Addressing), вместо устаревшей адресации CHS (Cylinder-Head-Sector).
Сделаем основной раздел загрузочным
(parted) set 1 boot on (parted) print Модель: ATA VBOX HARDDISK (scsi) Диск /dev/sdb: 2147MB Размер сектора (логич./физич.): 512B/512B Таблица разделов: msdos Флаги диска: Номер Начало Конец Размер Тип Файловая система Флаги 1 1049kB 1074MB 1073MB primary загрузочный 2 1074MB 2147MB 1074MB extended lba 5 1075MB 1611MB 536MB logical lba 6 1612MB 2147MB 536MB logical lba
Создание разделов GPT
Давайте теперь создадим таблицу GTP и несколько разделов на диске /dev/sdb
размером 2Гб.
$ sudo parted --align opt /dev/sdb GNU Parted 3.4 Используется /dev/sdb Добро пожаловать в GNU Parted! Наберите 'help' для просмотра списка команд.
Создаем таблицу разделов
(parted) mktable gpt
Смотрим, что получилось
(parted) print
Модель: ATA VBOX HARDDISK (scsi)
Диск /dev/sdb: 2147MB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: gpt
Флаги диска:
Номер Начало Конец Размер Файловая система Имя Флаги
Создаем разделы (все разделы в GPT первичные)
(parted) mkpart home 0% 50% (parted) mkpart data 50% 100% (parted) print Модель: ATA VBOX HARDDISK (scsi) Диск /dev/sdb: 2147MB Размер сектора (логич./физич.): 512B/512B Таблица разделов: gpt Флаги диска: Номер Начало Конец Размер Файловая система Имя Флаги 1 1049kB 1074MB 1073MB home 2 1074MB 2146MB 1073MB data
Обратите внимание, что когда мы работаем с таблицей разделов GPT — в качестве первого аргумента указывается имя раздела, а не его тип — primary
, extended
, logical
.