Ya he copiado terabytes de archivos rsyncpero olvidé usarlos --archivepara preservar los atributos especiales de los archivos.
Intenté ejecutar rsyncnuevamente esta vez con --archivepero fue mucho más lento de lo que esperaba. ¿Hay alguna manera fácil de hacer esto más rápido simplemente copiando metadatos de forma recursiva?
filesystem
rsync
metadata
Mohammad
fuente
fuente

Respuestas:
Ok, puede copiar el propietario, grupo, permiso y marcas de tiempo utilizando el
--referenceparámetro achown,chmod,touch. Aquí hay un guión para hacerloDebe ejecutarlo con
sudo(para permitir chown) y con dos parámetros: directorio de origen y de destino. El guión solo hace eco de lo que haría. Si está satisfecho, cambie la líneamyecho=echoconmyecho=.fuente
touch --reference=otherfile file. Se actualizó la respuestatouchpor diseño solo cambia los tiempos de modificación y acceso, el tiempo de "creación" no se ve afectado. (Creo que ext2 / 3 no admite el cambio de ctime de todos modos, pero podría importar si está utilizando NTFS o similar).-cinterruptor altouchcomando para detener la creación de archivos vacíos en el$dst_path.ADVERTENCIA: Sin soluciones especiales, GNU
cp --attributes-onlytruncará los archivos de destino, al menos en Precise. Vea la edición a continuación.Original:
En esta situación, es probable que desee la
--attributes-onlyopción GNU cp , junto con--archive, ya que es un código probado y probado, que hace todos los atributos independientes del sistema de archivos y no sigue los enlaces simbólicos (¡seguirlos puede ser malo!):Al igual que con los archivos,
cpes aditivo con atributos extendidos: si tanto el origen como el destino tienen atributos extendidos, agrega los atributos extendidos del origen al destino (en lugar de eliminar todos los xattrs del destino primero). Si bien esto refleja cómo secpcomporta si copia archivos en un árbol existente, puede que no sea lo que espera.También tenga en cuenta que si no conservó los enlaces duros la primera vez
rsyncpero desea conservarlos ahora, entoncescpno lo solucionará por usted; probablemente sea mejor volver a ejecutarrsynccon las opciones correctas (ver mi otra respuesta ) y ser paciente.Si encontró esta pregunta mientras buscaba separar y recombinar deliberadamente el contenido de metadatos / archivos, entonces puede echar un vistazo a metastore que se encuentra en los repositorios de Ubuntu.
Fuente: manual de GNU coreutils
Editado para agregar:
cpdesde GNUcoreutils> = 8.17 y superior funcionará como se describe, pero coreutils <= 8.16 truncará los archivos al restaurar sus metadatos. En caso de duda, no lo usecpen esta situación; usarrsynccon las opciones correctas y / o ser paciente.No recomendaría esto a menos que entiendas completamente lo que estás haciendo, pero antes
cpse puede evitar que GNU trunque archivos usando el truco LD_PRELOAD :fuente
errornodebería sererrno, ¿verdad?rsynccon las opciones correctas es una respuesta a otra pregunta ...Tratando la pregunta como "rsync solo tiene metadatos para copiar, entonces ¿por qué es tan lento y cómo puedo hacerlo más rápido?":
rsyncusualmente usa mtimes iguales como heurística para detectar y omitir archivos sin cambios. Sin--archive(específicamente, sin--times) los tiempos de los archivos de destino permanecen configurados en el momento en que los sincronizó, mientras que los tiempos de los archivos de origen permanecen intactos (ignorando el truco manual por usted). Sin garantías externas de su parte de que el contenido de los archivos de origen no ha cambiado, rsync debe asumir que podrían haberlo hecho y, por lo tanto, debe sumarlos y / o copiarlos nuevamente en el destino. Esto, más el hecho de que--whole-fileestá implícito para las sincronizaciones locales-> locales, lo hacersyncsin--timesaproximadamente equivalente acplas sincronizaciones locales.Siempre que la actualización del contenido de los archivos de destino sea aceptable, o si los archivos de origen no se han tocado desde la copia original, debería encontrarlo
rsync --archive --size-onlymás rápido que un rsync ingenuo.Si tiene dudas sobre lo
rsyncque está tardando tanto en copiarse,rsync --archive --dry-run --itemize-changes ...le informa en detalle exhaustivo, aunque conciso.fuente
En las transferencias locales, cuando el origen y el destino están en sistemas de archivos montados localmente,
rsyncsiempre copiará el contenido de los archivos completos. Para evitar esto puedes usarfuente
rsyncno use el acceso directo cuando los archivos están en la ruta local, pero no impidersynccopiar el contenido.Tuve que hacer esto de forma remota a otra computadora para que no pudiera usar - referencia
Usé esto para hacer el guión ...
find -printf "touch -d \"%Tc\" \"%P\"\n" >/tmp/touch.shPero asegúrese de que no haya ningún nombre de archivo con "en ellos primero ...
find | grep '"'Luego copie touch.sh a su computadora remota y ejecute ...
cd <DestinationFolder>; sh /tmp/touch.shTambién hay opciones en find -printf para imprimir usuario, nombre de grupo si desea copiarlos.
fuente
find. Estaba en la misma situación: olvidé copiar atributos, los discos de origen y de destino ya estaban en máquinas diferentes y realmente no quería revertir eso.