Два файла с разным содержимым в файловой системе Linux Overlay имеют один и тот же индексный номер.

Вопрос или проблема

Я изучаю файловую систему overlay в Linux и у меня возникла проблема, которая выходит за рамки моего понимания. Может кто-нибудь объяснить технические основания этого?

mkdir ./{merged,work,upper,lower}
echo "сообщение из нижнего" >> ./lower/h

sudo mount -t overlay overlay -o lowerdir=./lower,upperdir=./upper,workdir=./work ./merged
# копируем lower/h при записи, и сохранится в lower/h
echo "сообщение из объединенного" >> ./merged/h

# проверьте содержимое файлов: merged/h и upper/h имеют одинаковое содержимое
cat ./lower/h
cat ./merged/h
cat ./upper/h

# эта команда показывает, что merged/h и lower/h имеют один и тот же inode, почему upper/h и merged/h не имеют одного и того же inode
stat ./lower/h ./upper/h ./merged/h

Я думаю, merged/h и upper/h должны иметь один и тот же inode, а lower – разные inode. Однако это не так на основе вышеуказанных экспериментальных результатов.

Ответ или решение

В системе Linux, когда мы работаем с наложенной файловой системой (overlay filesystem), возникают определенные нюансы, касающиеся инодов и структуры файлов. Давайте проанализируем, почему в вашем эксперименте файлы merged/h и lower/h имеют одинаковый инод, а upper/h — другой.

Что такое инод?

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

Принципы работы наложенной файловой системы

Наложенная файловая система в Linux обеспечивает возможность комбинировать содержимое нескольких каталогов в один «объединенный» каталог. В вашем случае используются три уровня: lower, upper, и merged.

  • lowerdir: Содержит оригинальные файлы, которые изначально находятся на диске (в вашем случае — файл lower/h с содержимым "message from lower").
  • upperdir: Содержит файлы, которые могут быть изменены или созданы. В вашем случае upper/h должен содержать информацию, изменённую по сравнению с lower/h.
  • workdir: Используется для временных файлов и управляет метаданными при работе с наложенной файловой системой.

Почему иноды совпадают?

Когда вы используете команду echo "message from merged" >> ./merged/h, вы фактически добавляете данные к файлу в объединенном (merged) каталоге. Если файл h не существует в upperdir, то система отправляет запрос к lowerdir. В результате, так как файл в lowerdir присутствует, система создаёт ссылку на этот файл, а не создает новый файл в upperdir.

Таким образом:

  1. Когда у вас в merged каталоге есть только файл lower/h, он может быть доступен как "верхний" (merged) файл, но с указанием на тот же инод.
  2. Когда вы вносите изменения, система не меняет файл в lower — вместо этого создается новый файл в upper. Таким образом, upper/h получает свой уникальный инод, потому что он является новым файлом, созданным по результатам ваших изменений.

О разных инодах

  • lower/h и merged/h имеют один и тот же инод, потому что при отсутствии файла в upperdir (в вашем случае так и было) наложенная файловая система возвращает ссылку на оригинал из lowerdir.
  • upper/h отличается, так как был создан при модификации, он получает уникальный инод, потому что является новым объектом.

Заключение

Таким образом, отличие в инодах между файлами merged/h и upper/h объясняется работой наложенной файловой системы. Важным моментом является то, что экземпляры файловуются из-за различных механизмов обработки запросов к метаданным.

Для более глубокого понимания рекомендуется изучить документацию по наложенным файловым системам и принципам работы инодов в Linux. Используйте этот опыт для дальнейшего изучения и практики в области системного администрирования и работы с файловыми системами в Linux.

Оцените материал
Добавить комментарий

Капча загружается...