Seleccionar Idioma

¿Quién está en línea?

We have 309 guests online

Busca en el Sitio

Alternativas al Ghost para crear imágenes de NTFS en Linux: Partimage y ntfsclone
User Rating: / 0
PoorBest 
Monday, 25 August 2008 15:20
smaller text tool iconmedium text tool iconlarger text tool icon

En tiempos del MS-DOS, cuando querías desinstalar una aplicación, solía ser muy sencillo: borrabas el directorio en el que estaban todos los ficheros de la aplicación y ya está. Tal vez, como mucho, tenías que repasar el AUTOEXEC.BAT por si esa aplicación había hecho alguna modificación. En tiempos de Windows 3.1, cuando instalabas una aplicación, en la inmensa mayoría de los casos, no había ninguna opción para desinstalarla, y seguir con la costumbre de MS-DOS de eliminar el directorio, a menudo dejaba muchísimos rastros detrás, tal vez en el SYSTEM.INI, tal vez en el WIN.INI, o tal vez en el registro de windows que, sí, en Windows 3.1 ya existía. De modo que la necesidad de estar reinstalando el Windows 3.1 frecuentemente si queríamos tener todo bien limpio era bastante alta.

En Windows 95 se introdujo la característica de que las aplicaciones se pudieran desinstalar desde el panel de control y, sobre todo, la mentalidad de que los programas de Windows debían facilitar su desinstalación. Esta forma de trabajar sigue en Windows hasta hoy en día. Esto mejoró algo las cosas en lo que respecta a la limpieza del sistema. Hay programas que hacen un mejor trabajo, hay programas que hacen un peor trabajo, pero la realidad, y en esto coincidiremos casi todos, es que a pesar de ello, conforme pasa el tiempo para una instalación de Windows en la que frecuentemente se instalan y desinstalan aplicaciones, su limpieza y, sobre todo, su rendimiento, van bajando dramáticamente, conduciendo al software rot (rot=putrefacción) y a la necesaria y bien conocida tarea de reinstalar Windows.

Es por todo esto que cuando en tiempos del Windows 98 descubrí el Ghost, mi forma de trabajo con Windows cambió para siempre. Antes lo habitual era no querer probar nuevos programas ni hacer grandes virguerías no fuera que el Windows se ensuciara mucho. Desde entonces la política siempre ha sido crear una imagen muy limpia y estable de Windows y no cortarme en absoluto haciendo cualquier prueba, más o menos destructiva que quiera hacer, sin pensar si dañará más o menos a la actual instalación de Windows. El proceso es tal que así con cada nuevo ordenador que cae en mis manos:

  1. Se instala Windows y se personaliza con las opciones, programas y utilidades que realmente usamos siempre.
  2. Se crea una imagen de la partición de Windows.
  3. Se usa Windows con total libertad sin ningún temor a que “se ensucie”.
  4. La única limitación es que está totalmente prohibido guardar datos personales en la unidad de Windows, la C. Los documentos y archivos que van cambiando (por ejemplo, los ficheros .pst de Outlook o la caché de Google Desktop) han de crearse en otras particiones. Las aplicaciones portables ayudan mucho a seguir esta filosofía de trabajo. Por ejemplo, es posible tener las versiones portables de Firefox y Thunderbird en otra partición de forma que una recuperación de la imagen no nos haga perder todas sus personalizaciones. No creo que sea necesario recordar cuán importante es hacer backup de esos datos de otras particiones.
  5. Tras X semanas (cuando sea necesario, pero sin dejar que pase excesivo tiempo) se recupera la imagen. Si necesita alguna actualización, se vuelve a crear una nueva imágen con los últimos retoques.

 

Y esta es mi forma de trabajar gracias a la cual nunca necesito instalar el Windows más de una vez en cada ordenador y con la que consigo tener un Windows limpio y estable siempre sin necesitar mucho más de algunos minutos para recuperar la imagen, algo más si la actualizamos y la volvemos a generar.

