Eliminando enlaces duros en GNU/Linux y una charla sobre inodes
Hola, soy un inútil.
Hace mucho tiempo, cuando intenté crear un enlace con el comando ln, olvidé accidentalmente eliminar la opción -s y se creó un enlace duro, así que eliminaré los enlaces duros innecesarios.
Crear enlaces duros
Si ejecutas el comando ln sin opciones, se creará un enlace duro.
alleycat:[haturatu]:~/git/hardlink$ ls
alleycat:[haturatu]:~/git/hardlink$ touch hardlink1
alleycat:[haturatu]:~/git/hardlink$ echo "You are an idiot" >> hardlink1
alleycat:[haturatu]:~/git/hardlink$ cat hardlink1
You are an idiot
alleycat:[haturatu]:~/git/hardlink$ ls -la
合計 12
drwxr-xr-x 2 haturatu haturatu 4096 1月 12 15:00 .
drwxr-xr-x 114 haturatu haturatu 4096 1月 12 15:00 ..
-rw-r--r-- 1 haturatu haturatu 17 1月 12 15:01 hardlink1
Intenté crear un archivo como se muestra arriba.
alleycat:[haturatu]:~/git/hardlink$ ln hardlink1 hardlink2
alleycat:[haturatu]:~/git/hardlink$ ls -la
合計 16
drwxr-xr-x 2 haturatu haturatu 4096 1月 12 15:02 .
drwxr-xr-x 114 haturatu haturatu 4096 1月 12 15:00 ..
-rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink1
-rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink2
Con esto, se creó un enlace duro.
Y ahora, veamos la siguiente salida estándar.
-rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink1
-rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink2
El 2 en -rw-r--r-- 2 es el número de enlaces duros. Como puedes ver, el valor ha aumentado en comparación con antes de crear el enlace duro.
Y dado que esto es solo un enlace, no ejerce presión sobre el espacio en disco en sí. Almacena un único dato, y el número de inode es el mismo, apuntando al mismo archivo.
Verificamos el número de inode con la opción -i.
alleycat:[haturatu]:~/git/hardlink$ ls -lia
合計 16
13238408 drwxr-xr-x 2 haturatu haturatu 4096 1月 12 15:02 .
11406555 drwxr-xr-x 114 haturatu haturatu 4096 1月 12 15:00 ..
13265123 -rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink1
13265123 -rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink2
¿Qué es un inode?
Esto depende del sistema de archivos, por lo que lo anterior es en un entorno GNU/Linux, y en sistemas de archivos tipo BSD podría ser vnode, o znode en ZFS, etc., lo cual es un poco diferente, pero históricamente, creo que es correcto imaginarlo como una extensión del sistema de archivos UNIX original.
A diferencia de los enlaces simbólicos, si eliminas hardlink1, hardlink2 permanecerá, y si eliminas hardlink2, hardlink1 permanecerá. En este sentido, la explicación sería que el sistema de archivos gestiona el archivo en sí, pero sigue siendo un poco complicado, ¿verdad?
Sin embargo, visto así, los enlaces duros son útiles, pero mientras que los enlaces simbólicos pueden referenciar archivos en discos diferentes, los enlaces duros no pueden crearse en discos diferentes.
En pocas palabras, basándose en la explicación anterior, el sistema de archivos se basa en el criterio de inode de un solo disco, por lo que si se trata de un disco diferente, está fuera de la jurisdicción de ese sistema de archivos y no se puede referenciar estructuralmente por capas.
Por lo tanto, si existe en un disco diferente, surge la necesidad de crear un enlace simbólico.
Y, en términos de sistemas de archivos, esto se utiliza comúnmente durante la recuperación de discos, cuando se hace referencia a la información de inode anterior para identificar qué archivos con qué número de inode se crearon o eliminaron.
Aquí hay una trampa: si un archivo es sobreescrito, este número de inode también se actualizará. Es decir, al crear scripts de copia de seguridad, es posible que sea necesario tener en cuenta la creación de scripts que no incluyan procesos de sobrescritura. (Yo lo hice mal una vez).
Identificar archivos con el mismo número de inode
Puedes verificarlo con el comando find.
alleycat:[haturatu]:~/git/hardlink$ find . -inum 13265123
./hardlink2
./hardlink1
Ahora, intentemos eliminar hardlink1.
alleycat:[haturatu]:~/git/hardlink$ rm -i hardlink1
rm: 通常ファイル 'hardlink1' を削除しますか? y
alleycat:[haturatu]:~/git/hardlink$ ls -lai
合計 12
13238408 drwxr-xr-x 2 haturatu haturatu 4096 1月 12 15:23 .
11406555 drwxr-xr-x 114 haturatu haturatu 4096 1月 12 15:00 ..
13265123 -rw-r--r-- 1 haturatu haturatu 17 1月 12 15:01 hardlink2
alleycat:[haturatu]:~/git/hardlink$ cat hardlink2
You are an idiot
Con esto, el valor del enlace duro también se convirtió en 1, y se confirmó que hardlink2, que originalmente se creó como un enlace de hardlink1 con ln hardlink1 hardlink2, existe con la misma información que hardlink1 y contiene los mismos datos.
En términos de uso práctico
Lo he tocado después de mucho tiempo, pero si quieres copiar archivos grandes dentro del mismo disco y reducir el consumo de espacio, parece que es mejor usar enlaces duros.
Bueno, puede que no sea algo que uses conscientemente muy a menudo, pero creo que es interesante porque te permite entender un poco la estructura del sistema de archivos.
Hasta la próxima.
Saludos.