Ya he copiado terabytes de archivos rsync
pero olvidé usarlos --archive
para preservar los atributos especiales de los archivos.
Intenté ejecutar rsync
nuevamente esta vez con --archive
pero 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
--reference
pará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=echo
conmyecho=
.fuente
touch --reference=otherfile file
. Se actualizó la respuestatouch
por 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).-c
interruptor altouch
comando para detener la creación de archivos vacíos en el$dst_path
.ADVERTENCIA: Sin soluciones especiales, GNU
cp --attributes-only
truncará 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-only
opció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,
cp
es 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 secp
comporta 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
rsync
pero desea conservarlos ahora, entoncescp
no lo solucionará por usted; probablemente sea mejor volver a ejecutarrsync
con 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:
cp
desde 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 usecp
en esta situación; usarrsync
con las opciones correctas y / o ser paciente.No recomendaría esto a menos que entiendas completamente lo que estás haciendo, pero antes
cp
se puede evitar que GNU trunque archivos usando el truco LD_PRELOAD :fuente
errorno
debería sererrno
, ¿verdad?rsync
con 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?":
rsync
usualmente 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-file
está implícito para las sincronizaciones locales-> locales, lo hacersync
sin--times
aproximadamente equivalente acp
las 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-only
más rápido que un rsync ingenuo.Si tiene dudas sobre lo
rsync
que 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,
rsync
siempre copiará el contenido de los archivos completos. Para evitar esto puedes usarfuente
rsync
no use el acceso directo cuando los archivos están en la ruta local, pero no impidersync
copiar 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.sh
Pero 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.sh
Tambié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.