Монтирование диска в Linux: lsblk, разметка, mkfs, mount и fstab
Монтирование диска в Linux — это подключение файловой системы раздела к каталогу дерева, например /data. Новый диск находят командой lsblk, размечают через fdisk или parted, форматируют mkfs.ext4, монтируют командой mount /dev/sdb1 /data, а чтобы раздел подключался после перезагрузки, добавляют строку с его UUID в /etc/fstab и проверяют её командой mount -a.
В Linux нет букв дисков: все устройства хранения встраиваются в одно дерево каталогов, начинающееся с /. Монтирование диска в Linux — это операция, которая «подвешивает» файловую систему раздела к пустому каталогу, точке монтирования. Путь нового диска всегда одинаков: найти устройство (lsblk), разметить (fdisk или parted), создать файловую систему (mkfs), смонтировать (mount) и закрепить в /etc/fstab. Разберём каждый шаг, а заодно — как понять, куда делось место, с помощью df и du.
Как устроены диски и разделы в Linux
Ядро представляет каждый диск файлом устройства в /dev. Имена зависят от типа подключения:
| Имя | Что это | Разделы |
|---|---|---|
/dev/sda, /dev/sdb | SATA/SAS/USB-диски, многие виртуальные диски | /dev/sda1, /dev/sda2 |
/dev/vda | диски virtio в KVM-виртуалках | /dev/vda1 |
/dev/nvme0n1 | NVMe SSD | /dev/nvme0n1p1 |
/dev/mapper/... | логические тома LVM, шифрованные тома | — |
Диск делится на разделы, на разделе создаётся файловая система (ext4, xfs, btrfs), и уже её монтируют в каталог. Пока раздел не смонтирован, его файлы недоступны, даже если диск физически подключён.
Как посмотреть диски: lsblk и blkid
Первая команда при работе с дисками — lsblk. Она показывает дерево устройств, размеры и точки монтирования:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part /
sdb 8:16 0 100G 0 disk
Здесь видно, что sdb — новый диск на 100 ГБ без разделов и без точки монтирования. Полезные варианты:
lsblk -f— тип файловой системы, метку и UUID каждого раздела.lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,MODEL— только нужные колонки.sudo blkid— UUID и тип файловой системы для всех разделов.sudo fdisk -l— таблицы разделов всех дисков с секторами.
Если диск добавили в виртуальную машину «на горячую», а lsblk его не видит, попросите ядро пересканировать шину: echo "- - -" | sudo tee /sys/class/scsi_host/host*/scan.
Разметка диска: fdisk и parted
Перед разметкой ещё раз убедитесь, что выбрали правильное устройство: запись таблицы разделов на системный диск уничтожит данные. Ориентируйтесь на размер и отсутствие точек монтирования в выводе lsblk.
GPT или MBR
Для новых дисков берите GPT: она поддерживает диски больше 2 ТБ и до 128 разделов. MBR (dos) нужна только для старых систем с загрузкой через BIOS, где это требуется загрузчиком.
Разметка через fdisk
Современный fdisk умеет и GPT, и MBR. Работа идёт в интерактивном режиме:
$ sudo fdisk /dev/sdb
Command (m for help): g # создать пустую таблицу GPT
Command (m for help): n # новый раздел
Partition number (1-128, default 1): Enter
First sector: Enter
Last sector, +/-sectors or +/-size{K,M,G,T,P}: Enter # весь диск
Command (m for help): w # записать изменения и выйти
Пока вы не нажали w, на диск ничего не записывается, поэтому q позволяет выйти без изменений.
Разметка через parted в одну строку
В скриптах удобнее parted, который работает без диалога:
$ sudo parted -s /dev/sdb mklabel gpt
$ sudo parted -s /dev/sdb mkpart primary ext4 0% 100%
$ lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 100G 0 part
Границы в процентах дают правильное выравнивание раздела. Если новый раздел не появился, выполните sudo partprobe /dev/sdb, чтобы ядро перечитало таблицу.
Создание файловой системы: mkfs
Раздел — это просто диапазон блоков. Чтобы хранить файлы, на нём нужно создать файловую систему:
$ sudo mkfs.ext4 -L data /dev/sdb1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 26214144 4k blocks and 6553600 inodes
...
Writing superblocks and filesystem accounting information: done
Ключ -L задаёт метку, по которой раздел потом легко узнать. Что выбрать:
| ФС | Команда | Когда подходит |
|---|---|---|
| ext4 | mkfs.ext4 | универсальный выбор по умолчанию, умеет уменьшаться |
| XFS | mkfs.xfs | большие файлы и тома, стандарт в RHEL; только увеличивается |
| Btrfs | mkfs.btrfs | снапшоты, сжатие, подтома |
| vfat/exFAT | mkfs.vfat, mkfs.exfat | флешки для обмена с Windows и macOS |
mkfs стирает всё, что было на разделе. Команда не спрашивает подтверждения для пустого раздела, поэтому ещё раз проверьте имя устройства.
Как смонтировать диск в Linux командой mount
Создайте каталог — точку монтирования — и подключите к нему раздел:
$ sudo mkdir -p /data
$ sudo mount /dev/sdb1 /data
$ df -h /data
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 98G 24K 93G 1% /data
Тип файловой системы mount определяет сам, но его можно указать явно: mount -t xfs. Если в каталоге /data уже лежали файлы, после монтирования они не удаляются, а просто скрываются под новой ФС и снова появятся после отключения.
Опции монтирования
Опции передаются через -o через запятую:
ro/rw— только чтение или чтение и запись.noatime— не обновлять время доступа при каждом чтении, меньше лишних записей.noexec— запретить запуск программ с этого раздела (полезно для/tmpи каталогов загрузок).nosuid,nodev— игнорировать SUID-биты и файлы устройств.remount— поменять опции без отключения:sudo mount -o remount,ro /data.
Посмотреть, что и с какими опциями смонтировано, удобно командой findmnt: findmnt /data или findmnt -t ext4.
Права на смонтированный диск
Корень новой ext4 принадлежит root, поэтому обычный пользователь не сможет туда писать. Передайте каталог нужному пользователю после монтирования: sudo chown alice:alice /data. Для vfat и exFAT прав Unix нет, владельца задают опциями uid=, gid= и umask= при монтировании.
Как отмонтировать диск: umount и ошибка target is busy
Отключение — команда umount (без буквы n) с устройством или каталогом:
$ sudo umount /data
umount: /data: target is busy.
Ошибка значит, что какой-то процесс держит файлы на этой ФС или стоит в ней своим текущим каталогом — часто это ваш же терминал после cd /data. Найти виновника помогают:
$ sudo lsof +f -- /data
$ sudo fuser -vm /data
Остановите процесс или выйдите из каталога и повторите. Крайний вариант — umount -l (lazy): ФС отключится из дерева сразу, а освободится, когда процессы закроют файлы.
Автомонтирование при загрузке: /etc/fstab
Команда mount действует до перезагрузки. Чтобы диск подключался автоматически, добавьте строку в /etc/fstab. Указывайте раздел по UUID, а не по имени /dev/sdb1: имена могут поменяться местами при добавлении дисков, а UUID постоянен.
$ sudo blkid /dev/sdb1
/dev/sdb1: LABEL="data" UUID="3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77" TYPE="ext4" PARTUUID="..."
Формат строки — шесть полей:
# <устройство> <точка> <тип> <опции> <dump> <fsck>
UUID=3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77 /data ext4 defaults,noatime 0 2
| Поле | Смысл |
|---|---|
| устройство | UUID=..., LABEL=... или путь |
| точка | каталог, куда монтировать (должен существовать) |
| тип | ext4, xfs, swap, nfs и т.д. |
| опции | defaults плюс нужные, например noatime, nofail |
| dump | почти всегда 0 |
| fsck | порядок проверки: 1 для корня, 2 для остальных, 0 — не проверять |
Обязательно проверяйте fstab до перезагрузки
Ошибка в /etc/fstab может оставить сервер в аварийном режиме при загрузке, а на облачной машине без консоли это неприятно. Сразу после правки выполните:
$ sudo findmnt --verify
$ sudo systemctl daemon-reload
$ sudo mount -a
$ findmnt /data
mount -a монтирует всё из fstab, что ещё не смонтировано, и сразу покажет ошибку. Для съёмных и сетевых дисков добавляйте опцию nofail: если устройства нет, загрузка продолжится без него. В systemd каждая строка fstab превращается в юнит .mount — например, data.mount, его состояние видно через systemctl status data.mount.
Как узнать свободное место: df
df показывает заполненность смонтированных файловых систем:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 39G 37G 1.1G 98% /
/dev/sda1 974M 180M 727M 20% /boot
/dev/sdb1 98G 24K 93G 1% /data
-h— размеры в удобных единицах.-T— добавить колонку с типом ФС.-i— показать иноды: диск может «кончиться» при свободных гигабайтах, если создано слишком много мелких файлов.-x tmpfs -x devtmpfs— скрыть виртуальные файловые системы.
Почему Size не равен Used + Avail: ext4 резервирует около 5% места для root, чтобы система могла работать даже при заполненном диске. На разделе с данными резерв можно уменьшить: sudo tune2fs -m 1 /dev/sdb1.
Куда делось место: du
df говорит, что диск заполнен, но не говорит чем. Для этого есть du, который суммирует размер файлов в каталогах:
$ sudo du -sh /var/log
4.2G /var/log
$ sudo du -xh --max-depth=1 / 2>/dev/null | sort -rh | head
37G /
21G /var
9.8G /home
3.1G /usr
-s— только итог по каталогу,-a— каждый файл отдельно.--max-depth=1(или-d 1) — один уровень вложенности; спускайтесь глубже по самому большому каталогу.-x— не переходить на другие файловые системы, иначе в итог попадут/data,/procи сетевые диски.sort -rh— сортировка по человекочитаемым размерам, самое большое сверху.
Найти отдельные крупные файлы удобнее через find: sudo find / -xdev -type f -size +1G -exec ls -lh {} +.
df показывает полный диск, а du — нет
Классическая ситуация: удалили огромный лог, а место не освободилось. Файл удалён из каталога, но процесс (например, веб-сервер) всё ещё держит его открытым, и блоки не освобождаются. Найдите такие файлы:
$ sudo lsof +L1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
nginx 812 www 5w REG 8,2 8589934592 0 13054 /var/log/nginx/access.log (deleted)
Перезапустите процесс или попросите его переоткрыть логи — место вернётся. На будущее очищайте активный лог без удаления: sudo truncate -s 0 /var/log/nginx/access.log. Вторая причина расхождения — файлы, спрятанные под точкой монтирования: они занимают место на корневом разделе, но du их не видит, пока ФС смонтирована сверху.
Типичные ошибки и как их исправить
| Сообщение | Причина | Что делать |
|---|---|---|
mount point /data does not exist | нет каталога | sudo mkdir -p /data |
wrong fs type, bad option, bad superblock | на разделе нет ФС, не тот тип или не установлен драйвер | проверить lsblk -f; для exFAT/NTFS поставить пакеты exfatprogs, ntfs-3g |
only root can do that | монтирование без sudo | запускать через sudo или добавить опцию user в fstab |
target is busy | каталог занят процессом | lsof/fuser, выйти из каталога |
| загрузка в emergency mode | ошибка в fstab или диска нет | войти под root, исправить fstab, добавить nofail |
Пошаговый сценарий: новый диск под данные
lsblk— найти новый диск, например/dev/sdb.sudo parted -s /dev/sdb mklabel gpt mkpart primary ext4 0% 100%— разметить.sudo mkfs.ext4 -L data /dev/sdb1— создать файловую систему.sudo mkdir -p /data— создать точку монтирования.sudo blkid /dev/sdb1— узнать UUID и добавить строку в/etc/fstab.sudo mount -a && df -h /data— смонтировать и проверить.sudo chown пользователь: /data— выдать права.
Если место понадобится расширять без остановки сервиса или объединять несколько дисков, вместо обычного раздела используют LVM: диск становится физическим томом, из которого нарезаются логические тома, растущие командой lvextend -r.
Итог
Монтирование диска в Linux сводится к цепочке lsblk → разметка → mkfs → mount → /etc/fstab. Указывайте разделы по UUID, проверяйте fstab командой mount -a до перезагрузки и используйте nofail для необязательных дисков. Когда место заканчивается, df -h покажет, какой раздел заполнен, а du -xh --max-depth=1 | sort -rh и lsof +L1 — что именно его занимает. Диски, разделы, SWAP, LVM и RAID разобраны на практике в курсе по Linux.
Частые вопросы
Как смонтировать флешку в Linux?
Найдите её через lsblk (обычно /dev/sdb1), создайте каталог и выполните sudo mount /dev/sdb1 /mnt/usb. В графических окружениях флешки монтируются автоматически в /media/имя_пользователя или /run/media.
Как смонтировать ISO-образ?
Командой sudo mount -o loop,ro image.iso /mnt/iso: опция loop подключает файл как блочное устройство. Отключается образ обычным umount.
Как подключить сетевую папку через fstab?
Для NFS строка выглядит как server:/export /mnt/nfs nfs defaults,_netdev,nofail 0 0, для SMB — //server/share /mnt/smb cifs credentials=/root/.smbcred,_netdev,nofail 0 0. Опция _netdev ждёт поднятия сети.
Чем UUID отличается от PARTUUID?
UUID принадлежит файловой системе и меняется при повторном mkfs, а PARTUUID — разделу в таблице GPT и сохраняется при переформатировании. В fstab обычно используют UUID.
Как проверить файловую систему на ошибки?
Отмонтируйте раздел и запустите sudo fsck -f /dev/sdb1 для ext4 или sudo xfs_repair /dev/sdb1 для XFS. Проверять смонтированную ФС на запись нельзя — это может повредить данные.
Эта тема подробно разобрана с практикой в курсе «Linux: с нуля до уверенного администрирования».
Перейти к курсу