¿Es seguro tomar la imagen de la unidad de disco actual?

12

Tengo que hacer una copia de seguridad de mi disco duro. Quiero usar ddy poner la imagen en un disco duro externo.

  • ¿Puedo hacer esto dddesde el sistema operativo que reside en el disco duro o tengo que arrancar desde otro dispositivo, por ejemplo, un LiveCD?
  • ¿Es seguro, en general, tomar la imagen de un dispositivo, si el dispositivo está montado y funcionando?
  • ¿Qué sucede si el dispositivo está montado, pero estoy seguro de que no hay otra operación de E / S mientras se ddestá ejecutando?

Estoy seguro de que rsynces la mejor herramienta para las copias de seguridad, especialmente las incrementales.

Pero me interesa dd, porque quiero hacer una copia de seguridad de otros dispositivos de almacenamiento, y también copia los datos almacenados en el espacio no particionado. Por ejemplo, mi lector de libros electrónicos utiliza un espacio no particionado para almacenar uboot, kernel y otros datos.

Marco Sulla
fuente
Es importante qué sistema de archivos está utilizando, ¿en qué está interesado? Algunos tienen características específicas para esta tarea.
Vality

Respuestas:

11

En general no es seguro. El FS asume que las operaciones se escriben en cierto orden para que pueda escribir nuevos datos del archivo y luego hacer un puntero desde otros datos, los detalles exactos dependen del sistema de archivos. Imagínese si sucede lo siguiente:

  1. dd lee desde la ubicación X que contiene basura o algunos datos
  2. El sistema de archivos escribe en la ubicación X
  3. El sistema de archivos escribe en la ubicación X + 1 puntero a la ubicación X
  4. dd lee desde la ubicación X + 1 enlace a la ubicación X

Desde el punto de vista de la copia de seguridad, obtiene datos de basura. Sin embargo, hay varias formas de solucionarlo:

  • Congelar el sistema de archivos mediante un comando específico del sistema de archivos (creo que xfs_freezees uno y no conozco ningún otro, pero esa opción existe al menos en teoría)
  • Cree una instantánea lvm y cópiela. La copia será como si reiniciara la computadora (menos la reordenación del HDD), por lo que será un sistema de archivos sucio pero la copia será atómica. Tenga en cuenta que algunos sistemas de archivos como XFS deben congelarse primero.
  • Use rsync como lo sugieren otros. Ahora la copia es segura y no necesita LVM pero la copia no es atómica. Por lo tanto, aunque evita el problema anterior en el nivel del sistema de archivos, aún podría encontrarse con problemas con los archivos (bastante improbable, pero uno puede imaginar la falta de archivos mientras mv se ejecuta en segundo plano, por ejemplo)
  • Utilice el sistema de archivos con instantáneas como btrfs , tux3 , zfs , nilfs ... Luego evite ambos problemas: puede crear una instantánea y copiarla mediante rsync con una atomicidad completa. Sin embargo, tenga en cuenta que dicho sistema de archivos a menudo tiende a ser experimental.

Como última nota, ddpodría no ser la mejor forma de copia de seguridad. Copia un disco completo que a menudo es un desperdicio al copiar también la 'basura'. Si necesita tener un disco de imágenes, algo como partimage podría ser mejor. Si no tiene una mejor opción, está usando un rsync, tar en modo diferencial / incremental, etc. o un sistema de respaldo completo como bacula , tarsnap o uno de muchos otros. La deduplicación de datos puede hacer maravillas para los tamaños de las copias de seguridad.

Maciej Piechotka
fuente
1
+1 Esta es la única respuesta que realmente intenta responder a esta pregunta, excelentemente hecha para leer lo que el operador está preguntando y no despotricar sobre lo dd que es malo.
Vality
+1 para una buena respuesta. Pero no estoy de acuerdo con los despotricar. Dd no es malo. Es simplemente inapropiado para esto y explicar por qué ese es el caso es algo bueno.
Hennes
El punto 4 tiene las mismas limitaciones que el # 2, ¿verdad? Una aplicación podría estar en medio de la emisión de escrituras, y la instantánea no sabe nada de la transacción a nivel de aplicación.
Ben Voigt
Gracias, responde la pregunta. La respuesta de goldilocks también es buena, pero estoy interesado en hacer una copia de seguridad no solo de mi disco duro sino también de otros dispositivos de almacenamiento, y tal vez tuve que escribirlo antes.
Marco Sulla
@BenVoigt, hasta cierto punto, elimina una capa (sistema de archivos) y AFAIK es la 'más frágil'. Aún así, en algunos casos puede encontrar archivos a medio escribir, pero si la aplicación no los maneja, los archivos también pueden corromperse en muchas otras circunstancias (OOM, bloqueo, etc.), por lo que la aplicación escrita correctamente debería tratarlo.
Maciej Piechotka
7

