open atlas
↑ К треку
Linux: операционная система LIN · 06 · 01

Блочные устройства и разделы

Блочное устройство — это диск, представленный как файл в /dev. lsblk показывает дерево устройств и разделов. Раздел — просто диапазон байт на устройстве; GPT и MBR — две схемы записи этих диапазонов.

LIN Junior ◷ 20 min
Уровень
ОсновыJuniorMiddleSenior

Ты подключаешь второй диск к серверу. Linux сразу его видит — но прежде чем хранить на нём хоть один файл, нужно понять, что именно Linux тебе предоставляет, что такое «раздел» на самом деле и почему один и тот же диск может появиться как /dev/sda, /dev/nvme0n1 или /dev/vda в зависимости от железа. Без этой базы ты часами будешь разбираться в ошибках вроде «no medium found» или «device or resource busy», пытаясь форматировать или монтировать не тот узел.

Хранение данных в Linux строится в три отдельных слоя: raw block device → раздел → файловая система. Этот урок охватывает нижние два.

Цель

После этого урока ты сможешь читать вывод lsblk и различать диски и разделы, объяснить, что означают /dev/sda, /dev/sdb1 и /dev/nvme0n1p2, объяснить разницу между таблицами разделов GPT и MBR и когда какую использовать, описать, почему раздел — это просто диапазон байт на блочном устройстве.

1

Linux представляет каждое устройство хранения как файл в /dev. Это принцип «всё есть файл», применённый к железу. Файл блочного устройства позволяет ядру и программам с нужными правами читать и записывать сырые байты на устройство фиксированными порциями, называемыми блоками (обычно 512 байт или 4 КиБ).

# Список блочных устройств и их файлов
ls -l /dev/sd* /dev/nvme* 2>/dev/null
# brw-rw---- 1 root disk 8, 0 Jun 21 09:00 /dev/sda
# brw-rw---- 1 root disk 8, 1 Jun 21 09:00 /dev/sda1
# brw-rw---- 1 root disk 8, 2 Jun 21 09:00 /dev/sda2
# brw-rw---- 1 root disk 259, 0 Jun 21 09:00 /dev/nvme0n1
# brw-rw---- 1 root disk 259, 1 Jun 21 09:00 /dev/nvme0n1p1

# 'b' в начале = блочное устройство (vs 'c' = символьное, '-' = обычный файл)
# Числа (8, 0) — major:minor; major определяет драйвер, minor — конкретное устройство

Соглашение об именовании отражает тип железа:

  • /dev/sda — SCSI или SATA-диск (также USB-накопители и большинство VM); b = второй диск, c = третий.
  • /dev/nvme0n1 — NVMe SSD; nvme0 = первый контроллер NVMe, n1 = первое пространство имён на нём.
  • /dev/vda — virtio-диск (KVM/QEMU VM).
  • /dev/mmcblk0 — eMMC или SD-карта (Raspberry Pi, встраиваемые устройства).
2

lsblk — правильный инструмент для понимания топологии дисков. Он выводит дерево блочных устройств и разделов с размерами и точками монтирования. Запускай его перед любыми манипуляциями с диском.

lsblk
# NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
# sda           8:0    0   500G  0 disk
# ├─sda1        8:1    0   512M  0 part /boot/efi
# ├─sda2        8:2    0     1G  0 part /boot
# └─sda3        8:3    0 498.5G  0 part /
# nvme0n1     259:0    0     1T  0 disk
# └─nvme0n1p1 259:1    0     1T  0 part /data

# Показать тип файловой системы и UUID (полезно перед редактированием fstab)
lsblk -f
# NAME        FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
# sda
# ├─sda1      vfat   FAT32       C7A2-1234                             505.4M     1% /boot/efi
# ├─sda2      ext4   1.0         a1b2c3d4-...                          800.5M    13% /boot
# └─sda3      ext4   1.0         e5f6a7b8-...                          390.1G    17% /
# nvme0n1
# └─nvme0n1p1 xfs                9f8e7d6c-...                          950.2G     5% /data

