나는 ( 부팅 가능한 GRUB2 파티션 및 Arch를 사용하여 설정) /dev/sda
로 나누어진 물리적 디스크( )를 가지고 있습니다 . 이것은 내 것이며 잠금 해제하면 전체 크기 파티션이 있는 대형 디스크 입니다 . 아래 그림과 같이 3에 Arch를 설치했습니다 . 이 설정은 Dm-crypt의 Arch Wiki에 설명된 대로 기본적으로 LUKS의 LVM입니다./dev/sda1
/boot
/dev/sda2
cryptroot
lvmpool
/dev/sda2
lvs
NixOS에 대한 좋은 글을 많이 읽었기 때문에 현재 Arch 설치 옆에 NixOS를 설치하려고 했기 때문에 위와 lvs
비슷한 버전을 3개 만들고 arch-
lvs
NixOS 설치 가이드를 따랐습니다. boot.loader.grub.device = "nodev"
.Arch 에 있는 기존 GRUB2를 재사용하고 싶기 때문에 NixOS가 다른 곳에 GRUB를 설치하지 않도록 지정했습니다 /dev/sda1
. 그러나 grub.cfg
NixOS용 파일을 작성합니다 /boot/grub/grub.cfg
. 이 경우 NixOS nix-root
lv
( /
NixOS의 파일 시스템 루트)에 있으므로 실제(부팅 가능한) GRUB2 파티션에는 없습니다 /dev/sda1
.
그러나 이를 달성하기 위해 메뉴 항목에 추가 메뉴 항목을 추가 하고 거의 설명된 대로 NixOS 설치 프로그램이 내 ( NixOS의 파일 시스템 루트)에 생성한 메뉴 항목 grub.cfg
을 가리키고 싶습니다.configfile
nix-root
lv
/
여기. 그러나 nix-root
lv
GRUB에는 유사한 구문이 필요한 것 같기 때문에 이를 가리키는 항목을 생성하는 방법을 잘 모르겠습니다. 그러나 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/linuxquestions
Reddit 페이지를 통해 작동하게 만들었습니다.
GRUB2는 UUID를 매우 잘 처리하지만 장치 이름은 잘 처리하지 못하는 것으로 나타났습니다. 이러한 지식을 염두에 두고 NixOS용 추가 GRUB 메뉴 항목을 (수동으로) 생성하려면 다음 4개의 UUID가 필요합니다 grub.cfg
configfile
.
- 장치의 LUKS UUID입니다.
- LVM 볼륨 그룹의 UUID입니다.
- LVM 논리 볼륨의 UUID입니다.
- GRUB2의 명령을 통해 로드
grub.cfg
하려는 파일이 포함된 파일 시스템의 UUID입니다 .configfile
여기에 이 4개의 UUID를 얻는 방법이 나열되어 있습니다.
- 실행
cryptsetup luksUUID /dev/sda2
하고-
UUID에서 모든 대시( )를 제거합니다., 제 경우에는a0cb535a-8468-485f-a220-a5f49e85c9f4
가 됩니다.a0cb535a8468485fa220a5f49e85c9f4
- 내 경우에는
vgdisplay
UUID를 사용하여 실행하고 찾습니다VG UUID
.lvmpool
5atKN9-PQBi-T9wb-Iyz8-qP4y-HN2E-c5uLOT
lvdisplay
파일이 포함된 LV 이름이나 LV 경로LV UUID
, 또는 제 경우에는 UUID를 찾아 보세요 .grub.cfg
nix-root
/dev/lvmpool/nix-root
C9zkjF-IHu0-qQkP-KgLf-8rAy-TVPu-HQ7gtj
lsblk -p -o +UUID
파일이 포함된 장치 경로의 UUID를 실행 하고 찾습니다grub.cfg
. 제 경우에는/dev/mapper/lvmpool-nix--root
UUID입니다.cc6a06bb-336f-4e9f-a5f0-fdd43e7f548f
이렇게 하면 내 NixOS 설치를 위해 GRUB가 설치되지 않았기 때문에 grub.cfg
configfile
내 NixOS에 있는 NixOS를 참조하기 위해 다음과 같은 추가 GRUB 메뉴 항목을 생성할 수 있습니다 (Arch에서는 이 항목이 에 들어갑니다 ).nix-root
lv
boot.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; } ];