GRUB를 사용하여 다중 부팅 시스템에 NixOS 설치(Arch 설치에서)

GRUB를 사용하여 다중 부팅 시스템에 NixOS 설치(Arch 설치에서)

나는 ( 부팅 가능한 GRUB2 파티션 및 Arch를 사용하여 설정) /dev/sda로 나누어진 물리적 디스크( )를 가지고 있습니다 . 이것은 내 것이며 잠금 해제하면 전체 크기 파티션이 있는 대형 디스크 입니다 . 아래 그림과 같이 3에 Arch를 설치했습니다 . 이 설정은 Dm-crypt의 Arch Wiki에 설명된 대로 기본적으로 LUKS의 LVM입니다./dev/sda1/boot/dev/sda2cryptrootlvmpool/dev/sda2lvs

파티션 레이아웃 및 lvs

NixOS에 대한 좋은 글을 많이 읽었기 때문에 현재 Arch 설치 옆에 NixOS를 설치하려고 했기 때문에 위와 lvs비슷한 버전을 3개 만들고 arch- lvsNixOS 설치 가이드를 따랐습니다. boot.loader.grub.device = "nodev".Arch 에 있는 기존 GRUB2를 재사용하고 싶기 때문에 NixOS가 다른 곳에 GRUB를 설치하지 않도록 지정했습니다 /dev/sda1. 그러나 grub.cfgNixOS용 파일을 작성합니다 /boot/grub/grub.cfg. 이 경우 NixOS nix-root lv( /NixOS의 파일 시스템 루트)에 있으므로 실제(부팅 가능한) GRUB2 파티션에는 없습니다 /dev/sda1.

그러나 이를 달성하기 위해 메뉴 항목에 추가 메뉴 항목을 추가 하고 거의 설명된 대로 NixOS 설치 프로그램이 내 ( NixOS의 파일 시스템 루트)에 생성한 메뉴 항목 grub.cfg을 가리키고 싶습니다.configfilenix-root lv/여기. 그러나 nix-root lvGRUB에는 유사한 구문이 필요한 것 같기 때문에 이를 가리키는 항목을 생성하는 방법을 잘 모르겠습니다. 그러나 set root='(hd0,X)'이와 같은 항목이 물리적 디스크 및 파티션 번호가 아닌 다른 항목을 가리키고 있다는 set root것을 어떻게 알 수 있습니까? lv? 두 옵션 모두 GRUB에 configfile잘 설명되어 있지 chainloader않으며 내가 아는 바도 없습니다.set root

lvs누군가가 나에게 올바른 방향을 알려주고 내가 무엇을 잘못하고 있는지 또는 LUKS의 다른 LVM에 있는 여러 Linux 배포판에 대해 하나의 부팅 가능한 배포판 만 사용하는 것이 왜/어떻게 그렇게 어렵게 만드는지 말해 줄 수 있기를 바랍니다. GRUB2 파티션.

편집하다:set root=, (lv/nix-root)및 과 (lvmpool/nix-root)같은 다양한 옵션을 시도했지만 (/dev/mapper/lvmpool-nix--root)문제는 GRUB이 로드될 때 LVM이 여전히 LUKS로 암호화되어 있기 lvs때문에 LVM이 GRUB에 표시되지 않는 것 같습니다 ./dev/sda2/cryptroot

답변1

위의 Alexander Batischev의 도움을 받아매우 유용한 정보Reddit cookie_enthusiast사용자 로부터/r/linuxquestionsReddit 페이지를 통해 작동하게 만들었습니다.

GRUB2는 UUID를 매우 잘 처리하지만 장치 이름은 잘 처리하지 못하는 것으로 나타났습니다. 이러한 지식을 염두에 두고 NixOS용 추가 GRUB 메뉴 항목을 (수동으로) 생성하려면 다음 4개의 UUID가 필요합니다 grub.cfg configfile.

  1. 장치의 LUKS UUID입니다.
  2. LVM 볼륨 그룹의 UUID입니다.
  3. LVM 논리 볼륨의 UUID입니다.
  4. GRUB2의 명령을 통해 로드 grub.cfg하려는 파일이 포함된 파일 시스템의 UUID입니다 .configfile

여기에 이 ​​4개의 UUID를 얻는 방법이 나열되어 있습니다.

  1. 실행 cryptsetup luksUUID /dev/sda2하고-UUID에서 모든 대시( )를 제거합니다., 제 경우에는 a0cb535a-8468-485f-a220-a5f49e85c9f4가 됩니다.a0cb535a8468485fa220a5f49e85c9f4
  2. 내 경우에는 vgdisplayUUID를 사용하여 실행하고 찾습니다 VG UUID.lvmpool5atKN9-PQBi-T9wb-Iyz8-qP4y-HN2E-c5uLOT
  3. lvdisplay파일이 포함된 LV 이름이나 LV 경로 LV UUID, 또는 제 경우에는 UUID를 찾아 보세요 .grub.cfgnix-root/dev/lvmpool/nix-rootC9zkjF-IHu0-qQkP-KgLf-8rAy-TVPu-HQ7gtj
  4. lsblk -p -o +UUID파일이 포함된 장치 경로의 UUID를 실행 하고 찾습니다 grub.cfg. 제 경우에는 /dev/mapper/lvmpool-nix--rootUUID입니다.cc6a06bb-336f-4e9f-a5f0-fdd43e7f548f

이렇게 하면 내 NixOS 설치를 위해 GRUB가 설치되지 않았기 때문에 grub.cfg configfile내 NixOS에 있는 NixOS를 참조하기 위해 다음과 같은 추가 GRUB 메뉴 항목을 생성할 수 있습니다 (Arch에서는 이 항목이 에 들어갑니다 ).nix-root lvboot.loader.grub.device = "nodev";/etc/nixos/configuration.nix/etc/grub.d/40_custom

menuentry 'NixOS' {
    insmod crypto
    insmod cryptodisk
    insmod luks
    insmod lvm
    cryptomount -u a0cb535a8468485fa220a5f49e85c9f4
    set root='lvmid/5atKN9-PQBi-T9wb-Iyz8-qP4y-HN2E-c5uLOT/C9zkjF-IHu0-qQkP-KgLf-8rAy-TVPu-HQ7gtj'
    search --fs-uuid --set=root cc6a06bb-336f-4e9f-a5f0-fdd43e7f548f
    configfile '/boot/grub/grub.cfg'
}

이를 더 명확하게 설명하기 위해 여기에는 몇 가지 리터럴 값이 포함되어 있습니다 lvmid.아니요LVM의 이름이나 ID로 바꿔야 합니다. 이것은 어디에도 올바르게 문서화되어 있지 않은 것 같습니다. LUKS 장치의 UUID를 라인에 넣으면 cryptomount -u같은 문제가 발생합니다대시 포함Press any key to continue이 중 GRUB는 (분명히) 별로 도움이 되지 않는 내용을 알려줄 것입니다 .

crypt -> LVM -> root다음을 통해 실행되는 수동 GRUB 메뉴 항목에 대한 베어 템플릿LUKS의 LVM따라서 설정은 다음과 같습니다.

menuentry 'NixOS' {
    insmod crypto
    insmod cryptodisk
    insmod luks
    insmod lvm
    cryptomount -u <LUKS UUID without dashes>
    set root='lvmid/<LVM Volume Group UUID>/<LVM Logical Volume UUID>'
    search --fs-uuid --set=root <Filesystem UUID>
    configfile '/boot/grub/grub.cfg'
}

나머지 부분에도 관심이 있으신 분들을 위해 /etc/nixos/configuration.nix파일을 다음과 같이 수정했습니다.

boot.loader.grub.enable = true;
boot.loader.grub.version = 2;
boot.loader.grub.device = "nodev";
boot.initrd.luks.devices = [ { name = "cryptroot"; device = "/dev/sda2"; preLVM = true; } ];

관련 정보