Szwajcarskie noże oficerskie słyną ze swej funkcjonalności. Odkąd zaczęto produkować wersje z wbudowaną pamięcią flash na USB zastanawiałem się, jak zapewnić oprogramowaniu zainstalowanemu na przenośnej pamięci równie dużą funkcjonalność.
PenDrive do zadań specjalnych
Plan minimum to możliwość uruchamiania z pamięci klucza USB przynajmniej:
- Programu rozruchowego GRUB
- Ultimate Boot CD
- Parted Magic OS
Dodatkowo przydatna byłaby dystrybucja typu LiveCD (Debian Live?) oraz możliwość uruchamiania instalatora Debiana.
Przygotowanie pamięci
Przygotowanie dysku USB rozpoczynamy od usunięcia aktualnej tablicy partycji. W wyniku wykonania tego kroku dane na dysku nie będą już dostępne. Mój dysk jest w systemie widoczny jako /dev/sda.
# dd if=/dev/zero of=/dev/sda bs=512 count=1
Gdy tablica partycji jest już czysta, tworzymy partycję startową. W tym celu użyjemy programu mkdiskimage z pakietu syslinux-common. Użycie tego narzędzia pozwala na stworzenie dysku, który będzie można uruchamiać zarówno jako USB-HDD, jak i jako USB-ZIP. Partycja startowa będzie oznaczona numerem 2, dzięki czemu systemy Windows, nie będą jej używały.
# mkdiskimage -2 -z /dev/sda 1024
Ostatni parametr to wielkość partycji. W moim przypadku 1024, czyli największy rozmiar, który jest obsługiwany przez wszystkie systemy BIOS. Możemy stworzyć mniejszą partycję, jeśli mamy mniejszą pamięć flash. Stworzenie większej, może spowodować problemy z uruchamianiem systemu z tej partycji.
Instalacja GRUB-a
Kolejnym krokiem będzie instalacja GRUB4DOS. Po pobraniu i rozpakowaniu programu wydajemy, w katalogu z programem, polecenia:
# ./bootlace.com /dev/sda # ./bootlace.com --floppy /dev/sda2
Aby dokończyć instalację, montujemy partycję /dev/sda2 i kopiujemy na nią plik grldr:
# mount /dev/sda2 /mnt # cp grldr /mnt
Instalacja Ultimate Boot CD i Parted Magic OS
W tym przypadku ciężko mówić nawet o instalacji. Po prostu umieszczamy pliki ubcd.iso i pmagic-4.1.iso na nośniku (obok skopiowanego wcześniej grldr).
Łączenie elementów układanki w działającą całość
Pewnie już każdy zastanawia się jak to ma niby zadziałać? GRUB i obrazy ISO płyt CD!? Odpowiedź jest prosta: menu.lst.
Po rozpakowaniu GRUB4DOS otrzymamy plik menu.lst, w którym odnajdziemy m.in. takie wpisy:
fallback 7
find --set-root /pmagic.iso
map /pmagic.iso (0xff) || map --mem /pmagic.iso (0xff)
map --hook
chainloader (0xff)
savedefault --wait=2
title Ultimate Boot CD ISO
fallback 8
find --set-root /ubcd.iso
map /ubcd.iso (0xff) || map --mem /ubcd.iso (0xff)
map --hook
chainloader (0xff)
savedefault --wait=2
Oto cała magia GRUB4DOS. Potrafi on załadować system z bootowalnego obrazu ISO.
Testowanie z pomocą QEMU
Aby przetestować działanie PenDrive-a bez konieczności restartowania komputera użyjemy QEMU. Po odmontowaniu systemu plików wydajemy polecenie:
$ qemu -monitor stdio -kernel-kqemu -m 1024 -hda /dev/sda
Użyte parametry włączają linię komend QEMU na konsoli, z której go uruchomiliśmy; 1024MB pamięci RAM w maszynie wirtualnej; oraz użycie kqemu również dla kodu jądra.
Plan minimum wykonany. Uruchamianie instalatora Debiana i dystrybucji Live jest bardziej skomplikowane, ale również możliwe.
Debian-Installer
Niestety ISO aktualnej wersji stabilnej (“Lenny“) nie potrafi wystartować w ten sposób, dlatego użyjemy hd-media/boot.img.gz dla i386 (lub amd64).
Plik ten należy poddać dekompresji i skopiować na PenDrive-a:
# gunzip boot.img.gz # cp boot.img /mnt/debian-installer.img
Do menu.lst należy dodać następujący wpis:
find --set-root /debian-installer.img || root (fd0)
map /debian-installer.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
map --floppies=1
Oprócz hd-media/boot.img.gz na nośniku potrzebne jest jeszcze zwykłe ISO instalatora Debiana. Można wybrać dowolny obraz z dostępnych (netinst, cd1 a nawet dvd1, jeśli mamy około 4GB wolnego miejsca). Obraz może znajdować się na innej partycji.
Debian Live
Instalacja Debian Live na PenDrive jest bardziej skomplikowana. Zaczynamy od wybrania “smaku” dystrybucji Live. Do wyboru mamy: Gnome, KDE, XFCE, LXDE, Rescue oraz standard.
Gdy pobraliśmy już plik ISO. Za pomocą mount -o loop lub Midnight Commandera kopiujemy plik live/filesystem.squashfs do katalogu live na dysku USB, a pozostałe pliki z płyty CD do jednego katalogu (np. /tmp/debian-live).
Z wszystkich plików (poza live/filesystem.squashfs!) tworzymy nowy plik ISO komendą:
mkisofs -o /tmp/debian-live.iso -J -l -cache-inodes -allow-multidot -no-emul-boot -boot-load-size 4 -boot-info-table -r -b isolinux/isolinux.bin -c isolinux/boot.cat -m isolinux/isolinux.bin /tmp/debian-live
Plik /tmp/debian-live.iso kopiujemy na PenDrive-a, a do menu.lst dodajemy następujący wpis:
find --set-root /debian-live.iso || root (fd0)
map /debian-live.iso (0xff) || map --mem /debian-live.iso (0xff)
map --hook
chainloader (0xff)
Partycja “na dane” oraz ukrywanie partycji numer 2
Na koniec powinniśmy stworzyć partycję /dev/sda1 zajmującą całe pozostałe miejsce oraz nadać partycjom etykiety, aby łatwiej było je rozróżnić. Na koniec warto ukryć partycję /dev/sda1. Wszystkiego tego dokonamy uruchamiając komputer z… naszego PenDrive-a za pomocą Parted Magic OS.
Windows
W podobny sposób można z PenDrive-a uruchamiać obrazy płyt CD (BartPE) z Windows XP przygotowane programem PE Builder.
There is about 80MB of free space on boot partition. You can put something there. xPUD is about 40MB and will add a simple and fast distribution with web browser and a media player, with a simple user interface on top.
Download xpud-0.9.1-image from xpud.org and insert following lines to menu.lst.
find --set-root /xpud-0.9.1-image || root (fd0)
kernel /xpud-0.9.1-image noisapnp lang=de quiet