Depende de para qué es exactamente la partición y para qué sirve la copia. Sin embargo, diré que, en general, ddes una herramienta inapropiada para hacer copias de seguridad de los sistemas de archivos . Eso no es para lo que estaba destinado, tampoco.

  • Perderá mucho tiempo copiando secciones vacías de la partición.

  • Puede generar inconsistencias si el sistema de archivos está montado actualmente, en parte porque es una entidad a nivel del sistema operativo y puede estar fuera de sincronización con el dispositivo de bloque subyacente. Llamar syncinicialmente no ayudará mucho con esto, ya que el proceso no es instantáneo.

Uso cp -ao en su rsynclugar. Luego, debe crear la partición de destino, por supuesto, por lo que no es tan fácil, pero es mucho más seguro y más flexible. Si necesita crear una imagen del sistema de archivos , consulte a continuación.

Si tiene la intención de copiar el sistema de archivos raíz, absolutamente no lo use dd. Debe usar algo como rsync -ax(o cp -axen directorios individuales de nivel superior), porque hay un montón de cosas que NO deben estar en la copia . En Linux, esto incluye:

/dev
/lost+found
/mnt
/proc
/run
/sys
/tmp

Algunos de estos son en realidad interfaces del kernel y no directorios reales en el disco. Si los copia, está copiando un montón de información que no se aplicará en la copia; Si intenta ejecutar un sistema con él, solo equivaldrá a un espacio desperdiciado, ya que la interfaz real se montará en la parte superior. Otros contienen información temporal en uso mediante procesos en ejecución y esos son más un problema, ya que el sistema no podrá resolver la basura si copia eso.

Si desea crear un archivo de imagen del sistema de archivos raíz (o cualquier sistema de archivos), cree un archivo de imagen vacío; este es un uso apropiado para dd:

dd if=/dev/zero of=whatever.img bs=1024 count=1000000

Esa es una imagen de 1024 MB (1000000 * 1024). Ajuste countsi lo desea de otro tamaño. Cree, por ejemplo, un extsistema de archivos en el archivo :

mke2fs whatever.img

Te advertirá que este no es un dispositivo de bloque real. Continuar. Ahora monte el archivo de imagen:

mount whatever.img /mnt/img

/mnt/imgdebe existir pero podría cualquier cosa. Ahora puedes rsync(o cp -a) entrar /mnt/img. El contenido permanecerá adentro whatever.imgcuando lo desmontes.

Sin embargo...

Para que quede claro, solo use el método de imagen del sistema de archivos que se acaba de describir si necesita un archivo de imagen por cualquier motivo. Si su objetivo es copiar la partición a otro disco duro, no necesita una imagen : cree una nueva partición con un sistema de archivos vacío en esa unidad, móntela y cópiela allí. En su lugar, podría simplemente poner el contenido del sistema de archivos en un directorio vacío y archivarlo:

tar -czf myarchive.tar.gz [the directory path]

Luego puede implementar esto en una partición existente (vacía o no) colocándola en el nivel superior y usando:

tar -xzf myarchive.tar.gz

Tenga en cuenta que sobrescribirá los archivos existentes si sus rutas coinciden con algo en el archivo. De lo contrario, dejará la jerarquía de directorios existente igual.

encerrada dorada
fuente
Escribir 1 en un archivo de imagen vacío es muy hábil, pero ¿qué ventajas tiene eso sobre guardar en un archivo .tar o .tgz?
Creek
@Creek No tiene ninguna ventaja, excepto que la imagen es montable. Agregué que en caso de que el objetivo del OP aquí sea producir una imagen que pueda usarse sin formato. De lo contrario, es mejor usar un archivo ya que un archivo no tiene un tamaño fijo. Agregaré una advertencia más clara sobre eso.
Ricitos
Gotcha, no lo creo. Sigue siendo un método genial para almacenar archivos.
Creek
2
@mpy Tanto GNU coreutils cpcomo rsync tienen la opción -xde evitar la recurrencia a otros sistemas de archivos. La respuesta de Maciej explica mejor por qué ddes absolutamente inapropiado aquí (es casi seguro que produzca una copia inutilizable a menos que tome las precauciones enumeradas por Mark , debido a las escrituras que de lo contrario sucederán durante la copia).
Gilles 'SO- deja de ser malvado'
2
ddno copiará cosas que no son directorios reales en el disco, por lo que no estoy seguro de dónde viene su primer punto. Por ejemplo, los dispositivos montados /mnt, los nodos /proc, etc., no serían parte de los datos que se ddcapturan, ya que no están en el disco. Para sistemas de archivos desmontados ddes perfectamente válido; terminas con un duplicado exacto. La única razón por la que no es apropiado para los sistemas de archivos montados es que los datos en el sistema podrían cambiar / escribirse parcialmente durante el largo período de tiempo que lleva ddoperar.
Jason C
1

rsync es la herramienta elegida para hacer una copia de seguridad de un sistema de archivos, y puede hacer una copia de seguridad de arranque del sistema operativo actual.

Algunas advertencias:

  • debes agregar las opciones apropiadas de sopa de letras
  • los caminos son bastante críticos
  • Se requiere una lista de exclusión, y será diferente para cada sistema operativo y posiblemente para cada configuración

