Linux. Команда fdisk
05.08.2023
Теги: CLI • Linux • БлочноеУстройство • Команда • ФайловаяСистема
Команда fdisk
(format disk, форматировать диск) — это наиболее распространенная утилита командной строки для работы с дисками в Linux. Позволяет просматривать, создавать, удалять, изменять, копировать и перемещать разделы на жестком диске, используя простой интерфейс текстовых меню.
Блочные устройства
Наиболее известным блочным устройством, вероятно, будет первый диск IDE в системе, который будет называться /dev/hda
. Если в системе есть SCSI диски, то первый из них будет называться /dev/sda
. Как нетрудно догадаться, второй IDE диск будет называться /dev/hdb
, второй SCSI диск — /dev/sdb
.
Блочные устройства представляют абстрактный интерфейс к диску. Пользовательские программы могут использовать эти блочные устройства для взаимодействия с диском, не беспокоясь о том, что у вас за диски — IDE, SCSI или какие-то другие. Программы могут легко адресовать место на диске, как последовательность блоков по 512 байт с произвольным доступом.
Посмотреть диски в системе можно с помощью команды fdisk
.
$ sudo fdisk -l Диск /dev/sda: 25 GiB, 26843545600 байт, 52428800 секторов Disk model: VBOX HARDDISK Единицы: секторов по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер I/O (минимальный/оптимальный): 512 байт / 512 байт Тип метки диска: gpt Идентификатор диска: DA663EDF-5E42-42E3-9DAF-2E6A9AEBB59E Устр-во начало Конец Секторы Размер Тип /dev/sda1 2048 4095 2048 1M BIOS boot /dev/sda2 4096 1054719 1050624 513M EFI /dev/sda3 1054720 52426751 51372032 24,5G Файловая система Linux Диск /dev/sdb: 2 GiB, 2147483648 байт, 4194304 секторов Disk model: VBOX HARDDISK Единицы: секторов по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Разделы диска
В Linux файловые системы создаются с помощью команды mkfs
, указывая в качестве аргумента конкретное блочное устройство.
Хотя возможно использовать блочные устройства, представляющие весь диск целиком, такие как /dev/hda
или /dev/sda
, для единственной файловой системы, это редко применяется на практике. Вместо этого дисковые блочные устройства разделяются на более удобные блочные устройства меньшего размера, называемые разделами.
Посмотреть разделы диска можно с помощью команды fdisk
.
$ sudo fdisk -l /dev/sda Диск /dev/sda: 25 GiB, 26843545600 байт, 52428800 секторов Disk model: VBOX HARDDISK Единицы: секторов по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер I/O (минимальный/оптимальный): 512 байт / 512 байт Тип метки диска: gpt Идентификатор диска: DA663EDF-5E42-42E3-9DAF-2E6A9AEBB59E Устр-во начало Конец Секторы Размер Тип /dev/sda1 2048 4095 2048 1M BIOS boot /dev/sda2 4096 1054719 1050624 513M EFI /dev/sda3 1054720 52426751 51372032 24,5G Файловая система Linux
Таблица разделов определяет, как именно разбито пространство на целом диске. На данный момент существует два стандарта таблицы разделов — 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, то ограничений на размер и количество разделов практически нет.
Команда fdisk
Большинство операций по разметке дисков выполняются в интерактивном режиме. Для получения подсказки при работе в интерактивном режиме используется команда m
— которая покажет, какие еще команды доступны. У меня есть пустой диск размером 2Гб на виртуальной машине — давайте создадим таблицу разделов GPT и два раздела размером 1Гб каждый.
$ sudo fdisk /dev/sdb Добро пожаловать в fdisk (util-linux 2.37.2). Изменения останутся только в памяти до тех пор, пока вы не решите записать их. Будьте внимательны, используя команду write. Команда (m для справки): m Справка: Общие d удалить раздел F показать свободное неразмеченное пространство l список известных типов разделов n добавление нового раздела p вывести таблицу разделов t изменение типа раздела v проверка таблицы разделов i вывести информацию о разделе Разное m вывод этого меню x дополнительная функциональность (только для экспертов) Записать и выйти w запись таблицы разделов на диск и выход q выход без сохранения изменений Создать новую метку g создание новой пустой таблицы разделов GPT o создание новой пустой таблицы разделов DOS
Создаем таблицу разделов GPT
Команда (m для справки): g
Создана новая метка диска GPT (GUID: ABCCD678-445B-2E46-A499-C4F532CABC20).
Создаем раздел размером 1Гб
Команда (m для справки): n Номер раздела (1-128, по умолчанию 1): Enter Первый сектор (2048-4194270, по умолчанию 2048): Enter Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-4194270, по умолчанию 4194270): +1G Создан новый раздел 1 с типом 'Linux filesystem' и размером 1 GiB.
Создаем раздел размером 1Гб
Команда (m для справки): n Номер раздела (2-128, по умолчанию 2): Enter Первый сектор (2099200-4194270, по умолчанию 2099200): Enter Last sector, +/-sectors or +/-size{K,M,G,T,P} (2099200-4194270, по умолчанию 4194270): Enter Создан новый раздел 2 с типом 'Linux filesystem' и размером 1023 MiB.
Посмотрим, что получилось в итоге
Команда (m для справки): p
Диск /dev/sdb: 2 GiB, 2147483648 байт, 4194304 секторов
Disk model: VBOX HARDDISK
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: ABCCD678-445B-2E46-A499-C4F532CABC20
Устр-во начало Конец Секторы Размер Тип
/dev/sdb1 2048 2099199 2097152 1G Файловая система Linux
/dev/sdb2 2099200 4194270 2095071 1023M Файловая система Linux
Запишем все изменения
Команда (m для справки): w
Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.
Если была дорущена ошибка — можно выйти без сохранения с помощью команды q
.
Тип раздела
Кроме обычных разделов для пользовательских файлов существуют и другие типы разделов — EFI, BIOS boot, Windows Recovery, Linux swap. Этот тип влияет на назначение раздела. Например, раздел EFI не будет использоваться пока для него не будет выбран правильный тип. Для изменения типа раздела предназначена команда t
. Давайте изменим тип первого раздела диска /dev/sdb
.
$ sudo fdisk /dev/sdb Добро пожаловать в fdisk (util-linux 2.37.2). Изменения останутся только в памяти до тех пор, пока вы не решите записать их. Будьте внимательны, используя команду write. Команда (m для справки): t Номер раздела (1,2, по умолчанию 2): 1 Partition type or alias (type L to list all): home Тип раздела 'Linux filesystem' изменен на 'Linux home'. Команда (m для справки): p Диск /dev/sdb: 2 GiB, 2147483648 байт, 4194304 секторов Disk model: VBOX HARDDISK Единицы: секторов по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер I/O (минимальный/оптимальный): 512 байт / 512 байт Тип метки диска: gpt Идентификатор диска: ABCCD678-445B-2E46-A499-C4F532CABC20 Устр-во начало Конец Секторы Размер Тип /dev/sdb1 2048 2099199 2097152 1G Домашний раздел Linux /dev/sdb2 2099200 4194270 2095071 1023M Файловая система Linux Команда (m для справки): w Таблица разделов была изменена. Вызывается ioctl() для перечитывания таблицы разделов. Синхронизируются диски.
Посмотреть список всех доступных типов разделов можно с помощью команды l
.
Команда (m для справки): l
1 EFI System C12A7328-F81F-11D2-BA4B-00A0C93EC93B
2 MBR partition scheme 024DEE41-33E7-11D3-9D69-0008C781F39F
3 Intel Fast Flash D3BFE2DE-3DAF-11DF-BA40-E3A556D89593
4 BIOS boot 21686148-6449-6E6F-744E-656564454649
5 Sony boot partition F4019732-066E-4E12-8273-346C5641494F
6 Lenovo boot partition BFBFAFE7-A34F-448A-9A5B-6213EB736C22
7 PowerPC PReP boot 9E1A2D38-C612-4316-AA26-8B49521E5A8B
8 ONIE boot 7412F7D5-A156-4B13-81DC-867174929325
9 ONIE config D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149
..........
Aliases:
linux - 0FC63DAF-8483-4772-8E79-3D69D8477DE4
swap - 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
home - 933AC7E1-2EB4-4F13-B844-0E14E2AEF915
uefi - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
raid - A19D880F-05FC-4D3B-A006-743F0F84911E
lvm - E6D6D379-F507-44C2-A23C-238F2A3DF928
Команда mkfs
Разделы готовы — создаем файловые системы
$ sudo mkfs.ext4 /dev/sdb1 mke2fs 1.46.5 (30-Dec-2021) Creating filesystem with 262144 4k blocks and 65536 inodes Filesystem UUID: 06bad140-ec18-4e8e-92a0-4712be3b8549 Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Allocating group tables: done Сохранение таблицы inod'ов: done Создание журнала (8192 блоков): готово Writing superblocks and filesystem accounting information: готово
$ sudo mkfs.ext4 /dev/sdb2 mke2fs 1.46.5 (30-Dec-2021) Creating filesystem with 261883 4k blocks and 65536 inodes Filesystem UUID: 95eb4dda-9b25-42ee-8475-746a5086d164 Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Allocating group tables: done Сохранение таблицы inod'ов: done Создание журнала (4096 блоков): готово Writing superblocks and filesystem accounting information: готово
Посмотрим, что получилось в итоге
$ sudo fdisk -l /dev/sdb Диск /dev/sdb: 2 GiB, 2147483648 байт, 4194304 секторов Disk model: VBOX HARDDISK Единицы: секторов по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер I/O (минимальный/оптимальный): 512 байт / 512 байт Тип метки диска: gpt Идентификатор диска: ABCCD678-445B-2E46-A499-C4F532CABC20 Устр-во начало Конец Секторы Размер Тип /dev/sdb1 2048 2099199 2097152 1G Домашний раздел Linux /dev/sdb2 2099200 4194270 2095071 1023M Файловая система Linux
Поиск: CLI • Linux • Команда • диск • fdisk • GPT • MBR • Файловая система • Блочное устройство