Como crear y leer particiones en una imagen de un disco
Resulta útil poder crear particiones en una imagen de un disco, ya sea para máquinas virtuales como para dispositivos empotrados. Es possible hacerlo mediante un dispositivo loopback.
Sus posibles aplicaciones són:
- Particionado de un disco virtual: Normalmente, al instalar un servidor, creariamos varias particiones con sus sistemas de ficheros. Una máquina virtual no tiene porqué ser diferente. En lugar de crear una imagen para cada partición, lo que resulta poco pràctico, podemos crear un disco con el root y el resto de sistemas de ficheros los creamos particionando una imagen entera.
- Montar las particiones de una imagen de un disco físico: Supongamos que tenemos un servidor que apagamos, para conservar durante un tiempo prudencial los datos creamos una imagen del disco mediante el comando dd y la imagen resultante la almacenamos en otro servidor más grande. Si al cabo de cierto tiempo, cuando ya se ha tirado el servidor antiguo, se desea recuperar algún fichero mediante la imagen no podremos montar directamente las particones, sinó que lo tendremos que hacer mediante el kpartx
- Creación de sistema empotrado: Si deseamos crear un sistema empotrado y disponemos de un simulador para la arquitectura, podemos crear una imagen con sus particiones para instalar el sistema allí, simulando el entorno. Una vez finalizado el proyecto, se puede pasar esa imagen a una memória CF, por ejemplo, mediante el comando dd
Para ver como hacerlo, supongamos que tenemos una imagen como la siguiente:
# ionice -n7 dd if=/dev/zero of=~/image.sda bs=1024k count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 0.545893 seconds, 192 MB/s
Lo que haremos es mapear el loop a la imagen que tenemos:
# losetup /dev/loop0 ~/image.sda
Entonces podemos porceder a particionar:
# fdisk /dev/loop0
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-12, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-12, default 12):
Using default value 12
Command (m for help): p
Disk /dev/loop0: 104 MB, 104857600 bytes
255 heads, 63 sectors/track, 12 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/loop0p1 1 12 96358+ 83 Linux
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
fdisk nos indica que la nueva partición debería llamarse /dev/loop0p1, pero tal como indica el mensaje de error:
WARNING: Re-reading the partition table failed with error 22: Invalid argument
Aún se usa la tabla de particiones anterior al particionado, por lo que las particiones no estan accesibles.
# ls /dev/loop0* /dev/loop0
Mediante kpartx podemos hacer que lea las particiones y cree dispositivos con sus particiones:
# kpartx -a /dev/loop0
Por lo que dentro de /dev/mapper econtraremos las particiones que hemos creado con fdisk:
# ls /dev/mapper/loop0p1 /dev/mapper/loop0p1
Para deshacer el motaje solo hace falta ejecutar estos dos comandos:
# kpartx -d /dev/loop0 # losetup -d /dev/loop0
Relacionados
Imprimir
Deja un comentario: