Usando rsync para respaldar

Actualmente hago una copia de seguridad del contenido de un disco duro externo A (1) borrando todo en el disco duro externo de destino B y (2) copiando todo de A a B (en Finder). El disco duro externo solo contiene "datos básicos" (carpetas, imágenes, videos, documentos, etc.), nada extravagante/raro.

Pero con todas las increíbles herramientas gratuitas que existen, no pude encontrar una decente para hacer una copia de seguridad (se aceptan sugerencias).

Quiero automatizar esto. Después de algunas búsquedas, parece que puedo usar rsync. Entonces quiero automatizar esto usando rsyncpara evitar copiar archivos que ya están en el disco duro de destino (por supuesto, si se ha realizado un cambio, quiero actualizar el archivo/carpeta; lo mismo con archivos/carpetas eliminados o archivos nuevos /carpetas; la idea es imitar lo que suelo hacer manualmente con Finder).

llegué a este punto

rsync -av --progress --delete /Volumes/A/ /Volumes/B

Ahora el registro está lleno de archivos cuyo nombre comienza con .o ._o incluso ._.. ¿Son necesarios?

Pregunta

¿Cómo puedo copiar solo los archivos que importan, dejando atrás todos los que no importan? Por ejemplo, si tengo photo.pngesperaría copiar photo.png, no ._photo.pngo muchos archivos.

¿Qué --excludeo --exclude-fromse puede usar de forma segura en una Mac? Puede ser una buena regla "simplemente copiar cualquier cosa que muestre Finder", que es lo que copiaría si pasara manualmente por todas las carpetas.

 Pregunta adicional

¿Es -av --progress --deletesuficiente? ¿Estoy cometiendo un delito o arriesgando algunos datos? ¿Qué opciones usarías?

Por favor, respalda tu respuesta con algunos argumentos, te lo agradecería.

Estoy buscando una forma de automatizar rsyncque parezca bastante poderosa y de uso gratuito.

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .
En la estrategia descrita en el primer párrafo, ¿qué sucede si después de (1) – eliminar todo en B – le sucede un problema grave a A? Podría perder el acceso a los datos en A y en su copia de seguridad anterior. Si su almacenamiento de copia de seguridad tiene suficiente espacio, ¿qué tal si elimina la copia de seguridad solo después de que una copia de seguridad más nueva se haya completado con éxito?
El enlace de @bmike a la conversación que se movió al chat está roto.

Respuestas (6)

Para máxima seguridad, copie todo

La opción más segura es copiar todo , incluidos los archivos de metadatos invisibles.

Los archivos tienden a existir por una razón y, a medida que cambia el software, también lo hará la existencia, el propósito y el contenido de estos archivos de metadatos. Copiar todo reducirá la carga de mantenimiento y ofrecerá la tranquilidad de saber que no se pierde nada.

El archivo de registro creado por rsyncestará técnicamente involucrado por la naturaleza misma de rsyncser una herramienta de línea de comandos. Considere presentar una salida ordenada, filtrada por metadatos y tal vez incluso codificada por colores para que el usuario la verifique. Puede hacer esto con una amplia gama de lenguajes y herramientas de secuencias de comandos. Haga más preguntas aquí en Ask Different y en StackOverflow si necesita ayuda con este enfoque.

Eliminar último y copiar recursos de OS X

En cuanto a las rsyncbanderas, echa un vistazo a la pregunta La forma más rápida y segura de copiar datos masivos de un disco externo a otro . En esta pregunta, se usan y explican algunas banderas adicionales:

sudo rsync -vaE --progress --delete-after /Volumes/SourceName /Volumes/DestinationName

En esta situación, Ese asegurará de que se copien las bifurcaciones de recursos y otras propiedades específicas de Mac.

Es posible que desee considerar --delete-afterevitar la eliminación hasta que se haya completado la copia; tenga en cuenta que este enfoque requerirá potencialmente una unidad de destino del doble del tamaño de la fuente.

Posibles exclusiones

