Ideal Reality

興味の赴くままに
  1. トップ
  2. 投稿
  3. NixOSをbtrfsにインストールする
add_22026年3月15日 17時50分

NixOSをbtrfsにインストールする

rootfsにbtrfsを使いたいので、btrfsにNixOSをインストールしていきます。

スポンサーリンク

NixOSインストーラーの起動

標準のインストーラーは使わないので、Graphical ISOとMinimal ISOどっちでもいいです。とりあえずNixOS公式サイトからISOイメージを取得して起動しましょう。
起動したら passwd でログインパスワードを設定し、 sudo systemctl start sshd でSSHサーバーを起動しておくといいでしょう。
他のマシンからSSH経由でインストール作業を行うことができて楽です。

パーティションの準備

とりあえず sudo su でrootのシェルに入っておきましょう。
ここから、partedを使ってストレージのパーティションを切っていくので、まずは lsblk を使ってインストール先のストレージを確認しましょう。
この作業を行うと、インストール先にあるデータは全部消えるので注意してください。
以下のコマンドは /dev/vda にインストールする例になります。

# parted /dev/vda
(parted) mklabel gpt
(parted) mkpart ESP fat32 1MB 1GB
(parted) mkpart root btrfs 1GB 100%
(parted) set 1 esp on
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 68.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
  1      1049kB  1000MB  999MB   fat32        ESP   boot, esp
  2      1000MB  68.7GB  67.7GB  btrfs        root
(parted) quit

先頭1GBをESPパーティション、残りをrootfs用のbtrfsパーティション用に確保します。partedで print を実行したときに期待通りのパーティションテーブルになっているか、あとはquitした後に再度lsblkを使ってパーティションを認識しているか確認しておくといいでしょう。

# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0  3.3G  1 loop /nix/.ro-store
sr0     11:0    1  3.5G  0 rom  /iso
vda    254:0    0   64G  0 disk
├─vda1 254:1    0  953M  0 part
└─vda2 254:2    0 63.1G  0 part
スポンサーリンク

ファイルシステムの準備

フォーマット

partedでやったのはパーティションを切るだけでまだ使えないので、パーティションをフォーマットしてファイルシステムを初期化します。

# mkfs.fat -F 32 -n boot /dev/disk/by-partlabel/ESP
# mkfs.btrfs -L nixos /dev/disk/by-partlabel/root

/dev/disk/by-partlabel/ で指定しているのはpartedのmkpartで指定したラベルです。もちろん/dev/vda1のように指定してもいいのですが、ラベル指定しておくと/dev/nvme0n1とかにインストールする際でもこのあたりのコマンドを共通化できるのでこっちで説明しています。

サブボリュームの作成

btrfsのサブボリュームですが、各目的に合った形で作りましょう。
NixOSの場合システムやNix Storeはスナップショットを取る必要性がないので、基本的にはホームディレクトリとそれ以外でサブボリュームを分けることになると思います。
僕はマウントオプションを切り替えるために / /nix /home の3つをサブボリュームとして作ることにしました。

# mount /dev/disk/by-label/nixos /mnt
# cd /mnt
# btrfs subvolume create @
# btrfs subvolume create @home
# btrfs subvolume create @nix
# cd /
# umount /mnt

NixOSのインストール

nix-configurationの生成

まずは先ほど作ったパーティションやサブボリュームをマウントしてから nixos-generate-config を実行します。
自分は圧縮レベル1にしたかったのでここでマウント時に指定しています。(なお、ここで圧縮レベルを指定してもインストール時のファイル書き込み時の圧縮に使われるだけで、インストール後の圧縮レベル指定は別途nix-configurationを変更して設定する必要があります。)

# mount -o subvol=@,compress=zstd:1 /dev/disk/by-label/nixos /mnt
# mkdir -p /mnt/home
# mount -o subvol=@home,compress=zstd:1 /dev/disk/by-label/nixos /mnt/home
# mkdir -p /mnt/nix
# mount -o subvol=@nix,compress=zstd:1,noatime /dev/disk/by-label/nixos /mnt/nix
# mkdir -p /mnt/boot
# mount -o umask=077 /dev/disk/by-label/boot /mnt/boot
# nixos-generate-config --root /mnt

ここから先、nix flakeを使うかどうかで手順が変わります。

flakeを使う場合

/mnt/etc/nixos/configuration.nix/mnt/etc/nixos/hardware-configuration.nix を参考にnix flakeで管理しているnix-configurationを書き替えます。
btrfsの圧縮を使う場合は hardware-configuration.nix にある fileSystems 内の options"compress=ztd:1" のように圧縮設定を入れておきましょう。
なお、hardware-configuration.nixには「nixos-generate-configで自動生成されるファイルだから書き替えるな」ってコメントが付いてますが、nix flakeでgit管理する時点で再生成とかどうでもいいので、ここは自由に書き替えて、なんだったら分かりやすいようにファイル名を変更したりconfiguration.nixと記述する内容を整理しちゃっていいと思います。
とりあえずnix-configurationの用意ができたらインストール先のマシンにそのflakeのレポジトリが存在するようにしてください。
あとはインストール先のマシンでflakeを指定してnixos-installを実行するだけです。
たとえば、nix-configurationのディレクトリを /home/nixos/nix-configuration に、インストールしたいマシンの設定を nixosConfigurations."machine_name" = nixpkgs.lib.nixosSystem { ... のような形で作った場合は、

# nixos-install --no-root-passwd --flake /home/nixos/nix-configuration#machine_name

のように実行します。これであとは指定したnix-configurationに従ってNixOSがインストールされるので、あとは再起動して無事起動すれば完了です。

flakeを使わない場合

flakeを使わない場合は、直接 /mnt/etc/nixos/configuration.nix/mnt/etc/nixos/hardware-configuration.nix を編集して nixos-install --no-root-passwd を実行するだけです。
ただ、NixOSの設定はflakeを使ってgitで管理したほうが絶対にいいので、できれば再インストールのタイミングでflake環境を用意しておくことをお勧めします。

共有

この記事が役に立ったならば、シェアしていただけると嬉しいです。

スポンサーリンク
関連する投稿
自宅サーバーに複数のサービスを載せたい: microvm.nix編

そもそもmicrovm.nixの使い方がよくわかんないので、ここをなんとかしないといけません。 GitHub - microvm-nix/microvm.nix: NixOS MicroVMs ...

2026年1月10日
自宅サーバーに複数のサービスを載せたい: 構想編

自分はルーターとしてMinisforum MS-01を使ってます。元々自宅サーバー用に用意した機材で、NICが沢山あって都合がよかったので採用したのですが、i5-12600H + 32GB RAMのマ...

2026年1月10日
プロフィール
Hiroki Kawakami

サイトを作り替えています

スポンサーリンク