Logo Dennis' Tech Blog

Anleitung: Der perfekte Linux USB-Stick

Dennis Schwerdel  Linux  Usb-stick
Post Image

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:

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.