domingo, 12 de agosto de 2012

Como agregar dispositivos bucle temporales (loop devices)

Es poco probable que tratando de montar una imagen (.iso, .img, y otros formatos) el comando mount nos devuelva el eror del siguiente ejemplo:

[root@rainbow ~]# mount -o loop /home/fraterneo/centos.iso /mnt/
mount: could not find any free loop device
¿Tengo tantas imágenes montadas que ya me he gastado todos los 8 dispositivos bucle (loop devices) disponibles por defecto en GNU/Linux? Si tienes un servidor de instalaciones como yo, te creo. Y es que para hacer más modular el servidor PXE, es recomendable montar las distribuciones grandes (en DVD) y no vaciarlas al disco del sistema. Esto nos permite, inclusive, tenerlas en un disco externo desde el cual montarlas.


A continuación veremos como obtener uno o más dispositivos bucle. Pero primero un poco de teoría para edificarnos: Un loop device es un pseudo-dispositivo que hace que un fichero sea accesible como si fuese un dispositivo de bloques (block device). Es decir, que cuando montamos una imagen hacemos uso de un dispositvo bucle, pero esto sucede de forma transparente para nosotros, ya que el API del sistema oprativo se encarga de hacer esa tarea.

GNU/Linux dispone, por defecto, de ocho dispositivos bucle que van de loop0 a loop7.

Si observamos con detenimiento la salida del comando mount, veremos que al final de la línea de cada .iso montado en el sistema se menciona el dispositivo bucle que utiliza.

[root@rainbow ~]# mount
/dev/mapper/vg_rainbow-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/vg_rainbow-lv_home on /home type ext4 (rw)
/media/iso/fedora.iso on /var/ftp/fedora type iso9660 (rw,noexec,nosuid,nodev,loop=/dev/loop0)
/media/iso/centos.iso on /var/ftp/centos type iso9660 (rw,noexec,nosuid,nodev,loop=/dev/loop1)
/media/iso/opensuse.iso on /var/ftp/opensuse type iso9660 (rw,noexec,nosuid,nodev,loop=/dev/loop2)
/media/iso/lubuntu.iso on /var/ftp/lubuntu type iso9660 (rw,noexec,nosuid,nodev,loop=/dev/loop3)
/media/iso/ubuntu.iso on /var/ftp/ubuntu type iso9660 (rw,noexec,nosuid,nodev,loop=/dev/loop4)
/media/iso/kubuntu.iso on /var/ftp/kubuntu type iso9660 (rw,noexec,nosuid,nodev,loop=/dev/loop5)
/media/iso/loculinux.iso on /var/ftp/loculinux type iso9660 (rw,noexec,nosuid,nodev,loop=/dev/loop6)
/media/iso/linuxmint.iso on /var/ftp/linuxmint type iso9660 (rw,noexec,nosuid,nodev,loop=/dev/loop7)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
Como vemos los dispositivos bucle se encuentran en /dev, hogar de los dispositivo en GNU/Linux.

Creando un dispositivo bucle (loop8)

El loop que crearemos a continuación es temporal, es decir, al reiniciar el sistema el mismo se perderá, aunque hay un procedimiento adicional para hacerlo permanente pero lo veremos en otro post.

[root@rainbow ~]# mknod -m640 /dev/loop8 b 7 8
El comando mknod nos permite crear ficheros especiales, ya sean de bloques o de caracteres. La opción -m define los permisos para el dispositivo, /dev/loop8 es el nombre del dispositivo a crear, b indica dispositivo de bloques y, los números 7 8 definen el mayor y el menor (esta parte aún no la entiendo bien todavía).

Finalmente nos aseguramos de que root sea el propietario del dispositivo y que disk sea su grupo principal.

[root@rainbow ~]# chown root:disk /dev/loop8
Ahora procedemos a montar el fichero .iso y el mismo será montado satisfactoriamente.


Artículos relacionados



Widget by Hoctro | Jack Book

1 comentario:

  1. Muchas gracias, muy util.
    Lo del mayor-menor se entiende mejor viendo el archivo https://www.kernel.org/doc/Documentation/devices.txt. El mayor es el tipo de dispositivo. El menor, el numero de dispositivo.

    ResponderEliminar