En Linux nunca he sentido esta necesidad: en primer lugar porque las desinstalaciones de software son muy limpias, en segundo lugar porque una instalación de Linux es muy difícil que se degrade rápidamente si somos unos administradores mínimamente cuidadosos, y en tercer lugar porque antes de recuperar una imagen, siempre podríamos decidirnos por actualizar a una de las nuevas versiones que periódicamente van apareciendo.

Como decía, esto lo hacía siempre con el Ghost, arrancando en MS-DOS (bien por arranque dual, bien con un disquete/CD de rescate). Pero hubo un día hace ya varios años en el que me sentí muy limitado, ya que necesitaba crear una imagen con Ghost y no tenía sitio donde crear la imagen: Desde MS-DOS no hay acceso sencillo a las particiones NTFS ni a unidades de red. Ese día descubrí el Partimage y desde ese día nunca más he necesitado usar otra cosa. Seguro que el Ghost ha evolucionado mucho desde entonces y que otras opciones igualmente muy populares como el Acronis (que nunca he tenido ocasión de probar) hacen un excelente trabajo, pero si tengo exactamente lo que necesito con software abierto, ¿para qué probar otra opción?

El Partimage es una herramienta de clonado de discos, igual que Ghost o Acronis, pero funciona en Linux. Tal hecho le confiere una importantísima ventaja que ningún competidor de Windows tiene: que si arrancamos un Knoppix o cualquier otro LiveCD que lleve el Partimage tendremos a nuestro alcance cientos de herramientas, acceso a la red por Samba, por SSH, por NFS, uso sin límites de particiones ext3, FAT, NTFS… ¡lo que queramos!

Al mismo tiempo, el Partimage tiene ciertas limitaciones respecto a sus primos de Windows: cosas como recuperar ficheros de la imagen como hace el Ghost Explorer no se pueden hacer de momento. Tampoco es posible editar las imágenes para clonar múltiples máquinas a partir de una imagen única pero cambiando parámetros como el hostname o la IP. Limitaciones que, para un uso como el mío, no lo son en absoluto.

Antes de comenzar a crear imágenes, es muy recomendable eliminar los ficheros de hibernación y de swap de la partición de Windows. Para ello tenemos que montar la partición con NTFS-3G y borrar los ficheros hiberfil.sys y pagefile.sys. Cada uno de ellos ocupa varios GiB (en función de la memoria que tengamos) y serán recreados sin problemas en el próximo arranque de Windows. Así nos ahorraremos unos cuantos GiB en el fichero de imagen final. No debemos borrar el hiberfil.sys si por cualquier motivo lo que queremos es hacer una imagen de un sistema hibernado.

Partimage

Pongámonos en marcha. Una vez instalado el paquete del Partimage de nuestra distribución favorita, sólo tenemos que ejecutar el comando partimage (en Ubuntu con el preceptivo sudo) para enfrentarnos por primera vez a su GUI. En la primera pantalla tenemos que elegir de qué partición queremos crear una imagen, así como dónde crearla (aquí podemos usar un directorio montado por Samba, por NFS, etc.) y tal vez usar las funciones de creación remota de imágenes del Partimage que vemos debajo:

Tras pulsar F5 encontramos más opciones, como el método de compresión o si los ficheros deberían de cortarse en trozos de 2 GiB (algo ciertamente útil con ciertos sistemas de ficheros, como FAT, o para conseguir guardar diferentes trozos de una imagen en CDs de 700 MiB):

Tras el siguiente F5 podremos introducir la descripción de la imagen:

Después nos sale la adventencia de que el soporte de NTFS aún es experimental (llevan diciendo lo mismo desde hace muchos años, pero a mí siempre me ha funcionado bien):

Y comenzamos tras el resumen:

Todo ha ido bien, podemos salir:

En este caso, verificamos que se han generado dos ficheros, uno de unos 2 GiB y otro que no ha llegado a esa cantidad.

$ ll imagen_windows_080824*
-rwxrwxrwx 1 root root 2135912424 2008-08-24 08:52 imagen_windows_080824.000*
-rwxrwxrwx 1 root root 1408020047 2008-08-24 08:58 imagen_windows_080824.001*

