Antecedentes
¿Cuál es el método "correcto" para usar rsync para respaldar datos? La razón por la que solicito el método "correcto" es porque mi experiencia anterior con el uso de rsync ha resultado en problemas relacionados con permisos, archivos / carpetas y marcas de tiempo. Por lo tanto, esta pregunta busca comprender cómo puedo usar rsync para hacer una copia de seguridad de los datos sin encontrarme con ningún permiso, máscara de archivo / carpeta o problemas relacionados con la marca de tiempo, principalmente cuando rsync se está utilizando en un sistema Windows .
Otra motivación para esta pregunta es asegurarme de no tener problemas con mi problema anterior en el que no podía acceder a ningún archivo en mi disco externo que estaba respaldado con rsync a través de cygwin. Esto fue una pesadilla porque realmente había perdido datos en mi PC principal e intentaba restaurarlos desde la copia de seguridad.
A continuación hay problemas similares que he encontrado al usar rysnc:
- No se puede acceder a ningún archivo en la unidad externa que se realizó una copia de seguridad utilizando rsync Rsync y la copia de seguridad basada en Cygwin en Windows da permiso denegado errores
- No se puede conservar la marca de tiempo https://unix.stackexchange.com/questions/61586/how-to-tell-rsync-to-preserve-time-stamp-on-files-when-source-tree-has-a-mounted
- rsync: problema fallido de mkstemp https://stackoverflow.com/questions/11039559/rsync-mkstemp-failed-permission-denied-13
Mi comprensión del uso de rsync es intermedia y me he referido a las guías que se enumeran a continuación. Sin embargo, mi mayor confusión sobre el uso de rsync proviene de los permisos, el enmascaramiento de archivos / carpetas, Posix, etc.
Requisitos / supuestos
- Quiero usar rsync en el contexto de "copia de seguridad" y NO en el contexto de "sincronización". A menudo, otros usuarios que hacen preguntas relacionadas con rsync pueden estar interesados en "sincronizar" los datos para asegurarse de que tengan una copia de trabajo de los archivos en otra PC sincronizada. Sin embargo, mi intención no es "sincronizar" sino simplemente "hacer una copia de seguridad", de modo que si algo le sucede a mi PC, pueda obtener una última copia de seguridad y restaurarla.
- Los archivos originales que necesitan copia de seguridad podrían existir en cualquier sistema operativo (por ejemplo: Windows, Ubuntu, MacOS), pero principalmente en Windows.
- En Windows, rsync se usa usando Windows Subsystem para Linux (WSL) y NO a través de cygwin
- El destino de la copia de seguridad podría ser una unidad externa formateada como NTFS, FAT32 o exFAT o puede ser una unidad de red (por ejemplo, Samba share).
- Esto no es obligatorio, pero el destino podría estar conectado mediante SSH
Mi método actual y problemas
Estoy usando rsync a través del subsistema de Windows para Linux (WSL) en Windows 10. A continuación se muestran ejemplos de problemas con los que me he encontrado:
Ejemplo 1: no funciona
rsync -avhP --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
Este método da como resultado que NO se transfieran archivos y errores como los siguientes:
rsync: chgrp "/mnt/my_usb_mount/ProjectA/src" failed: Operation not permitted (1)
y
rsync: mkstemp "/mnt/my_usb_mount/ProjectA/src/.mydata.json.6cfTCf" failed: Operation not permitted (1)
Ejemplo 2: trabajando parcialmente
rsync -avhP --no-p --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
o
rsync -avhP --no-p --chmod=ugo=rwX --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
Este método de uso de rysnc da como resultado la transferencia de archivos, pero la marca de tiempo (creada, modificada, accedida) está configurada en el momento de la transferencia. Si ejecuto el comando rsync nuevamente, todos los archivos se detectarán como modificados y se volverán a transferir debido a la marca de tiempo incorrecta. Además obtengo errores como a continuación:
rsync: chgrp "/mnt/my_usb_mount/ProjectA/src" failed: Operation not permitted (1)
Ejemplo 3: funcionando correctamente.
sudo rsync -avhP --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
Este método funciona perfectamente, sin embargo, no entiendo por qué tengo que usar sudo
? ¿Es porque estoy usando rsync en Windows a través de WSL? ¿Tendría que usarlo sudo
si estuviera haciendo una copia de seguridad de archivos desde una PC con Linux (por ejemplo: Ubuntu)?
Aunque el ejemplo 3 es una solución que funciona, todavía tengo muchas preguntas:
- ¿Cómo sé cuándo
sudo
se requiere? - ¿Cuándo uso
--no-p
o--chmod=ugo=rwX
- ¿Qué pasa si no tengo permisos para usar
sudo
? - ¿Funcionaría si estuviera haciendo una copia de seguridad de los archivos en una unidad de red?
- ¿Qué pasa si estoy usando SSH?
- Al usar rsync desde Windows a través de WSL, ¿alguna vez tendré problemas de permisos extraños o de máscaras de archivos / carpetas como lo hice anteriormente ?
Respuestas:
Ntfs y fat no se preocupan por el permiso de Linux, debe hacer que sea una copia de seguridad en una partición ext4
o hacer una copia de seguridad y comprimirlo en tar.gz y luego descomprimirlo en un archivo de sistema Linux y restaurarlo
fuente