NixOS 26.05 ve systemd-initrd: Ephemeral Root Uyumlu mu?

NixOS 26.05 “Yarara” sürümüyle birlikte kaputun altındaki en büyük değişiklik nihayet varsayılan oldu: Eski bash betikli Stage 1 boot süreci yerini systemd-initrd’ye bıraktı.

İlk duyurulduğunda, özellikle impermanence (ephemeral root) kullananların forumlarda ve Reddit’te bu geçişten çekindiğini gördüm. Çünkü geleneksel olarak Btrfs veya ZFS rollback script’leri yazanlar, boot.initrd.postDeviceCommands gibi değişkenlerin systemd-initrd tarafından tamamen göz ardı edilmesinden şikayetçiydi. Haklılar da; systemd-initrd dünyasında bu temizlik işlemlerini çalıştırmak için Stage 1’e özel systemd servisleri yazmak, boot bağımlılıklarını yönetmek gerekiyor.

Ancak NixOS 26.05’e geçişi tamamladığımda, benim kurulumumda tek bir satır bile değiştirmem gerekmedi.

Neden Sorun Yaşamadım?

Bunun cevabı, daha önce detaylarını yazdığım impermanence tasarım kararımda yatıyor.

Eğer root (/) dizinini Btrfs üzerinde tutup her açılışta rollback script’i ile sıfırlamaya çalışsaydım, systemd-initrd’nin katı servis hiyerarşisiyle savaşmak zorunda kalacaktım. Ancak benim kurulumumda root doğrudan tmpfs (RAM) üzerinde çalışıyor.

Sistem kapandığında RAM uçtuğu için root zaten kendiliğinden sıfırlanıyor. Yani Stage 1 boot aşamasında Btrfs subvolume’larını silip baştan yaratacak bir script çalıştırmama gerek kalmıyor.

hardware.nix dosyamdaki tanım tam olarak şöyle:

fileSystems."/" = {
  device = "none";
  fsType = "tmpfs";
  options = [ "defaults" "size=8G" "mode=755" ];
};

fileSystems."/nix" = {
  device = "/dev/disk/by-label/NIXOS";
  fsType = "btrfs";
  options = [ "subvol=@nix" "compress=zstd" "noatime" ];
  neededForBoot = true;
};

fileSystems."/persist" = {
  device = "/dev/disk/by-label/NIXOS";
  fsType = "btrfs";
  options = [ "subvol=@persist" "compress=zstd" "noatime" ];
  neededForBoot = true;
};

Buradaki kritik nokta: Root (/) için neededForBoot = true gibi ekstra parametrelere gerek yok. Systemd-initrd, root dosya sistemini (/sysroot olarak) Stage 1’de varsayılan olarak mount ediyor. Diğer disklerin (/nix ve /persist) zamanında mount edilip ana sisteme aktarılması için neededForBoot = true flag’inin bulunması fazlasıyla yeterli.

tmpfs Root Tercihinin Ödülü

Bu geçiş bana mimari kararların uzun vadeli etkisini bir kez daha gösterdi. ZFS veya Btrfs rollback yöntemleri disk seviyesinde temizlik sunduğu için popüler olsa da, bootloader ve initrd değişikliklerinde kırılganlığa sahipler. tmpfs root ise tamamen donanımdan bağımsız, yazılımsal ve doğal bir sıfırlama sağlıyor.

systemd-initrd ile birlikte gelen kazanımlar ise oldukça net:

Eğer sisteminizde rollback script’leri yerine tmpfs tabanlı bir impermanence tercih ettiyseniz, NixOS 26.05 geçişi sizin için de tamamen acısız bir güncellemeden ibaret olacaktır.


İlgili: Impermanence: NixOS’ta Her Boot’ta Sıfırlanan Bir Root

EOF.