Anleitung: Der perfekte Linux USB-Stick
Ein USB-Stick mit Linux kann für unterschiedliche Zwecke verwendet werden:
Als sicheres Betriebssystem für unterwegs Zum Vorzeigen, Ausprobieren und Installieren von verschiedenen Linux-Distributionen Als Rettungssystem wenn mal etwas schief läuft.
Nun gibt es viele Tools die Linux auf USB-Sticks installieren können aber die meisten die ich getestet hatte, haben mir nicht gefallen. Deshalb habe ich mir das selbst zusammengebaut und veröffentliche jetzt hier die Anleitung. Meine Ziele für die Installation sind folgende:
- Mehrere Linux-Distributionen auf einem Stick
- Linux parallel zu normalen Daten ohne dass der Stick zugemüllt wird
- Einfache Verwaltung von Linux-Distributionen ohne spezielle Tools
- Persistente Daten auf dem Stick
- Schickes Bootmenü
Bootloader installieren
Dieser Schritt ist wichtig damit man den Stick booten kann und die Linux-Distributionen im Verzeichnis LINUX
gefunden werden. (Dieser Schritt muss auch ausgeführt werden wenn der Stick vorher schon bootbar war denn hier wird auch das Daten-Verzeichnis im Bootloader fest verankert. Später muss der Schritt für Updates nicht wiederholt werden.)
Achtung: Es ist wichtig, dass hier das richtige Device verwendet wird, ansonsten kann evtl. das Betriebssystem des Computers nicht mehr booten. Unter Linux kann man den Bootloader einfach mit folgendem Befehl installieren:
$> sudo grub-install --no-floppy --boot-directory=/media/PFAD_ZUM_STICK/LINUX/ --efi-dir=/media/PFAD_ZUM_STICK/LINUX/ --removable /dev/sdX
Hierbei muss /media/PFAD_ZUM_STICK
und /dev/sdX
durch den Pfad und das Device des Sticks ersetzt werden. Diese Angaben kann man aus der Ausgabe von des Befehls mount
ablesen wenn der Stick eingebunden (gemountet) ist und der Inhalt im Dateimanager sichtbar ist.
Der Pfad sollte mit /media
oder (seltener) mit /mnt
beginnen. Hinter dem Pfad aus mount
muss noch /LINUX
angefügt werden. Alle Linux-Distributionen sind dann schön aufgeräumt in diesem Verzeichnis und der Stick wird nicht zugemüllt.
Das Device steht ganz vorne bei der Ausgabe von mount
und beginnt mit /dev
. Bei dem Device ist in der Regel die Nummer 1
angefügt, diese Nummer muss entfernt werden (also z.B. /dev/sdb
statt /dev/sdb1
).
Linux-Distributionen installieren
Die meisten Linux-Distributionen müssen nicht aufwändig auf dem Stick entpackt und angepasst werden, sondern können mit ein paar Tricks direkt als ISO geladen werden. Das macht es deutlich die verschiedenen Distributionen auf dem Stick zu verwalten. Dazu muss lediglich das ISO-Image von der Homepage der Distribution heruntergeladen werden und ein entsprechender Eintrag in der Datei LINUX/grub/grub.conf
angefügt werden.
Ubuntu-Basierte Distributionen
Dieses Verfahren funktioniert auch für ElementaryOS und GRML.
Die ISOs können von folgenden Seiten heruntergeladen werden:
In der grub.conf
muss folgender Eintrag angefügt werden:
menuentry "Ubuntu (14.04.3)" {
iso_path=/LINUX/ubuntu-14.04.3-desktop-amd64.iso
export iso_path
search --set=root --file $iso_path
loopback loop $iso_path
root=(loop)
configfile /boot/grub/loopback.cfg
loopback --delete loop
}
Die Variable iso_path
muss an den Dateinamen des heruntergeladenen ISO-Image angepasst werden.
Debian-Basierte Distributionen Das ISO kann von http://cdimage.debian.org/debian-cd/ heruntergeladen werden.
Leider lässt sich das Debian ISO nicht direkt booten. Daher muss aus dem ISO noch die Datei /install.amd/initrd.gz
auf den USB-Stick nach LINUX
kopiert und aussagekräftiger benannt werden.
In der grub.conf
muss folgender Eintrag angefügt werden:
menuentry "Debian Netinst (8.2.0)" {
iso_path=/LINUX/debian-8.2.0-amd64-netinst.iso
export iso_path
loopback loop $iso_path
linux (loop)/install.amd/vmlinuz iso-scan/ask_second_pass=true iso-scan/filename=$iso_path
initrd /LINUX/debian-8.2.0-amd64-initrd.gz
}
Die Variable iso_path
muss an den Dateinamen des heruntergeladenen ISO-Image angepasst werden. Außerdem muss der Parameter für den letzten Befehl initrd
noch an den Namen der aus dem ISO kopierten Datei initrd.gz
angepasst werden.
Tools und Installer aus dem Netz
Wenn der USB-Stick an einem Computer mit Internetzugang gestartet wird können zusätzlich auch noch Tools und Installer direkt aus dem Netz geladen werden. NetBoot.xyz bietet hier eine gut sortierte Auswahl an Tools und Installern an.
Hierzu muss die Datei netboot.xyz-dhcp.lkrn
bzw. netboot.xyz-static.lkrn
von der Homepage heruntergeladen und nach LINUX
auf den USB-Stick kopiert werden.
In der grub.conf
muss folgender Eintrag angefügt werden:
menuentry "NetBoot.xyz (DHCP)" {
linux16 /LINUX/netboot.xyz-dhcp.lkrn
}
Der Parameter zu linux16
muss an den Dateinamen der heruntergeladenen Datei angepasst werden.
Persistenter Speicher
Normalerweise verlieren Live-Distributionen nach dem Herunterfahren alle Änderungen am System. Das kann oft gewünscht sein, aber manchmal will man auch Einstellungen oder Dateien behalten. Normalerweise kann man in dem Linux-Distributionen direkt auf den USB-Stick zugreifen und dort Dateien speichern. Einige Distributionen haben auch noch spezielle Mechanismen um Einstellungen zu speichern.
Ubuntu-Basierte Distributionen (Casper)
Bei Ubuntu können Änderungen einfach in einer Datei gespeichert werden. Die Datei kann mit folgenden Befehlen angelegt werden:
$> dd if=/dev/zero of=home-rw bs=1M count=128
$> mkfs.ext3 home-rw
Die Größe der Datei kann mit dem Parameter count
in MB eingestellt werden. Die so erstelle Datei muss nun auf den USB-Stick kopiert werden.
Wem das zu kompliziert ist, für den habe ich ein paar leere Festplattenimages erzeugt (Achtung: Die Dateien sind entpackt deutlich größer als das Archiv).
In der grub.conf
muss folgender Eintrag angefügt werden:
menuentry "Ubuntu Peristent (14.04.4)" {
iso_path=/LINUX/ubuntu-14.04.4-desktop-amd64+mac.iso
export iso_path
search --set=root --file $iso_path
loopback loop $iso_path
root=(loop)
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=${iso_path} quiet splash persistent persistent-path=/LINUX/ubuntu --
initrd /casper/initrd.lz
loopback --delete loop
}
Wie bisher muss die Variable iso_path
angepasst werden. Außerdem muss der Parameter persistent-path
für den Befehl linux
noch an den Namen des Verzeichnisses mit der Datei home-rw
angepasst werden. Bei Abwandlungen von Ubuntu muss zusätzlich auch noch ubuntu.seed
durch den Namen der Ableitung (z.B. lubuntu.seed
) ersetzt werden.
Normalerweise speichert Casper nur Änderungen im Userverzeichnis also Einstellungen und Downloads. Wenn auch noch zusätzlich installierte Pakete gespeichert werden sollen muss statt home-rw
die Datei casper-rw
verwendet werden.
Graphisches Bootmenü
Das Bootmenü sieht normalerweise recht spartanisch aus aber das lässt sich einfach ändern. Unter dem Suchbegriff grub2 gfxmenu theme finden sich einige nette Themes die das Menü deutlich ansehnlicher machen.
Ich habe für meine Zwecke ein Theme abgewandelt:
Das Theme kann hier heruntergeladen werden. Die Datei muss in der Verzeichnis LINUX/grub/themes
auf dem USB-Stick entpackt werden. Danach muss am Anfang der Datei LINUX/grub/grub.conf
folgender Inhalt angefügt werden:
set gfxmode=auto
insmod all_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=en_US
insmod gettext
terminal_output gfxterm
insmod gfxmenu
loadfont /LINUX/grub/themes/dswd/Sans-10.pf2
loadfont /LINUX/grub/themes/dswd/Sans-12.pf2
loadfont /LINUX/grub/themes/dswd/Sans-14.pf2
insmod png
set theme=/LINUX/grub/themes/dswd/theme.txt
export theme
Testen des Sticks
Den Stick, das Bootmenü und die Linux-Distributionen kann man einfach über folgenden Befehl testen ohne jedes mal neu starten zu müssen:
$> sudo kvm -k de -m 1024 -device usb-ehci -drive id=my_usb_disk,file=/dev/sdX,if=none -device usb-storage,drive=my_usb_disk -vga std
Wie beim Installieren des Bootloaders ganz am Anfang muss auch hier wieder /dev/sdX
durch das Device des Sticks ersetzt werden.
Achtung: Der Stick sollte während den Tests nicht eingebunden sein sonst kann das Dateisystem das Sticks beschädigt werden.