Una respuesta a una pregunta relacionada, ¿Cómo puedo omitir los archivos de procesamiento FCPX de una copia de seguridad de Time Machine? , proporcionó un vínculo útil de archivos y carpetas de OS X que se pueden excluir de la mayoría de las copias de seguridad . Este enlace proporciona una lista práctica de patrones de archivos, carpetas y rutas que puede excluir.

Incluir archivos de puntos

Hay buenas razones para hacer una copia de seguridad de los archivos que comienzan con puntos, .*archivos coincidentes.

Algunos programas mantienen preferencias, configuraciones y otra información de valor en carpetas en la parte superior de la carpeta del usuario en carpetas prefijadas con puntos invisibles. La ejecución ls -la ~/revelará estas carpetas y archivos.

Si algún usuario usa o tiene software que a su vez usa software de control de versiones, asegúrese de hacer una copia de seguridad de los archivos de puntos. Software como subversion y git almacenan información crítica dentro de sus carpetas de puntos. Estas carpetas ocultas pueden estar dispersas en su sistema de archivos, donde sea que se desproteja un proyecto.

Spotlight y acceso al disco

Spotlight es el servicio de búsqueda de OS X. Spotlight utiliza el mdworkerproceso para indexar y actualizar el catálogo de búsqueda. Si le preocupa la posible corrupción del disco o las copias lentas, la desactivaciónmdworker durante la ejecución rsyncpuede ayudar. Personalmente, dejo Spotlight ejecutándose mientras ejecuto grandes rsynctransferencias.

La opción más segura es copiar todo, incluidos los archivos de metadatos invisibles. Pero ese mismo enlace de Carbon Copy Cloner dice que hay ciertos archivos que se crean automáticamente, por lo que incluso puede corromperlos si los copia con rsync.
Algunos archivos se volverán a crear, pero ¿vale la pena el tiempo y el riesgo del esfuerzo requerido para aislar esos archivos y rastrear los cambios en el comportamiento en múltiples versiones de software? Tal vez, pero para la mayoría de las situaciones, copie todo y mantenga esas copias de seguridad seguras. La lista de exclusión de CCC es razonable y, si se desea, se puede codificar en un archivo de exclusión para rsyncsu uso.
Podría agregar un ejemplo completo para futuros lectores. Encontré dos fuentes, una y dos (más la tercera que vinculaste); Los dejo aquí para futuras referencias.
"Hay buenas razones para hacer una copia de seguridad de los archivos que comienzan con puntos": ¡sí! Estos archivos están ocultos (desde el Finder para los tontos), pero la mayoría de las veces son archivos muy importantes.
Los Ey --delete-afterson los puntos clave que hacen de esta respuesta una ganadora.
@danielAzuelos Esos son los detalles que quería ver en una respuesta: ¿qué cosas debo cuidar en Mac OS X? En mi caso particular, como dije, solo tengo fotos, videos o documentos, no hay programas “mágicos” como en ~/. En mi caso, creo que estoy bastante seguro --ignore ' .*', ya que sería exactamente lo mismo que si descargara una foto de Internet (no descargo archivos auxiliares, esos se generan desde la computadora). Ahora quería argumentos que dijeran: “sí te imaginas que descargas de internet una foto, pero sería mucho si hicieras X”.
@danielAzuelos A partir de -E, en las versiones más nuevas hay las -Xque veo recomendadas en algunos lugares, ¿cuál es la correcta? ¿O ambos? Me gustaría un pseudo-completo actualizado que cubra la mayoría de las preocupaciones generales. ¿Sería más fácil y rápido copiar archivos de Spotlight que dejar que se generen? ¿Cómo puedo detener Spotlight para que no se estropee mientras tanto? ¿Qué pasa caffeinatecon el proceso? O puede ser que si es solo una lista de respaldo, no sea indexable por Spotlight, mucho menos preocupaciones, etc. Muchas de estas preguntas han sido respondidas con certeza.
@Manuel en Ask Different, preferimos limitar las preguntas a una consulta concisa. Por favor, ¿puede hacer nuevas preguntas para estas consultas y refinamientos adicionales?
@GrahamMiln Mi pregunta es "qué tener en cuenta cuando se trata de usar específicamente rsyncen Mac OS X", todas esas son solo ideas que uno podría responder.
Manuel tiene razón al señalar esto; verifique su versión de rsync con "rsync --version" si está usando la versión estándar en /usr/bin/rsync, es la versión 2.x a partir de 2018 y usa el indicador "-E". Si está utilizando una versión 3.x más nueva, como una de homebrew, "-X" es el indicador de atributo extendido.
Cuando trato de -Esincronizar con una unidad en mi Raspberry Pi, aparece el error rsync: on remote machine: --extended-attributes: unknown option. Supongo que esto significa que solo puedo usar -Elocalmente (o al menos si tengo macOS como origen y destino).
@Merchako esta sería una buena pregunta nueva .
Hasta ahora, hay dos preguntas en este hilo de comentarios que creo que son muy relevantes para establecer una buena respuesta a esta pregunta. Creo que las preguntas de seguimiento deben incluirse porque (1) dependen en gran medida de esta pregunta y (2) ayudarían a determinar qué constituye una buena respuesta. En contraste, @GrahamMiln ha recomendado que ambos sean preguntas separadas. ¿Podemos obtener una referencia o una opinión de un tercero para establecer cuál sería el enfoque correcto?
@Merchako Ask Different fomenta una pregunta a la vez, ya que esto promueve respuestas enfocadas. Analicemos sus inquietudes sobre el formato con los moderadores y otros usuarios interesados ​​en apple.meta.stackexchange.com/questions/3590/…

