9.3.- Comprimir, archivar y convertir

Estos comandos gzip/gunzip, bzip2/bunzip2 comprimen/descomprimen cada archivo pasado como argumento en la línea de comando. El comando bzip2 ofrece una mejor tasa de compresión. estos comandos se consideran estándar en los sistemas Linux, y pueden instalarse en los sistemas UNIX, en caso de no tenerlo instalado. El comando gzip produce la extensión .gz y el comando bzip2 produce la extensión .bz2.

Si omitimos el nombre del archivo, los datos a procesar se leen de la entrada estándar (teclado).

Comprimimos el archivo xaa, reemplazándose el fichero original por el archivo comprimido:

Para descomprimirlo:

Compresión con envío del flujo comprimido hacia la salida estándar (-c). Este modo de proceder permite conservar el archivo original:

Descomprimir sin suprimir el archivo comprimido:

Lo mismo con zcat:

El comando tar permite crear un archivado a partir de uno o varios archivos. si el archivo es un directorio, se archivará con toda su infraestructura.

Archivado y compresión de un directorio (en mi caso del directorio bash); el flujo que produce el comando tar es enviado a la salida estándar (y por consiguiente a la tubería), y recuperado por el comando gzip que comprime este flujo y lo redirige al archivo midir.tar.gz.

Si hacemos un ls vemos en rojo el archivado creado:

Descompresión y extracción; el comando gunzip descomprime el archivo midir.tar.gz y envía el resultado por la salida estándar. El comando tar explota el flujo que llega por la tubería y realiza la extracción.

En este caso los nombres en el archivado se expresan con ruta relativa, por lo tanto los archivos se crean de nuevo desde el directorio actual cuando se restauran.

Los ficheros cpio no se usan habitualmente pero aún están presentes en el mundo UNIX. Por ejemplo, en los ficheros RPM usan el formato cpio. Este comando también permite realizar archivados. Contrariamente a lo que sucede con el comando tar, no es recursivo: todos los nombres de archivo que se incluyen en la composición del archivado tienen que leerse de la entrada estándar. El archivado se envía a la salida estándar. Este comando se usa casi siempre detrás de una tubería, precedida del comando find, que permite generar los nombres de archivo deseados.

Para la verificación y restauración, el archivado a procesar se espera por la entrada estándar.

Creación de un archivado cpio:

Verificación del archivo:

El comando dd realza una copia física de un flujo de entrada hacia un flujo de salida. Cada byte deseado del flujo de entrada se copia hace el flujo de salida, independientemente de lo que represente el dato.

Para el uso sin problemas de este comando,lo primero siempre es tener claro como se llaman las particiones/discos duros en Linux (/dev/sda1 por ejemplo; /dev deriva de device= dispositivo, en inglés ). para saber el disco/partición de origen y el de destino, algo que averiguamos fácilmente con el comando sudo fdisk -l o con algún programa gráfico de particiones como gparted. Toda la información sobre el comando dd, se puede consultar con el comando man dd e info dd. Se debe utilizar este comando con precaución, y comprobando siempre el orden y nombre de los discos/particiones, porque lo mismo que se clona un disco, lo borra en un visto y no visto.

Sobre un DISCO DURO

Con esto clonaríamos el disco hda en hdb. (discos IDE):

sudo dd if=/dev/hda |pv|dd of=/dev/hdb bs=1M

Clonar el disco sda en sdb. (discos SATA):

sudo dd if=/dev/sda |pv|dd of=/dev/sdb bs=1M

Con la opción bs=1M , se consigue que tanto la lectura como la escritura se haga en bloques de 1 megabyte, (menos, seria mas lento pero mas seguro, y con mas nos arriesgamos a perder datos por el camino).

Hay que tener en cuenta que de esta forma se graba el disco “tal cual”, MBR, tabla de particiones, espacio vacío, etc…, por lo que solo podrás grabar en un disco del mismo o mayor tamaño.

Grabar solo la primera partición (hda1) del disco de origen en el disco (hdb) de destino:

sudo dd if=/dev/hda1 |pv|dd of=/dev/hdb bs=1M

