그럽 구조에서 영구적으로 복구하는 방법은 무엇입니까?

그럽 구조에서 영구적으로 복구하는 방법은 무엇입니까?

이 문제는 DOS 파티션 SSD(예: GPT/UEFI 없음)의 Windows/Linux 이중 부팅 시스템과 관련이 있습니다. 처음에는 컴퓨터의 HDD에 Windows 10만 설치되어 있었습니다. 그런 다음 해당 시스템을 SSD로 옮기고 파티션 크기를 조정한 다음 Windows 10 옆에 Xubuntu 20.04를 설치했는데 모든 것이 잘 작동했습니다.

드라이브에는 항상 EFI 파티션이 있습니다. UEFI 장치가 아니기 때문에 이것이 무엇을 하는지 모르겠습니다. 하지만 저는 이 파티션을 변경하지 않았습니다. - 이 시스템에는 스왑 파티션이 없습니다.

Linux 시스템 파티션을 위한 더 많은 공간을 만들고 싶습니다. 나중에 요구 사항이 변경될 경우 더욱 유연하게 대처하기 위해 두 개의 Linux 파티션 사이에 Windows 기본 파티션을 이동했습니다. 이제 파티션 레이아웃은 다음과 같습니다.

NAME   FSTYPE PARTTYPE PARTFLAGS LABEL
sda                              
├─sda1 ntfs   0x7      0x80      System-reserviert
├─sda2 ntfs   0x7                SSD-Windows-Sys
├─sda3 vfat   0xef               SSD-EFI
├─sda4        0x5                
├─sda6 ext4   0x83               SSD-Linux-Sys
├─sda5 ntfs   0x7                SSD-Windows-Home
└─sda7 ext4   0x83               SSD-Linux-Home

(sda-숫자는 엄격하게 오름차순이 아니며 분할된 표시입니다.SSD 저장 순서에 따라sda6-sda5-sda7. )

파티션 1~3을 변경하지 않았습니다. gpartedNTFS 파티션 SSD-Windows-Home을 이동하고 크기를 조정하기 위해 원래 UUID와 LABEL을 성공적으로 유지했습니다 . vfat 및 ntfs 와 tune2fs -U <UUID>동등한 것이 없으며 dd제안된 대로 조작하여 일련 번호를 바꾸고 싶지 않습니다.이 토론, 그래서 ntfs-파티션의 크기를 조정하고 이동하여 이 작업을 수행했습니다 SSD-Windows-Home.

Linux 파티션의 경우 gpartedSSD 끝에 새 ext4 파티션을 만들고 rsync이전 파티션의 내용을 새 파티션에 복사한 다음 이전 파티션을 삭제하고 다른 파티션의 크기를 조정하여 공백을 메우곤 했습니다. 마지막으로 표시된 상태를 달성하기 위해 지원했으며 tune2fs, 특히 모든 파티션에 대해 이전과 동일한 LABEL 및 UUID를 유지했습니다.

파티션 변경 작업을 하던 중, 변경 후 부팅 문제가 발생할 수 있다는 경고가 나타났습니다. 각 파티션의 LABEL과 UUID는 동일하게 유지되므로 상관하지 않습니다.하지만 이는 예리한 가정이므로 재부팅을 시도했을 때 다음 사항을 알아차려야 했습니다.

grub rescue>부팅할 운영 체제를 묻는 대신 GRUB2 메뉴 에서 부팅 프로세스가 중지됩니다 .

다음 명령을 실행하여 컴퓨터를 성공적으로 시작했습니다.

grub rescue> set prefix=(hd0,6)/boot/grub
grub rescue> set root=(hd0,6)/
grub rescue> insmod linux
grub rescue> insmod normal
grub rescue> normal

그러면 GRUB2 메뉴가 표시되고 Linux와 Windows 10 중에서 선택할 수 있습니다.두 OS 모두 모든 파티션 변경 전처럼 작동합니다.(물론 중간에 컴퓨터를 종료했다가 grub rescue>다시 해야 했습니다).

grub rescue문제를 영구적으로 복구 하려면 Linux 시스템을 부팅한 후 다음 명령을 실행하라는 조언을 받았습니다 .

$LC_ALL=C sudo grub-install --target=/boot/grub/i386-pc /dev/sda
grub-install: error: /usr/lib/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory.
$

파일이 하나 있습니다(및 에 파일이 두 개 더 있습니다 /boot/grub/i386-pc/modinfo.sh)./boot/grub/x86_64-efi/usr/lib/grub/x86_64-efi