No estoy completamente satisfecho con las respuestas actuales, pero intentaré cubrir aquí algunas de las posibilidades que he visto en la web tratando de encontrar una buena configuración para rsync.

Y, por cierto, si a uno le interesan las copias de Time Machine, ahí está rsnapshot. Y también está Unison para sincronizaciones bidireccionales. Además, en realidad hay algunas GUI, como Backup Utility y arRsync ; no es exactamente lo que estaba buscando, pero podrían hacer el trabajo para alguien.

Primero, mi única intención era duplicar fotos y videos, por lo que no se necesitaba una copia exacta, por lo tanto, no es necesario preocuparse demasiado . De hecho la mayoría de mis dudas eran si podía excluirlo todo (lo mismo que pasaría si, digamos, descargo una foto de internet, solo descargo un .png, todo lo demás no se descarga sino que se autogenera ).

Aquí hay una lista no estructurada de pensamientos que quizás desee tener en cuenta.

  • Si desea asegurarse de que su computadora portátil no entre en modo de suspensión, es posible que desee realizar caffeinateel proceso caffeinate -s rsync -av .... Tomado de aquí .

  • Si está haciendo copias locales, como en mi caso, o incluso si la conexión a Internet no es demasiado lenta, no debe usar la -zopción (compresión) y usar -W(transferir todo el archivo, en lugar de transferencias delta; esto es predeterminado cuando es local) y probablemente se use --inplacepara hacer transferencias rápidas. Tomado de aquí .

  • Puede usar --delete-afterpara que cualquier archivo se transfiera primero y luego se mueva al destino (y elimine el original) y es más seguro que eliminar antes de la transferencia o durante la transferencia.

  • Puede detener la transferencia presionando ctrl + Cy se detendrá limpiamente. Tomado de aquí . ¡Este era uno de mis temores con SuperDuper!, si necesitas detener una transferencia, aparece el mensaje "Dejarás el disco duro en un estado desconocido...".

  • En versiones recientes, hay una --info=progress2que agrega aún más detalles a -v.

  • Hay -P(que es igual a --partialy --progress) que dejará los archivos transferidos a la mitad allí para que pueda continuar cuando reinicie el proceso (si por alguna razón no puede finalizar la sincronización de inmediato).

  • Uno podría estar interesado en detener Spotlight o TimeMachine antes de hacer la copia y volver a habilitarlos después de la transferencia. E incluso desactivar Spotlight para el disco externo.

  • Otras opciones utilizadas en todas esas referencias incluyen -x(o --one-file-system), -E( --executability), -H( --hard-links), -X( --xattrs), -A( --acls) y --sparse, --hfs-compression, --protect-decmpfs. Es posible que desee mirarlos.

