Если я знаю индексный узел (inode) файла, но я не знаю его пути (или любого из его путей), возможно ли создать жесткую ссылку на этот inode напрямую?
Я мог бы найти файл, используя, sudo find / -inum 123546
а затем создать жесткую ссылку, но это было бы слишком медленно для моего приложения.
NB Я использую файловую систему ext4.
Ответы:
AFAIK, а не с API ядра. Если бы такой интерфейс существовал, он должен был быть ограничен суперпользователем, так как в противном случае это позволило бы любому получить доступ к файлам в каталогах, к которым у них нет доступа для поиска.
Но вы можете использовать это
debugfs
в файловой системе (если она отключена) (если у вас есть права на запись на блочное устройство).(замените
/dev/block/device
фактическим блочным устройством, в котором находится файловая система).Затем по запросу
(с угловыми скобками, заменяя 123 на фактический номер inode), чтобы проверить, что файл существует (inode имеет счетчик ссылок больше 0) и не является каталогом.debugfs
введитеЕсли все хорошо, введите:
создать жесткую ссылку (обратите внимание, что путь относительно корня файловой системы). С последующим: чтобы увеличить количество ссылок (нажмите Enterдля всех полей, кроме количества ссылок, где вы хотите добавить 1 к текущему значению).источник
В зависимости от вашего варианта использования, другой подход может состоять в том, чтобы сначала собрать все файлы-кандидаты в один каталог, жестко связав его, а затем жестко связав файлы, которые вас особенно интересуют.
Такие как
(при условии, что все номера ваших инодов меньше 1 000 000, при необходимости создайте больше каталогов).
После этого ваши иноды группируются по 1000 и собираются в
by-inode/
дереве. Оттуда вы можете связать их по мере необходимости.Обратите внимание, что это означает, что удаление файлов в разделе
<path>
не освободит место из-за этой дополнительной жесткой ссылки.источник