Linux. Команда fdisk

05.08.2023

Теги: CLILinuxБлочноеУстройствоКомандаФайловаяСистема

Команда 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 • Файловая система • Блочное устройство

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.