Algunas ventajas de rsync sobre otros métodos como tar:

  • puede detener e iniciar la copia de seguridad en cualquier momento
  • muchas opciones para manejar archivos reemplazados como eliminar a pedido, eliminar antes, mover .....
  • Las copias de seguridad reanudadas (o repetidas) son mucho más rápidas que otros métodos, ya que se omiten los archivos copiados previamente. (El aumento de velocidad 20x es común)
  • la opción --link-dest puede crear copias de seguridad versionadas mientras solo copia nuevos archivos

Las copias de seguridad de las imágenes tienen su lugar, pero copian la unidad exactamente como está, incluidos los problemas que pueda tener. Una copia de seguridad de archivos crea un directorio nuevo y tiene el efecto secundario de linealizar (desfragmentar) su unidad en el proceso. Si desea hacer 10 copias idénticas de su sistema operativo actual, usaría rsync para el maestro de copias y luego dd (o similar) para el resto.

Pablo
fuente
1

Depende de lo que quiera decir con "sistema de trabajo actual". Si simplemente desea evitar el uso de un disco de arranque y no le preocupa la interrupción de los servicios que se ejecutan en la computadora, es posible:

  1. Cierre todos los programas no esenciales (básicamente, todo excepto el shell raíz en el que está trabajando; no intente esto desde un terminal X, use un shell de consola real). El modo de usuario único puede ayudar para esto.
  2. Si tiene discos montados que no sean la raíz del sistema, desmóntelos. No desmonte sistemas de archivos virtuales como / proc, / sys o / dev.
  3. Vaciar datos en caché en el disco restante: sync
  4. Volver a montar el sistema de ficheros raíz de sólo lectura: mount -o ro /.
  5. Monte su disco duro externo (probablemente recibirá una advertencia sobre no poder escribir /etc/mtab; ignórelo).
  6. Haz tu copia de seguridad.
  7. Desmonta tu disco duro externo.
  8. Reiniciar. Has hecho un desastre en tu sistema al llegar aquí, y reiniciar es la forma más rápida de volver a la normalidad.

Utilizo este método para hacer un archivo de una computadora desde la que acabo de actualizar y no espero usar mucho más. No es un método muy bueno para un sistema en uso activo: es lento (toma horas o días), las copias de seguridad son enormes (por lo que no puede conservar más que unas pocas), y es increíblemente perjudicial el uso del sistema que se está respaldando. arriba. Para las copias de seguridad diarias, recomiendo algo que funcione a nivel de sistema de archivos, como rsnapshot.

marca
fuente
Tenga en cuenta que el paso 4 puede ser peligroso en algunos sistemas de archivos, ya que escriben incluso en el modo de solo lectura. También en los sistemas más modernos (Linux 3.Algo I belive) sólo se puede vincular /etc/mtaba /proc/self/mount- que funcionará incluso cuando tiene cosas tales como chroots o FS espacios de nombres.
Maciej Piechotka
1
@MaciejPiechotka No conozco ningún sistema de archivos que escriba mientras está montado en modo de solo lectura y me parecería muy extraño. Algunos sistemas de archivos escriben cuando se montan en modo de solo lectura si el sistema de archivos no se desmontó previamente, por lo que el paso mount -o remount,ro /puede escribir. Pero una vez que este comando regrese, ¿en qué situación ocurrirían las escrituras posteriores?
Gilles 'SO- deja de ser malvado'
Los "programas no esenciales" para cerrar críticamente tendrán que incluir el subsistema de registro, que no consideraría no esencial.
Gilles 'SO- deja de ser malvado'
@Gilles, para hacer una imagen de disco del disco de arranque, cualquier programa que no esté directamente involucrado en la creación de la imagen no es esencial.
Marque el
Vale la pena mencionar que el modo de usuario único podría ayudar aquí.
Vality
1

Usa Clonezilla , en serio. Es la mejor utilidad de código abierto basada en Linux Norton Ghost. Hará tanto la partición como la clonación completa del disco, ya sea de disco a disco o de disco a sistema de archivos (guardar como un archivo). Es compatible con la mayoría de los sistemas de archivos Linux, NTFS, FAT32 y más. Puede guardar en un disco interno, una unidad externa o incluso a través de la red en recursos compartidos SMB o NFS.

Es muy fácil de usar y le ahorrará mucho tiempo.

Editar: para responder a la pregunta, no, no puede utilizar la ddmayoría de los sistemas de archivos mientras están montados porque corre el riesgo de terminar con una copia inconsistente de su sistema de archivos, ya que leer desde un dispositivo de bloque no es atómico. Por ejemplo, si está copiando 100 bloques, el sistema podría haber actualizado el primer bloque y el último bloque mientras estaba a mitad de camino, lo que significa que su copia incluirá el último bloque modificado pero no el primero.

sleblanc
fuente
+1: no responde la pregunta, pero parece ser una buena sugerencia para la copia de seguridad del disco duro.
Marco Sulla