Montador de imágenes ISO
Nombre: mntiso
Autor: Luis Moreno Rodriguez
Lenguaje: Bash
Licencia: GPL
Monta de forma automática imágenes ISO usando los dispositivos /dev/loop. Es capaz de montar varias imágenes a la vez ya que busca cuales son los dispositivos loop que no están siendo usados. También puede montar una misma imagen varias veces usando automáticamente distintas carpetas de montaje.
El script siempre mostrará donde se monta cada imagen; por defecto las imágenes son montadas de forma independiente en la carpeta "mounted_ISO" en el directorio home del usuario. Este aspecto se puede configurar fácilmente editando una variable en el script.
Soporta paths relativos y absolutos.
mntiso imagen_iso
#!/bin/bash
# AUTOR: Luis Moreno Rodriguez 2009
function mount_iso () {
# path where all iso files are mounted in diferent folders
local MOUNT_DIR=$HOME/mounted_ISO
if [ $# = 0 ] || [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
echo -e "Mount ISO files using /dev/loop's devices. All files are mounted in $MOUNT_DIR, in diferent folders with the names of iso files. Supports relative and absolute paths. Usage 'mntiso isofile1 isofile2...'"
return
fi
for F in $*; do
if [ ! -f "$F" ]; then echo "$F is not valid file"; fi
done
if ! lsmod | grep loop &>/dev/null; then
echo "The loop module is not loaded, to load type 'modprobe loop'"; return
fi
if [ ! -d $MOUNT_DIR ]; then mkdir $MOUNT_DIR; fi
# delete residual folders of old and not mounted ISO files
MOUNT_POINTS=`ls $MOUNT_DIR/`
for i in $MOUNT_POINTS; do
#TODO: debo mirar si no esta en mtab, no si esta vacio
if [ -d $MOUNT_DIR/$i ] && [ `ls $MOUNT_DIR/$i | wc -l` -eq 0 ]; then rm -rf $MOUNT_DIR/$i; fi
done
local MAX_MOUNTS=`ls /dev/loop? | wc -l`
local NUM_MOUNTED=`cat /etc/mtab | grep /dev/loop | wc -l`
# loop; diferent ISOs
for F in $*; do
if [ $NUM_MOUNTED -eq $MAX_MOUNTS ]; then
echo -e "You can't mount more ISO files. You need umount some ISO; there are mounted $NUM_MOUNTED ISO files and the maximum allowed is $MAX_MOUNTS"; return
fi
local ISO=${F##*/} # the iso file to mount; without path
local MOUNT_POINT=$MOUNT_DIR/${ISO%.*} #without .iso extension
# loop; probe with all loops devices; /dev/loop0 /dev/loop1 ..... /dev/loopN
for d in `ls /dev/loop?`; do
# if device is not in use
if ! cat /etc/mtab | grep $d &>/dev/null; then
echo -ne "\nmounting $ISO using $d device... "
mkdir -p ${MOUNT_POINT}_${d##*/}
if mount -o ro,loop=$d -t iso9660 $F ${MOUNT_POINT}_${d##*/}; then
echo -e "done!\nfor unmount type 'umount ${MOUNT_POINT}_${d##*/}'"
NUM_MOUNTED=`expr $NUM_MOUNTED + 1`
else
rm -rf ${MOUNT_POINT}_${d##*/}
echo -e "ERROR!"
fi
break
fi
done
done
}
mount_iso $*