Booter une mandrake 10.1 sur USB depuis grub avec une mandrake 10.1 (ou distribution récente)
1) Booter sur USB depuis grub (distribution du disque interne = celle du disque USB)
requis :
-
avoir installé le bootloader grub
-
version suffisamment récente de mkinitrd pour avoir l'option –preload= (kernel 2.6.x requis?)
-
the kernel est upposé être en /boot/vmlinuz
-
les partitions de la distribution sur USBsont supposées être
-
/dev/sda1 pour /
-
/dev/sda6 pour /home
-
#!/bin/sh
mkinitrd --preload=ehci-hcd --preload=usb-storage --preload=scsi_mod --preload=sd_mod \
/boot/usbinitrd.img `uname -r`
#ajouter une entrée dans grub
gru=/boot/grub/menu.lst
#sometimes it is grub.conf
echo " ">> $gru
echo "title usblinux" >>$gru
echo "kernel (hd0,0)/boot/vmlinuz root=/dev/sda1 acpi=on resume=/dev/sda6 \
splash=silent vga=788" >>$gru
echo "initrd (hd0,0)/boot/usbinitrd.img" >>$gru
-
Booter sur USB depuis grub (distribution du disque interne diférente de celle du disque USB)
requis :
-
comme 1)
-
adapter le nom du kernel
#!/bin/sh
#remplacer le nom du kernel
kernel-name=2.6.8.1-12mdk
#monter la partition sda1 sur /mnt/hdusb1
su
mount /dev/sda1 /mnt/hdusb1
#lie /dev de sda1 vers ceux de la distribution du disque interne
#(pour pouvoir faire tourner le programme mkinitrd "dans le chroot"
mount -o bind /dev /mnt/hdusb1/dev
chroot /mnt/hdusb1
mkinitrd --preload=ehci-hcd --preload=usb-storage --preload=scsi_mod --preload=sd_mod \
/boot/usbinitrd.img $kernel_name
exit
cp /mnt/hdusb1/boot/vmlinuz /boot/
cp /mnt/hdusb1/boot/usbinitrd.img /boot/
#ajouter une entrée dans grub
gru=/boot/grub/menu.lst
#sometimes it is grub.conf
echo " ">> $gru
echo "title usblinux" >>$gru
echo "kernel (hd0,0)/boot/vmlinuz root=/dev/sda1 acpi=on resume=/dev/sda6 \
splash=silent vga=788" >>$gru
echo "initrd (hd0,0)/boot/usbinitrd.img" >>$gru
#fin
-
Boot sur CD d'une distribution sur un disque externe USB (distributions identiques)
requis
-
comme 1) et 2)
-
syslinux (tested with version 1.76)
script :
#!/bin/sh
d="CD_boot"
rm -rf $d
mkdir $d
cp /usr/lib/syslinux/isolinux.bin $d
su
d="CD_boot"
#créer l'initrd permettant le
boot sur disque USB
mkinitrd --preload=ehci-hcd --preload=usb-storage --preload=scsi_mod
--preload=sd_mod $d/usbinitrd.img `uname -r`
#copier le kernel dans le dossier CD_boot
#créer le fichier isolinux.cfg
cfg=$d/isolinux.cfg
echo "default linux" >
$cfg
echo "timeout 0" >>
$cfg
echo "label linux" >>
$cfg
echo " kernel vmlinuz" >>
$cfg
echo " append initrd=initrd.img
root=/dev/sda1" >> $cfg
cp /boot/vmlinuz-`uname -r` $d/vmlinuz
#créer l'image iso
mkisofs -o boot_USB.iso -b isolinux.bin -c boot.cat -no-emul-boot
-boot-load-size 4 -boot-info-table $d
echo "vous pouvez graver l'image iso boot_USB.iso"
echo "cdrecord dev=ATAPI:0,0,0 blank=fast"
echo "cdrecord dev=ATAPI:0,0,0 boot_USB.iso"
-
Boot sur CD d'une distribution sur un disque externe USB (distributions différentes)
Not already tested!
prerequisites :
-
same as point 1 and 2
-
having installed syslinux
-
replace kernel name
script (to be run as root) :
#!/bin/sh
#replace the kernel name
kernel-name=2.6.8.1-12mdk
#mount partition /dev/sda1 on /mnt/hdusb1
su
mkdir /mnt/hdusb1
mount /dev/sda1 /mnt/hdusb1
#link /mnt/hdusb1/dev to /dev of
#(in order to be able to run "mkinitrd in the chrooted environment")
mount -o bind /dev /mnt/hdusb1/dev
chroot /mnt/hdusb1
mkinitrd --preload=ehci-hcd --preload=usb-storage --preload=scsi_mod --preload=sd_mod \
/boot/usbinitrd.img $kernel_name
exit
#needs syslinux (tested with version 1.76)
d="CD_boot"
rm -rf $d
mkdir $d
cp /usr/lib/syslinux/isolinux.bin $d
cp /mnt/hdusb1/boot/vmlinuz $d
cp /mnt/hdusb1/boot/usbinitrd.img $d
#copy kernel (vmlinuz) and initrd file in CD_boot directory
cp /mnt/hdusb1/boot/vmlinuz $d
cp /mnt/hdusb1/boot/usbinitrd.img $d/
#create file isolinux.cfg
#assuming kernel file is in isolinux/vmlinuz
#and initrd in file isolinux/initrd.img
cfg=$d/isolinux.cfg
echo "default linux" > $cfg
echo "timeout 0" >> $cfg
echo "label linux" >> $cfg
echo " kernel vmlinuz" >> $cfg
echo " append initrd=usbinitrd.img root=/dev/sda1" >> $cfg
mkisofs -o boot_USB.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 \
-boot-info-table $d
echo "you can now burn your iso image boot_USB.iso on your CD"
echo "cdrecord dev=ATAPI:0,0,0 blank=fast"
echo "cdrecord dev=ATAPI:0,0,0 boot_USB.iso"
5) paufiner son initrd (en cas de cagade au démarrage)
#!/bin/sh
# creéer le initrd initial and le monter avec l'option "loop"
mkinitrd --preload=ehci-hcd --preload=usb-storage --preload=scsi_mod –preload=sd_mod \
initrd.img `uname -r`
#unzip initrd.zip
mv initrd.img initrd.gz
gunzip initrd.gz
d1=/tmp/initrd
rm -rf $d1
mkdir $d1
mount -o loop initrd $d1
# taille de l'initrd (Mo)
size=8
#directory
d2=/tmp/initrd_custom
rm -rf $d2
mkdir $d2
dd if=/dev/zero of=initrd_vide bs=1024k count=$size > /dev/null 2>&1
mke2fs -F -m 0 -q -b 1024 initrd_vide
mount -t ext2 -o loop initrd_vide $d2
#copy the initrd
cp -rf $d1/* $d2
#put in everything else needed...
#in this case I didn't need to add other things
# programme sleep is sometimes needed
#ldd /bin/sleep tells librairies needed by sleep
#if sleep should be run at some step linuxrc file have to be edited
#cp /lib/modules/`uname -r`/kernel/fs/ext3/ext3.ko.gz $d2/lib
#gunzip -f $d2/lib/ext3.ko.gz
#cp /lib/modules/`uname -r`/kernel/fs/jbd/jbd.ko.gz $d2/lib
#gunzip -f $d2/lib/jbd.ko.gz
#cp -f /sbin/nash $d2/bin
#cp -f /sbin/udev $d2/bin
#cp -f /sbin/udevstart $d2/bin
# unmout and zip..
sync
sync
umount $d1
umount $d2
mv initrd_empty initrd_full
gzip -9 initrd_full
mv initrd_full.gz /boot/initrd_full.img