grub2가 OS를 다른 드라이브로 옮긴 후 부팅 중에 잘못된 드라이브에서 grub.cfg를 로드합니다.

grub2가 OS를 다른 드라이브로 옮긴 후 부팅 중에 잘못된 드라이브에서 grub.cfg를 로드합니다.

내 노트북에는 원래 128GB M.2 SSD와 1TB HDD가 있었습니다. 시스템은 Windows를 사용한 이중 부팅으로 구성됩니다. /boot/efi 파티션은 /dev/nvme0m1p1에 있고 원래 루트 파티션은 /dev/sda3에 있습니다.

원본 nvme0n1의 이미지를 압축하고 nvme0n1을 1TB M.2 SSD로 교체했습니다. 원본 이미지를 새 SSD에 복제했습니다. 결과적으로 복제가 완료되면 Windows 또는 /dev/sd3 버전의 우분투로 부팅할 수 있었습니다.

그런 다음 새 ext4 파티션인 nvme0n1p6을 만들고 여기에 /dev/sda3 파티션을 복제했습니다. 복제 후 처음으로 update-grub2를 실행했을 때 파티션 UIDD를 변경하는 것을 잊어버렸습니다. 이후에 gparted를 사용하여 파티션 UIDD를 변경하고 update-grub2를 다시 실행하여 /dev/nvme0n1p6에 대한 새 UIDD에서 이미지를 찾았는지 확인했습니다.

새 이미지의 /etc/fstab에 있는 UIDD= 문에 공백을 삽입했다는 사실을 알아낸 후 6시간을 보낸 후 해당 새 이미지로 부팅할 수 있었습니다(교정 기술이 향상될 수 있습니다). 해당 이미지가 로드되면 새 우분투에 대한 선택 항목을 새 grub.cfg의 맨 위 및 기본값으로 이동하기 위해 update-grub2를 다시 실행했습니다.

마지막으로 문제: 재부팅 후에도 표시되는 grub 메뉴는 여전히 원래 /dev/sda3/boot/grub 폴더의 grub.cfg입니다.

/nvme0n1p6에 대해 생성된 grub.cfg를 /sda3에 복사하면 후속 부팅 시 새 grub.cfg가 표시될 수 있습니다.

/sda3에서 grub.cfg 파일의 이름을 바꾸면 재부팅 시 명령줄에서 grub이 중지됩니다. 명령줄을 종료하면 Windows OS가 로드됩니다. /sda3에서 유효한 grub.cfg를 복원할 수 있는 라이브 USB 이미지로 문제를 해결할 수 있습니다.

update-grub 명령이 내가 실행해야 하는 유일한 명령은 아닌 것 같습니다. 제 생각에는 /nvme0n1p1에 저장된 이미지를 업데이트해야 할 것 같습니다. 일종의 grub 설치를 실행하여 이 작업을 수행할 수 있습니까?

답변1

면책 조항 : 나는 완전히 틀렸을 수도 있습니다.

귀하의 정보에 따르면 하드 드라이브에 Windows가 한 개, Ubuntu가 한 개 설치되어 있는 것 같습니다( /dev/sda3). 이 하드 드라이브 설치를 H라고 부르겠습니다. 이제 설치를 SSD로 이동해야 했기 때문에 새 SSD 파티션을 생성하고 하드 드라이브 설치를 해당 SSD 파티션에 복제했습니다. (새로 설치하는 편이 낫겠지만, 귀하의 질문과 관련이 없습니다). 이 SSD 설치를 S라고 부르겠습니다.

AFAIK 문제는 S 설치를 완료한 후 grub을 전혀 설치하지 않았다는 것입니다. 따라서 시스템에 설치된 grub은 여전히 ​​설치 H [1]에 속합니다. 따라서 grub.cfg설치 H에서는 여전히 현재를 사용하게 됩니다 .

grub을 설치 S에서 사용하려면 grub.cfgS에서 EFI 파티션으로 grub을 설치해야 합니다.

설치 S로 부팅하고 다음을 실행합니다.

$ sudo grub-install dummy
$ sudo update-grub

내가 시나리오를 잘못 이해했거나 명령에 오류가 발생한 경우 알려주십시오.


참고자료:
grub EFI 로더는 올바른 boot.cfg를 어떻게 찾나요?

답변2