Suele ser recomendable verificar que la imagen es correcta restaurándola. ¡Lo malo es que si no es correcta habremos perdido todo el trabajo de instalación de Windows! Sea como sea, la restauración comienza con un comando como este:

$ sudo partimage restore /dev/sda1 imagen_windows_080824.000

lo que nos lleva a las primeras pantallas de la GUI de restauración del Partimage que nos muestran la descripcción del fichero de imagen y nos piden una confirmación para comenzar la restauración:

Y en pocos minutos nos aparece la confirmación de que la restauración ha finalizado con éxito:

Problemas con Partimage y el fakeRAID

Como ya he comentado previamente en varias ocasiones (p.e. en Instalar Ubuntu 8.04 Hardy Heron sobre un fakeRAID), yo uso un sistema con fakeRAID. Pues bien, en dicho sistema no puedo usar Partimage dado que no me detecta las particiones del RAID con su particular nomenclatura y además me da este error (inode missing: /dev/dm doesn’t exist):

Es por eso que, aunque el Ghost me funcionaba bien en este sistema (en MS-DOS las particiones FAT del fakeRAID se ven como un disco más gracias a la BIOS), quise buscar una alternativa para Linux y pronto la encontré en el ntfsclone.

ntfsclone

ntfsclone es una herramienta de clonado de discos sólo para particiones NTFS (a diferencia del Partimage, que sirve para muchos tipos de sistemas de ficheros diferentes) escrita por Szabolcs Szakacsits, el desarrollador que consiguió crear el tan deseado driver de lectura/escritura de NTFS en Linux. En su forma estándar de trabajo hace casi lo mismo que haría un dd de una partición NTFS pero con la ventaja adicional de que los sectores vacíos que el dd copiaría tal y como estén, el ntfsclone los llena de ceros en el fichero de imagen (creando un sparse file) permitiendo así que el fichero de imagen resultante se pueda comprimir mucho más de lo que se podría comprimir el resultado de un dd, aunque hay que considerar también cómo trata el algoritmo de compresión estos ficheros sparse. Es muy interesante leer las secciones del man del ntfsclone Sparse Files y Handling Large Sparse Files, en las que podemos leer, entre otras cosas:

bzip2(1) compresses large sparse files much better than gzip(1) but it does so also much slower. Moreover neither of them handles large sparse files efficiently during uncompression from disk space usage point of view.

Por tanto, el resultado de un comando como:

$ sudo ntfsclone -o imagen_ntfsclone /dev/sda1

es un fichero de nombre imagen_ntfsclone, con un tamaño igual al de la partición /dev/sda1 y con su mismo contenido pero rellenando los sectores sin usar con ceros. Esto permite que si comprimimos el fichero de imagen posteriormente consigamos obtener un fichero de, como máximo, el espacio realmente usado en esa partición.

La imagen resultante puede ser directamente montada como un dispositivo loop:

$ sudo mount -t ntfs -o loop imagen_ntfsclone /mnt/imagenwin

Y para volver a escribir esa imagen en la partición:

$ sudo ntfsclone -r -O /dev/sda1 imagen_ntfsclone

El ntfsclone permite usar un formato especial para guardar la imagen en el que esos espacios vacíos directamente no se escriben. Es el Special Image Format y generamos imágenes de ese tipo con la opción -s. Tienen la ventaja de que descomprimidas ocupan muchísimo menos (el espacio realmente ocupado por los ficheros de la partición y no el espacio de toda la partición), pero la desventaja es que no se pueden montar como un dispositivo loop, con lo que presentan el mismo problema que las imágenes de Partimage:

   The Special Image Format

It’s also possible, actually it’s recommended, to save an NTFS filesys‐
tem to a special image format. Instead of representing unallocated
blocks as holes, they are encoded using control codes. Thus, the image
saves space without requiring sparse file support. The image format is
ideal for streaming filesystem images over the network and similar, and
can be used as a replacement for Ghost or Partition Image if it is com‐
bined with other tools. The downside is that you can’t mount the image
directly, you need to restore it first.