# Размеры в байтах (для скриптов)
lsblk -b -o NAME,SIZE,TYPE

Ключевые столбцы: NAME (файл устройства), SIZE (по умолчанию в читаемом формате), TYPE (disk = целое устройство, part = раздел, lvm = логический том LVM), MOUNTPOINTS (куда смонтировано, если вообще смонтировано).

3

Раздел — не что иное, как диапазон байт на блочном устройстве. Таблица разделов в начале диска хранит список этих диапазонов: «раздел 1 начинается с сектора 2048, заканчивается на секторе 1050623». Ядро читает эту таблицу при загрузке и создаёт файл устройства для каждой записи (/dev/sda1, /dev/sda2 и т.д.).

# Просмотреть сырую таблицу разделов (GPT-диск)
sudo fdisk -l /dev/sda
# Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors
# Disk model: Samsung SSD 870
# Units: sectors of 1 * 512 = 512 bytes
# Sector size (logical/physical): 512 bytes / 512 bytes
# Disklabel type: gpt
#
# Device     Start       End   Sectors  Size Type
# /dev/sda1   2048   1050623   1048576  512M EFI System
# /dev/sda2 1050624   3147775   2097152    1G Linux filesystem
# /dev/sda3 3147776 1048573951 1045426176 498.5G Linux filesystem

# Столбцы 'Start' и 'End' — номера секторов
# Размер раздела = (End - Start + 1) * sector_size
# sda1 = (1050623 - 2048 + 1) * 512 = 536 870 912 байт = 512 МиБ

Зачем вообще разбивать на разделы? Три причины:

  1. Изоляция: процесс, заполнивший /var/log, не обрушит / и не остановит всю систему.
  2. Разные опции монтирования: /tmp с noexec, /home с nosuid.
  3. Разные файловые системы: /boot как ext4, /boot/efi как vfat (требование UEFI).
4

GPT vs MBR: какой формат таблицы разделов используется на диске. Это важно, потому что у MBR есть жёсткие ограничения, которые GPT снимает.

# Проверить тип на диске
sudo fdisk -l /dev/sda | grep 'Disklabel type'
# Disklabel type: gpt

# Или через parted
sudo parted /dev/sda print | grep 'Partition Table'
# Partition Table: gpt
ХарактеристикаMBR (Master Boot Record)GPT (GUID Partition Table)
Макс. размер диска2 ТиБ9,4 ЗиБ (практически неограниченно)
Макс. разделов4 первичных (или 3 + расширенный)128 (по умолчанию)
ИзбыточностьОдна копия в секторе 0Заголовок + резервная копия в конце диска
ПрошивкаBIOS (Legacy)UEFI (современная); BIOS-GPT тоже работает
Введена19832000 (часть спецификации EFI)

Правило: любой диск > 2 ТиБ обязан использовать GPT. Любая новая система с UEFI должна использовать GPT. MBR — только для старого железа или двойной загрузки с очень старыми системами.

Критическая ситуация: если случайно запустить fdisk в режиме MBR на диске с GPT, GPT-заголовок будет перезаписан MBR. Данные останутся, но таблица разделов исчезнет. Инструменты gdisk или gparted иногда могут восстановить резервную копию GPT с конца диска.

5

/dev/sda и /dev/sda1 — принципиально разные вещи. Целый диск vs раздел на нём. Форматирование или обнуление целого диска (/dev/sda) уничтожает таблицу разделов. Форматирование раздела (/dev/sda1) затрагивает только диапазон байт этого раздела.

# БЕЗОПАСНО: форматируем только раздел (здесь живёт файловая система)
sudo mkfs.ext4 /dev/sda3

# ОПАСНО: запись на сырой диск уничтожает таблицу разделов
# sudo mkfs.ext4 /dev/sda    <-- НЕ делать, если не нужна FS без таблицы разделов

