Start von ISO-Image auf der Festplatte (GRUB2)

Aus Linupedia
Wechseln zu: Navigation, Suche
Höhe=24px Dieser Artikel oder Teile davon wurden mit 'Review' markiert. Das bedeutet, dass größere Arbeiten am Inhalt des Artikels abgeschlossen sind und der Autor eine Korrekturlesung durch andere User zur Qualitätssicherung für angebracht hält.

Zu sichtende Teile: Kompletter Artikel

Bitte hilf LinuxClubWiki, indem du den zu sichtenden Teil überprüfst und den Artikel gegebenenfalls überarbeitest!

--Gehrke (Diskussion) 18:40, 27. Dez. 2013 (CET)

An dieser Stelle wird beschrieben, wie ein System mit GRUB 2 (nicht zu verwechseln mit GRUB Legacy) direkt von einem ISO-Image gebootet wird, welches auf der lokalen Festplatte gespeichert ist. Als Beispiel wird eine Live-Version von OpenSUSE verwendet.

Es werden zwei mögliche Konfigurationen vorgestellt, die sich in der Art der Partitionierung unterscheiden. Insbesondere geht es um die Frage, wo sich das Dateisystem mit dem ISO-Image befindet bzw. wie es eingebunden werden muss:

  1. Primäre Partition (sda1)
  2. LVM (system/root)

Hinweis: An dieser Stelle ist es nicht möglich, die Zieldatei in einem gecrypteten Container (dm-crypt) abzulegen. Näheres hierzu siehe: Partitionierung eines komplett verschlüsselten Linux-Systems.

Das folgende Partitionierungslayout verdeutlicht die Konfiguration des Testsystems:

localhost:~ # lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   19G  0 disk 
├─sda1            8:1    0    4G  0 part /boot
└─sda2            8:2    0   15G  0 part 
  ├─system-root 253:0    0 14.4G  0 lvm  /
  └─system-swap 253:1    0  512M  0 lvm  [SWAP]

Hinweis: Das System wurde speziell für diesen Anwendungsfall aufgebaut und erfüllt ansonsten keinen sinnvollen Einsatzzweck. Das Partitionierungslayout ist daher nicht als Beispiel für produktive Systeme zu verstehen.

Das ISO-Image

Um während der Bootphase darauf zugreifen zu können, müssen die entsprechenden Module eingebunden werden.

Hilfreich ist es, sich über Struktur und Inhalt des Dateisystems innerhalb des ISO-Files zu informieren.

localhost:~ # fdisk -l /boot/iso/openSUSE-13.1-KDE-Live-x86_64.iso/openSUSE-13.1-KDE-Live-x86_64.iso 

Disk /boot/iso/openSUSE-13.1-KDE-Live-x86_64.iso/openSUSE-13.1-KDE-Live-x86_64.iso: 987 MB, 987758592 bytes, 1929216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xa893698d

                                                                        Device Boot      Start         End      Blocks   Id  System
/boot/iso/openSUSE-13.1-KDE-Live-x86_64.iso/openSUSE-13.1-KDE-Live-x86_64.iso1            4084       12275        4096   ef  EFI (FAT-12/16/32)
/boot/iso/openSUSE-13.1-KDE-Live-x86_64.iso/openSUSE-13.1-KDE-Live-x86_64.iso2   *       12276     1929215      958470   83  Linux

Das Image kann lokal per Loop-Device gemountet werden:

localhost:~ # mount -o loop /boot/iso/openSUSE-13.1-KDE-Live-x86_64.iso/openSUSE-13.1-KDE-Live-x86_64.iso /mnt
mount: /dev/loop0 is write-protected, mounting read-only

Der relevante Eintrag in der internen GRUB-Konfiguration des ISO-Files:

localhost:~ # cat /mnt/boot/grub2-efi/grub.cfg 
...
menuentry "openSUSE_13.1_KDE_Live" --class opensuse --class os {
        echo Loading linux...
        set gfxpayload=keep
        linuxefi /boot/x86_64/loader/linux ramdisk_size=512000 ramdisk_blocksize=4096 splash=silent
        echo Loading initrd...
        initrdefi /boot/x86_64/loader/initrd
}