Para mí, parece un comando básico (podría usar más opciones, pero esto es suficiente como ejemplo):

caffeinate -s rsync -av --delete-after --progress --stats --exclude-from 'excludefile.txt' \
  "/Volumes/SrcHDD/" "/Volumes/DstHDD" # note the trailing slash / after the source

Ahora, en mi caso, podría simplemente incluir {*.jpg,*.png,*.mp4,*.txt,*.pdf,…}y nadie diría "también necesita archivos del sistema", pero dado que no quiero buscar para obtener todos los tipos de archivo posibles de los que tengo archivos, prefiero excluirlos. Y hay cosas que no sólo se pueden sino que parecen convenientes excluir.

Encontré algunos enlaces, toma lo que quieras:

  1. https://bombich.com/kb/ccc4/algunos-archivos-y-carpetas-son-automáticamente-excluidos-de-la-tarea-de-respaldo

  2. https://gist.github.com/tvwerkhoven/4541989

  3. https://github.com/necolas/dotfiles

  4. https://gist.github.com/shkm/5531679

  5. http://www.hackurmac.com/2014/08/backing-up-and-restoring-your-hackintosh.html

  6. https://github.com/jedda/Counterpart

  7. http://alanwsmith.com/rsync-exclude-list-para-mac-osx

Y a partir de ahí, probablemente podría obtener lo que es seguro o sensato ignorar. Aquí está la lista completa (acabo de eliminar los duplicados)

.HFS+ Private Directory Data*
/.journal
/.journal_info_block
.AppleDouble
.AppleDB
/lost+found

.metadata_never_index
.metadata_never_index_unless_rootfs
/.com.apple.timemachine.donotpresent
.VolumeIcon.icns
/System/Library/CoreServices/.disk_label*
/TheVolumeSettingsFolder

.DocumentRevisions-V100*
.Spotlight-V100
/.fseventsd
/.hotfiles.btree
/private/var/db/systemstats