# Проверить монтирование перед любой операцией
mount | grep sda
# Если что-то показывается — сначала umount

# Санитарная проверка: lsblk перед любой деструктивной операцией
lsblk /dev/sda
# NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
# sda      8:0    0  500G  0 disk

Быстрая проверка перед деструктивной операцией: lsblk целевого устройства, убедись, что размер совпадает с ожидаемым (перепутать /dev/sdb и /dev/sdc — классическая потеря данных), и убедись, что оно не смонтировано.

Разбор примера

Сценарий: к серверу только что подключён новый NVMe-диск на 2 ТиБ, нужно подготовить его к работе.

# Шаг 1: убеждаемся, что ядро его увидело
lsblk
# NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
# nvme0n1     259:0    0    2T  0 disk            <- новый диск, разделов нет
# nvme1n1     259:1    0  500G  0 disk
# └─nvme1n1p1 259:2    0  500G  0 part /

# Шаг 2: убеждаемся, что он не смонтирован, проверяем таблицу разделов
sudo fdisk -l /dev/nvme0n1
# Disk /dev/nvme0n1: 2 TiB, 2199023255552 bytes
# Disk /dev/nvme0n1 does not contain a recognized partition table.
# 2 ТиБ > ограничение MBR в 2 ТиБ — всегда используем GPT для новых дисков

# Шаг 3: создаём таблицу GPT и один раздел
sudo fdisk /dev/nvme0n1
# (внутри fdisk)
# g         <- создать новую таблицу GPT
# n         <- новый раздел
# 1         <- номер раздела 1
# (Enter)   <- принять начальный сектор по умолчанию
# (Enter)   <- принять конечный сектор по умолчанию (всё место)
# w         <- записать и выйти

# Шаг 4: проверяем
lsblk /dev/nvme0n1
# NAME        MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# nvme0n1     259:0    0   2T  0 disk
# └─nvme0n1p1 259:1    0   2T  0 part    <- раздел готов для файловой системы

Диск теперь разбит на разделы. Следующий шаг (следующий урок) — создание файловой системы внутри /dev/nvme0n1p1.

Почему это работает

На macOS диски называются /dev/disk0, /dev/disk1 и т.д., разделы — /dev/disk0s1, /dev/disk0s2. Команда diskutil list — macOS-эквивалент lsblk. macOS использует GPT на Intel Mac и Apple Silicon, форматирует разделы в APFS или HFS+. Никакого /dev/sda нет — именование полностью другое. Скрипты, жёстко задающие имена устройств Linux, на macOS будут молча падать или обращаться не к тому устройству.

Частая ошибка

Распространённая ошибка на облачных VM: корневой диск появляется как /dev/xvda (Xen) или /dev/vda (KVM), а не /dev/sda. Скрипты, предполагающие /dev/sda, упадут или, что хуже, попытаются работать с несуществующим устройством. Всегда используй lsblk для обнаружения реальных имён устройств в конкретной среде. Никогда не хардкодь /dev/sda в автоматизации.

Проверь себя
Викторина

Ты запускаешь lsblk и видишь /dev/nvme0n1 (2 ТиБ, TYPE=disk) без разделов. Что это означает и что нужно сделать первым, чтобы хранить файлы на этом диске?

Итог

Linux представляет каждое устройство хранения как файл блочного устройства в /dev. Соглашение об именах (sda, nvme0n1, vda) отражает тип интерфейса. lsblk — первая команда при работе с дисками: показывает дерево устройств и разделов с размерами и точками монтирования. Раздел — диапазон байт на устройстве, записанный в таблице разделов в начале диска. GPT — современный формат (поддерживает >2 ТиБ, 128 разделов, резервный заголовок), используй его на всех новых системах; MBR — для BIOS-систем и дисков до 2 ТиБ. Целый диск (/dev/sda) и раздел на нём (/dev/sda1) — разные вещи: форматирование диска уничтожает таблицу разделов. Перед любой деструктивной операцией запускай lsblk.

Практика

Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 4 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.