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

⏱ 25 мин · 🧩 заданий: 5

Устройства в /dev

Драйверы устройств доступны процессам как специальные файлы в /dev:

$ ls -l /dev/sda /dev/tty1 /dev/null
brw-rw---- 1 root disk 8, 0 окт 25 /dev/sda
crw--w---- 1 root tty  4, 1 окт 25 /dev/tty1
crw-rw-rw- 1 root root 1, 3 окт 25 /dev/null
  • b — блочное: доступ блоками фиксированного размера в произвольном порядке, через кеш; на нём можно создать файловую систему (диски, разделы, SSD).
  • c — символьное: поток байтов (терминалы, /dev/null, /dev/random, мыши).
  • Числа 8, 0 — старший (major: какой драйвер) и младший (minor: какое устройство этого драйвера) номера. Они хранятся в inode специального файла (i_rdev).

При open("/dev/sda") VFS видит, что inode — блочное устройство, и подставляет операции драйвера.

Разделы

Диск делится на разделы — непрерывные участки, каждый со своей ФС. Разметка хранится в начале диска:

Таблица Особенности
MBR (msdos) первые 512 байт; до 4 основных разделов (или расширенный с логическими), диски до 2 ТиБ
GPT до 128 разделов, огромные диски, резервная копия в конце диска, используется с UEFI
sudo fdisk -l                 # показать разделы всех дисков
sudo fdisk /dev/sdb           # интерактивно: n — новый, d — удалить, p — показать, w — записать
lsblk                         # дерево дисков и разделов

Задача 2: fdisk

fdisk — обычная программа режима пользователя (утилита администратора — прикладной уровень). Она не управляет диском напрямую, а открывает файл блочного устройства /dev/sdX и читает/пишет секторы с таблицей разделов через системные вызовы — то есть пользуется услугами ядра (VFS → блочный уровень → драйвер). Объект её работы — физическое устройство и его разметка.

Создание ФС и монтирование

sudo mkfs.ext4 /dev/sdb1                 # записать суперблок, группы блоков, таблицы inode
sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data           # подключить
mount | grep sdb1                        # проверить
sudo umount /mnt/data                    # отключить (нельзя, если файлы открыты: EBUSY)

Монтирование при загрузке — /etc/fstab:

# устройство                                  точка      тип   опции          dump fsck
UUID=3f1c...-...                              /mnt/data  ext4  defaults,noatime  0   2
tmpfs                                         /tmp       tmpfs size=1G           0   0

Что происходит в VFS при монтировании

  1. Ядро находит драйвер ФС по типу (ext4), тот читает суперблок с устройства и создаёт struct super_block.
  2. Создаётся объект монтирования (struct vfsmount/mount), связывающий корень новой ФС с каталогом — точкой монтирования.
  3. dentry точки монтирования помечается: при разборе пути VFS, дойдя до этого каталога, переходит в корень смонтированной ФС.

Поэтому:

  • старое содержимое точки монтирования скрыто, пока ФС смонтирована;
  • файл однозначно определяется парой (устройство, номер inode) — номера в разных ФС повторяются (st_dev и st_ino в stat);
  • жёсткие ссылки между ФС невозможны (EXDEV).

Кеш страниц и запись на диск

Чтение и запись файлов идут через кеш страниц в памяти. write лишь помечает страницу грязной; на диск её позже запишут потоки writeback. Принудительно — fsync(fd), sync. Поэтому флешку нужно корректно размонтировать: umount записывает все грязные данные.

Итог

  • Устройства — специальные файлы: блочные (диски) и символьные (терминалы); major/minor номера.
  • Разделы описывает таблица MBR или GPT; fdisk — пользовательская утилита, правящая её через /dev/sdX.
  • mkfs создаёт ФС, mount подключает её к дереву; /etc/fstab — при загрузке.
  • При монтировании VFS связывает точку монтирования с корнем новой ФС; файл определяется парой (устройство, inode).

Практика решено 0 из 5

Вы не вошли — ответы проверяются, но прогресс не сохранится. Войти или зарегистрироваться.
Задание 1 Заполнить таблицу

Символьное или блочное устройство?

СимвольноеБлочное
/dev/sda (диск)
/dev/tty1 (терминал)
/dev/null
/dev/nvme0n1p1 (раздел SSD)
Доступ блоками произвольно, через кеш, на нём можно создать ФС
Поток байтов, обычно последовательный
Отметьте ячейку — «+», пустая — «−».
Задание 2 Один вариант ответа

Что делает утилита fdisk?

Задание 3 Расставить по порядку

Расставьте по порядку шаги подготовки нового диска /dev/sdb:

  1. Добавить строку в /etc/fstab, чтобы монтировать при загрузке
  2. mkfs.ext4 /dev/sdb1 — создать файловую систему (суперблок, таблицы inode)
  3. mkdir /mnt/data — создать точку монтирования
  4. mount /dev/sdb1 /mnt/data — подключить ФС к дереву каталогов
  5. fdisk /dev/sdb — создать таблицу разделов и раздел /dev/sdb1
Задание 4 Ввод ответа

Каталог /mnt/data содержал файл old.txt. На него смонтировали другую ФС. Виден ли old.txt по пути /mnt/data/old.txt? (да/нет)

Задание 5 Один вариант ответа

Почему после mount номер inode корня смонтированной ФС обычно 2, а в / — тоже 2?

Войдите, чтобы отмечать пройденные уроки.