Как мне создать файл с определенным номером инода?

Как я могу создать файл в файловой системе ext3 с определенным номером inode? (например: я хочу создать файл с номером inode = 12253)

3 ответа

Я не думаю, что есть какой-либо программный способ запрашивать конкретный номер инода при создании файла из пространства пользователя. Кроме того, чтобы быть видимым в stat() результаты, номера инодов не имеют значения в пространстве пользователя; они являются частью внутренних данных бухгалтерии файловой системы, так же как и номера блоков, в которых размещается содержимое файла.

Вы могли бы, вероятно, использовать debugfs "изменить" номер инода существующего файла, скопировав содержимое одного инода в другой, затем обновив любые записи каталога, чтобы они указывали на новый инод, и освободив старый. Таким образом, вы можете создать свой файл с любым номером инода, а затем "изменить" его на нужный. Это должно быть сделано с особой осторожностью, поскольку ошибки могут привести к повреждению файловой системы и потере данных. Вам также придется учитывать возможность того, что желаемый номер вашего inode уже используется другим файлом.

Это довольно низкое число, так что скорее всего, оно уже используется; если нет, вы можете запустить скрипт Bash для создания нескольких тысяч файлов: что-то вроде for i in $(seq 1 12000); do touch $i.txt; done, Затем найдите тот, который вы хотите: find / -inum 12253и переименуйте его в то, что вы хотите, и вставьте в него, что вы хотите. Если вы не перезаписываете выделенное пространство, в этом случае, скорее всего, будет создан новый индекс, который должен это сделать. Это небрежное решение, и должен быть лучший способ.

Номер индекса присваивается системой. Код пользователя не может указать его при создании файла.

Другие вопросы по тегам