¿Cómo clonar mejor un sistema en ejecución en un nuevo disco duro usando rsync?

22

Tengo un sistema que se ejecuta como un servidor que tiene un disco duro defectuoso. Si bien todos los datos importantes están en un RAID y se realiza una copia de seguridad y todo eso, no tengo una imagen del sistema en sí. No hay una necesidad específica, ya que puedo hacer la instalación, por supuesto, pero todavía quiero intentar hacer una copia en caliente antes de seguir la ruta de restauración. Sé que hay algunos inconvenientes en esto como un proceso, pero no creo que haya muchos inconvenientes en probarlo como primer recurso.

  • SO: Ubuntu 12.04.4 LTS
  • Sin cabeza
  • No espero instalar demasiado software nuevo ya que el disco ya está fallando :)
  • El sistema esta funcionando. Tengo miedo de detenerlo, aumenta la posibilidad de que el disco no vuelva a funcionar. Esto significa que dd podría estar fuera?
  • El nuevo disco no tiene el mismo tamaño (es dos veces más grande) que el anterior, lo que complica aún más el problema de dd.

Mi idea era

  • conecte en caliente la nueva unidad del sistema
  • hacer un sistema de archivos
  • montarlo en / mnt / somedir
  • rsync los archivos
  • algo de magia fstab
  • algo de magia de arranque

Las preguntas que aún tengo son:

¿Cuál sería un buen comando rsync? Estaba planeando en:

rsync -aAXx  / /mnt/somedir/ 
   --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}

(Estoy omitiendo algunos dir más, por ejemplo, mi incursión montada, etc.)

Donde están las opciones:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-A, --acls                  preserve ACLs (implies -p)
-X, --xattrs                preserve extended attributes
-x, --one-file-system       don't cross filesystem boundaries

Estoy omitiendo específicamente -H, -v y --progress para acelerar el proceso.
¿Funcionaría eso para Ubuntu? No estoy seguro de si Ubuntu usa enlaces duros, pero no creo que necesite la opción, ¿verdad?

Después de esta ejecución, podría reiniciar (tal vez con una unidad usb en vivo) y volver a ejecutar el rsync si el disco anterior aún se inicia. Esto solucionaría cualquier archivo no legible / modificado porque el sistema se estaba ejecutando, supongo.


¿Cómo arreglar el arranque?
Entonces, mi plan sería cambiar el UUID /en mi fstab (todavía tengo que buscar en Google cómo encontrar el uuid) y hacer algo de magia para que el sistema se inicie desde el nuevo disco

¿He olvidado algo o he planeado algo específicamente estúpido?

Nanne
fuente

Respuestas:

16

Puede tomar el UUID para todos los dispositivos de bloque con el blkidcomando. (Desea el que solo dice UUID, no PARTUUID)

Las opciones de rsync que uso son -avhPHAXx.

No creo que -v o --progress aceleren nada a menos que estés en una consola / tty muy lenta.

El uso de -x elimina la necesidad de todas sus exclusiones, suponiendo que todas estén en diferentes sistemas de archivos (en mi sistema, todas excepto las perdidas + encontradas).

El único programa utilizado con frecuencia que conozco que utiliza enlaces duros (al menos en mi sistema) es git, por eso agrego la opción -H. El único problema que creo que tendría al no usar -H es que ocupará un poco más de espacio.

En cuanto al gestor de arranque, si está utilizando GRUB2 con MBR, entonces el comando que uso es grub-install /dev/sda(reemplace sda ​​con la unidad correcta para usted). Eso debería hacer que la nueva unidad de arranque. Si está utilizando un gestor de arranque diferente o UEFI, entonces buscaría en google cómo hacer que la nueva unidad se inicie correctamente. Solo recuerde que / boot en la nueva unidad deberá estar en la misma partición que actualmente (suponiendo que no esté usando un UUID para / boot también), de lo contrario, deberá modificar fstab en consecuencia.

bparker
fuente
No creo que los tenga en sistemas separados, me temo, por lo que la exclusión parece prudente. Estoy leyendo cosas mixtas sobre la velocidad de - v, así que no estoy seguro de qué hacer allí;). Git es un buen punto, estoy seguro / ¡en casa tengo algo de eso!
Nanne
1
Bueno, / proc, / sys y muy probablemente / dev son definitivamente sistemas de archivos / puntos de montaje diferentes de /, por lo que no hay absolutamente ninguna razón para excluirlos cuando tiene -x. Si no está seguro de qué es parte de su sistema de archivos raíz o no, simplemente ejecute mountpara verificar. Cualquier cosa que esté allí no necesitará ser excluida manualmente.
bparker
No estoy seguro de cómo y por qué, pero las exclusiones estaban mal de todos modos. En realidad estaban en la carrera en seco que hice, sin saber por qué. (bueno, copié el formato de un lugar semi-aleatorio, ¿esa podría ser la razón?). De todos modos, con el -x firmemente establecido por su consejo, no me preocupé demasiado, lo único que sucedió extra fue que algunas cosas sin importancia (por ejemplo, copias de seguridad antiguas) también se han 'guardado'.
Nanne
Esto me ahorró un $$. Cloné el sistema de 12GB + en Linode en un nodo nuevo. Después de más de 5 años después, esto todavía funciona. ¡Gracias chicos!
Geeth
Entonces, cuando particiono el sistema de archivos clonado listo para aceptar los clones, ¿debería mi partición raíz tener el indicador de arranque establecido mientras los mantengo insincrificados, o lo configuro justo antes de poner la unidad clonada en producción? De lo contrario, supondría que la unidad clonada es arrancable, lo que realmente no se desea. En mi situación, mi unidad de clonación es un disco en un servidor separado. Y Rsync se usa para mantenerlo alineado con prod.
NZ Dev
11

Acabo de hacer esto con éxito (después de un par de intentos).

solía

sudo rsync -ahPHAXx --delete --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} / /mnt

Luego restablezco mi /mnt/etc/fstabarchivo para la partición de arranque y mi espacio de intercambio.

Entonces necesitaba reiniciar GRUB

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
sudo grub-install --recheck /dev/sdX
sudo update-grub
teeks99
fuente
Tenga en cuenta que esto es solo para discos con formato MBR.
Teque5
2

No intente arreglar el arranque con esta unidad; mi recomendación:

  1. Conecte una unidad de disco en otra máquina en lugar de arriesgarse a un hotswap en la máquina que falla.
  2. rsync sus archivos que no son del sistema a través del nuevo disco.
  3. En un disco duro separado, cree un arranque, una raíz mínima y un intercambio. Instale el mismo sistema operativo que desea clonar desde el disco duro enfermo.
  4. Arranque desde este nuevo disco (idealmente en una máquina separada, si no puede arriesgarse a un tiempo de inactividad en el host de destino, de lo contrario puede arrancar el host de destino con este disco).
  5. Agregue el disco del paso 2 a este nuevo sistema, con los puntos de montaje correctos. Ahora tiene un clon de la unidad del sistema. Puede (opcionalmente) copiar las particiones en este nuevo disco, pero mi recomendación es mantener el disco como un requisito mínimo para iniciar su sistema operativo. Como se habrá dado cuenta, tener demasiadas cosas en la partición primaria dificulta la recuperación. Asegúrese de copiar la configuración de red correctamente ya que su servidor no tiene cabeza.
  6. Simplemente reemplace la unidad en el sistema enfermo con este nuevo par de discos (si elige no iniciar el destino inicialmente en el paso 4).
  7. Reiniciar.
Burhan Khalid
fuente
Puedo arriesgar el tiempo de inactividad, es un servidor no esencial. Iba por el hotswap (hot-add básicamente) porque esa copia sería mucho más rápida. No debería haber demasiados riesgos, pensé, ya que estamos hablando de SATA (al menos II). Aparte de eso, ¿cuál es la razón para sugerir un disco de arranque adicional? ¿Eso no complicaría las cosas para algún software ya instalado, homedirs, etc.? Parece más trabajo que estoy tratando de evitar: D
Nanne
Es lo que uso en la producción; Monto / home, / etc, / var, / usr y / opt en discos externos (en realidad en LVM), y / y / boot en un disco separado. De esta manera, no tengo que preocuparme cuando falla el disco principal, simplemente lo cambio sin afectar mis servicios :) Es un poco de trabajo inicialmente pero te ahorra a largo plazo. Especialmente cuando se queda sin espacio en una partición y necesita agregar un volumen sin tiempo de inactividad.
Burhan Khalid
Si bien haces un buen punto, no es un requisito que tengo actualmente, ni necesito :). Hay varios otros discos en el sistema (aproximadamente 7) y tengo que trazar la línea en alguna parte; D. Por lo tanto, el sistema operativo no necesita dividirse en este momento. Quiero decir: estoy de acuerdo en que el sistema es bueno, solo que no es algo que estoy buscando ahora; D. Entonces, si lo dejo todo en 1 disco, el hecho de que copie externo lo hará muy lento, ¿no?
Nanne
Depende de su interfaz con el externo, a través de Ethernet debe ser rápido, a través de USB 2 más rápido, en USB 3 aún más rápido. No lo hará muy lento; por supuesto, no copie los directorios en los que se está escribiendo (por ejemplo, / tmp, que no necesita de todos modos) o en cualquier lugar en el que se estén escribiendo tuberías.
Burhan Khalid
0

He pasado mucho tiempo en una distribución Centos Freepbx para rsync y tengo un nuevo disco de arranque y, finalmente, después de arreglar fstab y grub UUID, no funciona.

El último paso para que funcione es

dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1
dd if=/tmp/mbrsda.bak of=/dev/sdb bs=446 count=1
grub

Cuando esté en la CLI de Grub (es decir, en el grub>indicador):

device (hd0) /dev/sda
device (hd1) /dev/sdb
root (hd0,0) 
setup (hd0) 
root (hd1,0)
setup (hd1)
quit

Presione entery ahora puede apagar, quitar el disco viejo y arrancar con uno nuevo.

Comdif
fuente