Script per crear automàticament un disc de rescat USB desde un host GNU/Linux.
VERSIÓ GRUB2
#!/bin/bash
# USBSTICK-MAKER-GRUB2-VERSION by Sergi Coll - GPLv2 - No Warranty
# 0.1a 201601131037 Initial Release
#VARS
VER=0.1a
DAEMONNAME=`basename $0`
PID=($)
LOGDIR=/var/log/
LOGFILE=$DAEMONNAME.log
DATA=`date +"%h %d %H:%M:%S"`
#
FITXER=test.img
FITXER_TAMANY=2G
LOOPDEVICE=/dev/loop1
LOOPDEVICE_ISO=/dev/loop2
SYSLINUX_MBR=/usr/share/syslinux/mbr.bin
SYSLINUX_MODULS=/usr/share/syslinux/
MOUNTPOINT=/media/usb
GRUBCFG=$MOUNTPOINT/boot/grub2/grub.cfg
#
VMRAM=1024
VMVNCDISPLAY=200
#FUNCIONS
function logprint {
DATA=`date +"%h %d %H:%M:%S"`
echo "$DATA $HOSTNAME $0[$PID] : $1" >> $LOGDIR$LOGFILE
}
function creacio-imatge {
logprint "DD: Crearem el fitxer $FITXER de tamany $FITXER_TAMANY"
dd if=/dev/zero of=${FITXER} bs=${FITXER_TAMANY} count=0 seek=1 >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
if [ $? -eq 0 ]; then
logprint "DD CHECK: S'ha creat correctament el fitxer $FITXER de tamany $FITXER_TAMANY"
else
logprint "DD CHECK: Problema a la creació del fitxer $FITXER de tamany $FITXER_TAMANY. Abortem..."
exit 1
fi
logprint "SFDISK: Crearem les particions del disk"
sfdisk $FITXER <> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
2,+,L,*
EOF
if [ $? -eq 0 ]; then
logprint "SFDISK CHECK: S'ha creat correctament les particions en el fitxer $FITXER"
else
logprint "SFDISK CHECK: Problema en la creació de particions en el fitxer $FITXER. Abortem..."
exit 1
fi
losetup -P $LOOPDEVICE $FITXER >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
partprobe $LOOPDEVICE
if [ $? -eq 0 ]; then
logprint "LOOP CHECK: Configuració del losetup del $FITXER OK"
else
logprint "LOOP CHECK: Problema en la configuració del losetup del $FITXER"
exit 1
fi
logprint "MKFS: Crearem un sistema de fitxers EXT4 sense journal a ${LOOPDEVICE}p1"
mkfs.ext4 -F -O ^has_journal ${LOOPDEVICE}p1 >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
if [ $? -eq 0 ]; then
logprint "MKFS CHECK: Format sense Journal OK en la partició 1 ${LOOPDEVICE}p1 del $FITXER"
else
logprint "MKFS CHECK: Problema en la formatació de la partició 1 ${LOOPDEVICE}p1 del $FITXER. Abortem..."
exit 1
fi
logprint "Instal·lant GRUB 2 ..."
mount ${LOOPDEVICE}p1 $MOUNTPOINT >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
mkdir -p $MOUNTPOINT/boot/grub2 >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
echo "set timeout=60 set default=0" >$GRUBCFG
grub2-install -v --removable --boot-directory=$MOUNTPOINT/boot --modules="part_msdos ext2 biosdisk search_fs_uuid loopback" ${LOOPDEVICE} >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
umount ${LOOPDEVICE}p1 >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
losetup -d ${LOOPDEVICE} >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
sync
}
function mount-image {
logprint "Muntant imatge $FITXER al ${LOOPDEVICE}..."
losetup -P $LOOPDEVICE $FITXER >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
partprobe $LOOPDEVICE
if [ $? -eq 0 ]; then
logprint "LOOP CHECK: Configuració del losetup del $FITXER OK"
else
logprint "LOOP CHECK: Problema en la configuració del losetup del $FITXER"
exit 1
fi
logprint "MOUNT: Muntant partició"
mount ${LOOPDEVICE}p1 $MOUNTPOINT
if [ $? -eq 0 ]; then
logprint "MOUNT CHECK: Muntant ${LOOPDEVICE}p1 a $MOUNTPOINT OK"
else
logprint "MOUNT CHECK: Problema muntant ${LOOPDEVICE}p1 a $MOUNTPOINT. Abortem ..."
exit 1
fi
}
function umount-image {
logprint "Dsmuntant imatge $FITXER al ${LOOPDEVICE}..."
umount ${LOOPDEVICE}p1
losetup -d ${LOOPDEVICE} >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
if [ $? -eq 0 ]; then
logprint "LOOP CHECK: Desconfiguració del losetup del $FITXER OK"
else
logprint "LOOP CHECK: Problema en la desconfiguració del losetup del $FITXER"
exit 1
fi
}
function test-vm {
logprint "Arrancant VM per provar la iamtge"
qemu-system-x86_64 -enable-kvm -m $VMRAM -vnc 0.0.0.0:${VMVNCDISPLAY} -k en-us -usb -usbdevice disk:$FITXER -cdrom systemrescuecd.iso -boot menu=on -daemonize >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
if [ $? -eq 0 ]; then
logprint "QEMU CHECK: VNC PORT: $((VMVNCDISPLAY+5900)) OK"
else
logprint "QEMU CHECK: Problema en arrancar QEMU"
exit 1
fi
}
function info
{
echo ""
echo "USBSTICK-MAKER - v$VER"
echo ""
ls -lhas $FITXER
}
function help
{
echo ""
echo "USBSTICK-MAKER - v$VER"
echo "Ús: "`basename $0`" [OPCIÓ]"
echo ""
echo " -h Ajuda"
echo " -i Info"
echo " -c Creació Imatge"
echo " -m Monta Imatge"
echo " -u Desmonta Imatge"
echo " -q Prova la imatge amb una màquina virtual amb QEMU"
echo " -s Instal·la ISO de diferents sistemes"
echo ""
}
function isos
{
$0 -m
# System Rescue CD
ISO=systemrescuecd.iso
URL="http://netix.dl.sourceforge.net/project/systemrescuecd/sysresccd-x86/4.7.0/systemrescuecd-x86-4.7.0.iso"
if [ ! -f $ISO ]; then
curl -o $ISO $URL
fi
mkdir -p $MOUNTPOINT/images/sysresccd/
cp $ISO $MOUNTPOINT/images/sysresccd/
cat >>$GRUBCFG <>$GRUBCFG </dev/null
if [ "$?" != 0 ]; then
echo "ERROR: Problems with Log $LOGDIR$LOGFILE. Exiting..."
exit 2
fi
if [ ! $* ]; then
help
exit
fi
while getopts "hcqimus" OPTION; do
case "$OPTION" in
h) help; exit 10 ;;
c) creacio-imatge ;;
i) info;;
m) mount-image;;
u) umount-image;;
q) test-vm ;;
s) isos ;;
\?) help; exit 10 ;;
esac
done
Per gravar la imatge només cal un ‘DD’. Exemple:
dd if=test.img of=/dev/sdb bs=4M
Muntar les particions dins d’un fitxer imatge
losetup --partscan --find --show disk.img