2011-07-07 03:30:57 +0000 2011-07-07 03:30:57 +0000
100
100

Copiar toda la jerarquía del sistema de archivos de una unidad a otra

Me gustaría copiar toda la jerarquía del sistema de archivos de una unidad a otra, es decir, el contenido de cada directorio, así como los archivos regulares en la plataforma Linux. Me gustaría saber cuál es la mejor manera de hacerlo, posiblemente con las funciones incorporadas de Linux. El sistema de archivos es una familia extensa.

Respuestas (11)

208
208
208
2011-07-07 03:36:43 +0000

Lo que quieres es rsync .

Este comando se puede utilizar para sincronizar una carpeta, y también para reanudar la copia cuando se aborta a mitad de camino. El comando para copiar un disco es:

rsync -avxHAX --progress / /new-disk/

Las opciones son:

-a : all files, with permissions, etc..
-v : verbose, mention files
-x : stay on one file system
-H : preserve hard links (not included with -a)
-A : preserve ACLs/permissions (not included with -a)
-X : preserve extended attributes (not included with -a)

Para mejorar la velocidad de copia, añada -W (--whole-file), para evitar el cálculo de deltas/diferencias de los ficheros. Este es el valor por defecto cuando tanto el origen como el destino se especifican como rutas locales, ya que el beneficio real del algoritmo de transferencia delta de rsync es reducir el uso de la red.

Considere también añadir --numeric-ids para evitar el mapeo de valores uid/gid por nombre de usuario/grupo.

56
56
56
2017-03-05 10:42:04 +0000

La respuesta de Michael Aaron Safyan no tiene en cuenta los archivos dispersos. La opción -S arregla eso.

Además, esta variante no hace spam con el progreso de cada archivo y no hace la sincronización delta que mata el rendimiento en los casos que no son de red.

Perfecto para copiar el sistema de archivos de una unidad local a otra unidad local.

rsync -axHAWXS --numeric-ids --info=progress2
35
35
35
2011-07-07 03:42:40 +0000

A menudo uso

> cp -ax / /mnt

Suponiendo que /mnt es el nuevo disco montado en /mnt y no hay otros montajes en /.

el -x lo mantiene en el único sistema de archivos.

Esto, por supuesto, debe hacerse como root o usando sudo.

Este enlace tiene algunas alternativas, incluyendo la de arriba http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html

6
6
6
2011-07-07 20:53:25 +0000

Para una copia local de una unidad a otra, supongo que cp es suficiente como lo describe Wolfmann aquí arriba.

Para trabajos más grandes como copias de seguridad locales o remotas por ejemplo, lo mejor es rsync.

Por supuesto, rsync es bastante más complejo de usar.

Por qué rsync :

  • le permite copiar (copia sincronizada) toda o parte de su unidad A a la unidad B, con muchas opciones, como excluir algunos directorios de la copia (por ejemplo, excluir /proc).

  • Otra gran ventaja es que esta herramienta nativa monitoriza la transferencia de archivos: por ejemplo, para transferencias masivas, si la conexión se interrumpe, continuará desde el punto de interrupción.

  • Y por último, pero no menos importante, rsync utiliza la conexión ssh, lo que le permite lograr “copias” remotas sincronizadas y seguras. Echa un vistazo a la página man así como aquí para algunos ejemplos .

5
5
5
2014-02-06 06:11:42 +0000

Como sugiere Michael Safyan más arriba, he utilizado rsync para este propósito. Sugiero usar algunas opciones adicionales para excluir directorios que probablemente no quieras copiar.

Esta versión es bastante específica para los sistemas basados en Gnome y Debian/Ubuntu, ya que incluye subdirectorios de los directorios personales de los usuarios que son específicos de Gnome, así como la caché de paquetes de APT.

La última línea excluirá cualquier directorio llamado cache/Cache/.cache, lo que puede ser demasiado agresivo para algunos usos:

rsync -WavxHAX --delete-excluded --progress \
  /mnt/from/ /mnt/to/
  --exclude='/home/*/.gvfs' \
  --exclude='/home/*/.local/share/Trash' \
  --exclude='/var/run/*' \
  --exclude='/var/lock/*' \
  --exclude='/lib/modules/*/volatile/.mounted' \
  --exclude='/var/cache/apt/archives/*' \
  --exclude='/home/*/.mozilla/firefox/*/Cache' \
  --exclude='/home/*/.cache/chromium'
  --exclude='home/*/.thumbnails' \
  --exclude=.cache --exclude Cache --exclude cache
2
2
2
2012-03-19 23:53:05 +0000

Añadiendo dos cosas útiles al hilo re rsync: cambiar el cifrado, y usar --update:

Según el post de Wolfman, cp -ax es elegante, y genial para cosas locales.

Sin embargo, rsync también es genial. Además de la respuesta de Michael sobre -W, cambiar la clave también puede acelerar las cosas (aunque hay que leer las implicaciones de seguridad).

rsync --progress --rsh="ssh -c blowfish" / /mnt/dest -auvx

Hay alguna discusión (y benchmarks) por ahí sobre que una CPU lenta es el verdadero cuello de botella, pero parece que me ayuda cuando la máquina está cargada haciendo otras cosas concurrentes.

Una de las otras grandes razones para usar rsync en una copia grande y recursiva como esta es por el interruptor -u (o –update). Si hay un problema durante la copia, puedes arreglarlo, y rsync lo retomará donde lo dejó (no creo que scp tenga esto). Haciéndolo localmente, cp también tiene un interruptor -u.

(No estoy seguro de las implicaciones de –update y –whole-file juntos, pero siempre parecen funcionar de forma sensata para mí en este tipo de tareas)

Me doy cuenta de que este no es un hilo sobre las características de rsync, pero algunas de las más comunes que uso para esto son:

  • –delete-after etc (como mencionó Michael en el seguimiento), si quieres sincronizar el nuevo sistema de vuelta al lugar original o algo así. Y,
  • –exclude - para omitir directorios/archivos, para casos como copiar/crear un nuevo sistema en un nuevo lugar mientras se omiten los directorios de inicio de los usuarios, etc. (ya sea que esté montando hogares desde otro lugar, o creando nuevos usuarios, etc.).

Por cierto, si alguna vez tengo que usar windows, uso rsync desde cygwin para hacer grandes copias recursivas, debido a que el explorador está un poco descerebrado al querer empezar desde el principio (aunque encuentro que el Finder de OS X es aún peor)

2
2
2
2015-05-18 15:45:08 +0000

rsync

“Este enfoque se considera mejor que la clonación de discos con dd, ya que permite utilizar un tamaño, una tabla de particiones y un sistema de archivos diferentes, y mejor que la copia con cp -a también, porque permite un mayor control sobre los permisos de los archivos, los atributos, las listas de control de acceso (ACL) y los atributos extendidos.”

De: https://wiki.archlinux.org/index.php/Fullsystembackup_with_rsync

Man Page Aquí

2
2
2
2018-06-14 17:30:20 +0000

Como se menciona en los comentarios de juniorRubyist, el enfoque preferido aquí debería ser usar dd. La razón principal es el rendimiento, es una copia bloque a bloque en lugar de archivo a archivo.

Clonación de una partición

# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress

Clonación de un disco entero

# dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress

Referencias

  1. https://wiki.archlinux.org/index.php/disk_cloning
1
1
1
2019-01-27 21:53:49 +0000

‘dd’ es impresionante, pero ddrescue (apt install gddrescue) es aún mejor. Si dd se interrumpe, no hay forma de reiniciar (otra buena razón para usar rsync). Cuando usas ddrescue con un archivo de registro, mantiene un registro de los bloques que se han copiado.

Cuando hago una copia de seguridad de un sistema de arranque dual Windows/Linux, uso ntfsclone para las particiones de Windows y ddrescue para la partición de Linux y dd para el MBR. (No he intentado hacer una copia de seguridad de un sistema de arranque dual usando GPT/UEFI.)

Lo que me encantaría ver es una herramienta ddrescue que pueda crear archivos como ntfsclone donde el espacio no asignado se marque con caracteres de control. Esto hace que la imagen no sea directamente montable, pero permite que sea sólo tan grande como los datos contenidos.

Por favor, que alguien se invente el “formato de imagen especial” ntfsclone para ddrescue…

1
1
1
2019-07-31 21:30:35 +0000

Probé los comandos rsync propuestos aquí pero finalmente obtuve resultados mucho más limpios y rápidos con partclone . Desmonte las particiones de origen y destino y luego ejecute lo siguiente:

partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
e2fsck -f /dev/sd(target)
resize2fs /dev/sd(target)

Esto realiza los siguientes pasos:

  1. Clonar (sólo las partes usadas de) la partición
  2. Asegurarse de que el sistema de ficheros está bien (resize2fs refuerza este paso)
  3. Redimensionar la partición al nuevo sistema de ficheros

Lo anterior funciona en caso de que la partición de destino sea del mismo tamaño o mayor que la de origen. Si el destino es más pequeño que el origen (pero caben todos los datos) entonces haga lo siguiente:

e2fsck -f /dev/sd(target)
resize2fs -M /dev/sd(target)
partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
resize2fs /dev/sd(target)

resize2fs -M reduce el sistema de archivos al tamaño mínimo antes de clonar los datos.

Tenga en cuenta que partclone no está instalado por defecto en la mayoría de los sistemas. Utilice una distro en vivo como clonezilla o instale partclone desde el gestor de paquetes de su distros (apt-get install partclone en sistemas basados en debian).

0
0
0
2015-08-07 18:04:55 +0000

rsync es la solución perfecta como se ha explicado anteriormente.

Yo sólo añadiría -S a “handle sparse files efficiently” en caso de que haya que copiar un volumen docker devicemapper o similar.