Learning Platform
Глоссарий Troubleshooting
Урок 15.02 · 24 мин
Начальный
lsblkmountfstabfilesystemsext4xfsbtrfsblock devicesUUID

Блочное устройство — это что

Linux абстрагирует физические носители (HDD, SSD, NVMe, виртуальные диски в облаке) в блочные устройства. Они появляются как файлы в /dev/: /dev/sda, /dev/nvme0n1, /dev/vda. «Блочное» — потому что чтение/запись идут блоками фиксированного размера (обычно 4 KiB), а не байтами.

Внутри блочного устройства могут жить разделы (partitions): /dev/sda1, /dev/sda2, /dev/nvme0n1p1. Раздел — это участок диска с собственной таблицей разделов (MBR или GPT). На каждом разделе создаётся файловая система (ext4, xfs, btrfs, vfat) — структура для хранения файлов и метаданных.

Чтобы пользоваться файловой системой, её нужно смонтировать — привязать к каталогу в дереве /. Эта операция превращает «raw bytes на разделе» в «папка, куда я могу cd-нуться и читать файлы».

От железа до файла: уровни абстракции

Каждый уровень добавляет свой слой и свои команды для управления.

Physical diskSSD / HDD / cloud volume
Block device/dev/sda /dev/nvme0n1
Partition/dev/sda1 (раздел)
Filesystemext4 / xfs / btrfs
Mount point/mnt/data /data /home
File/data/parquet/2026-05-13.pq

lsblk: блочные устройства в виде дерева

lsblk (list block devices) — твой главный инструмент для обзора. Показывает иерархию: диск -> разделы -> mountpoints.

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
nvme0n1     259:0    0 476.9G  0 disk
|-nvme0n1p1 259:1    0   512M  0 part /boot/efi
|-nvme0n1p2 259:2    0   1.7G  0 part /boot
`-nvme0n1p3 259:3    0 474.7G  0 part /
sdb           8:16   0   1.8T  0 disk
`-sdb1        8:17   0   1.8T  0 part /data
sr0          11:0    1  1024M  0 rom

Читаем сверху вниз:

  • nvme0n1 — основной NVMe-диск 477 ГБ, размечен на три раздела.
  • nvme0n1p1 — 512 МБ EFI System Partition (/boot/efi).
  • nvme0n1p2 — 1.7 ГБ /boot (Linux kernel и initramfs).
  • nvme0n1p3 — 475 ГБ корневой раздел /.
  • sdb — второй диск SATA, 1.8 ТБ, целиком отдан под /data.

Колонки:

  • MAJ:MIN — major/minor номера устройства. Major 259 = NVMe, major 8 = SCSI/SATA, major 11 = SCSI CD-ROM.
  • RM — removable (1 = USB-флешка, CD; 0 = внутренний).
  • RO — read-only.
  • TYPEdisk, part, rom, lvm, crypt.

lsblk -f: ещё и файловые системы

$ lsblk -f
NAME        FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
nvme0n1
|-nvme0n1p1 vfat   FAT32       AB12-CD34                              388M    27% /boot/efi
|-nvme0n1p2 ext4   1.0         8a9c1234-5678-...                      1.2G    29% /boot
`-nvme0n1p3 ext4   1.0   root  d4e5f678-90ab-...                       89G    78% /
sdb
`-sdb1      xfs          data  f1a2b3c4-d5e6-...                      1.6T    11% /data

Видны UUID — уникальные идентификаторы файловой системы, генерируемые при mkfs. Они стабильны: если ты переткнёшь SATA-кабель, диск может сменить имя с sdb на sdc, но UUID останется. Поэтому в /etc/fstab рекомендуется использовать UUID=..., а не /dev/sdb1.

lsblk -d: только верхний уровень (только диски)

$ lsblk -d
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0    0 476.9G  0 disk
sdb       8:16   0   1.8T  0 disk
sr0      11:0    1  1024M  0 rom

Удобно для быстрого «какие диски вообще есть».

lsblk -o: выбрать колонки

$ lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS
NAME          SIZE FSTYPE MOUNTPOINTS
nvme0n1     476.9G
|-nvme0n1p1   512M vfat   /boot/efi
|-nvme0n1p2   1.7G ext4   /boot
`-nvme0n1p3 474.7G ext4   /
sdb           1.8T
`-sdb1        1.8T xfs    /data

Все доступные колонки — lsblk --help или lsblk -O.

mount: посмотреть, что куда смонтировано

Команда mount без аргументов выводит список всех смонтированных ФС:

$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=8164532k,nr_inodes=2041133,mode=755)
/dev/nvme0n1p3 on / type ext4 (rw,relatime,errors=remount-ro)
/dev/nvme0n1p1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,...)
/dev/sdb1 on /data type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,inode64)
tmpfs on /run type tmpfs (rw,nosuid,nodev,size=1632908k,mode=755,inode64)

Шаблон: DEVICE on MOUNTPOINT type FSTYPE (OPTIONS). Опции:

  • rw / ro — read-write / read-only.
  • relatime — обновлять atime не на каждое чтение (default современных дистров).
  • noexec — на смонтированной ФС нельзя запускать исполняемые файлы (типично для /tmp, /dev/shm).
  • nosuid — SUID-биты игнорируются.
  • nodev — не интерпретировать device-файлы.

Эти опции — не косметика. На production кластере DE часто видишь /data с noexec,nosuid — это hardening, чтобы загруженные туда .parquet случайно не оказались исполняемыми.

Альтернатива (на современных systemd-системах) — findmnt:

$ findmnt
TARGET                                SOURCE         FSTYPE     OPTIONS
/                                     /dev/nvme0n1p3 ext4       rw,relatime,errors=remount-ro
|-/sys                                sysfs          sysfs      rw,nosuid,nodev,noexec,relatime
|-/proc                               proc           proc       rw,nosuid,nodev,noexec,relatime
|-/dev                                udev           devtmpfs   rw,nosuid,relatime,size=8164532k,...
|-/boot                               /dev/nvme0n1p2 ext4       rw,relatime
| `-/boot/efi                         /dev/nvme0n1p1 vfat       rw,relatime,fmask=0077,...
`-/data                               /dev/sdb1      xfs        rw,relatime,attr2,inode64,...

findmnt рисует дерево — нагляднее, чем плоский список mount.

Монтирование вручную: mount DEVICE MOUNTPOINT

Чтобы подключить, например, новый диск:

