¿Cómo mover directorios que tienen archivos en común de una a otra partición?
Supongamos que tenemos una partición montada en /mnt/X
directorios que comparten archivos con enlaces duros. Cómo mover dichos directorios a otra partición, que sea /mnt/Y
con la preservación de esos enlaces duros.
Para una mejor ilustración, ¿qué quiero decir con "directorios que comparten archivos en común con enlaces duros"? Aquí hay un ejemplo:
# let's create three of directories and files
mkdir -p a/{b,c,d}/{x,y,z}
touch a/{b,c,d}/{x,y,z}/f{1,2,3,4,5}
# and copy it with hardlinks
cp -r -l a hardlinks_of_a
Para ser más específicos, supongamos que el tamaño total de los archivos es 10G y cada archivo tiene 10 enlaces duros. La pregunta es cómo moverlo al destino con el uso de 10G (alguien podría decir sobre copiarlo con 100G y luego ejecutar la deduplicación; no es lo que estoy preguntando)
rsync tiene una opción
-H
u--hard-links
opción para esto, y tiene los beneficios habituales de rsync de poder detenerse y reiniciarse, y volver a ejecutarse para tratar eficientemente cualquier archivo que se haya cambiado durante / después de la ejecución anterior.Lea la
rsync
página de manual y busque -H. Hay muchos más detalles sobre advertencias particulares.fuente
man rsync
: Comenzando con rsync 3.0.0, el algoritmo recursivo utilizado ahora es un escaneo incremental que usa mucha menos memoria que antes y comienza la transferencia después de que se haya completado el escaneo de los primeros directorios. Este escaneo incremental solo afecta nuestro algoritmo de recursión y no cambia una transferencia no recursiva. También solo es posible cuando ambos extremos de la transferencia son al menos la versión 3.0.0. Tenga en cuenta que ambos--delete-before
y--delete-after
deshabilitar este algoritmo mejorado.rsync
es una herramienta increíblemente útil, no siempre es la mejor herramienta para cada trabajo. En estos días, prefiero usar conjuntos de datos ZFS para poder hacer instantáneas yzfs send
ellos, principalmente uso rsync en sistemas de archivos que no son ZFS.btrfs
tiene una instantánea similar + capacidad de envío.Tercera respuesta: la manera POSIX
POSIX no ha estandarizado la
tar
utilidad, aunque sí ha estandarizado eltar
formato de archivo. Se llama a la utilidad POSIX para manipular archivos tarpax
y tiene la característica adicional de poder hacer la operación de empaque y desempaque en un solo proceso.fuente
Segunda respuesta: La antigua forma de UNIX
Cree un archivo tar en el directorio de origen, envíelo por una tubería y descomprímalo en el directorio de destino.
fuente
tar
conserva los enlaces duros. En GNU tar, al menos, puede deshabilitar este comportamiento con--hard-dereference
tar x
que no tiene la lista completa de archivos ya que los archivos aún se están canalizando desdetar c
. Probablemente, si guardó todo el archivo antes de extraerlo, estaría bien. Estaría muy feliz si alguien pudiera confirmar esa teoría.Fuente: http://www.cyberciti.biz/faq/linux-unix-apple-osx-bsd-rsync-copy-hard-links/
Lo que necesita para hacer una copia exacta es
fuente