マウントする前に、Ni​​xOS 構成でディスクをフォーマットします。

マウントする前に、Ni​​xOS 構成でディスクをフォーマットします。

仮想クラスタで仮想マシンを実行しています。 (実験的な)クラスタ構成システムは、フォーマットされていないブロックデバイスをに入れます/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; };

関連情報