![마운트하기 전에 NixOS 구성이 디스크를 포맷합니다.](https://linux55.com/image/159109/%EB%A7%88%EC%9A%B4%ED%8A%B8%ED%95%98%EA%B8%B0%20%EC%A0%84%EC%97%90%20NixOS%20%EA%B5%AC%EC%84%B1%EC%9D%B4%20%EB%94%94%EC%8A%A4%ED%81%AC%EB%A5%BC%20%ED%8F%AC%EB%A7%B7%ED%95%A9%EB%8B%88%EB%8B%A4..png)
가상 클러스터에서 가상 머신을 실행하고 있습니다. (실험적인) 클러스터 구성 시스템은 포맷되지 않은 블록 장치를 에 넣습니다 /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; };