Linux: файловые системы и хранилище
Inode и ссылки, типы ФС, уровни RAID, LVM, монтирование и fstab, анализ дисковой нагрузки и buffer/cache в выводе free.
9 вопросов
JuniorТеорияОчень частоЧто означают биты прав rwx, и как читать восьмеричное chmod вроде 754?
Что означают биты прав rwx, и как читать восьмеричное chmod вроде 754?
У файла три триады прав — владелец, группа, остальные — каждая с чтением (r=4), записью (w=2), выполнением (x=1). Восьмеричная цифра суммирует эти биты, поэтому 754 — владелец rwx (7), группа r-x (5), остальные r-- (4). На каталоге x даёт право входить в него, а не выполнять.
Типичные ошибки
- ✗Читать восьмеричные цифры слева направо как r, w, x вместо владелец, группа, остальные
- ✗Суммировать неверные значения битов (r=4, w=2, x=1), из-за чего 7 — не rwx
- ✗Думать, что x на каталоге означает выполнение, а не право обхода
Уточняющие вопросы
- →Что разрешает бит выполнения на каталоге в отличие от обычного файла?
- →Как добавить запись для группы, не меняя остальные биты?
JuniorТеорияОчень частоНазовите распространённые типы файловых систем Linux (ext4, XFS, Btrfs) и одно различие.
Назовите распространённые типы файловых систем Linux (ext4, XFS, Btrfs) и одно различие.
ext4 — зрелая универсальная ФС по умолчанию: надёжна и проста, но не уменьшается онлайн и без снапшотов. XFS — производительная журналируемая ФС, сильна на больших файлах и параллельном I/O; растёт онлайн, но не сжимается. Btrfs — copy-on-write со встроенными снапшотами, контрольными суммами и подтомами.
Типичные ошибки
- ✗Полагать, что любую ФС можно сжать онлайн (XFS — нельзя)
- ✗Приписывать снапшоты и контрольные суммы Btrfs файловой системе ext4
- ✗Думать, что эти ФС не журналируют и требуют fsck при каждом монтировании
Уточняющие вопросы
- →Почему для больших файлов и высокой пропускной способности можно выбрать XFS вместо ext4?
- →Что дают снапшоты Btrfs (или ZFS), чего нет у ext4?
JuniorТеорияЧастоВ чём разница между жёсткой ссылкой (hard link) и символической (symlink) в Linux?
В чём разница между жёсткой ссылкой (hard link) и символической (symlink) в Linux?
Жёсткая ссылка — ещё одна запись каталога на тот же inode, поэтому оба имени равноправны, а данные живут, пока счётчик ссылок не станет нулём. Symlink — отдельный файл с путём к цели; он может пересекать ФС и указывать на каталоги, но «повисает» при удалении цели. Жёсткая ссылка границы ФС не пересекает.
Типичные ошибки
- ✗Считать, что жёсткая ссылка хранит путь, а не разделяет inode
- ✗Думать, что symlink держит цель живой и потому не может повиснуть
- ✗Ожидать, что жёсткая ссылка работает между разными ФС
Уточняющие вопросы
- →Почему жёсткая ссылка не может пересекать границы ФС, а symlink может?
- →Что происходит с данными файла с жёсткими ссылками, когда вы удаляете одно из имён?
JuniorТеорияЧастоЧто такое inode в файловой системе Linux, и что он хранит, а что — нет?
Что такое inode в файловой системе Linux, и что он хранит, а что — нет?
inode — это запись на диске об одном файле: его метаданные — размер, владелец, права, метки времени, число ссылок и указатели на блоки данных — но НЕ имя файла и не содержимое. Число inode фиксировано, поэтому мелкие файлы могут исчерпать их при свободном месте в df; проверяйте df -i.
Типичные ошибки
- ✗Считать, что имя файла хранится в inode, а не в записи каталога
- ✗Полагать, что ФС не может исчерпать inode, пока
dfпоказывает свободное место - ✗Думать, что inode хранит данные файла, а не указатели на блоки данных
Уточняющие вопросы
- →Как ФС может исчерпать inode, когда
dfещё показывает свободное место, и наоборот? - →Почему миллионы крошечных файлов нагружают ФС сильнее, чем несколько больших?
JuniorТеорияЧастоЧто такое монтирование, и как /etc/fstab делает монтирование переживающим перезагрузку?
Что такое монтирование, и как /etc/fstab делает монтирование переживающим перезагрузку?
Монтирование подключает файловую систему к каталогу — точке монтирования — в едином дереве; mount делает это в рантайме, но при перезагрузке теряется. /etc/fstab перечисляет, что монтировать при загрузке — устройство или UUID, тип и опции, — поэтому они возвращаются автоматически.
Типичные ошибки
- ✗Полагать, что рантайм-
mountпереживает перезагрузку без/etc/fstab - ✗Думать, что монтирование копирует файлы, а не подключает ФС в дерево
- ✗Не знать, что
/etc/fstabможет ссылаться на стабильныйUUID, а не имя/dev
Уточняющие вопросы
- →Что такое bind mount, и когда его использовать?
- →Почему в
/etc/fstabпредпочитаютUUID, а не/dev/sdX?
JuniorТеорияИногдаЧто ls -l сообщает о файле, и что добавляет stat?
Что ls -l сообщает о файле, и что добавляет stat?
ls -l показывает метаданные файла: тип и биты прав, число жёстких ссылок, владельца и группу, размер и время изменения, плюс имя. stat читает тот же inode, но добавляет больше — номер inode, число блоков, точные atime/mtime/ctime и устройство. Оба читают метаданные inode, а не содержимое файла.
Типичные ошибки
- ✗Думать, что
ls -lилиstatчитают содержимое файла, а не метаданные inode - ✗Считать, что
statпоказывает меньше деталей, чемls -l - ✗Путать mtime (изменены данные) с ctime (изменены метаданные inode)
Уточняющие вопросы
- →В чём разница между mtime, ctime и atime?
- →Почему число жёстких ссылок в
ls -lважно при удалении файла?
MiddleКодИногдаНапишите однострочник, находящий 10 самых больших файлов в дереве каталога.
Напишите однострочник, находящий 10 самых больших файлов в дереве каталога.
Рекурсивно обойдите обычные файлы и отсортируйте по размеру. Используйте find /var -type f, печатающий размер и путь, с конвейером в sort -rn | head -10: только файлы, крупнейшие сверху. Альтернатива — du -ah /var | sort -rh | head, но du включает и каталоги. ls не обходит поддерево.
Типичные ошибки
- ✗Ожидать, что
ls -Sрекурсивно обойдёт и отранжирует файлы всего поддерева - ✗Использовать
df(свободное место на монтировании) для ранжирования файлов - ✗Сортировать человекочитаемые размеры через
sort -nвместоsort -rh
Уточняющие вопросы
- →Если
duиdfрасходятся в занятом месте, что стоит заподозрить? - →Как ограничить поиск только файлами больше 100 МБ?
MiddleПроизводительностьИногдаХост показывает высокий I/O wait и тормозит — как найти виновный процесс и устройство?
Хост показывает высокий I/O wait и тормозит — как найти виновный процесс и устройство?
Высокий iowait означает, что CPU простаивают в ожидании диска, значит узкое место — хранилище, а не процессор. Подтвердите через iostat -x 1: устройство с %util около 100% и высоким await перегружено. Привяжите нагрузку через iotop или pidstat -d 1, увидев процесс-виновник, и сопоставьте устройство с его точкой монтирования.
Типичные ошибки
- ✗Читать высокий iowait как загрузку CPU и добавлять ядра вместо починки хранилища
- ✗Не привязать I/O к процессу через
iotop/pidstatперед действиями - ✗Путать
%util(занятость устройства) с оставшимся свободным местом на диске
Уточняющие вопросы
- →Если
duиdfрасходятся после очистки файлов, что бы вы проверили черезlsof? - →Как
awaitи%utilвiostat -xразличают медленный диск и просто занятый?
JuniorТеорияРедкоСколько дисков в RAID 6 может выйти из строя без потери данных, и какова полезная ёмкость из N дисков?
Сколько дисков в RAID 6 может выйти из строя без потери данных, и какова полезная ёмкость из N дисков?
RAID 6 использует двойную чётность, поэтому любые два диска могут отказать без потери данных, полезная ёмкость — N−2 диска. RAID 0 — чередование без избыточности, RAID 1 — зеркало (половина ёмкости), RAID 5 — одинарная чётность (N−1), RAID 10 — зеркало и чередование.
Типичные ошибки
- ✗Путать RAID 6 (терпит два диска, N−2) с RAID 5 (один диск, N−1)
- ✗Думать, что RAID 0 даёт избыточность, а не чистое чередование
- ✗Полагать, что RAID с чётностью сохраняет полную ёмкость без затрат места
Уточняющие вопросы
- →Почему RAID 6 защищает от второго отказа во время пересборки RAID 5?
- →Когда вы выберете RAID 10 вместо RAID 6, несмотря на затраты ёмкости?