NixOS 配置在挂载前格式化磁盘

NixOS 配置在挂载前格式化磁盘

我正在虚拟集群上运行虚拟机。 (实验性)集群配置系统将未格式化的块设备放入/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; };

相关内容