To save an image using the special image format, use the -s or the
--save-image option. To restore an image, use the -r or the --re‐
store-image option. Note that you can restore images from standard in‐
put by using ’-’ as the SOURCE file.

Así, para crear una imagen con el formato especial comprimiéndola en el mismo comando, podriamos hacer:

$ sudo ntfsclone -s -o - /dev/sda1 | gzip -c > imagen_ntfsclone_sif.gz
ntfsclone v2.0.0 (libntfs 10:0:0)
NTFS volume version: 3.1
Cluster size : 4096 bytes
Current volume size: 25769762816 bytes (25770 MB)
Current device size: 25769769984 bytes (25770 MB)
Scanning volume ...
100.00 percent completed
Accounting clusters ...
Space in use : 6474 MB (25.1%)
Saving NTFS to image ...
100.00 percent completed
Syncing ...

Y para volver a escribirla sobre la partición correspondiente:

$ gzip -d -c imagen_ntfsclone_sif.gz | sudo ntfsclone -r -O /dev/sda1 -
ntfsclone v2.0.0 (libntfs 10:0:0)
Ntfsclone image version: 10.0
Cluster size : 4096 bytes
Image volume size : 25769762816 bytes (25770 MB)
Image device size : 25769769984 bytes
Space in use : 6474 MB (25.1%)
Offset to image data : 56 (0x38) bytes
Restoring NTFS from image ...
100.00 percent completed
Syncing ...

Planteémonos ahora: Si el Partimage y el ntfsclone hacen más o menos lo mismo eliminando los sectores no usados de la imagen final, ¿no deberían de ser sus ficheros de imagen comprimidos con gzip prácticamente iguales en tamaño?

Pues podemos verificar que sí. Los dos ficheros que componían la imagen de Partimage que mostrábamos en la sección anterior sumaban 2135912424+1408020047=3543932471 bytes (unos 3.3 GiB). El fichero obtenido con el comando del ejemplo anterior ocupa 3547807085 bytes, apenas 3.7 MiB más que la imagen de Partimage:

$ ll imagen_ntfsclone_sif.gz
-rwxrwxrwx 1 root root 3547807085 2008-08-24 09:44 imagen_ntfsclone_sif.gz*

Y eso si usamos la compresión estándar, porque usando el parámetro -9 con gzip la imagen llega a ocupar 3.9 MiB menos que la del Partimage:

$ ll imagen_ntfsclone_sif_9.gz
-rwxrwxrwx 1 root root 3539853171 2008-08-24 10:19 imagen_ntfsclone_sif_9.gz*

A costa, eso sí, de muchísimo más tiempo de proceso (¡en el siguiente ejemplo pasamos de 9 min a 19 min!):

$ time sudo ntfsclone -s -o - /dev/sda1 | gzip -c > imagen_ntfsclone_sif.gz
...

real 9m11.439s
user 8m42.497s
sys 0m40.895s
$ time sudo ntfsclone -s -o - /dev/sda1 | gzip -c -9 > imagen_ntfsclone_sif_9.gz
...

real 19m17.197s
user 18m40.138s
sys 0m39.062s

En estos ejemplos estamos usando el formato especial de imagen, que no nos permite montarla pero, ¿qué tal funcionaría la herramienta creando una imagen estándar que sí podemos montar y comprimiéndola posteriormente? ¿Será muy ineficiente el gzip para trabajar con todos los huecos vacíos que tenemos en el disco?

Pues la verdad es que no. Si creamos la imagen como en el primer ejemplo de la sección, sin la opción -s (unos 24 GiB) y luego la comprimimos (sin la opción -9), encontraremos que el fichero resultante apenas ocupa unos 18 MiB más que la equivalente con -s e igual forma de compresión y 22 MiB más que la imagen de Partimage, unos pocos MiB extra que vale la pena pagar a cambio de tener la posibilidad de acceder a los datos con un simple mount:

