私は(ブータブル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をインストールしようとしたので、上記のような3つのバージョンを作成lvs
し、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ディストリビューションに1つのブータブルディストリビューションを使用するのがなぜ/なぜそれほど難しいのかを教えてくれることを願っています。 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の助けを借りて非常に便利な情報Redditcookie_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
これにより、My NixOSのインストール用にGRUBがインストールされていないため、NixOS上のgrub.cfg
configfile
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; } ];