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をインストールしようとしたので、上記のような3つのバージョンを作成lvsし、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ディストリビューションに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/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 UUIDlvmpool5atKN9-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

これにより、My NixOSのインストール用にGRUBがインストールされていないため、NixOS上のgrub.cfg configfileNixOSを参照するために、次の追加の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; } ];

おすすめ記事