Clonezilla 및 BTRFS, GRUB 및 부팅

Clonezilla 및 BTRFS, GRUB 및 부팅

저는 Clonezilla를 사용하여 OpenSUSE Tumbleweed가 설치된 Btrfs 드라이브를 더 큰 드라이브에 복제했으며 심지어 섹터별로 복제해 보았습니다. 그러나 매번 프로세스가 성공적으로 완료되는 것처럼 보이지만 새 드라이브에서 부팅하려고 하면 Ubuntu GRUB가 나타나고 물론 아무 것도 로드되지 않습니다. 저는 Ubuntu 메뉴가 Clonezilla 자체에서 나온 것이라고 가정합니다. 그런데 Clonezilla가 모든 것을 정확하게 복사하지 않는 이유는 무엇입니까?

또한 OpenSUSE에서 새 드라이브를 마운트할 수 없습니다. 드라이브가 Partition Manager에 표시되지만 마운트 옵션을 사용할 수 없습니다.

누군가 드라이브 복제가 시작되지 않거나 마운트되지 않는 원인을 명확히 할 수 있습니까? Btrfs에는 몇 가지 특별한 세부 사항이 있다고 생각하지만 왜 섹터별 복제가 모든 것의 동일한 복사본을 생성하지 않아 디스크를 부팅 및 마운트 가능하게 만드는지 모르겠습니다. 도움을 받기를 바랍니다.

고쳐 쓰다: 다음의 도움으로 파티션을 마운트 가능하게 만들 수 있었습니다.`마운트` 오류: `시스템 호출 실패: 파일이 존재합니다. `하지만 여전히 부팅할 수 없습니다. 또한 어떤 이유로 /home/복사본이 동일하다고 가정하더라도 새 디스크에는 사용자 디렉터리가 없습니다.

답변1

알았어, 그럼 기반으로당신의 lsblk결과물그리고당신의/etc/fstabbtrfs, 기본적으로 EFI 시스템 파티션을 제외한 전체 시스템이 있습니다 .

단일 btrfs파일 시스템은 단일 파티션을 넘어 심지어 여러 디스크에 걸쳐 확장될 수 있습니다. lsblk출력이 수행 중인 작업을 나타내지 않으므로 하위 볼륨을 포함하는 확장 /dev/sdc역할을 할 수 있습니다 . 이는 복제본에 없는 이유를 설명할 수도 있고, 다른 모든 하위 볼륨을 마운트하지 못한 것일 수도 있습니다. 이를 사용하여 마운트된 각 파일 시스템 에 어떤 장치/파티션이 속하는지 확인할 수 있습니다.btrfs/homebtrfs filesystem showbtrfs

btrfstune -m /dev/sdb3링크한 다른 질문의 설명에서 언급한 대로 실행하면 복제된 파일 시스템의 UUID가 변경되므로 /etc/fstab복제된 파일 시스템의 UUID 항목이 더 이상 올바르지 않습니다. /etc/fstab복제된 파일과 GRUB 구성 및/또는 initramfs에서 문제를 수정 해야 합니다 . lsblk -o +UUID새로운 내용을 보는 데 사용할 수 있습니다.파일 시스템 UUID. 이 UUID는 GRUB 및 Linux 커널에서 사용되지만 UEFI 펌웨어에서는 사용되지 않습니다. 파일 시스템 메타데이터에 저장됩니다.

당신은 이것을 해야 합니다:

mount /dev/sdb3 /mnt
mount -o subvol=/@/boot/grub2/x86_64-efi /dev/sdb3 /mnt/boot/x86_64-efi
mount /dev/sdb1 /mnt/boot/efi

그런 다음:

  • /mnt/etc/fstabbtrfs 파일 시스템을 참조하는 각 줄의 파일 시스템 UUID를 바꾸도록 편집하세요.

  • 커널 부팅 옵션 줄에서 파일 시스템 UUID를 대체하도록 편집 /mnt/boot/grub/grub.cfg(또는 OpenSuSE가 실제 GRUB 구성을 배치하는 위치에 따라 다름)/mnt/boot/efi/EFI/opensuse/grub.cfg

  • /mnt/etc/default/grub커널 업데이트가 설치되거나 다른 이유로 GRUB 구성이 재생성될 때 이전 UUID가 예기치 않게 반환되지 않도록 파일 시스템 UUID를 바꾸도록 편집합니다 .
  • initramfs 파일을 완전히 다시 만들 수도 있습니다.

initramfs 파일을 다시 만들어야 하는 경우(루트 파일 시스템을 찾기 위해 커널 부팅 매개변수에 전적으로 의존하는 경우 필요하지 않을 수 있음) 이 시점에서 다음을 수행할 수 있습니다.

mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
mount -o bind /dev /mnt/dev
chroot /mnt /bin/bash
mkinitrd   # or whatever is the appropriate command for OpenSuSE
exit
  • 마지막으로 설치한 모든 항목을 제거합니다.

시스템이 복제된 디스크에서 실제로 부팅하려면 해당 디스크에 대한 UEFI 부팅 변수를 정의해야 합니다. ~에서당신의 efibootmgr -v결과물, OpenSuSE 시작 항목은 EFI 시스템 파티션을 나타냅니다.파티션 UUID. UEFI 펌웨어에서만 사용되는 별도의 UUID입니다. GPT 파티션 테이블에 저장됩니다.

Boot0000* opensuse-secureboot   HD(1,GPT,e099a79f-8b66-412d-89ae-a4869876f500,0x800,0x100000)/File(\EFI\opensuse\shim.efi)

를 사용하여 파티션 UUID를 볼 수 있습니다 lsblk -o +PARTUUID.

동일한 파티션 UUID를 가진 두 개의 디스크가 있으면 시스템 펌웨어가 혼동될 수 있으며, 펌웨어는 단순히 일치하는 UUID를 가진 첫 번째 디스크를 선택할 수도 있습니다. 동일한 머신에 두 디스크를 모두 보관하려면 Change Partition UUID를 사용해야 할 수도 있습니다 . sgdisk --partition-guid=1:R /dev/sdb(이 명령은 파티션 #1에 대해 새로운 무작위 파티션 UUID를 생성합니다 /dev/sdb.)

완료되면 복제된 디스크에 대한 새 UEFI 부팅 변수를 생성해야 합니다. 명령은 와 유사합니다 efibootmgr -c -d /dev/sdb -l \\EFI\\opensuse\\shim.efi -L opensuse-clone. 백슬래시는 셸의 특수 이스케이프 문자이므로 ESP 파일 시스템은 FAT32이므로 UEFI 펌웨어는 Unix 스타일 슬래시 대신 MS-DOS/Windows 스타일 백슬래시를 사용합니다. 유용하게도 이 명령은 지정된 드라이브에서 파티션 UUID를 자동으로 읽으므로 이를 입력할 필요가 없습니다.

efibootmgr -B -b XXXX( 더 이상 사용되지 않는 UEFI 부팅 변수의 시스템 NVRAM을 지우려면 XXXX가 이전 Linux 설치 중 하나의 BootXXXX 번호인 BootXXXX 번호를 사용해야 할 수도 있습니다 .)

그러나 디스크를 다른 컴퓨터로 이동할 계획이라면 파티션 UUID를 변경할 필요가 없지만 복제된 디스크를 받는 시스템에 UEFI 부팅 변수를 생성해야 합니다. 일부 Linux Live 부팅 미디어를 사용하여 이 작업을 수행할 수 있지만 해당 미디어에서 구체적으로 부팅해야 합니다.UEFI 스타일그렇지 않으면 UEFI 부팅 변수에 액세스할 수 없습니다.

또는 주요 준비 없이 UEFI 시스템에서 복제 디스크를 부팅할 수 있어야 하는 경우 \EFI\Boot\bootx64.efi복제 디스크 ESP 파티션의 대체/이동식 미디어 부트 로더 경로에 UEFI 부트 로더 복사본을 설정해야 합니다. 안타깝게도 OpenSuSE UEFI 부트로더에 대한 정확한 설정 정보가 없기 때문에 정확한 단계를 알려드릴 수 없습니다.

복제된 디스크의 ESP에 액세스하려면 먼저 이를 설치해야 합니다. 예를 들면 다음과 같습니다.

mount /dev/sdb1 /mnt

/mnt/EFI/BOOT/bootx64.efi그런 다음 UEFI 펌웨어에서 사용하는 DOS 스타일 경로 이름 에 해당하는 폴백 부트로더를 배치할 수 있습니다 .\EFI\BOOT\bootx64.efi

관련 정보