그래서 나는 노력했다

$LC_ALL=C sudo grub-install --target=/boot/grub/i386-pc /dev/sda6
grub-install: error: /usr/lib/grub/boot/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory.
$

잘못된 디렉토리에서 검색 중입니다. 그래서 나는 다음을 추가했다 --directory=/boot/grub/i386-pc:

$ LC_ALL=C sudo grub-install --directory=/boot/grub/i386-pc /dev/sda6
Installing for i386-pc platform.
grub-install: error: cannot open `/boot/grub/i386-pc/moddep.lst': No such file or directory.
$ ls -l /boot/grub/i386-pc/moddep.lst
-rw-r--r-- 1 root root 5416 2019-12-10 10:34 /boot/grub/i386-pc/moddep.lst
$ 

명령에서 볼 수 있듯이 ls이 오류 메시지 /boot/grub/i386-pc/moddep.lst는 존재하고 루트가 액세스할 수 있기 때문에 확실히 잘못된 것입니다! 이제 나는 어찌할 바를 모르겠습니다.

컴퓨터가 grub rescue명령을 사용하여 부팅할 수 있게 되면( chroot활성 스틱에서 시작하여 사용하는 대신) 부팅 프로세스마다 입력할 필요 없이 입력한 정보를 영구적으로 적용하는 것이 덜 어려워집니다.

이 작업을 어떻게 올바르게 수행합니까?

답변1

/usr/lib/grub/x86_64-efi및 의 존재는 /usr/lib/grub/x86_64-efi-signedXubuntu가 UEFI 부팅 시스템으로 설치되었음을 나타내며, 이는 시스템이 실제로 UEFI를 지원함을 나타냅니다.

디스크에 Windows 설치가 포함되어 있고 MBR 스타일로 분할되어 있다는 사실은 sdaWindows가 클래식 BIOS 스타일을 사용하여 부팅해야 함을 의미합니다. GRUB 메뉴에서 부팅할 운영 체제를 쉽게 선택하려면 Xubuntu가 기존 BIOS 스타일로 부팅하도록 할 수도 있습니다. 그러나 기존 GRUB에 필요한 패키지가 현재 시스템에 설치되어 있지 않은 것 같습니다.

grub-efi시스템에 설치되지 않았다고 말합니다 . Debian/Ubuntu에는 해당 패키지가 없습니다. UEFI 해당 이름 grub-pc은 입니다 grub-efi-amd64. 이 이름은 grub-pcGRUB가 한때 x86/BIOS 전용 부트 로더였을 때부터 따온 것입니다. 이제는 다른 많은 아키텍처와 펌웨어 유형을 지원합니다.

주석에 제안된 명령에는 일부 오타가 있습니다. --target옵션은 grub-install경로 이름이 아니라 GRUB 플랫폼 식별자를 사용합니다. 귀하의 경우에는 i386-pc.

먼저 GRUB용 레거시 BIOS 지원 패키지를 설치합니다.

sudo apt install grub-pc grub-pc-bin

그런 다음 GRUB를 시스템의 마스터 부트 레코드에 설치합니다.

sudo grub-install --target=i386-pc /dev/sda

확인해야 할 /etc/default/grub사항 줄이 있으면

GRUB_DISABLE_OS_PROBER=true

이를 로 변경하고 패키지가 설치되어 있는지 false확인한 다음 실행하여 두 운영 체제 모두에서 GRUB 구성을 생성해야 할 수도 있습니다.os-probersudo update-grub

그런 다음 해당 내용을 설치 sda3하고 검사합니다.

sudo mount /dev/sda3 /mnt
sudo ls -l /mnt

디렉터리가 포함된 경우 EFI다른 이름으로 이름을 바꿉니다(시스템 펌웨어에 UEFI 부팅에 대해 제어할 수 없는 기본 설정이 있는 경우).

sudo mv /mnt/EFI /mnt/NO-EFI
sudo umount /mnt

이제 재부팅할 시간입니다. 이제 두 운영 체제를 성공적으로 부팅할 수 있는지 확인한 후 다음 명령을 사용하여 UEFI 부팅 지원 패키지를 제거할 수 있습니다.

sudo apt purge grub-efi-amd64 grub-efi-amd64-bin grub-efi-amd64-signed efibootmgr shim-signed shim-helpers-amd64-signed shim-signed-common

관련 정보