마운트하기 전에 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; };

관련 정보