backbone.ws

This is an old revision of the document!


Boot USB stick

Here a short instruction how to create a multiboot usb flash disk containing Syslinux (rus), Grub4dos (rus), Debian x86/64, Fedora x86/64, Gentoo x86/64, Clonezilla, 4DOS, MS Windows (experimental), SystemRescueCd (Memtest86, NTpassword, FreeDOS, GAG, Ranish, HDT, DBAN, MHDD, Netboot, Grub2, Xfce, GParted).

Steps

Make a backup

Firstly backup all data on the stick (using tar/cp/rsync).

Installing SystemRescueCD

  • Under MS Windows: download image SystemRescueCD-Installer.exe and follow instructions given on the link.
  • Under GNU/Linux: Mount SystemRescueCd-x86-x.x.x.iso with exec option and run as root usb_inst.sh script. Use this short script replacing iso_path to path to the iso file:

    Installing SystemRescueCD: iso_path - path to the dowloded iso image

    iso_path=/path/to/systemrescuecd-x86-x.x.x.iso
    mkdir iso_dir && sudo mount -o loop,exec "$iso_path" iso_dir && sudo iso_dir/usb_inst.sh \
    && echo "SystemRescueCD successfully installed\! ;-)" || echo "Installation of SystemRescueCD failed\! ;-(" ; \
    sudo umount iso_dir ; rmdir iso_dir
  1. Set correct file system type to make >=DOS-7.1 understand it. Under GNU/Linux type

    Set correct fs type for DOS

    sudo fdisk /dev/sdX # X - is the stick vfat partition, type 't', 'b', 'w', 'Enter'
    Additionally you can set a DOS fs label

    set dos fs label

    sudo dosfslabel /dev/sdX1 LABEL
  2. Add menu items to stick:/syslinux/syslinux.cfg before first LABEL string match.

    stick://syslinux/syslinux.cfg

    LABEL Debian netinstall 32 bit
    	MENU LABEL Debian netinstall 32 bit
    	KERNEL vmlinuz-debian32
    	initrd initrd-debian32.gz
    
    LABEL Debian netinstall 64 bit
    	MENU LABEL Debian netinstall 64 bit
    	KERNEL vmlinuz-debian64
    	initrd initrd-debian64.gz
    
    LABEL Fedora netinstall
    	MENU LABEL Fedora netinstall
    	KERNEL vmlinuz-fedora
    
    LABEL Grub 4 Dos
    	MENU LABEL 0) Grub 4 DOS
    	KERNEL grub.exe
    
    # Firstly, Windows does not found files in /I386 folder because it searches in the root / of the stick.
    # Copying them to the root can make another troubles.
    #LABEL winxp
    #	MENU LABEL Boot Windows 2000/XP/2003 (SETUPLDR.BIN) from CD/DVD
    #	COM32 chain.c32
    #	APPEND ntldr=/I386/SETUPLDR.BIN
    #LABEL win7
    #	MENU LABEL Boot Windows Vista/2008/7 (bootmgr) from CD/DVD
    #	COM32 chain.c32
    #	APPEND ntldr=/bootmgr
    
    # Solution: boot DOS >7.0 (6.0 does not see FAT32) and install under DOS.
    LABEL 4dos
    	MENU LABEL 4DOS MS-DOS 7.1 RUS
    	kernel memdisk
    	append initrd=/bootdisk/4dos.ima floppy
    
    # Download if you need 6.22 version of DOS
    LABEL dos622
    	MENU LABEL DOS 6.22
    	kernel memdisk
    	append initrd=/bootdisk/dos622.img floppy
  3. Extract from Grub4dos grub.exe file to the stick into /syslinux/ relative path. And create stick:/menu.lst config file for Grub4dos

    stick:/menu.lst

    color black/cyan yellow/cyan
    timeout 30
    default /default
     
    splashimage=/splash.xpm.gz
    foreground=AB82FF
    background=191970
     
    # map + Contig/WinContig shows blue screen when detecting hardware
    # map --mem hangs in black screen for a long time, then reboot
    #title WinXP iso
    #find --set-root /winxp.iso
    #    map /winxp.iso (hd32)
    #    map --hook
    #    root (hd32)
    #    chainloader (hd32)
     
    # Way to install  Windows XP, 2003, 2000, 98, 95 and restoring SYSLINUX boot loader after NTLDR rewrote it.
    # To install Windows XP select "Grub 4 Dos" menu item on boot screen, then select "Dos 7.1 Rus" item
    # and type: smartdrv ; c: ; cd c:\install\windows\i386 ; winnt.exe - Windows XP setup will start
    # For Windows 98 run setup.exe setup executable.
    # For that operations you need Windows installation CD with i386 directory.
     
    title 4DOS MS-DOS 7.1 RUS
    	map --mem /bootdisk/4dos.ima (fd0)
    	map --hook
    	chainloader (fd0)+1
    	rootnoverify (fd0)
  4. To get available Debian netinstall need to download kernel-32bit, initrd-32bit, kernel-64bit, initrd-64bit and move it to the stick:/syslinux directory renaming to vmlinuz-debian32, initrd-debian32.gz, vmlinuz-debian64, inird-debian64.gz accordinly. Under GNU/Linux you can do all operations by typing one command

    Downloading Debian files: path - path to the mounted usb stick fs, release = stable | testing | sid

    path=/mnt/flash ; release=testing
    ftp_url="ftp://ftp.debian.org/debian/dists/$release/main/installer"; \
    ftp_path="current/images/netboot/debian-installer" \
    && p="$ftp_url-i386/$ftp_path/i386" \
    && wget "$p/linux" -O "$path/syslinux/vmlinuz-debian32" \
    && wget "$p/initrd.gz" -O "$path/syslinux/initrd-debian32.gz" \
    && p="$ftp_url-amd64/$ftp_path/amd64" \
    && wget "$p/linux" -O "$path/syslinux/vmlinuz-debian64" \
    && wget "$p/initrd.gz" -O "$path/syslinux/initrd-debian64.gz" \
    && echo "Debian boot image files download successfully\! ;-)" \
    || echo "Downloading Debian boot image files failed\! ;-("
  5. To get available Fedora netinstall download bfo.lkrn and save it as stick:/syslinux/vmlinuz-fedora. Example:

    Download Fedora netinstall kernel image: path - path to the mounted stick

    path=/mnt/flash
    wget http://dl.fedoraproject.org/pub/alt/bfo/bfo.lkrn -O $path/syslinux/vmlinuz-fedora
  6. To get available Gentoo installers need to download portage-latest.tar.bz2, stage3-i686-xxx.tar.bz2 and stage3-amd64-xxx.tar.bz2 to the stick:/install/gentoo directory. Under GNU/Linux all operations can be made in one step

    Downloading Gentoo portage and stages: path - path to the stick

    path=/mnt/flash
    full_path="$path/install/gentoo"; \
    url_path="http://mirrors.kernel.org/gentoo/releases"; mkdir -p "$full_path" \
    && fname=`wget $url_path/x86/autobuilds/latest-stage3-i686.txt -O - 2>/dev/null | tail -n1 | cut -d/ -f2` \
    && wget "$url_path/x86/autobuilds/current-stage3-i686/$fname" -O "$full_path/$fname" \
    && fname=`wget $url_path/amd64/autobuilds/latest-stage3.txt -O - 2>/dev/null | tail -n1 | cut -d/ -f2` \
    && wget "$url_path/amd64/autobuilds/current-stage3/$fname" -O "$full_path/$fname" \
    && wget "$url_path/snapshots/current/portage-latest.tar.bz2" -O "$full_path/portage-latest.tar.bz2" \
    && echo "Downloading portage and stag3 success \! ;-)" \
    || echo "Downloading portage and stag3 failed \! ;-("
  7. To have DOS 7.1 on the stick download diskette image from narod.ru or this site and move to the stick:/bootdisk directory. In Bash you cat type

    Downloading DOS 7.1 image: path - path to mounted stick

    path=/mnt/flash
    wget http://www.backbone.ws/share/dist/os/dos/4dos.ima -O "$path/bootdisk/4dos.ima" \
    && echo "DOS 7.1 download succes\! ;-)" || echo "DOS 7.1 download failed\! ;-("
  8. Important! Setup MS Windows in this way with a 100% possibility it erases SYSLINUX boot loader because Windows Installer wrotes it's own boot loader from time to time. However if installation of Windows success you can got to Grub4dos using NTLDR and select DOS 7.1, then type
    c: ; syslinux.com c:
    syslinux.com must be extracted from stick:/bootprog/syslinux-x.xx.zip/dos. Also to install Windows XP you need to copy ntdetect.com from i386 installation directory and grldr from Grub4dos to the root of the stick. Menu config must be on the stick

    stick:/boot.ini

    [boot loader]
    timeout=30
    default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
    C:\grldr="Grub4Dos"
  9. Installing Clonezilla. Download latest stable or testing version of Clonezilla. Unpack three files from the iso by mounting it or by using File-Roller etc. You should get such directory tree.

    stick:/

    stick
    ├── live
    │   ├── filesystem.squashfs
    │   ├── initrd.img
    │   └── vmlinuz
    Copy from clonezilla-live-xxx.iso/syslinux/syslinux.cfg file strings from first “MENU TITLE” to last “MENU END” including them and insert before first “LABEL …” string into stick:/syslinux/syslinux.cfg
  10. More Grub4dos menu list examples.

    stick:/menu.lst

    title find and load NTLDR of Windows
    	NT/2K/XP
    	fallback 1
    	find --set-root /ntldr
    	chainloader /ntldr
    	savedefault --wait=2
    
    title find and load CMLDR, the Recovery
    	Console of Windows NT/2K/XP
    	fallback 2
    	find --set-root /cmldr
    	chainloader /cmldr
    
    #.....................................
    # write string "cmdcons" to
    memory 0000:7C03 in 2 steps:
    #.....................................
    # step 1. Write 4 chars "cmdc"
    at 0000:7C03
    write 0x7C03 0x63646D63
    # step 2. Write 3 chars "ons"
    and an ending null at 0000:7C07
    write 0x7C07 0x00736E6F
    savedefault --wait=2
    
    title find and load IO.SYS of Windows
    	9x/Me
    	fallback 3
    	find --set-root /io.sys
    	chainloader /io.sys
    	savedefault --wait=2
    
    title find and boot Mandriva with
    	menu.lst already installed
    	fallback 4
    	find --set-root /etc/mandriva-release
    	savedefault --wait=2
    	configfile /boot/grub/menu.lst
    
    title find and boot Linux with menu.lst
    	already installed
    	fallback 5
    	find --set-root /sbin/init
    	savedefault --wait=2
    	configfile /boot/grub/menu.lst
    
    title commandline
    	savedefault --wait=2
    	commandline
    
    title floppy (fd0)
    	chainloader (fd0)+1
    	rootnoverify (fd0)
    	savedefault --wait=2
    
    title back to dos
    	savedefault --wait=2
    	quit
    
    title reboot
    	savedefault --wait=2
    	reboot
    
    title halt
    	savedefault --wait=2
    	halt
    
    title memdrive duplicated from floppy
    	image file (hd0,0)/sbm.bin
    	map --mem (hd0,0)/sbm.bin (fd0)
    	map --hook
    	chainloader (fd0)+1
    	rootnoverify (fd0)
    	savedefault --wait=2
    
    title memdrive based on win98 partition
    	(hd0,6)
    	map --mem (hd0,6)+1 (hd0)
    	# map --mem (hd0,0)/win98.gz (hd0)
    	map --hook
    	chainloader (hd0)+1
    	rootnoverify (hd0)
    	savedefault --wait=2
    
    title Boot Windows XP
    	root (hd0,1)
    	chainloader +1
    	savedefault
    
    title Boot Options
    	lock
    	find --set-root /submenu.lst
    	configfile /submenu.lst
    
    title Find “hdd.tag” and chainload
    	partition
    	find --set-root /hdd.tag
    	chainloader +1
    
    title Find and load “ntldr”
    	find --set-root /ntldr
    	chainloader /ntldr
    
    title debian-6.0.0-i386-netinst.iso
    	(hd32 --mem)
    	map --mem
    	(hd0,0)/debian-6.0.0-i386-netinst.iso (hd32)
    	map --hook
    	root (hd32)
    	chainloader (hd32)
    	boot
    
    title debian-6.0.0-i386-netinst.iso
    	(0xFF --mem)
    	map --mem
    	(hd0,0)/debian-6.0.0-i386-netinst.iso (0xFF)
    	map --hook
    	root (0xFF)
    	chainloader (0xFF)
    	boot
    
    title debian-6.0.0-i386-netinst.iso
    	(hd32)
    	map
    	(hd0,0)/debian-6.0.0-i386-netinst.iso (hd32)
    	map --hook
    	root (hd32)
    	chainloader (hd32)
    	boot
    
    title debian-6.0.0-i386-netinst.iso
    	(0xFF)
    	map
    	(hd0,0)/debian-6.0.0-i386-netinst.iso (0xFF)
    	map --hook
    	root (0xFF)
    	chainloader (0xFF)
    	boot
    
    title debian-6.0.0-i386-netinst.iso
    	(--mem maxblast)
    	map --mem
    	(hd0,0)/debian-6.0.0-i386-netinst.iso (hd32)
    	map --hook
    	map --mem (hd32)/images/maxblast.igz
    	(fd0)
    	map --hook
    	root (fd0)
    	chainloader +1
    	boot
    
    title debian-6.0.0-i386-netinst.iso
    	(--mem maxblast --mem floppy)
    	map --mem
    	(hd0,0)/debian-6.0.0-i386-netinst.iso (hd32)
    	map --hook
    	map --mem (hd32)/images/maxblast.igz
    	(fd0)
    	map --hook
    	map --mem (fd0)/floppy.img.gz (fd1)
    	map --hook
    	root (fd1)
    	chainloader +1
    	boot