먼저 몇 가지 전략적 질문이 있습니다.
- 외부 SSD에 grub2를 설치하려는 경우에도 Ubuntu 설치 프로그램은 UEFI 하드웨어의 UEFI 모드에서 grub-install을 자동으로 호출합니다. 이를 방지할 수 있습니까? 즉, 레거시 BIOS/MBR 모드 grub2 부팅을 사용할 수 있습니까? 내 경우 Ubuntu 2019.04는 UEFI 노트북의 MBR 모드에서 외부 SSD에 자체적으로 설치되었으며 EFI 파티션을 Windows의 GPT EFI 파티션(/dev/sdb1)으로 지정하여 동일한 노트북이나 PC에서만 Ubuntu를 부팅할 수 있었습니다. 동일한 Windows GPT EFI 파티션을 사용합니다.
- grub2는 gdisk에 의해 GPT로 변환되고 EFI 또는 grub2 파티션용으로 예약된 공간이 없는 MBR 파티션 테이블을 완벽하게 처리할 수 있습니까? 디스크 시작 부분에 UEFI 또는 grub2 파티션을 위한 공간을 만들기 위해 기존 파티션을 이동해야 합니까? Windows가 없는 다른 PC/노트북에서 외부 SSD로 독립 실행형 부팅으로 부팅할 수 있도록 grub2에게 Windows UEFI 파티션의 내용을 (외부) SSD 디스크에 적합한 형식으로 복사하도록 지시하려면 어떻게 해야 합니까? cp, tar 또는 dd를 사용하여 파티션을 복사하고 grub-install을 호출하면 지금까지 작동하지 않아 아래 오류가 발생했습니다. --removable 플래그를 SSD에 사용해야 합니까?
이상적으로는 Windows 10 및 다양한 Linux 변형이 포함된 다중 부팅 시스템을 만들고 싶습니다. 모두 grub2로 부팅 가능합니다. 최대한 원활하게 실행하려면 어떻게 해야 합니까?
a) Windows 10을 설치하기 전에 무엇을 해야 합니까? grub2용 작은 GPT 파티션을 생성하고 그렇게 표시해야 합니까? 예를 들어 Windows 및 다양한 Linux 변형에 대해 서로 다른 EFI 파티션을 생성해야 합니까?
b) Linux를 설치하기 전에 Windows 10을 설치해야 합니까, 아니면 그 반대로 설치해야 합니까?
c) EFI 파티션을 MBR SSD의 논리 파티션 공간(예: /dev/sda5)에 넣을 수 있습니까?
d) grub2용 EFI 파티션 또는 작은 GPT 파티션이 디스크/SSD의 첫 번째 파티션이어야 합니까(일부 모순되는 소스 주장처럼)?
e) /boot 파티션을 기본 Linux 설치에 다시 통합하고 이에 대해 grub2에 알리는 쉬운 방법이 있습니까? 일단 grub2 설치가 작동하면 어려운 방법은 grub.cfg 파일을 적절하게 조정하고 파일을 하나의 파티션에 함께 복사하는 것입니다.
최신 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 후에 가끔 발생합니다).
부팅 시: /dev/disk/by-uuid/…에 대한 시작 작업이 실행 중입니다. (또한 /etc/fstab에서 블록 ID를 조정한 후)
Ubuntu systemd: PID(plymouthd)에서 SIGRTMIN+20을 받았습니다**
Ubuntu 커널: ucsi_ccg 0-0008: PPM 재설정에 실패했습니다!
- Ubuntu 커널: ucsi_ccg 0-0008: PPM 초기화 실패(-110)
- Grub: 오류: '/grub2/i386-pc/normal.mod' 파일을 찾을 수 없음 - 복구 모드로 들어가는 중(일반 Ubuntu 2019.04 x64 EFI 설치 디렉터리는 /grub/x86_64-efi입니다)
그럽 부팅:**
/dev/disk/by-uuid/CA82-D0E8의 파일 시스템 검사에 대한 종속성이 실패했습니다. /boot/efi에 대한 종속성이 실패했습니다.
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 +++