Файлы и файловая система
Что на самом деле происходит при сохранении файла и почему inode — это не имя файла.
Файловая система организует блоки на устройстве в именованные файлы и каталоги. Каталог — это тоже файл, который сопоставляет имена номерам inode. Имя — не файл; это ярлык, указывающий на него.
Inode хранит метаданные файла и то, где лежат его блоки данных: размер, права, временные метки, указатели на блоки. Имени он не хранит. Поэтому у одного файла может быть несколько имён (жёсткие ссылки), и ни одно из них не «настоящее».
Чтение с диска в тысячи раз медленнее памяти, поэтому ядро держит недавно использованные данные файлов в страничном кэше. Повторное чтение может вообще не коснуться диска.
# Путь — это просто имена каталогов, которые ядро проходит шаг за шагом.
# Конкретный ФАЙЛ живёт в inode, а не в имени.
$ ls -i /etc/hosts
42 /etc/hosts # 42 — номер inode
$ ln /etc/hosts /tmp/alias # жёсткая ссылка: +1 имя у ТОГО ЖЕ inode
$ ln -s /etc/hosts /tmp/soft # симлинк: отдельный файл со ссылкой
# Место на диске занимают ДАННЫЕ, а не имя файла.Практика
Ты записал в файл, и вызов вернул успех. Данные уже на диске?
Подсказки
- Куда ядро помещает записи, прежде чем они дойдут до диска?
- Какой смысл в fsync, если записи уже дошли до диска?
12 XP
Расставь шаги чтения файла по порядку.
Подсказки
- Путь — это последовательность имён, каждое раскрывается по очереди.
- Сначала проверь быстрый путь, потом медленный.
13 XP
Объясни, почему удаление файла, который открыт другим процессом, не обязательно освобождает место на диске.
Подсказки
- Что удерживает inode живым — имя или что-то ещё?
- Считай ссылки, а не записи в каталоге.
13 XP