-rwxrwxrwx 1 root root 25769763328 2008-08-24 13:03 imagen_ntfsclone*
-rwxrwxrwx 1 root root 3566935323 2008-08-24 14:55 imagen_ntfsclone.gz*

Por cierto, podemos incluso comprobar que lo que ocupa la imagen sin -s y sin comprimir es prácticamente lo mismo que cabe en la partición, ya que 25165791*1024=25769769984 (en realidad hay 6 bytes de diferencia):

$ sudo sfdisk /dev/sda
Checking that no-one is using this disk right now ...
OK

Disk /dev/sda: 7297 cylinders, 255 heads, 63 sectors/track
Old situation:
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

Device Boot Start End #cyls #blocks Id System
/dev/sda1 * 0+ 3132 3133- 25165791 7 HPFS/NTFS
...

Pongamos todas las imágenes con las que hemos trabajado juntas para comparar sus tamaños añadiendo la imagen con formato especial descomprimida para compararla con la hecha sin la opción -s:

-rwxrwxrwx 1 root root 25769763328 2008-08-24 13:03 imagen_ntfsclone*
-rwxrwxrwx 1 root root 3566935323 2008-08-24 14:55 imagen_ntfsclone.gz*
-rwxrwxrwx 1 root root 6474889829 2008-08-24 10:03 imagen_ntfsclone_sif*
-rwxrwxrwx 1 root root 3547807085 2008-08-24 09:44 imagen_ntfsclone_sif.gz*
-rwxrwxrwx 1 root root 3539853171 2008-08-24 10:19 imagen_ntfsclone_sif_9.gz*
-rwxrwxrwx 1 root root 2135912424 2008-08-24 08:52 imagen_windows_080824.000*
-rwxrwxrwx 1 root root 1408020047 2008-08-24 08:58 imagen_windows_080824.001*

Por cierto, ¿se te había ocurrido alguna vez la idea de restaurar una imagen de una partición directamente desde un servidor web? El manual de ntfsclone nos propone esta y otras curiosas y versátiles posibilidades:

wget -qO - http://server/backup.img | ntfsclone -r -O /dev/sda1 -

Consideraciones finales

En esta entrada hemos presentado el Partimage y el ntfsclone, dos excelentes herramientas para hacer imágenes de particiones NTFS de Windows. Funcionan de forma excelente si las imágenes se crean y restauran en el mismo disco. Si vamos a cambiar de disco o de tabla de particiones, podrían funcionar, pero es muy probable que encontremos problemas adicionales (p.e. Partimage: Can I restore it to a smaller or bigger partition ?).

Por último, no dejemos de recordar, como vimos en Recuperación de particiones perdidas con gpart, que es importantísimo guardar una copia de seguridad de nuestra tabla de particiones y del Master Boot Record. De esta forma, en caso de catástrofe total, podríamos recuperar nuestra instalación completa restaurando el sector de arranque, la tabla de particiones, las imágenes de particiones y los backups.

Recordemos que para hacer el backup del sector de arranque y de la tabla de particiones podemos ejecutar estos comandos:

$ sudo dd if=/dev/sda of=backup-sda.mbr count=1 bs=512
$ sudo sfdisk -d /dev/sda > backup-sda.sf

y para restaurarlos:

$ sudo dd if=backup-sda.mbr of=/dev/sda
$ sudo sfdisk /dev/sda < backup-sda.sf

:wq

 

Aqui la fuente del autor del artículo: http://www.vicente-navarro.com/blog/2008/08/24/alternativas-al-ghost-para-crear-imagenes-de-ntfs-en-linux-partimage-y-ntfsclone/

Comments
Add New Search
Write comment
Name:
Email:
 
Website:
Title:
UBBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
:angry::0:confused::cheer:B)
:evil::silly::dry::lol::kiss:
:D:pinch::(:shock::X
:side::):P:unsure::woohoo:
:huh::whistle:;):s:!:
:?::idea::arrow: