Múltiples problemas con la instalación de arranque múltiple grub2 2.0x en Ubuntu 2018LTS, 2019.04, 2019.10

Múltiples problemas con la instalación de arranque múltiple grub2 2.0x en Ubuntu 2018LTS, 2019.04, 2019.10

Primero, tengo algunas preguntas estratégicas:

  1. Los instaladores de Ubuntu invocan automáticamente grub-install en modo UEFI en hardware UEFI, incluso si quiero instalar grub2 en un SSD externo. ¿Puedo evitar esto, es decir, utilizar el arranque grub2 en modo BIOS/MBR heredado? En mi caso, Ubuntu 2019.04 se instaló en un SSD externo en modo MBR en una computadora portátil UEFI y apuntó la partición EFI a la partición GPT EFI de Windows (/dev/sdb1) para que solo pueda iniciar Ubuntu en esa misma computadora portátil o en PC. con la misma partición GPT EFI de Windows.
  2. ¿Puede grub2 hacer frente perfectamente a las tablas de particiones MBR que fueron convertidas por gdisk a GPT y para las cuales no se reservó espacio para particiones EFI o grub2? ¿Es necesario mover las particiones existentes para dejar espacio para las particiones UEFI o grub2 al principio del disco? ¿Cómo puedo decirle a grub2 que copie en un disco SSD (externo) el contenido de una partición UEFI de Windows en una forma adaptada para que pueda arrancar de forma independiente como SSD externo en una PC/portátil diferente sin Windows? Copiar la partición con cp, tar o dd y llamar a grub-install no funcionó hasta ahora, lo que generó los siguientes errores. ¿Se debe utilizar la bandera --removable para un SSD?
  3. Idealmente, me gustaría crear un sistema de arranque múltiple con Windows 10 y diferentes variantes de Linux, todos arrancables mediante grub2. ¿Cómo hago esto para que funcione lo mejor posible?

    a) ¿Qué debo hacer antes de instalar Windows 10? ¿Debo crear una pequeña partición GPT para grub2 y marcarla como tal? ¿Debo crear particiones EFI diferentes, por ejemplo, para Windows y las diferentes variantes de Linux?

    b) ¿Debo instalar Windows 10 antes que cualquier Linux o viceversa?

    c) ¿Es posible colocar una partición EFI en el espacio de partición lógica en un SSD MBR, por ejemplo, como /dev/sda5?

    d) ¿Debe ser una partición EFI o una pequeña partición GPT para grub2 la primera en el disco/SSD (como afirman algunas fuentes contradictorias)?

    e) ¿Existe una manera fácil de integrar una partición /boot nuevamente en la instalación principal de Linux e informarle a grub2 al respecto? Supongo que la manera más difícil, una vez que la instalación de grub2 funcione, es adaptar el archivo grub.cfg en consecuencia y copiar los archivos juntos en una partición.

Estoy intentando reparar un arranque de grub2 roto en /dev/sdb con cualquiera de las versiones recientes de Ubuntu: Preparé estas declaraciones: Configuración: /boot = /dev/sdb1, / = /dev/sdb3, UEFI = /dev/ sdb4 (es creado por este script)

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

Me encuentro con estos 7 problemas (todos estos problemas ocurren ocasionalmente después de prácticamente la misma instalación de grub que se muestra arriba, dependiendo del sistema host, la versión de Ubuntu, la partición UEFI adicional de Windows10 presente y si el SSD está conectado interna o externamente):

  1. En el momento del arranque: se está ejecutando un trabajo de inicio para /dev/disk/by-uuid/…. (también después de adaptar los identificadores de bloque en /etc/fstab)

  2. Ubuntu systemd: Recibí SIGRTMIN+20 de PID (plymouthd)**

  3. Kernel de Ubuntu: ucsi_ccg 0-0008: ¡no se pudo restablecer PPM!

  4. Kernel de Ubuntu: ucsi_ccg 0-0008: error de inicio de PPM (-110)
  5. Grub: error: archivo '/grub2/i386-pc/normal.mod' no encontrado - Ingresando al modo de rescate (el directorio de instalación normal de Ubuntu 2019.04 x64 EFI es /grub/x86_64-efi)
  6. Arranque:**

    Error de dependencia para la verificación del sistema de archivos en /dev/disk/by-uuid/CA82-D0E8 Error de dependencia para /boot/efi

  7. chroot: no se pudo ejecutar el comando '/usr/bin/bash': no ​​existe tal archivo o directorio:

Parte problemática:

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*

Salida de diagnóstico:

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 +++

información relacionada