我正在虚拟集群上运行虚拟机。 (实验性)集群配置系统将未格式化的块设备放入/dev/sdb
.集群初始化后,我想格式化该设备并安装。
在初始化工作流程中,我的虚拟机联系集群管理器以了解如何配置虚拟机网络接口和设备。我将这些信息提供给我继承的 nix 表达式/etc/nixos/configuration.nix
。我可以让文件系统挂载分区磁盘:
fileSystems."/log" = { device = "${logDevice}1";
fsType = "bind"; };
但是,我不知道如何将设备格式化作为配置的一部分。如果这是一个 nix 派生,我会制作某种 buildHook,例如
formatLogDisk = ''
parted -s ${logDevice} mklabel gpt
parted -s ${logDevice} unit % mkpart extended ext4 0 100
mkfs.ext4 -q ${logDevice}1
'';
所以我想知道是否有某种preMount
模块挂钩可以运行它。否则,我可以在收集系统信息的阶段直接运行实用程序,但我希望有一个基于 nixOs 的答案。
答案1
我自己没有使用过,但有一个autoFormat
选择。
fileSystems.<name?>.autoFormat
If the device does not currently contain a filesystem (as determined
by blkid, then automatically format it with the filesystem type specified
in fsType. Use with caution.
Type: boolean
Default: false
Declared by:
<nixpkgs/nixos/modules/tasks/filesystems.nix>
沿着这些思路的东西应该有效。请注意,它将格式化整个磁盘(无论如何,这可能是虚拟的),而不像您的脚本那样首先在其上创建分区。我不确定是否有自动分区磁盘的设置。
fileSystems."/log" = { device = "${logDevice}";
fsType = "ext4";
autoFormat = true; };