# 1) Подключили физически или хотплаг
$ lsblk
NAME    SIZE TYPE MOUNTPOINTS
sdb      1T  disk
`-sdb1   1T  part           <- ещё не смонтирован

# 2) Создаём точку монтирования
$ sudo mkdir /mnt/extra

# 3) Монтируем
$ sudo mount /dev/sdb1 /mnt/extra

# 4) Проверяем
$ df -h /mnt/extra
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       1.0T   42M  973G   1% /mnt/extra

Mount требует root (или suid, или явного users в fstab) — обычный юзер не может монтировать произвольные ФС.

Чтение опций при mount

Если на разделе уже есть ФС, mount сам определит её тип через суперблок. Но можно указать явно:

$ sudo mount -t xfs /dev/sdb1 /mnt/extra
$ sudo mount -t ext4 -o ro,noexec /dev/sdb1 /mnt/extra

-o ro,noexec — read-only и без execute. Удобно для forensic-анализа диска, чтобы не модифицировать его случайно.

umount: размонтировать

$ sudo umount /mnt/extra

Можно по mountpoint, можно по device — оба работают:

$ sudo umount /dev/sdb1   # эквивалентно

Device busy: классическая проблема

$ sudo umount /mnt/extra
umount: /mnt/extra: target is busy.

Это значит: какой-то процесс держит файл-дескриптор или имеет cwd внутри этой ФС. Linux не даст размонтировать, пока ФС используется.

Кто виноват? Две команды:

$ sudo lsof +D /mnt/extra
COMMAND   PID  USER   FD   TYPE DEVICE  SIZE/OFF    NODE NAME
python  4321  airflow cwd  DIR    8,17     4096       2 /mnt/extra
python  4321  airflow   3w REG    8,17  1048576  131072 /mnt/extra/output.csv

lsof +D (capital D, recursive) показывает все процессы с открытыми файлами внутри. Здесь Python с PID 4321 держит /mnt/extra/output.csv.

Или fuser:

$ sudo fuser -m /mnt/extra
/mnt/extra:           4321c

c означает «current directory» процесса 4321 — кто-то сделал cd /mnt/extra и сидит там.

Решение:

  1. Найти процесс и убить (kill 4321 или вежливо попросить).
  2. Заставить процесс отпустить (если это ssh-сессия с cd /mnt/extra — просто cd ~).
  3. umount -l (lazy unmount) — отвяжет от namespace немедленно, но фактически отмонтирует, когда последний дескриптор закроется. Опасно: дальнейшие операции в /mnt/extra будут писать «как бы в новую ФС» (или в исходную папку под mountpoint-ом — зависит от того, кто открыт).
  4. umount -f — force, для сетевых ФС (NFS), когда сервер недоступен.
mount и fstab: как ядро монтирует файловые системы ext4 vs xfs vs btrfs vs ZFS: как выбрать

/etc/fstab: постоянные монтирования при загрузке

Mount, сделанный руками, не переживёт reboot. Чтобы ФС монтировалась автоматически при старте, её нужно прописать в /etc/fstab.

$ cat /etc/fstab
# <file system>                             <mount point>   <type>  <options>            <dump>  <pass>
UUID=d4e5f678-90ab-cdef-1234-567890abcdef   /               ext4    errors=remount-ro    0       1
UUID=8a9c1234-5678-90ab-cdef-1234567890ab   /boot           ext4    defaults             0       2
UUID=AB12-CD34                              /boot/efi       vfat    umask=0077           0       2
UUID=f1a2b3c4-d5e6-7890-abcd-ef1234567890   /data           xfs     defaults,noatime     0       2
/swap.img                                   none            swap    sw                   0       0

6 полей через пробелы/табы:

Поля /etc/fstab

Каждое поле говорит ядру и systemd ровно об одной вещи.

1: sourceUUID=... | /dev/X | LABEL=...
2: mountpoint/data
3: fstypeext4 / xfs / nfs
4: optionsdefaults,noatime,nofail
5: dump0 (почти всегда)
6: pass0 / 1 / 2

Почему UUID, а не /dev/sdb1

Сценарий: ты добавил третий диск, и Linux переименовал устройства: sdb стал sdc, потому что новый диск занял sdb. Если /etc/fstab ссылается на /dev/sdb1, при загрузке mount попытается смонтировать новый диск под /data — и либо не сможет (другая ФС), либо положит туда мусор. С UUID=... такой проблемы нет: UUID привязан к файловой системе, а не к имени устройства.

Получить UUID:

$ sudo blkid /dev/sdb1
/dev/sdb1: UUID="f1a2b3c4-d5e6-7890-abcd-ef1234567890" BLOCK_SIZE="4096" TYPE="xfs"

# Или быстрее через lsblk:
$ lsblk -no UUID /dev/sdb1
f1a2b3c4-d5e6-7890-abcd-ef1234567890

Применить fstab без reboot

После редактирования /etc/fstab не нужно перезагружаться:

$ sudo mount -a

mount -a смонтирует все ФС из fstab, которые ещё не смонтированы. Если в fstab ошибка (опечатка в опции, неверный UUID), команда упадёт с понятным сообщением — это безопасный способ проверить fstab перед reboot.

WARNING

Ошибка в /etc/fstab с корневой ФС или критичным разделом может сломать загрузку — система упадёт в emergency mode. Поэтому: всегда проверяй через mount -a после правки. Опция nofail спасает: даже если ФС недоступна, boot продолжится. Для всех некритичных mount-ов (NFS, второй диск) — добавляй nofail.

Файловые системы: ext4, xfs, btrfs, zfs

На Linux несколько ФС, и DE стоит понимать различия.

Сравнение file systems для DE-задач

Каждая ФС оптимизирована под свои сценарии. Выбор зависит от размера данных и паттерна доступа.

ext4default Ubuntu/Debian, до 16 TiB файл
xfsdefault RHEL, big files, parallel I/O
btrfsCoW, snapshots, subvolumes, compression
zfsCoW + RAID + checksums + RAM-hungry
tmpfsRAM-based, /tmp /dev/shm /run
overlayfslayered, основа Docker

Для DE-кейсов:

  • Big files (parquet, avro, GB-files) — XFS обычно быстрее на параллельной записи. На современном ext4 разница невелика.
  • Много мелких файлов (Spark _temporary, Kafka segments) — ext4 справляется отлично. На XFS allocation slowdown иногда заметен.
  • Snapshots и rollback — btrfs или zfs. Если важно сделать zfs snapshot перед массовой записью и откатить при ошибке — это они.
  • RAM-cache для intermediate данных — tmpfs, но помни о лимите RAM.

Создание ФС: mkfs

# ext4 — самый частый случай
$ sudo mkfs.ext4 -L data /dev/sdb1

# xfs
$ sudo mkfs.xfs -L data /dev/sdb1

# Внимание: это деструктивно — стирает старую ФС!

-L LABEL ставит метку, видную в lsblk -f. Можно использовать LABEL=data в fstab вместо UUID — короче.

После mkfs появится новый UUID — нужно обновить fstab.

Cloud-специфика: EBS, GCE persistent disk, Azure managed disk

На AWS EC2 EBS-том появляется как /dev/nvme1n1 (на Nitro-instances) или /dev/xvdf (на старых). На GCP/Azure аналогично — это просто блочное устройство. Все команды lsblk, mkfs, mount работают одинаково.

Особенности:

  • Online grow: EBS можно увеличить через консоль, потом growpart /dev/nvme1n1 1 + xfs_growfs /data (для xfs) или resize2fs /dev/nvme1n1p1 (для ext4) — без размонтирования. Это критично для production, где downtime недопустим.
  • Snapshot: облачный snapshot — точка восстановления на уровне block device. Восстановление = создать новый volume из snapshot.

Подробнее про сетевые ФС (NFS) — в модуле 11-networking-tools. Про работу с архивами при бэкапе — в модуле 12-archives-compression.

Попробуй сам

  1. Посмотри все блочные устройства в виде дерева:
    lsblk -f
  2. Какие ФС сейчас смонтированы:
    findmnt
  3. UUID твоего корневого раздела:
    sudo blkid $(findmnt -no SOURCE /)
  4. Посмотри /etc/fstab и сопоставь записи с реально смонтированным:
    cat /etc/fstab
    findmnt
  5. Кто держит твою home-директорию занятой (полезно для понимания device busy):
    sudo lsof +D ~ 2>/dev/null | head

macOS-различия

  • На macOS блочные устройства видны через diskutil list, не lsblk.
  • ФС — APFS (с 2017) или HFS+ (legacy). Команды mkfs/mount тоже свои: diskutil eraseDisk, diskutil mount.
  • /etc/fstab на macOS существует, но почти никогда не редактируется вручную — APFS-volumes управляются через diskutil.
  • Большинство DE используют Linux-контейнеры даже на Mac, так что эти различия редко мешают.

Главное

  • Блочное устройство = /dev/sda, /dev/nvme0n1. На нём могут быть разделы (sda1).
  • На разделе создаётся файловая система через mkfs.ext4 / mkfs.xfs.
  • ФС нужно смонтировать в каталог: mount /dev/sdb1 /mnt/data (нужен root).
  • lsblk — дерево устройств. lsblk -f — с типами и UUID.
  • mount без аргументов или findmnt — что куда смонтировано.
  • /etc/fstab — постоянные mounts при загрузке. Используй UUID, не /dev/sdb1.
  • mount -a применяет fstab без reboot — безопасный способ проверки.
  • umount падает с device busy — найди виновника через lsof +D или fuser -m.
  • Файловые системы: ext4 (default), xfs (для больших файлов), btrfs/zfs (snapshots, advanced).
  • На cloud EBS/PD/managed disk — то же самое: блочное устройство, mkfs, mount.

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 5. Почему в /etc/fstab рекомендуется использовать `UUID=...` вместо `/dev/sdb1`?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4