Desreferenciación de enlaces físicos

Desreferenciación de enlaces físicos

En la página del manual del tarcomando, 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 tarsabe 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 tararchivar 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-dereferenceopció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 tarwith --hard-dereferencesignifica 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. tarprobablemente 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-dereferencedurante la creación del archivo, parece crear un archivo completamente nuevo para el segundo nombre de archivo cuando tarse ejecuta la invocación de extracción.

información relacionada