
Me gustaría saber cuál sería la mejor manera de proceder con la clonación de mi disco duro hasta el punto de que pueda simplemente insertar la unidad clonada en mi PC y arrancar sin problemas desde ella como lo hago actualmente con la unidad existente.
Tengo un disco duro que ejecuta Debian y parece que está fallando según sus datos SMART. Tengo copias de seguridad y también puedo reinstalar el sistema operativo en una unidad nueva; sin embargo, mi primera preferencia en este momento sería clonar la unidad y actualmente no tengo otra opción que usar System Rescue CD 5.0.3 desde un CD de arranque.
El disco no tiene mucho contenido, probablemente menos de 10 GB de espacio utilizado, con muy pocos datos, por lo que no me preocupa demasiado el tiempo porque no espero que esto tome una cantidad extraordinaria de tiempo.
Si mal no recuerdo, revisé las opciones al instalar Debian para configurarlo como una unidad cifrada, así que creo que /dev/sda aparece como una partición de arranque no cifrada y el resto está cifrado, y luego en ese "resto", Tiene una pequeña partición raíz de 10 GB dentro del área cifrada y el resto no se utiliza actualmente.
También estoy tratando con unidades PATA más antiguas (no hay unidades SATA disponibles) y la computadora tiene un conector PATA en la placa base, al que se conecta un cable plano PATA con la unidad de CD-ROM para el arranque y el disco duro casi defectuoso. unidad, por lo que no hay espacio para conectar ninguna segunda unidad PATA para realizar una transferencia local.
Para solucionar esto, tengo una segunda computadora con el mismo conector PATA en la placa base, en la que conecté otra unidad de CD-ROM para arrancar y el disco duro de destino.
He iniciado ambas computadoras a través de la unidad de CD-ROM para abrir System Rescue CD 5.0.3 y estoy considerando mis opciones para clonar la unidad defectuosa lo mejor posible.
Las computadoras están disponibles a través de la LAN y me estoy conectando a ambas de forma remota a través de SSH a través de una terminal sin interfaz gráfica.
No estoy muy seguro de los tamaños de la unidad de origen y de la unidad de destino. Es posible que la unidad de origen tenga una capacidad mayor que la unidad de destino, por lo que lo ideal sería transferir solo el espacio utilizado en lugar de recorrer toda la unidad vacía.
Estaba considerando usar ddrescue como se describeaquí; sin embargo, sólo describe la transferencia de datos localmente.
ACTUALIZAR:Estoy viendo cómo el instalador de Debian configuró la unidad de origen. Parece que tengo tres particiones y sólo la última está cifrada:
src # fdisk -l /dev/sda
Disk /dev/sda: 37.3 GiB, 40027029504 bytes, 78177792 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x332e4146
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 247807 245760 120M 83 Linux
/dev/sda2 247808 8060927 7813120 3.7G 82 Linux swap / Solaris
/dev/sda3 8060928 78176255 70115328 33.4G 83 Linux
src# cryptsetup --verbose isLuks /dev/sda1
Device /dev/sda1 is not a valid LUKS device.
Command failed with code 22: Invalid argument
src# cryptsetup --verbose isLuks /dev/sda2
Device /dev/sda2 is not a valid LUKS device.
Command failed with code 22: Invalid argument
src# cryptsetup --verbose isLuks /dev/sda3
Command successful.
Creo que también estoy intentando realizar transferencias entre unidades de capacidad similar: una unidad PATA de 40 GB a otra unidad PATA de 40 GB.
Aquí está el destino:
dest# fdisk -l /dev/sda
Disk /dev/sda: 37.3 GiB, 40027029504 bytes, 78177792 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
ACTUALIZAR:Estoy considerando usar NBD para exponer las particiones de la unidad de origen a través de la LAN para poder usar ddrescue desde el destino.
Esto es lo que intenté hasta ahora para exponer la unidad de origen...
src# nbd-server -d 8000 /dev/sda
...y montar localmente en la computadora de destino:
dest# nbd-client src 8000 /mnt/nbd-sda
Desafortunadamente, recibo un error al intentar esto; Ni siquiera puedo montar el dispositivo remoto:
Warning: the oldstyle protocol is no longer supported.
This method now uses the newstyle protocol with a default export
Error: Cannot open NBD: No such file or directory
Please ensure the 'nbd' module is loaded.
Exiting.
ACTUALIZAR:Lo siguiente que intento es simplemente recrear manualmente las particiones en la unidad de destino.
Empecé copiando el MBR sobre:
src# dd if=/dev/sda of=/tmp/sda-mbr.dat bs=512 count=1
dest# scp root@src:/tmp/sda-mbr.dat /tmp
dest# dd if=/tmp/sda-mbr.dat of=/dev/sda
dest# sync
Antes de continuar, pensé que esta vez sería útil al menos crear una partición de recuperación.
dest# fdisk /dev/sda
Estoy eliminando la última partición y dándome unos 15 GB de espacio para una partición final.
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x332e4146
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 247807 245760 120M 83 Linux
/dev/sda2 247808 8060927 7813120 3.7G 82 Linux swap / Solaris
/dev/sda3 8060928 45809663 37748736 18G 83 Linux
/dev/sda4 45809664 78177791 32368128 15.4G 83 Linux
Necesito crear la misma partición cifrada en el destino que /dev/sda3 en el origen; También podría hacer lo mismo con esta partición de recuperación:
dest# cryptsetup luksFormat /dev/sda3 --verify-passphrase
dest# cryptsetup luksFormat /dev/sda4 --verify-passphrase
A continuación, abra la partición de recuperación cifrada:
dest# cryptsetup open /dev/sda4 sda4-opened
dest# mkdir /mnt/sda4-open
dest# mke2fs -j /dev/mapper/sda4-opened
dest# mount /dev/mapper/sda4-opened /mnt/sda4-open
Al menos ahora puedo montar esta partición de recuperación de forma remota y transferir los datos a la mejor unidad.
Primero, abrí la partición cifrada en la unidad de origen:
src# cryptsetup open /dev/sda3 sda3-opened
src# mkdir /mnt/sda3-open
src# mount /dev/mapper/sda3-opened /mnt/sda3-open
Ahora con df, puedo ver que aquí solo estoy usando 12 GB de espacio en disco.
Desmontemos pero mantengámoslo mapeado:
src# umount /mnt/sda3-open
src# rmdir /mnt/sda3-open
Ahora quería montar la partición de recuperación en la unidad de origen:
src# mkdir /mnt/dest-sda4
src# sshfs root@dest:/mnt/sda4-open /mnt/dest-sda4
Con esto montado, ahora puedo ejecutar ddrescue:
src# ddrescue -f -n /dev/sda1 /mnt/dest-sda4/sda1.ddrescue.img /mnt/dest-sda4/sda1.ddrescue.log
Esto produjo una imagen del mismo tamaño que la partición original, por lo que parece que esto no excluye el espacio no utilizado.
Lo estoy intentandofsarchiveren cambio ahora:
src# fsarchiver savefs /mnt/dest-sda4/sda1.fsarchiver.img.fsa /dev/sda1
Statistics for filesystem 0
* files successfully processed:....regfiles=314, directories=6, symlinks=0, hardlinks=0, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0
Montar /dev/sda1 y ejecutar df muestra que solo está usando 33 MB, y el archivo .fsa solo tiene 24 MB, por lo que tal vez esté comprimido. Es mejor que los 120 MB originales.
Ahora probemos con la partición raíz sda3 para ver cómo funciona:
src# fsarchiver savefs /mnt/dest-sda4/sda3.fsarchiver.img.fsa /dev/mapper/sda3-opened
Probablemente esto llevará un tiempo, así que guardaré esta actualización por ahora.
ACTUALIZAR:Esto fue más rápido de lo que esperaba. Esto es lo que terminé obteniendo:
dest# ls -lh
total 7.7G
drwx------ 2 root root 16K Apr 8 01:49 lost+found
-rw-r--r-- 1 root root 24M Apr 8 02:04 sda1.fsarchiver.img.fsa
-rw-r--r-- 1 root root 7.7G Apr 8 02:43 sda3.fsarchiver.img.fsa
Aquí está la parte aún más interesante al observar el resultado del comando anterior:
src# fsarchiver savefs /mnt/dest-sda4/sda3.fsarchiver.img.fsa /dev/mapper/sda3-opened
Statistics for filesystem 0
* files successfully processed:....regfiles=149025, directories=84796, symlinks=20559, hardlinks=127551, specials=1269
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0
Si estoy leyendo esto correctamente, es alentador porque no tuvo ninguna dificultad para leer datos desde la unidad de origen.
Limpiemos algunos:
src# umount /mnt/dest-sda4
src# rmdir /mnt/dest-sda4
A continuación, restauraré los archivos archivados en /dev/sda1 y /dev/sda3 del destino, pero primero echemos un vistazo y veamos qué tenemos en la unidad de destino porque olvidé dónde lo dejé al configurarlo.
Primero, ¿hay algún sistema de archivos en /dev/sda1?
dest# mkdir /mnt/sda1
dest# mount /dev/sda1 /mnt/sda1
NTFS signature is missing.
Failed to mount '/dev/sda1': Invalid argument
The device '/dev/sda1' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?
De acuerdo. No esperaba ningún sistema de archivos pero no esperaba un mensaje NTFS. Entonces no hay nada allí.
Restauremos la primera imagen de partición:
dest# fsarchiver restfs /mnt/sda4-open/sda1.fsarchiver.img.fsa id=0,dest=/dev/sda1
Statistics for filesystem 0
* files successfully processed:....regfiles=314, directories=6, symlinks=0, hardlinks=0, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0
Montemos ahora:
dest# mount /dev/sda1 /mnt/sda1
dest# ls -l /mnt/sda1
...
dest$ df -h | grep sda1
...
Las cosas pintan bien hasta ahora.
Hagamos la partición raíz ahora.
dest# cryptsetup open /dev/sda3 sda3-opened
dest# mkdir /mnt/sda3-open
dest# mount /dev/mapper/sda3-opened /mnt/sda3-open
NTFS signature is missing.
Failed to mount '/dev/mapper/sda3-opened': Invalid argument
The device '/dev/mapper/sda3-opened' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?
Lo mismo que antes: no hay nada ahí.
Restauremos la imagen de la partición:
dest# fsarchiver restfs /mnt/sda4-open/sda3.fsarchiver.img.fsa id=0,dest=/dev/mapper/sda3-opened
Statistics for filesystem 0
* files successfully processed:....regfiles=149025, directories=84796, symlinks=20559, hardlinks=127551, specials=1269
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0
Montemos ahora:
dest# mount /dev/mapper/sda3-opened /mnt/sda3-open
dest# ls -l /mnt/sda3
...
dest$ df -h | grep sda3
...
Las cosas pintan bien hasta ahora.
También ejecuté lo siguiente en ambos:
# fsarchiver probe simple
Las cosas se ven como se esperaba.
Una cosa que creo que todavía me falta es que creo que esto arruinará a Grub. Me parece recordar algo acerca de que la Etapa 1 arrancó bien desde el MBR, pero luego no pudo encontrar la Etapa 2 en la partición /boot cuando intenté hacer algo como esto la última vez.
Esta páginallevado aeste, que describe cómo reparar Grub:
dest# mount -o bind /proc /mnt/sda3-open/proc
dest# mount -o bind /dev /mnt/sda3-open/dev
dest# mount -o bind /sys /mnt/sda3-open/sys
dest# chroot /mnt/sda3-open /bin/bash
(dest) chroot# mount /dev/sda1 /boot/
(dest) chroot# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
(dest) chroot# umount /boot
(dest) chroot# exit
dest# umount /mnt/sda3-open/{sys,dev,proc}
Cuando reinicio, esto debería funcionar y la unidad debería arrancar correctamente; sin embargo, ya es tarde y no quiero entrar en detalles todavía.
Además, todavía no estoy convencido de que esto vaya a tener un final feliz. El comando grub-install anterior indicó que se está instalando para i386, pero creo que quiero 64 bits.
Es posible que tenga que rehacer esta parte reiniciando System Rescue CD a través de Rescue64. No estoy seguro de si el arranque predeterminado mostraba 32 bits.
De nuevo, mañana me ocuparé del resto.
ACTUALIZAR:Así que la buena noticia es que el arranque predeterminado para System Rescue CD era Rescue64, por lo que no habría habido ningún problema.
Resulta que me olvidé por completo de LVM y los UUID de la unidad obviamente no coinciden.
...
cryptsetup: lvm is not available
cryptsetup: lvm is not available
cryptsetup: lvm is not available
cryptsetup: lvm is not available
ALERT! /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx does not exist.
Check cryptopts=source= bootarg: cat /proc/cmdline
or missing modules, devices: cat /proc/modules; ls /dev
-r Dropping to a shell. Will skip /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxx
xxxxxxxx if you can't fix.
modprobe: module ehci-orion not found in modules.dep
BusyBox vx.xx.x (Debian x:x.xx.x-x+xxxxxx) built-in shell (ash)
Enter 'help for a list of built-in commands.
/bin/sh: can't access tty: job control turned off
(initramfs)
Supongo que podría luchar con estos, pero no me molestaré. En lugar de eso, voy a intentar lo que sugirió Dirkt y clonar el /dev/sda completo (UUID y todo), ya que 40 GB son solo cuatro veces 10 GB, que transfirí anoche y no me tomó mucho tiempo. LAN.
No pude hacer esto anoche porque no pude hacer que NBD funcionara, así que recurrí a guardarlo en archivos de imagen. No puedo hacer eso si estoy haciendo una clonación completa del disco, así que veamos si las canalizaciones o canalizaciones con nombre funcionan mejor.
Entonces, volviendo al principio, ambas computadoras ahora se iniciaron desde el CD de inicio del System Rescue CD, ambas están disponibles a través de la red a través de sus respectivas direcciones IP asignadas por DHCP y ambas tienen su contraseña de root configurada mediante el passwd
comando.
Antes de hacer esto con las unidades reales, quiero practicar con una pequeña falsa, así que comenzaré por configurarla.
src# dd if=/dev/zero of=/root/tempsrc.dat bs=1M count=128
...
src# fdisk -l /root/tempsrc.dat
Disk /root/tempsrc.dat: 128 MiB, 134217728 bytes, 262144 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8b8647e7
Device Boot Start End Sectors Size Id Type
/root/tempsrc.dat1 * 2048 34815 32768 16M 83 Linux
/root/tempsrc.dat2 34816 100351 65536 32M 82 Linux swap / Solaris
/root/tempsrc.dat3 100352 262143 161792 79M 83 Linux
src# mkdir /mnt/tempsrc
src# mkdir /mnt/tempsrc-mounted
src# losetup /dev/loop1 /root/tempsrc.dat -o $(expr 2048 \* 512)
src# mke2fs /dev/loop1
src# mount /dev/loop1 /mnt/tempsrc-mounted
src# echo 'This is partition 1' > /mnt/tempsrc-mounted/note1.txt
src# umount /mnt/tempsrc-mounted
src# losetup -d /dev/loop1
src# losetup /dev/loop1 /root/tempsrc.dat -o $(expr 100352 \* 512)
src# cryptsetup luksFormat /dev/loop1 --verify-passphrase
src# cryptsetup open /dev/loop1 loop1-opened
src# mke2fs -j /dev/mapper/loop1-opened
src# mount /dev/mapper/loop1-opened /mnt/tempsrc-mounted
src# echo 'This is partition 3' > /mnt/tempsrc-mounted/note3.txt
src# umount /mnt/tempsrc-mounted
src# cryptsetup close loop1-opened
src# losetup -d /dev/loop1
src# rmdir /mnt/tempsrc-mounted
src# rmdir /mnt/tempsrc
Lo sé. No volví a tratar con LVM. Oh bien.
Ahora tengo un /root/tempsrc.dat que contiene una imagen de un disco como una imagen de tarjeta SD que quiero transferir al destino remoto. En la primera partición hay un archivo llamado note1.txt
, y la tercera partición está cifrada y tiene un note3.txt
contenido diferente. Me gustaría asegurarme de poder acceder a todo esto después de ejecutarlo fsarchiver
y transferirlo.
Preparemos algo en el destino:
dest# dd if=/dev/zero of=/root/tempdest.dat bs=1M count=128
dest# fdisk -l /root/tempdest.dat
Disk /root/tempdest.dat: 128 MiB, 134217728 bytes, 262144 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Creemos también dispositivos de loopback para estos:
src# losetup /dev/loop1 /root/tempsrc.dat
dest# losetup /dev/loop2 /root/tempdest.dat
Ahora, mientras me estaba preparando para realizar la transferencia, descubrí que fsarchiver no puede manejarlo como se indica.aquíyaquí.
Esperaba hacer algo como lo siguiente:
src# fsarchiver savefs /tmp/fifo1 /dev/loop1
dest# fsarchiver restfs /tmp/fifo2 id=0,dest=/dev/loop2
ACTUALIZAR:Reemplacé mi unidad de destino de 40 GB con una tercera unidad temporal y encendí la PC de destino.
Comencemos configurando esta nueva unidad:
dest# mkdir /mnt/sda-open
dest# mount /dev/sda1 /mnt/sda-open
Intentando transferir nuevamente, excepto que esta vez operando en todo el /dev/sda a la vez:
src# mkdir /mnt/dest-sda
src# sshfs root@dest:/mnt/sda-open /mnt/dest-sda
src# fsarchiver savefs /mnt/dest-sda/src-sda.fsarchiver.img.fsa /dev/sda
filesys.c#317,generic_mount(): partition [/dev/sda] cannot be mounted on [/tmp/fsa/20180408-222928-xxxxxxxx-00] as [vfat] with options []
oper_save.c#1032,filesystem_mount_partition(): cannot mount partition [/dev/sda]: filesystem may not be supported by either fsarchiver or the kernel.
removed /mnt/dest-sda/src-sda.fsarchiver.img.fsa
Bueno, hasta aquí esa idea. Supongo que lo llaman archivador "FS" por una razón. Probemos con partimage.
src# partimage --compress=1 save /dev/sda /mnt/dest-sda/src-sda.partimg.bz2
Esto tampoco funcionó; aparentemente esto se refiere a sistemas de archivos y no a discos en su conjunto.
Dado que estamos operando en el disco como un todo, veamos si ddrescue funciona ahora.
src# ddrescue --no-scrape /dev/sda /mnt/dest-sda/src-sda.ddrescue.img /mnt/dest-sda/src-sda.ddrescue.img.log
GNU ddrescue 1.21
Press Ctrl-C to interrupt
ipos: 785580 kB, non-trimmed: 0 B, current rate: 12320 kB/s
opos: 785580 kB, non-scraped: 0 B, average rate: 10615 kB/s
non-tried: 39241 MB, errsize: 0 B, run time: 1m 14s
rescued: 785580 kB, errors: 0, remaining time: 1h
percent rescued: 1.96% time since last successful read: 0s
Copying non-tried blocks... Pass 1 (forwards)
Comencé esto a las 5:41 pm para una unidad de 40 GB a través de una LAN de 100 Mbps. Por el momento, la salida afirma que estará listo en aproximadamente una hora.
Respuesta1
Bueno, parece que estaba en el camino correcto con el disco intermedio. Esto no es lo que pretendía hacer originalmente, pero me ayudó a superar mi problema.
La nueva unidad ahora es un clon de la unidad original y funciona muy bien.
Para clonar mi unidad original con las limitaciones presentadas, en particular requiriendo pasar por la LAN con un CD de rescate del sistema sin Clonezilla, pude superar esto de la siguiente manera.
Primero, conecté el disco duro temporal de 160 GB a una PC de repuesto como se describe anteriormente, e inicié ambas computadoras con mi disco CD de arranque System Rescue.
Desde mi src
PC, monté el disco duro de 160 GB en la dest
PC localmente usando sshfs
y luego ejecuté ddrescue
como se describe arriba para crear una imagen del disco duro defectuoso en el disco duro de 160 GB como un archivo de imagen. Esta unidad de 40 GB se transformó en un archivo de imagen de 40 GB y tardó aproximadamente una hora en completarse en mi LAN de 100 Mbps.
Voy a mantener esta imagen para no tener que volver a hacer esto; A partir de este momento, las copias de seguridad incrementales de los datos deberían ser suficientes para restaurarlos después de que se haya capturado esta imagen inicial.
Una vez que se completó esta fase, reemplacé la unidad defectuosa de 40 GB con la unidad de reemplazo que tiene la misma capacidad de 40 GB en el src
host sin tocarla ni siquiera apagarla dest
.
Luego, encendí src
nuevamente con el CD System Rescue iniciado, monté el dest
directorio sshfs
nuevamente y esta vez restauré desde mi imagen con:
dest# ddrescue --force --no-scrape /mnt/dest-sda/src-sda.ddrescue.img /dev/sda /mnt/dest-sda/src-restore-sda.ddresue.img_2018-04-08.log
Esto tardó aproximadamente otra hora en completarse.
Como se trataba de una imagen de una unidad completa, no de particiones, pude simplemente expulsar el CD y reiniciar src
, y todo quedó como estaba.