Se conheço o nó de índice (inode) de um arquivo, mas não conheço seu caminho (ou qualquer um de seus caminhos), é possível criar um link físico para esse inode diretamente?
Eu poderia encontrar o arquivo usando sudo find / -inum 123546
e, em seguida, criar um link físico, mas isso seria muito lento para o meu aplicativo.
NB eu estou usando um sistema de arquivos ext4.
Respostas:
AFAIK, não com a API do kernel. Se essa interface existisse, teria que ser limitada ao superusuário, caso contrário, isso permitiria que qualquer pessoa acessasse arquivos em diretórios aos quais não tem acesso de pesquisa.
Mas você pode usar
debugfs
no sistema de arquivos (uma vez desmontado) para fazer isso (supondo que você tenha acesso de gravação ao dispositivo de bloco).(substitua
/dev/block/device
pelo dispositivo de bloco real no qual o sistema de arquivos reside).Em seguida, no prompt de
(com os colchetes angulares, substituindo 123 pelo número real do inode) para verificar se o arquivo existe (inode possui uma contagem de links maior que 0) e não é um diretório.debugfs
, digiteSe tudo estiver bom, digite:
para criar o hardlink (observe que o caminho é relativo à raiz do sistema de arquivos). Seguido por: para aumentar a contagem de links (pressione Enterpara todos os campos, exceto a contagem de links em que você deseja adicionar 1 ao valor atual).fonte
Dependendo do seu caso de uso, outra abordagem pode ser a primeira a coletar todos os candidatos a arquivos em um diretório, vinculando-o com força e, em seguida, vinculando com força os arquivos nos quais você está particularmente interessado.
Tal como
(supondo que seus números de inode sejam todos inferiores a 1.000.000, crie mais diretórios, se necessário).
Posteriormente, seus inodes são agrupados em 1000 e coletados na
by-inode/
árvore. A partir daí, você pode vinculá-los conforme necessário.Observe que isso significa que a exclusão de arquivos em
<path>
não recuperará o espaço por causa desse link físico extra.fonte