我在 NixOS 上嘗試使用 ZFS 加密硬碟分割區(將來可能會更多)。我試著堅持本指南,所以我添加了
boot.zfs = {
enableUnstable = true;
requestEncryptionCredentials = true;
};
boot.supportedFilesystems = [ "zfs" ];
到我的configuration.nix
,並創建了池和數據集zroot
並zroot/genc
使用mountpoint=legacy acltype=posixacl xattr=sa
.我用以下方法對池進行了加密
$ sudo zfs create -o acltype=posixacl -o xattr=sa -o encryption=aes-256-gcm -o keyformat=passphrase -o mountpoint=none zroot/genc
我被要求輸入密碼,然後我就這樣做了
$ sudo zfs set mountpoint=legacy zroot/genc
$ sudo mount -t zfs zroot/genc /home/gecku/genc
$ sudo chown gecku:users ~/genc
$ touch ~/genc/hello
$ sudo nixos-generate-config
這一切工作正常(我可以創建文件~/genc/hello
)。然而,之後nixos-rebuild switch
我就被丟進了緊急外殼,什麼都做不了。我恢復到 NixOS 的早期版本,並zfs
從中刪除了條目/etc/nixos/hardware-configuration.nix
,以便系統不會嘗試匯入 ZFS 池(因為顯然它失敗了)。透過這個新配置,我做到了
$ sudo zfs import zroot
$ sudo mount -t zfs zroot/genc ~/genc
> filesystem 'zroot/genc' can not be mounted: Permission denied
我沒有被要求輸入密碼。zroot/genc
具有屬性canmount=on keylocation=prompt
。
那麼,我該如何解決這個問題呢?如何掛載加密資料集?
答案1
本指南很好地總結了掛載過程。簡而言之,您可能應該使用zfs mount
而不是mount -t zfs
因為它會知道加載/請求加密金鑰。要在啟動時執行此操作,您還可以使用該-l
標誌zpool import
(儘管您需要某種方法來為啟動腳本提供密碼)。