Reprise du premier message :Howto booter sur USB (version alpha => risques et périls inside)
:
Testé et approuvé sur mandrake 10.1 (disque interne et USB)
1) Booter sur USB depuis grub (distribution du disque interne = celle du disque USB)
prérequis :
- utiliser le botloader grub
(pas sûr) version suffisamment récente de mkinitrd pour avoir l'option –preload=
(c'est pas du php, c'est du shell...)
1. #!/bin/sh
2. mkinitrd --preload=ehci-hcd --preload=usb-storage --preload=scsi_mod --preload=sd_mod \
3. /boot/usbinitrd.img `uname -r`
4. #ajouter une entrée dans grub
5. gru=/boot/grub/menu.lst
6. #sometimes it is grub.conf
7. echo " ">> $gru
8. echo "title usblinux" >>$gru
9. echo "kernel (hd0,0)/boot/vmlinuz root=/dev/sda1 acpi=on resume=/dev/sda6 \
10. splash=silent vga=788" >>$gru
11. echo "initrd (hd0,0)/boot/usbinitrd.img" >>$gru
2)Booter sur USB depuis grub (distribution du disque interne diférente de celle du disque USB)
requis :
partition / du HD USB est /dev/sda1
partition /home de l'HD USB est /dev/sda6
adapter le nom du kernel
(c'est pas du php, c'est du shell...)
1. #!/bin/sh
2. #remplacer le nom du kernel
3. kernel-name=2.6.8.1-12mdk
4. #monter la partition sda1 sur /mnt/hdusb1
5. su
6. mount /dev/sda1 /mnt/hdusb1
7. #lie /dev de sda1 vers ceux de la distribution du disque interne
8. #(pour pouvoir faire tourner le programme mkinitrd "dans le chroot"
9. mount -o bind /dev /mnt/hdusb1/dev
10. chroot /mnt/hdusb1
11. mkinitrd --preload=ehci-hcd --preload=usb-storage --preload=scsi_mod --preload=sd_mod \
12. /boot/usbinitrd.img $kernel_name
13. exit
14. cp /mnt/hdusb1/boot/vmlinuz /boot/
15. cp /mnt/hdusb1/boot/usbinitrd.img /boot/
16. #ajouter une entrée dans grub
17. gru=/boot/grub/menu.lst
18. #sometimes it is grub.conf
19. echo " ">> $gru
20. echo "title usblinux" >>$gru
21. echo "kernel (hd0,0)/boot/vmlinuz root=/dev/sda1 acpi=on resume=/dev/sda6 \
22. splash=silent vga=788" >>$gru
23. echo "initrd (hd0,0)/boot/usbinitrd.img" >>$gru
24. #fin
3)Boot sur CD d'une distribution USB (vous avez déjà l'initrd et le vmlinuz qui conviennent)
script :
1.
2. #!/bin/sh
3. d="CD_boot"
4. rm -rf $d
5. mkdir $d
6. cp /usr/lib/syslinux/isolinux.bin $d
7. #créer l'initrd permettant le boot sur disque USB
8. mkinitrd --preload=ehci-hcd --preload=usb-storage --preload=scsi_mod --preload=sd_mod /boot/usbinitrd.img `uname -r`
9. #copier le kernel (vmlinuz) et le fichier initrd dans le dossier CD_boot
10. cp /boot/vmlinuz $d
11. cp /boot/usbinitrd.img $d/usbinitrd.img
12. #créer le fichier isolinux.cfg
13. cfg=$d/isolinux.cfg
14. echo "default linux" > $cfg
15. echo "timeout 0" >> $cfg
16. echo "label linux" >> $cfg
17. echo " kernel vmlinuz" >> $cfg
18. echo " append initrd=initrd.img root=/dev/sda1" >> $cfg
19.
20.
21. mkisofs -o boot_USB.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table $d
22. echo "vous pouvez graver l'image iso boot_USB.iso"
23. echo "cdrecord dev=ATAPI:0,0,0 blank=fast"
24. echo "cdrecord dev=ATAPI:0,0,0 boot_USB.iso"
4)Boot sur CD d'une distribution sur un disque externe USB (distributions différentes)
Not already tested!
1. prerequisites :
2. same as point 1 and 2
3. having installed syslinux
4. replace kernel name
5.
6. script (to be run as root) :
7.
8. #!/bin/sh
9. #replace the kernel name
10. kernel-name=2.6.8.1-12mdk
11. #mount partition /dev/sda1 on /mnt/hdusb1
12. su
13. mkdir /mnt/hdusb1
14. mount /dev/sda1 /mnt/hdusb1
15. #link /mnt/hdusb1/dev to /dev of
16. #(in order to be able to run "mkinitrd in the chrooted environment")
17. mount -o bind /dev /mnt/hdusb1/dev
18. chroot /mnt/hdusb1
19. mkinitrd --preload=ehci-hcd --preload=usb-storage --preload=scsi_mod --preload=sd_mod \
20. /boot/usbinitrd.img $kernel_name
21. exit
22. #needs syslinux (tested with version 1.76)
23. d="CD_boot"
24. rm -rf $d
25. mkdir $d
26. cp /usr/lib/syslinux/isolinux.bin $d
27. cp /mnt/hdusb1/boot/vmlinuz $d
28. cp /mnt/hdusb1/boot/usbinitrd.img $d
29. #copy kernel (vmlinuz) and initrd file in CD_boot directory
30. cp /mnt/hdusb1/boot/vmlinuz $d
31. cp /mnt/hdusb1/boot/usbinitrd.img $d/
32. #create file isolinux.cfg
33. #assuming kernel file is in isolinux/vmlinuz
34. #and initrd in file isolinux/initrd.img
35. cfg=$d/isolinux.cfg
36.
37. echo "default linux" > $cfg
38. echo "timeout 0" >> $cfg
39. echo "label linux" >> $cfg
40. echo " kernel vmlinuz" >> $cfg
41. echo " append initrd=usbinitrd.img root=/dev/sda1" >> $cfg
42. mkisofs -o boot_USB.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 \
43. -boot-info-table $d
44. echo "you can now burn your iso image boot_USB.iso on your CD"
45. echo "cdrecord dev=ATAPI:0,0,0 blank=fast"
46. echo "cdrecord dev=ATAPI:0,0,0 boot_USB.iso"
5) paufiner son initrd (en cas de cagade au démarrage)
regarder le site suivant pour savoir quoi ajouter par exemple
http://www.simonf.com/usb/
et le script partiel suivant aide à modifier l'initrd , rajouter des binaires (sleep par exemple et sfdisk) et des librairies requises par les nouveaux binaires...
1. #!/bin/sh
2. # creéer le initrd initial and le monter avec l'option "loop"
3. mkinitrd --preload=ehci-hcd --preload=usb-storage --preload=scsi_mod –preload=sd_mod \
4. initrd.img `uname -r`
5. #unzip initrd.zip
6. mv initrd.img initrd.gz
7. gunzip initrd.gz
8. d1=/tmp/initrd
9. rm -rf $d1
10. mkdir $d1
11. mount -o loop initrd $d1
12. # taille de l'initrd (Mo)
13. size=8
14. #directory
15. d2=/tmp/initrd_custom
16. rm -rf $d2
17. mkdir $d2
18. dd if=/dev/zero of=initrd_vide bs=1024k count=$size > /dev/null 2>&1
19. mke2fs -F -m 0 -q -b 1024 initrd_vide
20. mount -t ext2 -o loop initrd_vide $d2
21. #copy the initrd
22. cp -rf $d1/* $d2
23. #put in everything else needed...
24. #in this case I didn't need to add other things
25. # programme sleep is sometimes needed
26. #ldd /bin/sleep tells librairies needed by sleep
27. #if sleep should be run at some step linuxrc file have to be edited
28. #cp /lib/modules/`uname -r`/kernel/fs/ext3/ext3.ko.gz $d2/lib
29. #gunzip -f $d2/lib/ext3.ko.gz
30. #cp /lib/modules/`uname -r`/kernel/fs/jbd/jbd.ko.gz $d2/lib
31. #gunzip -f $d2/lib/jbd.ko.gz
32. #cp -f /sbin/nash $d2/bin
33. #cp -f /sbin/udev $d2/bin
34. #cp -f /sbin/udevstart $d2/bin
35.
36. # unmout and zip..
37. sync
38. sync
39. umount $d1
40. umount $d2
41. mv initrd_empty initrd_full
42. gzip -9 initrd_full
43. mv initrd_full.gz /boot/initrd_full.img
Message initial :
Salut,
je suis entrain d'essayer de booter une distribution linux installé sur une partition d'un disque USB. (sda1)
J'ai déjà un peu avancé et j'en suis là :
en étant chrooté sur sda1, j'ai créer un initrd avec les options pour préchager les modules utiles pour lire sur le disque USB
mkinitrd --preload=ehci-hcd --preload=usb-storage --preload=scsi_mod --preload=sd_mod /boot/usbinitrd.img 2.6.10-3mdk
J'ai copié les fichiers
boot.0800 .
config-2.6.10-3mdk .
kernel.h-2.6.10-3mdk-i586-up-1GB
kernel.h-2.6.10-3mdk-i586-up-1GB .
kernel.h-2.6.10 .
usbinitrd-2.6.10-3mdk.img
vmlinuz-2.6.10-3mdk
dans /boot/ de la partitions de boot sur hda1
j'i ajouter une entrée dans lilo.conf
image=/boot/vmlinuz-2.6.10-3mdk
label="usblinux-10.2"
root=/dev/sda1
initrd=/boot/usbinitrd-2.6.10-3mdk.img
append="acpi=on resume=/dev/sda6 splash=silent"
vga=788
read-only
malheureusement ça n'a pas marché, je ne vois rien et ça reboute assez rapidement après faire un petit bruit.
Maintenant j'essaie de voir si il faut que je rajoute l'option 'sleep 5' après avoir chargé les modules pour l'USB pour laisser suffisamment de temps... mais je n'y arrive pas!