Где хранятся свойства файла в реальной файловой системе?
Я создаю программу, которая принимает hexdump файла, чтобы я мог затем передать его куда-нибудь и восстановить файл, однако hexdump состоит только из содержимого файла, мне также нужно получить свойства файла, поэтому где Я получаю свойства этого файла, а затем применяю их к новому файлу, который я создаю из этого hexdump? Я использую bash для этого, но на самом деле речь идет не о коде, а о том, где его найти, хотя вы могли бы рассказать о коде, потому что, очевидно, мне понадобятся некоторые команды. Я использую Ubuntu GNOME 15.04 с GNOME Shell и GNOME 3.16.
2 ответа
Атрибуты файла хранятся в inode. Атрибуты, которые хранит каждый inode, перечислены в Спецификации Inode POSIX. Когда мы используем ls -l
или же stat
или любая другая программа, которая получает нам атрибут файла, использует stat(2)
системный вызов внизу.
Теперь иноды являются зависимым от файловой системы свойством, они создаются как фиксированные числа при создании файловой системы. Есть программа dumpe2fs
читать суперблок ext*
файловая система, чтобы мы могли получить представление, например:
sudo dumpe2fs -h /dev/sda1
Теперь давайте проверим свойства, связанные с inode:
$ sudo dumpe2fs -h /dev/sda1 | grep -i 'inode.*:'
Inode count: 9379840
Free inodes: 9297243
Inodes per group: 8192
Inode blocks per group: 512
First inode: 11
Inode size: 256
Journal inode: 8
Как вы можете видеть, вы получаете достаточно информации, такой как первый индекс, размер индекса, количество индексов и т. Д. Если вы умножаете Inode count
а также Inode size
Вы получаете, сколько зарезервировано для inode.
Программы для копирования файлов, такие как cp
или же rsync
иметь -a
(архив), чтобы скопировать атрибуты, хранящиеся в inode для файла, поэтому вам нужно искать те или похожие опции, доступные в программе, которую вы, вероятно, будете использовать.
Для сохранения атрибутов файлов и последующего их использования вы можете проверить этот ответ у могущественного Жиля.
Это может быть не полный ответ, но это то, что я смог найти в своем исследовании.
Атрибуты файла хранятся в inodes
и "таблицы inode" обычно разбросаны по всей файловой системе. В общем, чтобы найти, где у вас есть таблицы Inode (по крайней мере, в ext3
файловая система), вы можете запустить:
sudo dumpe2fs /dev/<device> | fgrep 'Inode table'
и вы можете сделать hexdump необработанных данных в блоке, где находятся inode (обратите внимание, я не пробовал эту команду!):
sudo dd if=/dev/<device> ibs=4096 skip=<inode block> count=1 | hexdump
Заменить <device>
и <inode block>
со смещением блока к таблице инодов, которую вы хотите посмотреть.
источник: LinuxQuestions, ТАК вопрос