Какие атрибуты файла хранятся в записях каталога, а какие в inode?

837
ShadSterling

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

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

Какие свойства я должен установить, а не установить?

В идеале я хотел бы видеть таблицу, показывающую, где находится как можно больше файловых систем. Мне особенно интересны ext3, ext4, HFS +, XFS и Btrfs.

1

1 ответ на вопрос

1
Bob

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

Во-первых, единственными данными в записи каталога являются имя файла и номер индекса.

Во-вторых, создается жесткая ссылка, когда вы создаете два или более имен файлов с одинаковым номером инода.

Inode хранит все остальное, такие как atime и mtime, и другие метаданные, включая «указатели» на блоки данных файла.

Если у вас есть два файла с одинаковым содержимым, но иноды отличаются, большинство метаданных в инодах будут разными, например, упомянутые atime и mtime будут разными, как и все указатели блоков данных.

Чтобы использовать жесткую ссылку для сокращения использования хранилища, вы должны удалить один или другой дублированный файл, который также «закроет» индекс, потеряв все метаданные. Затем вы создаете ссылку на оставшийся существующий файл, используя имя и местоположение каталога только что удаленного файла.

«Новая» ссылка файла будет иметь все тот же инф.узлы информации, как тот, который вы только что связаны с. Единственными отличиями будут расположение в иерархии каталогов и используемое имя, которые хранятся в записи каталога, а не в inode.

Все это обрабатывается с помощью системных вызовов, используемых для создания файлов, ссылок и каталогов, и не может быть напрямую изменено любым пользователем или программным обеспечением, включая «root». Вы можете прочитать его и сохранить данные в отдельном файле, но простое сопоставление иерархии каталогов будет потеряно.

Если я вас правильно понял, ваш ответ составляет «только имена хранятся в записях каталога, все остальные свойства хранятся в inode». Это то, что вы имели ввиду? Это соответствует результатам моего простого эмпирического теста на ext3 и HFS +; Вы знаете, какие другие файловые системы работают таким образом? (Это не все файловые системы, в частности, не NTFS.) Вы знаете, включают ли они xattrs и / или ACL? Можете ли вы дать ссылку на документацию? ShadSterling 9 лет назад 0
Как я сказал в посте, запись каталога также имеет номер индекса, поэтому система может найти данные файла и другие метаданные. Bob 9 лет назад 0
Да, все остальное находится в inode (см. Справочную страницу stat (2) в любой системе Linux или UNIX). Я ничего не знаю о том, как работают NTFS или другие файловые системы M $, ваш вопрос, как я понял, касался файловых систем Linux / UNIX. Насколько я знаю, все родные файловые системы Linux и UNIX работают таким образом. Обратите внимание, что поддержка NTFS в Linux может быть ограничена, в зависимости от вашего дистрибутива. Bob 9 лет назад 0
Не могли бы вы объяснить, что в метаданных необходимо сохранить? Bob 9 лет назад 0

Похожие вопросы