Si conozco el nodo de índice (inodo) de un archivo, pero no sé su ruta (o cualquiera de sus rutas), ¿es posible crear un enlace directo a ese inodo directamente?
Podría encontrar el archivo usando sudo find / -inum 123546
y luego crear un enlace duro, pero eso sería demasiado lento para mi aplicación.
Nota: estoy usando un sistema de archivos ext4.
Respuestas:
AFAIK, no con la API del núcleo. Si existiera una interfaz de este tipo, tendría que limitarse al superusuario, ya que de lo contrario eso permitiría a cualquiera acceder a los archivos en directorios a los que no tiene acceso de búsqueda.
Pero podría usarlo
debugfs
en el sistema de archivos (una vez que esté desmontado) para hacerlo (suponiendo que tenga acceso de escritura al dispositivo de bloqueo).(reemplace
/dev/block/device
con el dispositivo de bloque real en el que reside el sistema de archivos).Luego, cuando se le solicite
(con los corchetes angulares, reemplazando 123 con el número de inodo real) para verificar que el archivo existe (el inodo tiene un recuento de enlaces mayor que 0) y no es un directorio.debugfs
, ingreseSi todo está bien, ingrese:
para crear el enlace duro (tenga en cuenta que la ruta es relativa a la raíz del sistema de archivos). Seguido por: para incrementar el recuento de enlaces (presione Enterpara todos los campos, excepto el recuento de enlaces donde desee agregar 1 al valor actual).fuente
Dependiendo de su caso de uso, otro enfoque podría ser recopilar primero todos los candidatos de archivo en un directorio al vincularlo y luego vincular los archivos que le interesan particularmente.
Como
(suponiendo que sus números de inodo sean todos inferiores a 1,000,000, cree más directorios si es necesario).
Posteriormente, sus inodes se agrupan en 1000 y se recogen en el
by-inode/
árbol. Desde allí, puede vincularlos según sea necesario.Sin embargo,
<path>
tenga en cuenta que significa que eliminar archivos debajo no reclamará el espacio debido a ese enlace extra duro.fuente