Инструкция

Монтирование диска в Linux: lsblk, разметка, mkfs, mount и fstab

Обновлено: · Skillaria.Top

Монтирование диска в 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/sdbSATA/SAS/USB-диски, многие виртуальные диски/dev/sda1, /dev/sda2
/dev/vdaдиски virtio в KVM-виртуалках/dev/vda1
/dev/nvme0n1NVMe 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 задаёт метку, по которой раздел потом легко узнать. Что выбрать:

ФСКомандаКогда подходит
ext4mkfs.ext4универсальный выбор по умолчанию, умеет уменьшаться
XFSmkfs.xfsбольшие файлы и тома, стандарт в RHEL; только увеличивается
Btrfsmkfs.btrfsснапшоты, сжатие, подтома
vfat/exFATmkfs.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

Пошаговый сценарий: новый диск под данные

  1. lsblk — найти новый диск, например /dev/sdb.
  2. sudo parted -s /dev/sdb mklabel gpt mkpart primary ext4 0% 100% — разметить.
  3. sudo mkfs.ext4 -L data /dev/sdb1 — создать файловую систему.
  4. sudo mkdir -p /data — создать точку монтирования.
  5. sudo blkid /dev/sdb1 — узнать UUID и добавить строку в /etc/fstab.
  6. sudo mount -a && df -h /data — смонтировать и проверить.
  7. 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: с нуля до уверенного администрирования».

Перейти к курсу