Как создать файл в файловой системе ext3 с определенным номером inode? (например: я хочу создать файл с inode-number = 12253)
Как создать файл с определенным номером inode?
Ответ 1
Я не думаю, что есть какой-либо программный способ запросить определенный номер inode при создании файла из пользовательского пространства. Помимо видимости результатов stat()
, номера inode не имеют никакого значения в пользовательском пространстве; они являются частью внутренних учетных данных файловой системы, точно так же, как номера блоков, на которые выделено содержимое файла.
Возможно, вы могли бы использовать debugfs
для "изменения" существующего номера файла inode, скопировав содержимое одного inode на другой, а затем обновив любые записи в каталоге, чтобы указать на новый индексный дескриптор и освободить старый. Таким образом, вы можете создать свой файл с любым номером inode, а затем "изменить" его на желаемый. Однако это должно быть сделано с особой осторожностью, поскольку ошибки могут привести к повреждению файловой системы и потере данных. Вам также необходимо учитывать возможность того, что ваш желаемый номер inode уже используется другим файлом.
Ответ 2
Номер inode присваивается системой. Пользовательский код не может указать его при создании файла.
Ответ 3
Это довольно небольшое количество, поэтому шансы на это уже используются; Если нет, вы можете запустить Bash script, чтобы создать несколько тысяч файлов: что-то вроде for i in $(seq 1 12000); do touch $i.txt; done
. Затем найдите тот, который вы хотите: find / -inum 12253
, и переименуйте его во все, что хотите, и поставьте в нем то, что вы хотите. Если вы не перезаписываете выделенное пространство, в этом случае скорее всего будет создан новый индексный дескриптор, который должен это сделать. Это небрежное решение, и должен быть лучший способ.