/private/var/db/dyld/dyld_*
/System/Library/Caches/com.apple.bootstamps/*
/System/Library/Caches/com.apple.corestorage/*
/System/Library/Caches/com.apple.kext.caches/*

/.com.apple.NetBootX

/Volumes/*
/dev/*
/automount/*
/Network/*
/.vol/*
/net

/private/var/folders/zz/*
/private/var/vm/*
/private/tmp/*
/cores/*

.Trash
.Trashes

/Backups.backupdb
/.MobileBackups
/.MobileBackups.trash
/.MobileBackups.trash

Library/Mobile Documents.*
.webtmp

/Library/Caches/CrashPlan
/PGPWDE01
/PGPWDE02
/.bzvol
/Library/Application Support/Comodo/AntiVirus/Quarantine
/private/var/spool/qmaster
$Recycle.Bin
Saved Application State
Library/Preferences/ByHost/com.apple.loginwindow*

.AppleDesktop
.com.apple.timemachine.supported
Network Trash Folder
/Library/Caches/*
/private/var/spool/postfix/*
$RECYCLE.BIN
/stuff/*
/afs/*
/private/var/run/*
/Previous Systems.localized
/tmp/*
.dbfseventsd
.DS_Store
.PKInstallSandboxManager
.SymAV*
.symSchedScanLockxz
.TemporaryItems
Desktop DB
Desktop DF
hiberfil.sys
pagefile.sys
Recycled
RECYCLER
System Volume Information
Temporary Items
Thumbs.db
AUTORUN.INF
Autorun.inf
autorun.inf

Si está utilizando rsyncla versión 3.0.6 según Carbon Copy Cloner o 3.1.2 según Homebrew, puede seguir el ejemplo de los argumentos de Carbon Copy Cloner:

rsync -A -X -H -p --fileflags --force-change -l -N -rtx --protect-decmpfs --numeric-ids -go --delete-during --backup --backup-dir=</PATH/TO/STICK/BACKUP_when_using_delete> --protect-args <SRC>/ <DEST>

--protect-decmpfsya no está disponible a partir de 3.1.3, consulte github.com/Homebrew/homebrew-core/pull/23415 .

Aconsejaría no eliminar los metadatos durante una copia de seguridad, particularmente los archivos de puntos, por ejemplo ._$filename, sin embargo, si realmente desea excluir los archivos de puntos de su rsynccomando, agréguelos --exclude '.*'.

rsync -av --exclude '.*' --progress --delete /Volumes/A/ /Volumes/B
Esto es bueno. No estaba seguro de si eliminar todos los archivos de puntos sería problemático (por cierto, ¿hay alguna diferencia entre '.*'y '/.*'?). No creo que Finder los copie todos, puede que solo estén asociados. En ese caso, preferiría excluir solo aquellos que son innecesarios (por ejemplo, .DS_Store). Y sí, los que pueden ser importantes, pero que no quiero tener en mi registro, los puedo filtrar con expresiones regulares.
Lo que el Finder copia no está documentado, y esta es la fuente del problema de todos al crear una política de copia de seguridad. Debe mantener una copia de todos los archivos si desea una copia de seguridad que pueda usarse exactamente en lugar del Adisco.
@danielAzuelos Lo cual no es el caso, en caso de que el disco duro principal A muera, entonces compraré un tercer disco duro C, copiaré del disco duro B al disco duro C y probablemente comenzaré a usar uno de B o C. Repito, que este no es el tipo de respaldo que uno necesita usar como lo hace SuperDuper. Es que mis fotos son mejores en dos lugares que en uno solo.

Es agosto de 2022; Esta es una respuesta actualizada:

Antes de entrar en la respuesta aquí, debe saber que aunque rsyncse incluye un binario con macOS, ahora es un paquete de software antiguo de 16 años. En mi sistema Catalina se /usr/bin/rsync --versionreporta como versión 2.6.9; lanzado en noviembre de 2006. El rsynchistorial de lanzamientos desde la versión 2.6.9 parece dejar en claro que la decisión de Apple de detener las actualizaciones rsyncen su sistema operativo se basó completamente en la rsyncdecisión del equipo de cambiar a la licencia GPLv3. Esto es desafortunado porque rsyncla versión 3.0 (la versión posterior a la 2.6.9) incluyó actualizaciones significativas que respaldan específicamente a los usuarios de macOS:

  • --xattrs: conserva los atributos extendidos de OS X
  • --acls: conserva las listas de control de acceso de OS X
  • --fake-super: permite a los usuarios que no son administradores conservar todos los atributos

El punto del párrafo anterior es simplemente este: si desea utilizar rsyncpara hacer una copia de seguridad de los archivos en su macOS, debe tener una versión posterior a la que proporciona Apple. De lo contrario, perderá todos los xattrsmetadatos ACLsque juegan un papel importante en varias características de macOS. Esto se verifica fácilmente con un simple experimento.

Afortunadamente, las versiones actuales de rsyncestán disponibles a través de administradores de paquetes de macOS de terceros ( MacPorts , por ejemplo), o para los aficionados al bricolaje, puede clonar el repositorio de rsyncGitHub y construirlo desde la fuente.

También vale la pena señalar que una versión actual de rsyncpuede reparar/restaurar una copia de seguridad realizada previamente con la versión nativa rsync de Apple 2.6.9. También puede reparar/restaurar correos electrónicos xattrs, ACLcorreos electrónicos y marcas de fecha y hora que hayan sido alteradas o perdidas por el "Asistente de migración" de Apple.

rsynces un paquete maduro y completo con numerosas opciones. Muchas de estas opciones no son elecciones obvias, y uno puede dedicar una buena cantidad de tiempo a desarrollar un conjunto de opciones para cumplir objetivos específicos. Si bien no hay atajos reales para una consideración cuidadosa de su propio caso de uso, sugeriré los siguientes conjuntos de opciones como un comando genérico razonable rsyncpara uso general en macOS, un "punto de partida" , en otras palabras. Puede adaptarlos aún más para satisfacer sus propias necesidades.

Presentaré dos casos para usar rsyncpara hacer copias de seguridad y restaurar; uno con la --deleteopción y otro sin ella. Ambos casos suponen que el local Macintosh HDes el origen de la operación de copia de seguridad y el destino de la operación de restauración. En mi caso, hay algunas carpetas (por ejemplo, Documents) para las que prefiero usar la --deleteopción, y otras carpetas (por ejemplo Music, Pictures& Movies) en las que no uso --delete. Esta es una elección personal que refleja cómo gestiono/organizo mis datos.

En el contexto de rsync, la --deleteopción simplemente significa que las eliminaciones que realice en sus carpetas de origen se propagarán a sus carpetas de destino .

Sin la --deleteopción:

1. En una operación de RESPALDO :

i. Fuente:/MacHD_Folder/
ii. Destino:/mountpoint/for/remote/storage
rsync -rlAXtgoDiv --fake-super /MacHD_Folder/ /mountpoint/for/remote/storage

2. En una operación RESTORE :

i. Fuente:/mountpoint/for/remote/storage
ii. Destino:/MacHD_Folder/
rsync -rlAXtgoDiv --fake-super /mountpoint/for/remote/storage/ /MacHD_Folder 

Con la --deleteopción:

1. En una operación de RESPALDO :

i. Fuente:/MacHD_Folder/
ii. Destino:/mountpoint/for/remote/storage
rsync -rlAXtgoDiv --fake-super --delete --backup-dir=/mountpoint/for/remote/storage/deletes /MacHD_Folder/ /mountpoint/for/remote/storage

2. En una operación RESTORE : :

i. Fuente:/mountpoint/for/remote/storage
ii. Destino:/MacHD_Folder/
rsync -rlAXtgoDiv --fake-super /mountpoint/for/remote/storage/ /MacHD_Folder 

Tenga en cuenta la asimetría entre las operaciones de copia de seguridad y restauración al usar la --deleteopción. Esto se debe al hecho de que no es necesario eliminar nada para la operación de restauración. Tenga en cuenta también el uso de la --backup-diropción cuando use la --deleteopción: Esto hace rsyncque se muevan todos los archivos y carpetas eliminados a la carpeta designada en la unidad de destino. Puede pensar en esto como una forma de "seguro" para los archivos eliminados: funciona como lo Trashhace la carpeta en su MacHD local.

Otras lecturas:

Esta receta de GitHub ofrece más explicaciones y opciones útiles.

He usado rsync para copias de seguridad en varios trabajos y lo uso en casa.

Lo recomiendo mucho, pero con algunas modificaciones. Como herramienta de copia de seguridad, es excelente, pero como herramienta de archivo se queda un poco plana. Sí, copia todo, pero no obtienes versiones de todo, siempre obtienes solo las últimas versiones.

Usé esta guía http://www.mikerubel.org/computers/rsync_snapshots/ como punto de partida. Leer toda la página. Hace un gran trabajo al explicar las opciones y describe cómo puede implementar copias de seguridad incrementales. Y sorprendentemente, el artículo tiene más de 10 años pero todavía es aplicable hoy. Tengo que amar Unix.

Gracias. En cualquier caso, quería cubrir las consideraciones especiales que uno podría querer tomar bajo Mac OS X. Realmente no quería solo una guía de rsync. En cualquier caso, buen enlace, cubre mucho, rsyncpero a partir de hoy hay una herramienta para hacer exactamente eso: rsnapshot.