Das ISO von OpenSUSE erfordert eine spezielle Parametrisierung.

Eintrag 'menuentry' GRUB2

Zieldatei auf primärer Partition

Das Beispiel wurde getestet mit einer primären Partition. Es steht zu erwarten, dass eine Konfiguration mit einer erweiterten Partiton vergleichbar funktioniert.

In diesem Beispiel wird das Image der Live-CD an einer Stelle gespeichert, welche auf der primären Partition liegt:

localhost:~ # ls -l /boot/iso/openSUSE-13.1-KDE-Live-x86_64.iso/openSUSE-13.1-KDE-Live-x86_64.iso
-rw-r--r-- 1 user users 987758592 Dec 27 12:26 /boot/iso/openSUSE-13.1-KDE-Live-x86_64.iso/openSUSE-13.1-KDE-Live-x86_64.iso

Um einen passenden Eintrag zu generieren, können diese Zeilen in der Konfigurationsdatei '/etc/grub.d/40_custom' angelegt werden:

menuentry 'openSUSE 13.1 KDE Live (ISO-Image@sda1)' {
    load_video
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    set isofrom_device='/dev/sda1'
    set isofrom_system='/boot/iso/openSUSE-13.1-KDE-Live-x86_64.iso/openSUSE-13.1-KDE-Live-x86_64.iso'
    set loader='/boot/x86_64/loader'
    loopback loop $isofrom_system
    echo Loading linux...
    linux   (loop)/$loader/linux isofrom_device=$isofrom_device isofrom_system=$isofrom_system ramdisk_size=512000 ramdisk_blocksize=4096 ro quiet splash $vt_handoff preloadlog=/dev/null showopts
    echo Loading initrd...
    initrd  (loop)/$loader/initrd
}

Nächster Schritt: GRUB-Konfiguration neu bauen

Zieldatei innerhalb eines Logival Volumes (LVM)

Das Image der Live-CD wird an dieser Stelle gespeichert:

localhost:~ # ls -ltar /iso/openSUSE-13.1-KDE-Live-x86_64.iso/openSUSE-13.1-KDE-Live-x86_64.iso
-rw-r--r-- 1 root root 987758592 Dec 27 14:17 /iso/openSUSE-13.1-KDE-Live-x86_64.iso/openSUSE-13.1-KDE-Live-x86_64.iso

Um einen passenden Eintrag zu generieren, können diese Zeilen in der Konfigurationsdatei '/etc/grub.d/40_custom' angelegt werden:

menuentry 'openSUSE 13.1 KDE Live (ISO-Image@lvm)' {
    load_video
    insmod gzio
    insmod part_msdos
    insmod ext2
    insmod lvm
    set root='(lvm/system-root)'
    set isofrom_device='/dev/sda1'
    set isofrom_system='/iso/openSUSE-13.1-KDE-Live-x86_64.iso/openSUSE-13.1-KDE-Live-x86_64.iso'
    set loader='/boot/x86_64/loader'
    loopback loop $isofrom_system
    echo Loading linux...
    linux   (loop)/$loader/linux isofrom_device=$isofrom_device isofrom_system=$isofrom_system ramdisk_size=512000 ramdisk_blocksize=4096 ro quiet splash $vt_handoff preloadlog=/dev/null showopts
    echo Loading initrd...
    initrd  (loop)/$loader/initrd
}

Relevant ist das Laden (insmod) des LVM-Modules und die Adressierung des LVs. Zur Erinnerung: Die Volume Group heißt 'system' und das Logical Volume 'root'.

Nächster Schritt: GRUB-Konfiguration neu bauen

GRUB-Konfiguration neu bauen

Abschließend muss die GRUB-Konfiguration neu gebaut werden:

localhost:~ # grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub.cfg ...
Found theme: /boot/grub2/themes/openSUSE/theme.txt
Found linux image: /boot/vmlinuz-3.11.6-4-desktop
Found initrd image: /boot/initrd-3.11.6-4-desktop
done

Kontrolle der generierten Konfigurationsdatei:

localhost:~ # cat /boot/grub2/grub.cfg

Wenn alles fehlerfrei durchgeführt wurde, sollte die Live-Version nun direkt von der Festplatte gebootet werden können.

Links