![Desreferenciación de enlaces físicos](https://rvso.com/image/23933/Desreferenciaci%C3%B3n%20de%20enlaces%20f%C3%ADsicos.png)
En la página del manual del tar
comando, aparece una opción para seguir enlaces físicos.
-h, --dereference
follow symlinks; archive and dump the files they point to
--hard-dereference
follow hard links; archive and dump the files they refer to
¿Cómo se tar
sabe que un archivo es un enlace físico? Cómo lo haceseguir¿él?
¿Qué pasa si no elijo esta opción? Cómo lo haceno¿desreferencia dura?
Respuesta1
De forma predeterminada, si indica tar
archivar un archivo con vínculos físicos y se incluye más de uno de esos vínculos entre los archivos que se van a archivar, archiva el archivo solo una vez y registra el segundo (y cualquier nombre adicional) como vínculo físico. Esto significa que cuando extraiga ese archivo, se restaurarán los enlaces físicos.
Si usa la --hard-dereference
opción, entonces tar
¿no?nopreservar los enlaces físicos. En cambio, los trata como archivos independientes que tienen el mismo contenido y metadatos. Cuando extraigas el archivo, los archivos serán independientes.
Nota: Reconoce enlaces físicos comprobando primero el recuento de enlaces del archivo. Registra el número de dispositivo y el inodo de cada archivo con más de un enlace y lo utiliza para detectar cuándo se vuelve a archivar el mismo archivo. (Cuando usas --hard-dereference
, no hace esto.)
Respuesta2
Puede distinguir un archivo con vínculos físicos de un archivo sin vínculos físicos con el "recuento de vínculos". Veo dos formas de obtener esto desde la línea de comando:
% stat original
File: ‘original’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 804h/2052d Inode: 932815 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 500/ bediger) Gid: ( 1000/ bediger)
Access: 2012-07-13 22:13:52.317101530 -0600
Modify: 2012-07-13 22:13:52.317101530 -0600
Change: 2012-07-13 22:14:08.050894536 -0600
Birth: -
O
1010 % ls -li
total 0
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 original
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 secondary
Ese '2' solitario antes de "bediger" es el recuento de enlaces. Tenga en cuenta que ambos nombres de archivo tienen el mismo número de inodo, 932815.
Estoy seguro de que ambos comandos obtienen el recuento de enlaces del campo st_nlink de struct stat, que se completa mediante una stat()
llamada al sistema.
Por lo que puedo decir, ejecutar tar
with --hard-dereference
significa que en lugar de obtener un solo archivo con dos nombres de archivo distintos (como en el ejemplo anterior), obtienes dos archivos, cada uno con un solo nombre de archivo. tar
probablemente verifica el recuento de enlaces en cada archivo y, de forma predeterminada, al extraer, crea un enlace físico en el segundo nombre de archivo que tiene para los datos del archivo vinculado. Cuando se llama --hard-dereference
durante la creación del archivo, parece crear un archivo completamente nuevo para el segundo nombre de archivo cuando tar
se ejecuta la invocación de extracción.