comando tar para obtener archivos para copias de seguridad periódicas

comando tar para obtener archivos para copias de seguridad periódicas

¿Qué comando tar debo usar para cambiar archivos después de una fecha determinada (incluidos cambios de propiedad, permisos, etc.) pero excluyendo archivos que simplemente se restauraron desde la copia de seguridad?

Por otro lado, ¿sería preferible revisar todos los archivos después de una restauración y cambiar la hora de cambio de estado de cada uno como parte de la restauración?

He estado usando un comando similar al siguiente para tar todos los archivos modificados recientemente desde una fecha determinada para una copia de seguridad periódica del pobre:

$ SINCE=20190501
$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf -

Este no es el comando real, pero ilustra el punto que intento exponer. Este comando simplemente elimina la lista de archivos que deberían ir al archivo tar si estuviera enviando la salida a un archivo tar.

Hasta ahora, pensaba que este comando funcionaba bien hasta que reemplacé mi disco duro y restauré todos los archivos desde la copia de seguridad. Al observar el resultado de stat, parece que la fecha de cambio es la fecha en la que restauré todos los archivos de la copia de seguridad, por lo que ahora todos los archivos se seleccionan en mi comando tar anterior.

$ stat restore_file.txt
...
Modify: 2019-04-01 23:52:12.000000000 -0500
Change: 2019-05-25 01:52:10.737688040 -0500

Incluso --newer-mtimeno parece ayudar:

$ tar cf - --newer-mtime="${SINCE}" . | tar tvf -

ACTUALIZAR:También probé lo siguiente, y tampoco pareció ayudar, ya que todavía seleccionó más archivos de los que quiero:

$ SINCE=201905010000
$ touch -t "${SINCE}" /tmp/timestamp
$ stat /tmp/timestamp
Access: 2019-05-01 00:00:00.000000000 -0500
Modify: 2019-05-01 00:00:00.000000000 -0500
Change: 2019-06-30 18:29:19.277267874 -0500
$ tar cf - --after-date /tmp/timestamp . | tar tvf -

Respuesta1

Filtrando directorios:

$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf - | grep -v '^d'

Veo que los archivos que quería capturar efectivamente se están capturando y nada más.

Por alguna razón, tar toma todos los directorios sin tener en cuenta la marca de tiempo, pero supongo que puedo vivir con eso, por lo que el comando anterior sigue funcionando bien la mayor parte del tiempo y es por eso que no vi ningún problema hasta que restauré mi copia de seguridad.

Ahora, con respecto a la restauración, dije que esto establecía el atributo Cambiar en cada archivo restaurado; por lo tanto, --after-datefue inútil ya que mi siguiente copia de seguridad terminó obteniendo todos los archivos.

Para superar esto, por primera vez después de la restauración, cambié a usar --newer-mtime:

$ tar cf - --newer-mtime="${SINCE} 00:00:00" . | tar tvf -

Esto me permitió obtener todos los archivos nuevos desde la restauración y planeo usar el original --after-dateuna vez más a partir de la siguiente copia de seguridad.

Esto tiene un inconveniente como se describe más adelante: si hubo algún cambio de permiso o propiedad entre el momento en que restauré los archivos y mi primera copia de seguridad, no lo retomaré y probablemente nunca lo haré a menos que esos mismos archivos cambien sus permisos/propiedad. nuevamente, y luego solo recibiré la actualización en ese momento y todas mis copias de seguridad hasta ese momento se restaurarían con los permisos/propiedad incorrectos.

Elmanual de alquitrán GNUafirma lo siguiente:

Se considera que el estado de un archivo ha cambiado si se ha modificado su contenido, o si se han cambiado su propietario, permisos, etc.

No tengo claro qué significa "y demás", pero también me lo estoy perdiendo.

Dado lo que estoy respaldando aquí, no me preocupa esto, así que esta vez estoy de acuerdo; sin embargo, en los casos en los que sí me importó, podía desechar mis copias de seguridad incrementales y comenzar de nuevo con una copia de seguridad completa nueva, o podía concluir mi proceso de restauración con una copia de seguridad incremental siguiendo los pasos anteriores y usando --newer-mtimeinmediatamente después de la restauración. . Esto último sucedería antes de que la gente comience a usar los archivos restaurados, por lo que obtengo una buena copia de seguridad incremental antes de volver a --after-date.

información relacionada