SkillGridИзучай computer science на практике

Файлы и файловая система

Что на самом деле происходит при сохранении файла и почему inode — это не имя файла.

12 мин · 36 XP

Файловая система организует блоки на устройстве в именованные файлы и каталоги. Каталог — это тоже файл, который сопоставляет имена номерам inode. Имя — не файл; это ярлык, указывающий на него.

Inode хранит метаданные файла и то, где лежат его блоки данных: размер, права, временные метки, указатели на блоки. Имени он не хранит. Поэтому у одного файла может быть несколько имён (жёсткие ссылки), и ни одно из них не «настоящее».

AppKernel (VFS)Page cacheDiskopen("/etc/hosts")walk directories, find inode 42file descriptor 3read(fd, buf, 4096)is block already cached?no — read it from diskhere is the blockcopy into your buffer

Чтение с диска в тысячи раз медленнее памяти, поэтому ядро держит недавно использованные данные файлов в страничном кэше. Повторное чтение может вообще не коснуться диска.

# Путь — это просто имена каталогов, которые ядро проходит шаг за шагом.
# Конкретный ФАЙЛ живёт в inode, а не в имени.

$ ls -i /etc/hosts
42 /etc/hosts          # 42 — номер inode

$ ln /etc/hosts /tmp/alias     # жёсткая ссылка: +1 имя у ТОГО ЖЕ inode
$ ln -s /etc/hosts /tmp/soft    # симлинк: отдельный файл со ссылкой

# Место на диске занимают ДАННЫЕ, а не имя файла.

Практика

  1. Ты записал в файл, и вызов вернул успех. Данные уже на диске?

    Подсказки
    • Куда ядро помещает записи, прежде чем они дойдут до диска?
    • Какой смысл в fsync, если записи уже дошли до диска?

    12 XP

  2. Расставь шаги чтения файла по порядку.

    Подсказки
    • Путь — это последовательность имён, каждое раскрывается по очереди.
    • Сначала проверь быстрый путь, потом медленный.

    13 XP

  3. Объясни, почему удаление файла, который открыт другим процессом, не обязательно освобождает место на диске.

    Подсказки
    • Что удерживает inode живым — имя или что-то ещё?
    • Считай ссылки, а не записи в каталоге.

    13 XP