2016-06-17 2 views
2

Я узнал, как работает файловая система Linux, и я столкнулся с концепцией inodes. Я написал программу C, чтобы прочитать конкретный индексный дескриптор и распечатать его содержимое.Функция C для изменения inode?

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

Как я могу это достичь?

+0

Как вы прочитали конкретный индекс и распечатали его содержимое? Я думаю, вы бы проанализировали метаданные файловой системы, такие как superblock, root inode для этого. – Fazlin

+0

@Fazlin: Да, я сделал то же самое – harrythomas

+0

После того, как вы проанализировали метаданные файловой системы, чтобы прочитать содержимое inode, с какими проблемами вы сталкиваетесь при написании его обратно? Вы узнаете смещение, из которого вы прочитали конкретный индекс. Измените локальный struct inode и запишите его с тем же смещением. – Fazlin

ответ

2

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

Если вы говорите о i-узлах, то вы находитесь в Linux и файловой системе ext, поэтому имя диска будет чем-то вроде /dev/sdb. Будьте осторожны: это весь диск, а не один раздел/том/фрагмент внутри него. Это можно назвать /dev/sdb2 или что-то - разные типы Linux называет их разными вещами.

Как только вы откроете раздел, вы можете обрабатывать его как файл (очень большой!): Последовательность байтов, которые случайно совпадают с секторами на жестком диске. Вы можете искать любую позицию и читать данные там. Если вы хотите перезаписать его, вы можете - но, как вы говорите:

Вы можете полностью уничтожить данные на своем жестком диске!

Возможно, смонтировать USB-накопитель (на нем ничего не значимого) и поэкспериментировать с этим? И сделайте ОЧЕНЬ убедитесь, что вы открыли имя ITS, а не имя своего основного диска!

+0

Итак, вы говорите, что мне нужно выяснить, какой блок жесткого диска хранится в этом inode, а затем переписать этот конкретный блок? И да, я собирался попробовать его на отдельном USB-диске. – harrythomas

+2

Или создайте файл, содержащий FS => http://askubuntu.com/questions/85977/how-do-i-create-a-file-and-mount-it-as-a-filesystem – Garf365

+0

@Harry Это точно то, что я говорю. И чтобы знать правильный i-узел, вам нужно проанализировать дерево каталогов, чтобы получить корневой i-узел файла, а оттуда - массивы массивов, массивы массивов и массивы массивов массивов чтобы попасть в i-узел, представляющий интерес. Вы в основном должны grok всей структуры файловой системы ... –

Смежные вопросы