Estoy tratando de tomar instantáneas de una carpeta masiva regularmente.
He leído aquí: http://www.mikerubel.org/computers/rsync_snapshots/#Incremental
que cp -al
toma una instantánea de una carpeta simplemente copiando los enlaces duros.
Todo eso es genial, pero el problema es que en esta instantánea, si cambio un archivo, cambia en todas las instantáneas. En cambio, lo que me gustaría es que el sistema cree un nuevo archivo en el cambio y lo vincule a eso. De esa manera, cada instantánea no se volvería inválida en una edición del primer archivo.
¿Cómo puedo lograr eso?
PD Lo intenté rsync -a --delete --link-dest=../backup.1 source_directory/ backup.0/
, pero tiene el mismo problema.
rsnapshot
es buenoLo que está buscando es una forma de copia en escritura , donde varios archivos que tienen el mismo contenido usan el mismo espacio en el disco hasta que se modifique uno de ellos. Los enlaces duros solo implementan copia en escritura si la aplicación que escribe borra el archivo y crea un nuevo archivo con el mismo nombre (que generalmente se hace creando un nuevo archivo con un nombre diferente y luego moviéndolo a su lugar). Evidentemente, la aplicación que está utilizando no está haciendo esto: está sobrescribiendo el archivo existente.
Algunas aplicaciones se pueden configurar para usar la estrategia de reemplazo. Algunas aplicaciones usan la estrategia de reemplazo por defecto, pero usan la estrategia de sobrescritura cuando ven un archivo con múltiples enlaces duros, precisamente para no romper los enlaces duros. Su técnica de instantánea actual funcionará si puede configurar su aplicación para reemplazarla en lugar de sobrescribirla.
Fl-cow modifica programas para usar sistemáticamente la estrategia de reemplazo en archivos con múltiples enlaces duros.
Alternativamente, puede almacenar sus archivos en un sistema de archivos que realiza copia por escritura o deduplicación, o tiene una función de instantánea, y no se preocupa por los enlaces duros: Btrfs o Zfs . Dependiendo de su esquema de partición, el uso de instantáneas LVM puede ser una opción.
Mi recomendación es utilizar una herramienta de instantánea adecuada. Hacer copias de seguridad confiables es sorprendentemente difícil. Probablemente quieras rsnapshot .
fuente
El siguiente es un script de ruby que escribí que envuelve el "cp -al" y rsync en un script agradable que puede ejecutarse manualmente o vía cron. El destino puede ser local o remoto (a través de ssh):
Ghetto Timemachine
La respuesta básica a su pregunta, como se mencionó en un comentario anterior, la fuente debe mantenerse separada de los enlaces duros. Por ejemplo, suponga una copia de seguridad diaria de su directorio de inicio:
Fuente:
Destino:
Los enlaces duros se crean ejecutando "cp -al" contra la copia de seguridad de ayer. Digamos que es martes por la mañana cuando lo ejecutas:
cd /data/backup/daily
rm -rf tuesday
cp -al monday tuesday
rsync -a --delete /home/flakrat /data/backup/daily/tuesday/
fuente
rdiff-backup parece hacer lo que quieres, échale un vistazo.
Usando rsync primero debe hacer una copia de seguridad completa sin usar enlaces duros. La siguiente copia de seguridad puede apuntar a la copia de seguridad anterior y al enlace rígido. De esa manera, sus copias de seguridad no están vinculadas a sus archivos de trabajo (los que está modificando). Ejemplo. Si mi copia de seguridad anterior era así, la carpeta de copia de seguridad.01 mi script de copia de seguridad incrementaría primero las carpetas renombrándolas por una, de modo que copia de seguridad.01 se convierta en copia de seguridad.02. Luego, el script crea una nueva carpeta vacía llamada backup.01. a continuación, rscync la nueva copia de seguridad en la nueva carpeta y el enlace duro a la copia de seguridad.02 para que solo los archivos nuevos ocupen espacio en la copia de seguridad. El comando rsync se vería así: rsync -rlt sourcepath backuppath / backup.01 --link-dest = backuppath / backup.02
Para que pueda ver, todo el enlace duro está sucediendo en la ruta de respaldo. De esta manera, no tiene que preocuparse por copiar al escribir al modificar archivos en su ruta de origen.
fuente