Cómo usar el
ntfsclone
y el dd
para crear imágenes con ntfsclone
de particiones en sistemas en los que no tenemos sitio para almacenarlas o para clonar discos completos con dd
directamente a través de la red sin necesidad de crear un fichero de imagen intermedio. Imaginemos, para empezar, el caso de que queremos hacer una imagen de una de las particiones NTFS de nuestro sistema. Puede ser para su posterior recuperación o puede ser para usar esa imagen con otros sistemas (y, por tanto, clonar el actual). Pero, desafortunadamente, no tenemos espacio en otra partición del sistema para almacenar el fichero de imagen localmente tal y como hacíamos en Alternativas al Ghost para crear imágenes de NTFS en Linux: Partimage y ntfsclone.
Si vamos a usar Partimage, no vamos a tener ningún problema para escribir la imagen remotamente, ya que es precisamente una de sus funcionalidades: la posibilidad de tener un servidor de imágenes de Partimage donde podemos escribir todas las imágenes de nuestros sistemas a través de la red.
Centrémonos, por tanto, en el
ntfsclone
, y en cómo usarlo a través de la red. La propia página de man
del ntfsclone
nos sugiere cómo hacerlo a través de SSH:Backup an NTFS volume to a remote host, using ssh. Please note, that ssh may ask for a password!
ntfsclone --save-image --output - /dev/hda1 | \\ gzip -c | ssh host 'cat > backup.img.gz'Restore an NTFS volume from a remote host via ssh. Please note, that ssh may ask for a password!
ssh host 'cat backup.img.gz' | gunzip -c | \\ ntfsclone --restore-image --overwrite /dev/hda1 -
Sin embargo, a mí me gusta más usar netcat para este propósito. netcat se autodenomina “la navaja suiza de TCP/IP”, y es verdad que lo es. De las varias implementaciones existentes, si usamos la original (cuyo autor es *Hobbit*) y leemos su
README
(en Debian/Ubuntu en /usr/share/doc/netcat-traditional/README.gz
), veremos unos pocos ejemplos de sus posibilidades, suficientes para sorprendernos de la enorme versatilidad de esta herramienta.En su forma más sencilla de uso, a mí me gusta ver a netcat como una tubería (pipe) que se extiende a otra máquina de la red. Por ejemplo, si hacemos:
sistema1 $ echo "Hola Mundo" | nc -q 0 -lp 2222 sistema2 $ nc sistema2 2222 | cat Hola Mundo
es como si hiciéramos:
echo "Hola Mundo" | envia_por_red_a_sistema2 | cat
Por tanto, para escribir una imagen de
ntfsclone
en otro sistema, podríamos (tras haber arrancado Linux en dicho sistema desde una instalación propia o desde un LiveCD) hacer (sisdest es donde vamos a guardar la imagen de la partición NTFS y sisorig es donde tenemos la partición NTFS):sisdest $ nc -lp 2222 > ntfsclone.gz sisorig # ntfsclone -o - -s /dev/sda1 | gzip | nc -q 0 sisdest 2222 ntfsclone v1.13.2-WIP (libntfs 10:0:0) NTFS volume version: 3.1 Cluster size : 4096 bytes Current volume size: 10725732352 bytes (10726 MB) Current device size: 10725732864 bytes (10726 MB) Scanning volume ... 100.00 percent completed Accounting clusters ... Space in use : 1231 MB (11.5%) Saving NTFS to image ... 100.00 percent completed Syncing ...
Para escribir la imagen de vuelta a la partición, podemos hacer:
sisdest $ cat ntfsclone.gz | nc -q 0 -lp 2222 sisorig # nc sisdest 2222 | gzip -d | ntfsclone -r -O /dev/sda1 - ntfsclone v1.13.2-WIP (libntfs 10:0:0) Ntfsclone image version: 10.0 Cluster size : 4096 bytes Image volume size : 10725732352 bytes (10726 MB) Image device size : 10725732864 bytes Space in use : 1231 MB (11.5%) Offset to image data : 56 (0x38) bytes Restoring NTFS from image ... 100.00 percent completed Syncing ...
Si quisiéramos clonar la partición directamente en otro sistema, sin pasar por un fichero de imagen intermedio, podríamos hacerlo en un único comando (por sistema):
sisdest # nc -lp 2222 | gzip -d | ntfsclone -r -O /dev/sda1 - sisorig # ntfsclone -o - -s /dev/sda1 | gzip | nc -q 0 sisdest 2222
Si queremos clonar una partición no NTFS o si queremos clonar todo el disco en otro sistema, podemos usar
dd
:sisdest # nc -lp 2222 | gzip -d | dd of=/dev/sda sisorig # dd if=/dev/sda | gzip | nc -q 0 sisdest 2222
Sin embargo, mientras que la salida del
ntfsclone
nos dice qué porcentaje de la imagen lleva leído o escrito, el dd
no dice absolutamente nada hasta que finaliza. Como clonar un disco de muchos Gigabytes puede ser una tarea bastante larga, puede ser muy útil introducir entre los comandos de la tubería un pv
para saber por dónde va la copia. El pv
es un interesante comando que, usado en una tubería (pipe), copia directamente la información de la entrada estándar en la salida estándar y además nos informa del volumen de datos que ha movido por la tubería por la salida de error:sisdest # nc -lp 2222 | pv | gzip -d -c | dd of=/dev/sda 949MB 0:02:56 [9.65MB/s] [ <=> ] sisorig # dd if=/dev/sda | gzip | pv | nc -q 0 sisdest 2222 822MB 0:02:38 [8.15MB/s] [ <=> ]
En el ejemplo anterior, como hemos puesto el
pv
entre el gzip
y el nc
, medimos la tasa de datos comprimidos que enviamos a la red. Si lo comparamos con el informe que nos da el dd
al final de su ejecución de datos escritos en el dispositivo (sin comprimir), podremos ver cuánto se han comprimido los datos antes de ser enviados por la red:sisdest # nc -lp 2222 | pv | gzip -d | dd of=/dev/sda2 19.7GB 0:49:51 [6.76MB/s] [ <=> ] 103426470+0 records in 103426470+0 records out 52954352640 bytes (53 GB) copied, 2991.03 s, 17.7 MB/s sisorgi # dd if=/dev/sda2 | gzip | pv | nc -q 0 sisdest 2222 19.7GB 0:49:49 [6.76MB/s] [ <=> ] 103426470+0 records in 103426470+0 records out 52954352640 bytes (53 GB) copied, 2989.45 s, 17.7 MB/s
También podríamos poner el
pv
entre el dd
y el gzip
para ver qué cantidad de datos sin comprimir, de los que tiene el disco o partición, hemos procesado ya.Sin embargo, si vamos a hacer esta operación de clonado de discos muy a menudo, tal vez nos interese probar si no nos interesa eliminar el comando
gzip
de las tubería de ambos sistemas remotos: Si los sistemas de ambos extremos no son capaces de comprimir y descomprimir datos a más velocidad de la que tiene la red, es muy posible que nos interese más enviar los datos por la red sin comprimir:sisdest # nc -lp 2222 | pv | dd of=/dev/sda2 49.3GB 0:20:09 [41.7MB/s] [ <=> ] 103426470+0 records in 103426470+0 records out 52954352640 bytes (53 GB) copied, 1209.69 s, 43.8 MB/s sisorig # dd if=/dev/sda2 | pv | nc -q 0 sisdest 2222 49.3GB 0:20:08 [41.8MB/s] [ <=> ] 103426470+0 records in 103426470+0 records out 52954352640 bytes (53 GB) copied, 1208.32 s, 43.8 MB/s
$ bc 52954352640/1000/1000/1000 52.9543526400 52954352640/1024/1024/1024 49.3175840377
Para finalizar, comentar que si vamos a usar
dd
y gzip
y vamos a clonar un mismo disco multitud de veces, nos puede interesar mucho llenar todos los espacios vacíos de los sistemas de ficheros del disco con ceros para que el gzip
pueda comprimir lo máximo posible. Para ello, tendríamos que hacer en cada partición del disco un “dd if=/dev/zero of=ceros; rm ceros
” o un sdelete
(ver Compactar imágenes de disco de VirtualBox: vditool vs VBoxManage).Actualización 10/12/08: Obtener estadísticas de dd mientras se está ejecutando
:wq
No comments:
Post a Comment