«Кончилось место на диске» это одна из самых частых аварий. На собесе проверяют, умеешь ли ты быстро найти, кто съел место, понимаешь ли разницу между df и du и знаешь ли, как расширить раздел без простоя.
Устройства и разделы
lsblk # дерево: диски, разделы, LVM, точки монтирования
lsblk -f # плюс тип ФС и UUID
blkid # UUID и типы
fdisk -l # таблицы разделов
Имена: /dev/sda, /dev/sdb для SATA/SCSI и большинства облачных дисков, /dev/nvme0n1 и разделы /dev/nvme0n1p1 для NVMe, /dev/vda для virtio. Имена могут поменяться между загрузками, поэтому в конфигах используют UUID.
Монтирование
mount /dev/sdb1 /data
mount | grep /data # или findmnt /data
umount /data
Постоянное монтирование описывают в /etc/fstab:
UUID=3f1c... /data ext4 defaults,noatime,nofail 0 2
Колонки: что, куда, тип ФС, опции, dump, порядок fsck. nofail не даёт системе зависнуть при загрузке, если диска нет (важно для облачных томов). После правки проверь: mount -a или findmnt --verify. Ошибка в fstab может сделать сервер незагружаемым.
umount ругается target is busy, если кто-то держит файлы: найти виновника помогут lsof +f -- /data или fuser -vm /data.
Файловые системы
- ext4: надёжный стандарт, умеет расширяться онлайн, уменьшаться только отмонтированной.
- XFS: по умолчанию в RHEL, хороша для больших файлов и параллельной записи, расширяется онлайн, уменьшить нельзя.
- Btrfs, ZFS: снапшоты, контрольные суммы, сжатие.
- tmpfs: в памяти, например
/run,/dev/shm.
Журналирование защищает метаданные при внезапном отключении питания: после сбоя не нужен долгий полный fsck.
df против du
df -h # место на смонтированных ФС
df -i # inode
du -sh /var/* # сколько занимают каталоги
du -xh / --max-depth=1 | sort -h # не переходить на другие ФС
df спрашивает у файловой системы, сколько блоков занято. du обходит файлы и суммирует. Они могут расходиться, и это классический вопрос:
- Удалённый, но открытый файл. Удалили 20-гигабайтный лог, а процесс продолжает в него писать. Имени нет,
duего не видит, но inode жив, иdfпоказывает занятое место. Найти:lsof +L1илиlsof | grep deleted. Лечение: перезапустить процесс или обнулить через его дескриптор:: > /proc/<pid>/fd/<N>. - Файлы под точкой монтирования. Писали в
/data, когда диск не был смонтирован, потом смонтировали поверх. Старые файлы занимают место на корневой ФС, но их не видно. - Зарезервированные блоки ext4 (5% для root) и метаданные.
Чтобы лог не съедал диск, используют logrotate с copytruncate или сигналом процессу, а не rm.
LVM
Logical Volume Manager добавляет слой между дисками и файловыми системами:
- PV (physical volume): диск или раздел, отданный LVM (
pvcreate /dev/sdb). - VG (volume group): пул из одного или нескольких PV (
vgcreate data /dev/sdb). - LV (logical volume): «раздел» из пула, на нём ФС (
lvcreate -n pg -L 50G data).
Главный плюс: тома можно расширять на лету и добавлять диски в пул. Расширение без простоя:
pvcreate /dev/sdc # новый диск
vgextend data /dev/sdc # добавить в пул
lvextend -r -L +100G /dev/data/pg # расширить том и ФС сразу (-r)
Без -r ФС растягивают отдельно: resize2fs для ext4, xfs_growfs для XFS (по точке монтирования). Если в облаке увеличили сам диск, сначала расширяют раздел (growpart /dev/sda 1) и PV (pvresize).
Ещё LVM умеет снапшоты (copy-on-write): удобно для консистентного бэкапа, но снапшот замедляет запись и может переполниться.
RAID кратко
- RAID 0: чередование, скорость, никакой защиты.
- RAID 1: зеркало, переживает потерю диска.
- RAID 5/6: чётность, переживает 1 или 2 диска, медленная запись и долгий ребилд.
- RAID 10: зеркала плюс чередование, частый выбор для баз.
RAID не бэкап: удалённый файл удалится на всех дисках.
Частые ошибки
rmбольшого лога, который держит процесс: место не освобождается.- Ошибка в fstab без
nofailи без проверки: сервер не грузится. - Устройство в fstab по имени
/dev/sdb1вместо UUID. du -sh /без-x: обход/procи сетевых ФС.- Попытка уменьшить XFS.
Что спросят на собесе
- Диск заполнен: как найти, что съело место.
- Почему
dfиduпоказывают разное. - Что такое LVM и как расширить раздел без простоя.
- Зачем UUID и
nofailв fstab. - Чем RAID отличается от бэкапа.