Grabar el disco completo (hda) en la primera partición (hdb1) del disco de destino:

sudo dd if=/dev/hda |pv|dd of=/dev/hdb1 bs=1M

Crear una imagen – puede ser bin o iso – del disco duro (hda) , en el directorio /home:

sudo dd if=/dev/hda |pv|dd of=/home/hda.bin

Borrar totalmente la información de un disco: para ello, llena el disco con caracteres aleatorios, cinco veces. No va a quedar ni rastro de información en el disco:

for n in {1..5}; do dd if=/dev/urandom |pv|dd of=/dev/hda bs=8b conv=notrunc;

Borrar cualquier partición y disco completo de cualquier dispositivo:

sudo dd if=/dev/zero |pv|dd of=/dev/sdx (Borrado de disco completo)

sudo dd if=/dev/zero |pv|dd of=/dev/sdxa (Borrado de partición de disco)

donde: x es el disco a borrar , a es la partición a borrar.

Esta operación es muy útil para borrar completamente cualquier partición, además los datos que se borrarán no se pueden recuperar, por lo tanto es un borrado a bajo nivel y muy seguro, muy útil por ejemplo para cuando los pendrives se nos infectan de virus con nuestro querido windows.

Sobre un CD/DVD

Crear/Montar una imagen .iso de un CD/DVD

Para crear la imagen .iso de un CD en el directorio /home:

sudo dd if=/dev/cdrom |pv|dd of=/home/imagendeCD.iso

Para montar la imagen .iso del CD:

sudo mount -o loop imagedeCD.iso /mnt/home

Recuperar un DVD rayado (Esto no recupera todo el DVD, en este caso, solo los sectores legibles). Sirve también para discos duros defectuosos:

sudo dd if=/dev/cdrom |pv|dd of=/home/dvd_recuperado.iso conv=noerror,sync

La opción noerror, sirve para obviar los errores de lectura en cualquier situación.

Copiar/Restaurar el Master Boot Record (MBR)

Para copiar el MBR:

sudo dd if=/dev/hda |pv|dd of=mbr count=1 bs=512

Para restaurar el MBR:

sudo dd if=mbr |pv|dd of=/dev/hda

Limpiar nuestro MBR y la tabla de particiones:

sudo dd if=/dev/zero |pv|dd of=/dev/hda bs=512 count=1

Limpia el MBR pero no toca la tabla de particiones, (muy útil para borrar el GRUB sin perder datos en las particiones):

sudo dd if=/dev/zero |pv|dd of=/dev/hda bs=446 count=1

Copiar/Restaurar el Volume Boot Sector (VBS)

Para copiar el VBS:

sudo dd if=/dev/hda |pv|dd of=/home/sector_arranque_hda count=1 bs=512

Para restaurar el VBS:

sudo dd if=/home/sector_arranque_hda |pv|dd of=/dev/hda

Otros:

Grabar una imagen del disco en nuestro directorio /home saltándonos los errores del disco(muy útil para discos que se están muriendo):

sudo dd conv=noerror if=/dev/hda |pv|dd of=~/home/imagen_disco_con_errores.iso

Crear un archivo vacío de 1 Mb:

sudo dd if=/dev/zero |pv|dd of=archivo_nuevo_vacio bs=1024 count=1024

Crear un archivo swap de 2Gb:

sudo dd if=/dev/zero |pv|dd of=/swapspace bs=4k count=2048M
mkswap /swapspace
swapon /swapspace

Convertir todas las letras en mayúsculas:

sudo dd if=miarchivo |pv|dd of=miarchivo conv=ucase

El comando dd dispone de la versión gráfica Gdiskdump, es un entorno gráfico para el  comando dd que facilita la tarea de clonar particiones o discos, de una forma rápida y sencilla. Se puede descargar desde la página https://launchpad.net/gdiskdump/ Una vez lo abrimos , con permisos de root, «sudo gdiskdump» , vemos que el programa es muy fácil de usar, ya que solo tenemos que decirle la partición o disco a clonar (Formato de Entrada) y su destino (Formato de Salida).

  • Ensaya con lo aprendido (con cuidado de no estropear datos del disco duro).