Preservar los enlaces simbólicos de destino existentes con rsync

9

Estoy usando rsync (1) para mantener actualizado un repositorio local de Debian. Recientemente, el disco que estoy usando para almacenarlo comenzó a quedarse sin espacio, así que decidí usar enlaces simbólicos para permitirme mover algunos de los directorios a otro disco de tamaño similar.

Desafortunadamente, parece que rsync está eliminando los enlaces simbólicos y rellenando el disco casi lleno. Después de algunas búsquedas, descubrí la --keep-dirlinksopción de rsync, que parece hecha a medida para solucionar mi problema.

Solo que no. Los enlaces simbólicos en el objetivo todavía se están eliminando.
Aquí está mi comando rsync:

rsync --recursive --keep-dirlinks --links --hard-links --times --verbose \
 --delete --delete-excluded $EXCLUDE $SOURCE_EXCLUDE \
 $RSYNC_HOST::$RSYNC_DIR/pool/ $TO/pool/

Los EXCLUDE se expanden para eliminar una gran cantidad de arquitecturas que no me interesan, en la línea de --exclude binary-alpha/ --exclude disks-alpha .... Antes de que se inicie rsync, el directorio de mi grupo se ve así:

lrwxrwxrwx  1 root root   23 2014-09-22 13:58 contrib -> /u2/debian/pool/contrib
drwxrwxr-x 62 root root 4096 2012-04-09 03:02 main
lrwxrwxrwx  1 root root   24 2014-09-22 13:58 non-free -> /u2/debian/pool/non-free

Una vez que se inicia el rsync, obtengo esto:

receiving incremental file list
deleting non-free
deleting contrib
./
contrib/
contrib/a/

Y así sucesivamente, y los enlaces simbólicos se reemplazan con directorios llenos de archivos.

¿Están interfiriendo algunas de las otras opciones de rsync --keep-dirlinks? ¿Cuáles no puedo combinar? ¿O es el orden de opciones lo que está causando mi problema?

unkilbeeg
fuente

Respuestas:

7

Las opciones --deletey --delete-excludedinterfieren con su plan, ya que notan que el enlace simbólico no está en la fuente y, por lo tanto, lo eliminan.

Esto solo sucede cuando le dice rsyncque copie todo el directorio con la source/ targetnotación (la barra inclinada posterior a la fuente). Si usa source/* targeten su lugar, el shell expandirá la lista de archivos y directorios para copiar y esto no sucederá (pero intente --dry-runprimero).

Sin embargo, en lugar de esta configuración frágil, recomendaría combinar los dos discos con la ayuda de LVM para formar un gran volumen que no necesite este tipo de trucos.

Sven
fuente
¡Gracias! He cambiado el guión y parece estar funcionando. Esto me dará un poco de tiempo: el disco seguirá tendiendo a llenarse, pero tengo tiempo para cambiar las cosas. Tienes razón al combinar los dos con LVM. Ya lo había estado considerando, pero arrastrando mis pies ya que significa mover cosas y luego volver a moverlas. Sin embargo, mejor antes que después, supongo.
unkilbeeg
Tuve un problema similar que se resolvió usando --keep-dirlinks sin la opción -a que estaba usando. Molestia "menor" en cuanto al tercer párrafo, los sistemas de archivos que estoy usando son "discos" SAN de 64 T bytes. Si bien es posible que los múltiplos se puedan combinar en unidades aún más grandes, digamos 256 unidades de terabytes, espero que la gente de administración tenga razones para los tamaños que tenemos. A veces, lo que parece un "truco" es simplemente descubrir cómo vivir con lo que tienes.
user1683793
Mi solución definitiva fue un nuevo hardware. La máquina original era lo suficientemente antigua como para admitir solo unidades IDE, y la unidad más grande que podía obtener en esos días era 512G.
unkilbeeg