Mehrere Probleme mit grub2 2.0x Multi-Boot-Installation unter Ubuntu 2018LTS, 2019.04, 2019.10

Mehrere Probleme mit grub2 2.0x Multi-Boot-Installation unter Ubuntu 2018LTS, 2019.04, 2019.10

Zunächst habe ich einige strategische Fragen:

  1. Die Ubuntu-Installationsprogramme rufen automatisch grub-install im UEFI-Modus auf UEFI-Hardware auf, selbst wenn ich grub2 auf einer externen SSD installieren möchte. Kann ich dies vermeiden, d. h. das Booten mit Grub2 im alten BIOS/MBR-Modus verwenden? In meinem Fall hat sich Ubuntu 2019.04 selbst auf einer externen SSD im MBR-Modus auf einem UEFI-Laptop installiert und die EFI-Partition auf die GPT-EFI-Partition von Windows (/dev/sdb1) verwiesen, sodass ich Ubuntu nur auf demselben Laptop oder auf PCs mit derselben Windows-GPT-EFI-Partition booten kann.
  2. Kommt grub2 einwandfrei mit MBR-Partitionstabellen zurecht, die per gdisk nach GPT konvertiert wurden und für die kein Platz für EFI- oder grub2-Partitionen reserviert wurde? Ist es erforderlich, vorhandene Partitionen zu verschieben, um am Anfang der Platte Platz für UEFI- oder grub2-Partitionen zu schaffen? Wie kann ich grub2 anweisen, den Inhalt einer Windows UEFI-Partition in angepasster Form auf eine (externe) SSD-Platte zu kopieren, damit diese im Standalone-Boot als externe SSD auf einem anderen PC/Laptop ohne Windows booten kann? Das Kopieren der Partition mit cp, tar oder dd und der Aufruf von grub-install hat bei mir bisher nicht funktioniert – mit der Folge der unten aufgeführten Fehler. Muss bei einer SSD das Flag --removable verwendet werden?
  3. Idealerweise möchte ich ein Multibootsystem mit Windows 10 und verschiedenen Linux-Varianten erstellen – alle bootfähig mit grub2. Wie mache ich das, damit es möglichst reibungslos läuft?

    a) Was muss ich vor der Installation von Windows 10 tun? Soll ich eine kleine GPT-Partition für grub2 erstellen und als solche kennzeichnen? Soll ich unterschiedliche EFI-Partitionen erstellen, z. B. für Windows und die verschiedenen Linux-Varianten?

    b) Sollte ich Windows 10 vor Linux installieren oder umgekehrt?

    c) Ist es möglich, eine EFI-Partition in den logischen Partitionsbereich einer MBR-SSD zu legen, z. B. als /dev/sda5?

    d) Muss eine EFI-Partition oder eine kleine GPT-Partition für grub2 die erste auf der Festplatte/SSD sein (wie einige widersprüchliche Quellen behaupten)?

    e) Gibt es eine einfache Möglichkeit, eine /boot-Partition wieder in die Haupt-Linux-Installation zu integrieren und grub2 davon zu informieren? Ich denke, der schwierige Weg – sobald die Grub2-Installation funktioniert – besteht darin, die Datei grub.cfg entsprechend anzupassen und die Dateien zusammen in eine Partition zu kopieren.

Ich versuche, einen defekten Grub2-Boot in /dev/sdb mit einer der aktuellen Ubuntu-Versionen zu reparieren: Ich habe diese Anweisungen vorbereitet: Konfiguration: /boot = /dev/sdb1, / = /dev/sdb3, UEFI = /dev/sdb4 (wird von diesem Skript erstellt)

sudo fdisk  /dev/sdb # possibly convert to GPT; create partition 4 of type EFI: code ef
sudo gdisk  /dev/sdb # create partition 4 of type EFI: code ef00
sudo partprobe
sudo mkdir -p /tmp/lin1/mnt/boot
sudo mount -o nouuid /dev/sdb3 /tmp/lin1 
sudo mount -o nouuid /dev/sdb1 /tmp/lin1/boot
sudo mkdir /tmp/lin1/mnt/boot
sudo mkfs.fat  /dev/sdb4
sudo mkdir -p /tmp/lin1/mnt/efi
sudo mount -o nouuid /dev/sdb4  /tmp/lin1/mnt/efi
sudo mount -o nouuid /dev/sdb1  /tmp/lin1/boot
sudo bash -c 'for i in /dev /dev/pts /proc /sys /run /sys/firmware/efi/efivars /bin /usr /var /etc; do mkdir -p  /tmp/lin1$i; done'
sudo bash -c 'for i in /dev /dev/pts /proc /sys /run /sys/firmware/efi/efivars /bin /usr /var /etc; do mount -o nouuid -B $i /tmp/lin1$i; done'
sudo chroot  /tmp/lin1/
sudo grub-install --efi-directory=/tmp/lin1/mnt/efi --boot-directory=/tmp/lin1/boot --target=x86_64-efi /dev/sdb
sudo bash -c 'for i in /dev /dev/pts /proc /sys /run /sys/firmware/efi/efivars /bin /usr /var /etc; do umount  /tmp/lin1$i; done'
sudo umount /tmp/lin1/mnt/boot 
sudo umount /tmp/lin1/boot 
sudo umount /tmp/lin1/
sudo sync
sudo hdparm -Y /dev/sdb