이제 새로운 M.2 SSD에서 우분투를 실행하고 있으므로 nvme0n1p1에 grub이 설치된 듀얼 부트 로더가 포함된 128GB SSD를 M.2가 하나 있는 노트북에서 1TB SSD로 교체하는 데 사용한 방법을 검토하겠습니다. 포트. 명확성을 위해 대부분의 Windows 10은 nvme0의 다양한 파티션에 있고 ubuntu는 원래 sda3의 하드 드라이브 파티션에 있었습니다. 부팅되면 nvme0n1p1이 /boot/efi에 마운트됩니다.

  1. nvme0n1의 이미지를 만듭니다. 저는 개인적으로 이미지 크기를 줄이기 위해 파티션을 축소하는 조치를 취하지 않았습니다. 이것이 필요하다고 간주되는 경우 다른 개인이 그렇게 하는 방법에 대한 지침을 제공했습니다.

    비. 내부 또는 외부의 다른 드라이브에 이미지를 씁니다. 나는 다음을 사용했다:

    dd if=/dev/nmve0n1 | gzip -c > pathToOtherDeviceFolder/nvme0n1.img

    -c옵션을 사용하면 gzip이 표준 출력에 쓴 다음 해당 파일로 전달됩니다.

  2. 라이브 이미지, ubuntu live 또는 gparted live가 포함된 USB 드라이브에서 부팅을 테스트합니다. 노트북과 연결을 끊은 상태에서 평소 사용하는 외부 모니터로 라이브 영상을 테스트하지 않아서 나중에 문제가 생겼습니다. 외부 디스플레이가 연결되지 않은 상태에서 다음 단계를 진행하는 데 며칠이 걸렸습니다. 외부 디스플레이(또는 이더넷)가 없어서 다음 단계의 결과가 아닌 라이브 USB 드라이브의 부팅을 방해했기 때문입니다. 부팅에 성공하기 위해 이더넷을 연결한 기억은 없지만 외부 디스플레이와 함께 사용할 수 있었습니다. 두 경우 모두 내가 이해하지 못하지만 해결할 수 있는 라이브 이미지의 종속성이 있습니다. 부팅한 후에는 이동하려는 이미지가 포함된 드라이브를 마운트할 수 있는지 확인하십시오.

  3. 전원을 끄고 원래 M.2 SSD를 새 SSD로 교체합니다.

  4. 이미지를 새 nvme0n1로 이동

    ㅏ. USB 라이브 디스크에서 부팅합니다. (이미 테스트한 내용입니다)

    비. 이동하려는 이미지가 포함된 드라이브를 마운트합니다. (다시 테스트했습니다)

    씨. 이미지를 새 nvme0n1로 이동합니다. 나는 다음을 사용했다:

    gunzip -c pathToOtherDeviceFolder/nvme0n1.img | dd of=/dev/nvme0n1

    다시 말하지만, gunzip은 새 장치에 쓰기 위해 dd로 파이프되는 stdout에 씁니다.

  5. 새 nvme0n1의 새 파티션으로 우분투 이동 여기서는 sda3의 원래 우분투 이미지로 재부팅하기로 선택했습니다. 새로운 nvme0n1은 원본의 복제본이므로 이는 문제가 되지 않습니다. USB 라이브 환경에서 작동하는 동안 이러한 단계를 수행할 수 없는 이유는 모르겠지만 그렇게 해본 경험은 없습니다.

    ㅏ. gparted 또는 기타 도구를 사용하여 nvme0n1에 새 ext4 파티션을 만듭니다. 앞으로는 이 파티션을 nvme0n1p6이라고 부르겠습니다.

    비. /dev/sda3(필자의 경우)에 있는 우분투 이미지를 /dev/nvme0n1p6에 복제합니다. 나는 다음을 사용했다: dd if=/dev/sda3 of=/dev/nvme0n1p6

    씨. 복제 후 gparted 또는 다른 도구를 사용하여 nvme0n1p6의 파티션 UIDD를 고유한 UIDD로 변경합니다.

  6. 작동을 위해 nvme0n1p6에서 새 것을 준비합니다.

    ㅏ. /dev/nvme0n1p6을 마운트합니다. 마운트 지점으로 /mnt를 사용했습니다.

    비. /etc/fstab을 수정하여 nvme0n1p6용 UIDD를 /로 마운트합니다. nvme0n1p1은 여전히 ​​/boot/efi로 마운트됩니다. 수정된 항목의 형식이 올바른지 확인하세요. 추가 공간을 확보한 후 UIDD=내가 뭘 잘못했는지 궁금해하는 데 몇 시간이 더 걸렸습니다.

    씨. 이때 nvme0n1p6을 언마운트할 수 있는데 이 단계를 생략한 것 같습니다.

  7. 여전히 USB 라이브 디스크에서 실행 중인 경우 원래 우분투 이미지로 재부팅합니다(내 이미지는 /dev/sda3에 있음).

  8. Grub 메뉴 옵션을 업데이트합니다.

sudo update-grub2

nvme0n1p6의 원본 이미지, Windows 이미지 및 새 우분투 이미지가 찾아서 추가되는지 확인하세요.

  1. 재부팅하고 grub 부팅 메뉴에서 새 우분투 이미지를 선택하십시오.

  2. 새 이미지에서 다음을 실행합니다.

    ㅏ. sudo grub-install 그러면 /boot/efi(/dev/nvme0n101)의 grub 파일이 grub 메뉴 grub.cfg의 sda3 위치가 아닌 /dev/nvme0n1p6/boot/grub를 찾도록 수정됩니다.

    비. `sudo update-grub' 복제된 /boot/grub/grub.cfg를 새 이미지를 기본으로 맨 위에 배치하고 대안으로 sda3의 원본 이미지를 배치하는 새 파일로 대체합니다.

이제 세 이미지 중 하나로 부팅할 수 있습니다. grub-installgrub이 메뉴 구성 파일을 찾지 못하기 때문에 새 이미지에서 실행될 때까지 원본 이미지를 시스템에서 제거할 수 없습니다.

제가 어떤 단계도 생략하거나 잘못 기억하지 않았으면 좋겠습니다. 이것이 여러분에게 도움이 되기를 바랍니다.

관련 정보