Ubuntu 2018LTS、2019.04、2019.10 での grub2 2.0x マルチブート インストールに関する複数の問題

Ubuntu 2018LTS、2019.04、2019.10 での grub2 2.0x マルチブート インストールに関する複数の問題

まず、戦略的な質問がいくつかあります。

  1. Ubuntu インストーラーは、外付け SSD に grub2 をインストールする場合でも、UEFI ハードウェア上で UEFI モードで grub-install を自動的に呼び出します。これを回避できますか。つまり、従来の BIOS/MBR モードの grub2 ブートを使用できますか。私の場合、Ubuntu 2019.04 は UEFI ラップトップ上の MBR モードで外付け SSD にインストールされ、EFI パーティションが Windows の GPT EFI パーティション (/dev/sdb1) を指すように設定されているため、同じラップトップ上または同じ Windows GPT EFI パーティションを持つ PC 上でのみ Ubuntu を起動できます。
  2. grub2 は、gdisk によって GPT に変換され、EFI または grub2 パーティション用にスペースが予約されていない MBR パーティション テーブルに問題なく対応できますか? ディスクの先頭に UEFI または grub2 パーティション用のスペースを作るために、既存のパーティションを移動する必要がありますか? Windows UEFI パーティションの内容を適応させた形式で (外部) SSD ディスクにコピーするように grub2 に指示するにはどうすればよいでしょうか。そうすれば、Windows のない別の PC/ラップトップで外部 SSD としてスタンドアロン ブートで起動できます。 cp、tar、または dd を使用してパーティションをコピーし、grub-install を呼び出しても、今のところうまくいきません。以下のエラーが発生しました。SSD にはフラグ --removable を使用する必要がありますか?
  3. 理想的には、Windows 10 とさまざまな Linux バリアントを備えたマルチブート システムを作成し、すべて grub2 で起動できるようにしたいと考えています。これをできるだけスムーズに実行するにはどうすればよいでしょうか?

    a) Windows 10 をインストールする前に何をすべきでしょうか? grub2 用に小さな GPT パーティションを作成し、そのようにマークする必要がありますか? たとえば、Windows 用とさまざまな Linux バリアント用に、異なる EFI パーティションを作成する必要がありますか?

    b) Linux の前に Windows 10 をインストールする必要がありますか、それともその逆ですか?

    c) EFI パーティションを MBR SSD 上の論理パーティション スペース (例: /dev/sda5) に配置することは可能ですか?

    d) EFI パーティションまたは grub2 用の小さな GPT パーティションは、ディスク/SSD 上の最初のパーティションである必要がありますか (一部の矛盾する情報源の主張によると)?

    e) /boot パーティションをメインの Linux インストールに統合し、それを grub2 に伝える簡単な方法はありますか? grub2 のインストールが成功したら、grub.cfg ファイルを適切に調整し、ファイルを 1 つのパーティションにコピーするという難しい方法だと思います。

最近の Ubuntu バージョンのいずれかを使用して、/dev/sdb の壊れた grub2 ブートを修復しようとしています。次のステートメントを準備しました: 構成: /boot = /dev/sdb1、/ = /dev/sdb3、UEFI = /dev/sdb4 (このスクリプトによって作成されます)

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

私は次の 7 つの問題に遭遇しました (これらの問題はすべて、ホスト システム、Ubuntu のバージョン、追加の Windows10 UEFI パーティションの存在、および SSD が内部接続されているか外部接続されているかに応じて、上記とほぼ同じ grub-install の後に時々発生します)。

  1. 起動時: /dev/disk/by-uuid/… の開始ジョブが実行されます (/etc/fstab のブロック ID を調整した後も実行されます)

  2. Ubuntu systemd: PID (plymouthd) から SIGRTMIN+20 を受信しました**

  3. Ubuntu カーネル: ucsi_ccg 0-0008: PPM のリセットに失敗しました。

  4. Ubuntu カーネル: ucsi_ccg 0-0008: PPM 初期化に失敗しました (-110)
  5. Grub: エラー: ファイル '/grub2/i386-pc/normal.mod' が見つかりません - レスキュー モードに入ります (通常の Ubuntu 2019.04 x64 EFI インストール ディレクトリは /grub/x86_64-efi です)
  6. Grub ブート:**

    /dev/disk/by-uuid/CA82-D0E8 のファイル システム チェックの依存関係に失敗しました /boot/efi の依存関係に失敗しました

  7. chroot: コマンド '/usr/bin/bash' の実行に失敗しました: そのようなファイルまたはディレクトリはありません:

問題のある部分:

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*

診断出力:

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

関連情報