Cómo convertir archivos gz (gzip) existentes a rsyncable

Pregunta:

Estoy usando rsync para hacer una copia de seguridad de un repositorio que contiene muchos archivos gz, incluidos muchos nuevos cada día. La copia de seguridad de rsync avanza más lentamente de lo que debería porque estos archivos gz no se compilan con la opción –rsyncable de gzip (lo que hace que los archivos gz sean mucho más compatibles con rsync sin aumentar significativamente su tamaño ni afectar su compatibilidad). Y no puedo solucionar el problema en el momento de la creación porque los archivos son generados por un script de Python (rdiff-backup) que usa el módulo gzip de Python y esto no es compatible con un equivalente a –rsyncable de gzip.

Entonces, antes de ejecutar rsync, puedo identificar cualquier archivo gz nuevo en los datos de origen (es decir, nuevo desde la última vez que se ejecutó rsync). Ahora quiero 're-gzip' estos archivos para que estén gzip en formato rsyncable. Entonces puedo ejecutar rsync desde la fuente optimizada.

Creo que esto significa ejecutar cada archivo a través de gunzip y luego gzip –rsyncable, pero no estoy muy seguro de cómo hacerlo de una manera que no corra el riesgo de perder datos o metadatos. Sugerencias recibidas con gratitud.

Respuesta:

#! /bin/bash

set -euo pipefail

##  TOKEN's creation time marks the time since last recompression
TOKEN=.lastRecompression   

if [ -f ${TOKEN} ]
then
    find -name '*.gz' -cnewer "${TOKEN}"
else
    # Process all compressed files if there is no token.
    find -name '*.gz'
fi | while read f
do
    # Do it in two steps
    gunzip < "$f" | gzip --rsyncable > "$f.tmp"

    # Preserve attributes
    cp "$f" "$f.tmp" --attributes-only

    # and rename atomically.
    # set -e ensures that a problem in the previous step 
    # will stop the full script. 
    mv -v "$f.tmp" "$f"
done

# Update the token
touch ${TOKEN}

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım