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 normales en la plataforma Linux. Le agradecería saber la mejor manera de hacerlo con posiblemente las funciones incorporadas de Linux. El sistema de archivos es una familia ext.
linux
filesystems
Malabarista
fuente
fuente
dd
?dd if=/dev/sda1 of=/dev/sdb1 bs=4096
conv=notrunc,noerror,sync
.dd
2 razones: en primer lugar, es una mala idea realizar una copia a nivel de bloque de un sistema de archivos que está montado (que es el caso/
) y, en segundo lugardd
, no copiará datos de fuentes montadas dentro del sistema de archivos como/boot
y/home
.Respuestas:
A menudo uso
Presumiendo / 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, incluida la anterior.
http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html
fuente
/
, excluyendo/dev
, por ejemplo/sys
,/proc
etc. Por lo tanto, antes de emitir esocp
, sugiero buscar mejores enfoques (también usando rsync)-x
bandera por @MarcinOrlowski WolfJM significa que los sistemas de archivos sintéticos que menciona no se copiarán.Lo que quieres es rsync .
Este comando se puede utilizar para sincronizar una carpeta y también reanudar la copia cuando se cancela a mitad de camino. El comando para copiar un disco es:
Las opciones son:
Para mejorar la velocidad de copia, agregue
-W
(--whole-file
), para evitar calcular deltas / diffs de los archivos. Este es el valor predeterminado 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 la reducción del uso de la red.También considere agregar
--numeric-ids
para evitar la asignación de valores uid / gid por nombre de usuario / grupo.fuente
rsync -avxHAWX --numeric-ids --progress / mnt/
pero debería haberlo hechorsync -avxHAWX --numeric-ids --progress / mnt/ > ~/rsync.out
. Sospecho que verter la salida al terminal ralentizó el proceso. : D--info=progress2
en lugar de--progress
es útil para transferencias grandes, ya que proporciona un progreso general, en lugar de (millones de líneas para) archivos individuales.X
yA
conE
, porque los atributos extendidos y las ACL están cubiertosE
en mi mac. Probado:rsync version 2.6.9 protocol version 29
> ~/rsync.out
,2> ~/rsync.err
guardará cualquier error en un archivo separado./
, teniendo en cuenta que una barra diagonal (o no) en el directorio de origen marca la diferencia:rsync source/ dest/
copia todo el interiorsource/
adest/
, mientras quersync source dest/
las copias de la carpetasource
y todo el interior endest/
.La respuesta de Michael Aaron Safyan no tiene en cuenta los archivos dispersos.
-S
La opción corrige eso.Además, esta variante no genera spam con el progreso de cada archivo y no hace sincronización delta que mata el rendimiento en casos que no son de red.
Perfecto para copiar el sistema de archivos de una unidad local a otra unidad local.
fuente
55,431,669,792 57% 97.47MB/s 0:06:56 xfr#2888, ir-chk=5593/8534)
Para una copia local de una toma 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 significativamente más complejo de usar.
Por qué rsync:
esto le permite copiar (copia sincronizada) todo 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 monitorea 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 usa una conexión ssh, por lo que le permite obtener "copias" seguras sincronizadas de forma remota. Eche un vistazo a la página del manual , así como aquí, para ver algunos ejemplos .
fuente
Como Michael Safyan sugiere anteriormente, lo he usado
rsync
para este propósito. Sugiero usar algunas opciones adicionales para excluir directorios que probablemente no desee copiar.Esta versión es bastante específica para los sistemas basados en Gnome y Debian / Ubuntu, ya que incluye subdirectorios de directorios de inicio de los usuarios que son específicos de Gnome, así como el caché del paquete APT.
La última línea excluirá cualquier directorio llamado cache / Cache / .cache, que puede ser demasiado agresivo para algunos usos:
fuente
Agregar dos bits útiles al hilo re rsync: cambiar el cifrado y usar
--update
:Según la publicación de Wolfman,
cp -ax
es elegante y genial para las cosas locales.Sin embargo,
rsync
también es increíble. Además de la respuesta de Michael-W
, cambiar el cifrado también puede acelerar las cosas (sin embargo, lea sobre las implicaciones de seguridad).Existe cierta discusión (y puntos de referencia) sobre el hecho de que una CPU lenta es el cuello de botella real, pero parece ayudarme cuando la máquina se carga haciendo otras cosas concurrentes.
Una de las otras grandes razones para usar rsync en una copia grande y recursiva como esta es debido al modificador -u (o --update ). Si hay un problema durante la copia, puede solucionarlo y rsync continuará donde lo dejó (no creo que scp tenga esto). Al hacerlo localmente, cp también tiene un interruptor -u.
(No estoy seguro de cuáles son las implicaciones de --update y --who-file together juntas, pero siempre parecen funcionar de manera sensata para mí en este tipo de tarea)
Me doy cuenta de que esto no es un hilo sobre las características de rsync, pero algunos de los más comunes que uso para esto son:
Por cierto, si alguna vez tengo que usar Windows, uso rsync de cygwin para hacer grandes copias recursivas, debido a que el explorador tiene un poco de muerte cerebral que quiere comenzar desde el principio (aunque encuentro que Finder es OS X aún peor)
fuente
rsync
De:
https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync
Página del hombre aquí
fuente
Como se menciona en los comentarios de juniorRubyist, el enfoque preferido aquí debería ser el uso
dd
. La razón principal es el rendimiento, es una copia bloque por bloque en lugar de archivo por archivo.Clonando una partición
Clonando un disco completo
Referencias
fuente
dd
es una muy mala idea por 2 razones: en primer lugar, realizar una copia a nivel de bloque de un sistema de archivos que está montado (que es el caso/
) probablementedd
dará lugar a errores en el sistema de archivos de destino y, en segundo lugar , no copiará datos de fuentes montadas en el sistema de archivos como/boot
y/home
. Su enlace es válido para clonar discos, no para clonar "jerarquía de archivos"'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 utiliza ddrescue con un archivo de registro, realiza un seguimiento de los bloques que se han copiado.
Cuando hago una copia de seguridad de un sistema Windows / Linux de arranque dual, 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 puede crear archivos como ntfsclone donde el espacio no asignado está marcado con caracteres de control. Esto hace que la imagen no se pueda montar directamente, pero permite que sea tan grande como los datos contenidos.
Alguien presente el "formato de imagen especial" ntfsclone para ddrescue ...
fuente
rsync
es la solución perfecta como se explicó anteriormente.Simplemente agregaría
-S
" manejar archivos dispersos de manera eficiente " en caso de que haya un volumen de docker devicemapper o similar para copiar.fuente
Probé los comandos rsync propuestos aquí, pero finalmente obtuve resultados mucho más limpios y rápidos
partclone
. Desmonta las particiones de origen y destino y luego ejecuta lo siguiente:Esto realiza los siguientes pasos:
Lo anterior funciona en caso de que la partición de destino sea del mismo tamaño o mayor que la fuente. Si su objetivo es más pequeño que la fuente (pero se ajusta a todos los datos), haga lo siguiente:
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. Use una distribución en vivo como clonezilla o instale partclone desde su administrador de paquetes de distribución (apt-get install partclone
en sistemas basados en Debian).fuente