Ich stoße auf diese 7 Probleme (diese Probleme treten alle gelegentlich nach so ziemlich derselben Grub-Installation auf wie oben gezeigt, abhängig vom Hostsystem, der Ubuntu-Version, einer vorhandenen zusätzlichen Windows10-UEFI-Partition und davon, ob die SSD intern oder extern angeschlossen ist):

  1. Beim Booten: Es wird ein Startjob für /dev/disk/by-uuid/… ausgeführt (auch nach Anpassung der Block-IDs in /etc/fstab)

  2. Ubuntu systemd: SIGRTMIN+20 von PID (plymouthd) erhalten**

  3. Ubuntu-Kernel: ucsi_ccg 0-0008: PPM konnte nicht zurückgesetzt werden!

  4. Ubuntu-Kernel: ucsi_ccg 0-0008: PPM-Init fehlgeschlagen (-110)
  5. Grub: Fehler: Datei „/grub2/i386-pc/normal.mod“ nicht gefunden – Wechsel in den Rettungsmodus (das normale Ubuntu 2019.04 x64 EFI-Installationsverzeichnis ist /grub/x86_64-efi)
  6. Grub-Boot:**

    Die Abhängigkeit für die Dateisystemprüfung auf /dev/disk/by-uuid/CA82-D0E8 ist fehlgeschlagen. Die Abhängigkeit für /boot/efi ist fehlgeschlagen.

  7. chroot: Ausführen des Befehls „/usr/bin/bash“ fehlgeschlagen: Keine solche Datei oder kein solches Verzeichnis:

Problematischer Teil:

soc1@soc1-MS-7B17:/bin$ sudo chroot /tmp/lin1/ /usr/bin/bash
chroot: failed to run command ‘/usr/bin/bash’: No such file or directory
soc1@soc1-MS-7B17:/bin$ ll /usr/bin/bash
-rwxr-xr-x 1 root root 1113504 Nov 20 20:00 /usr/bin/bash*
soc1@soc1-MS-7B17:/bin$ ll /bin/bash
-rwxr-xr-x 1 root root 1113504 Jun 7 00:28 /bin/bash*

Diagnoseausgabe:

soc1@soc1-MS-7B17:/bin$ strace -f chroot /tmp/lin1 /usr/bin/bash 2>&1
execve("/usr/sbin/chroot", ["chroot", "/tmp/lin1", "/usr/bin/bash"], 0x7fffe4c6c0f8 /* 62 vars */) = 0
brk(NULL) = 0x558749ead000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=74469, ...}) = 0
mmap(NULL, 74469, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf1d749000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\34\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2030544, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf1d747000
mmap(NULL, 4131552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdf1d144000
mprotect(0x7fdf1d32b000, 2097152, PROT_NONE) = 0
mmap(0x7fdf1d52b000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7fdf1d52b000
mmap(0x7fdf1d531000, 15072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fdf1d531000
close(3) = 0
arch_prctl(ARCH_SET_FS, 0x7fdf1d748540) = 0
mprotect(0x7fdf1d52b000, 16384, PROT_READ) = 0
mprotect(0x55874974a000, 4096, PROT_READ) = 0
mprotect(0x7fdf1d75c000, 4096, PROT_READ) = 0
munmap(0x7fdf1d749000, 74469) = 0
brk(NULL) = 0x558749ead000
brk(0x558749ece000) = 0x558749ece000
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=10281936, ...}) = 0
mmap(NULL, 10281936, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf1c775000
close(3) = 0
lstat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
lstat("/tmp/lin1", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
chroot("/tmp/lin1") = -1 EPERM (Operation not permitted)
openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2995, ...}) = 0
read(3, "# Locale name alias data base.\n#"..., 4096) = 2995
read(3, "", 4096) = 0
close(3) = 0
openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en_US/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/coreutils.mo", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=578, ...}) = 0
mmap(NULL, 578, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf1d75b000
close(3) = 0
write(2, "chroot: ", 8chroot: ) = 8
write(2, "cannot change root directory to "..., 43cannot change root directory to '/tmp/lin1') = 43
openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, ": Operation not permitted", 25: Operation not permitted) = 25
write(2, "\n", 1
) = 1
close(1) = 0
close(2) = 0
exit_group(125) = ?
+++ exited with 125 +++

verwandte Informationen