lunes, mayo 02, 2011

simular un pendrive (o disco duro) con particiones en un loopback device apuntando a un archivo

primero lo primero:

Q: porque demonios querrias hacer eso?
A: razones bastante obscuras, si logro hacer andar lo que estoy intentando va a salir otro post.

digamos que quiero usar usb-creator-gtk para crear un pendrive booteable en base a una iso de ubuntu pero estoy dentro de una vm que no ve los pendrives que enchufo en la maquina.

como alguien terco digo, "ya se, hago que usb-creator-gtk haga el usb booteable en un archivo y despues le hago dd en el host (que no es linux)".

pero ese archivo/device tiene que parecerse a un disco y tener particiones, y aqui empieza la pelea.

agregale la siguiente opcion al booteo de tu kernel en grub (si, arranco facil la cosa):

loop.max_part=63

esto nos va a permitir tener particiones en los loop devices (que ya vamos a ver que son).

crea un archivo de 2GB con ceros adentro que va a representar a nuestro pendrive inexistente:

# copiamos de /dev/zero al archivo llamado pen 8 pedazos de 256M
dd if=/dev/zero of=pen bs=256M count=8

ahora tenemos que crear el loop device que apunta a este archivo

# crea el primer loop device que tengas libre (normalmente /dev/loop0) apuntando al archivo pen
sudo losetup -f pen

ahora creemos particiones en nuestro archivo:

sudo fdisk /dev/loop0

vamos a crear una particion que tome todo el tamanio del dispositivo:

en la consola de fdisk apreta n, p, 1, , , w

ahora tenemos que decirle al kernel que cargue las particiones de loop0 de nuevo

sudo blockdev --rereadpt /dev/loop0

una vez cargadas, formateamos la primera particion

sudo mkfs.vfat /dev/loop0p1

ahora con nuestro device que se parece a un pendrive podemos arrancar usb-creator-gtk:

sudo usb-creator-gtk --allow-system-internal

elegimos /dev/loop0p1, elegimos la iso y le damos a Make Startup Disk

terminamos, cerramos usb-creator-gtk y eliminamos el loop device

sudo losetup -d /dev/loop0p1

si hicieramos dd de este archivo a un pendrive tendriamos un pendrive booteable.

2 comentarios:

Anónimo dijo...

muy bueno lo del blockdev --rereadpt, no lo conocía. ahora, no falta losetup -d /dev/loop0 al final?

luismarianoguerra dijo...

@StyXman: no falta, estas ciego :P

Seguidores

Archivo del Blog