_/dev/sda
_(Archで使用およびセットアップされる_/dev/sda1
_ブータブルGRUB2パーティション)と_/boot
_に分割された1つの物理ディスク(_/dev/sda2
_)があり、それはcryptroot
です。ロックが解除されると、パーティションのフルサイズが_/dev/sda2
_の単一の大きなlvmpool
になります。下の画像に示すように、Archを3lvs
にインストールしました。このセットアップは、Dm-cryptのArch Wikiで説明されているように、基本的にLUKS上のLVMです。
NixOSについて多くのすばらしいことを読んだので、現在のArchインストールの隣にNixOSをインストールしようとしています。そこで、上記の_Arch-
_ lvs
と同様のlvs
をさらに3つ作成し、NixOSインストールガイドに従いました。 _boot.loader.grub.device = "nodev"
_にあるArchから既存のGRUB2を再利用したいので、NixOSがGRUB他の場所にインストールしないように_/dev/sda1
_を指定しました。ただし、NixOSの_grub.cfg
_ファイルを_/boot/grub/grub.cfg
_に書き込みます。この場合はNixOS _nix-root
_ lv
(_/
_、NixOSのファイルシステムルート)にあり、したがって実際の(起動可能な)GRUB2パーティション_/dev/sda1
_。
ただし、それを実現するために、_grub.cfg
_にメニューエントリを追加し、NixOSインストーラーが_nix-root
_ configfile
(_/
_)に作成したlv
をポイントします。 NixOSのファイルシステムルート)、ほとんど説明されていること ここ 。ただし、GRUBはset root='(hd0,X)'
のような構文を必要としているように見えるため、_nix-root
_ lv
を指すエントリを作成する方法がわかりませんが、どのようにこの_set root
_のようなものに、物理ディスクとパーティション番号の代わりに指すlv
を認識させることはできますか?オプションconfigfile
とchainloader
はどちらも、GRUBで十分に説明されておらず、_set root
_私が見つけることができる限り。
誰かが私を正しい方向に向け、私が間違っていること、またはなぜ/どのようにこれを自分で難しくしているのかを教えて、異なるLVMlvs
にある複数のLinuxディストリビューションに1つの起動可能なGRUB2パーティションを使用することを願っていますLUKS。
EDIT:_set root=
_、_(lv/nix-root)
_、_(lvmpool/nix-root)
_などの_(/dev/mapper/lvmpool-nix--root)
_のさまざまなオプションを試しました。ただし、問題は、LVMlvs
がGRUBにまだ表示されていないように見えることです。これは、GRUBがロードされた時点で、_/dev/sda2/
_がまだ暗号化されているためです。 LUKScryptroot
。
上記のAlexanderBatischevの助けと、Redditの cookie_enthusiast
ページのRedditユーザー/r/linuxquestions
からの 非常に有用な情報 のおかげで、私はこれをうまく機能させることができました。
GRUB2はUUIDでうまく機能し、デバイス名ではうまく機能しないことがわかりました。この知識を念頭に置いて、NixOS grub.cfg
configfile
への追加のGRUB menuentryを(手動で)作成する前に、次の4つのUUIDが手元にある必要があります。
configfile
ディレクティブを介してロードするgrub.cfg
ファイルを含むファイルシステムのUUID。これらの4つのUUIDを取得する方法をここにリストします。
cryptsetup luksUUID /dev/sda2
を実行してIDからすべてのダッシュ(-
)を削除、私の場合、a0cb535a-8468-485f-a220-a5f49e85c9f4
はa0cb535a8468485fa220a5f49e85c9f4
になります。vgdisplay
を実行し、私の場合はUUIDVG UUID
で5atKN9-PQBi-T9wb-Iyz8-qP4y-HN2E-c5uLOT
、lvmpool
を探します。lvdisplay
を実行し、LV UUID
ファイル、grub.cfg
、またはnix-root
とUUID/dev/lvmpool/nix-root
を含むLV名またはLVパスのC9zkjF-IHu0-qQkP-KgLf-8rAy-TVPu-HQ7gtj
を探します。lsblk -p -o +UUID
を実行し、grub.cfg
ファイルを含むデバイスパスのUUIDを探します。私の場合は、/dev/mapper/lvmpool-nix--root
とUUIDcc6a06bb-336f-4e9f-a5f0-fdd43e7f548f
を使用します。これにより、次の追加のGRUB menuentryを作成してNixOSgrub.cfg
configfile
を参照できます。これは、私のnix-root
lv
にあり、boot.loader.grub.device = "nodev";
に/etc/nixos/configuration.nix
があるため、GRUB NixOSインストール用にインストールされています(Archでは、これは/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
などのリテラル値が含まれています。これはnot LVMの名前またはIDに置き換えられることになっています。これはどこにも適切に文書化されていないようです。 LUKSデバイスのUUIDをcryptomount -u
行に入力した場合にも同じ問題が当てはまりますダッシュ付きその中にGRUBはPress any key to continue
を通知します。これは(明らかに)あまり役に立ちません。
したがって、手動GRUB menuentry to boot from crypt -> LVM -> root
with LVM on LUKS setupのベアテンプレートは次のようになります。
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; } ];