ZFS 풀과 마운트를 어떻게 구별합니까?

ZFS 풀과 마운트를 어떻게 구별합니까?

FreeBSD 가상 머신 내 파티션의 모든 여유 공간을 0으로 만들고 싶습니다.

VM에는 512K 부팅 freebsd-boot유형 슬라이스(여기서 용어를 이해하길 바랍니다)와 2.0G freebsd-swap슬라이스 및 254.0G freebsd-zfs슬라이스가 포함되어 있습니다.

# gpart show da0
=>       34  536870845  da0  GPT  (256G)
         34          6       - free -  (3.0K)
         40       1024    1  freebsd-boot  (512K)
       1064        984       - free -  (492K)
       2048    4194304    2  freebsd-swap  (2.0G)
    4196352  532672512    3  freebsd-zfs  (254G)
  536868864       2015       - free -  (1.0M)

이는 "root on ZFS" 옵션이 선택된 경우 기본적으로 FreeBSD 10.2 설치 프로그램에서 생성되는 레이아웃입니다.

과거에 UFS를 사용할 때 mount -t ufs모든 UFS 태그를 나열하고 더 이상 공간이 없을 때까지 해당 마운트에 0으로 채워진 파일을 생성했습니다.

그러나 ZFS에서는 더 이상 확신할 수 없습니다. 이제 나는 다음을 얻습니다:

# mount -t zfs
zroot/ROOT/default on / (zfs, local, noatime, nfsv4acls)
zroot/tmp on /tmp (zfs, local, noatime, nosuid, nfsv4acls)
zroot/usr/home on /usr/home (zfs, local, noatime, nfsv4acls)
zroot/usr/ports on /usr/ports (zfs, local, noatime, nosuid, nfsv4acls)
zroot/usr/src on /usr/src (zfs, local, noatime, nfsv4acls)
zroot/var/audit on /var/audit (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/crash on /var/crash (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/log on /var/log (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/mail on /var/mail (zfs, local, nfsv4acls)
zroot/var/tmp on /var/tmp (zfs, local, noatime, nosuid, nfsv4acls)
zroot on /zroot (zfs, local, noatime, nfsv4acls)

이것은 이름 외에는 어떤 단서도 주지 않으며 내가 아는 한 그것은 단지 관례일 뿐입니다(나쁜 스타일).의지하다협약에 관한 것). 제로 패딩 작업을 반복합니다.이 데이터 세트는 약간 어리석은 것 같습니다.

그렇다면 모든 ZFS 풀( )을 찾고 목록에서 해당 풀을 찾는 zpool list -pH|cut -f 1것으로 충분합니까 mount -t zfs? 즉, 이 ZFS 풀의 데이터 세트는 무시됩니다.

요컨대,나열된 마운트 지점에서 사용 가능한 공간을 채우는 데 충분합니까(Bash를 사용하지만 Zsh에서도 작동할 수도 있음):

mount -t zfs|awk '$1 ~ /^'$(zpool list -pH|cut -f 1)'$/ {print $3}'

아니면 ZFS가 이러한 데이터 세트를 소유하고 있다는 사실이 호스트 측에서 VM 디스크를 압축하기 전에 제로화해야 하는 사항을 변경합니까?


ZFS 풀 및 마운트를 나열할 때 출력:

# mount -t zfs
zroot/ROOT/default on / (zfs, local, noatime, nfsv4acls)
zroot/tmp on /tmp (zfs, local, noatime, nosuid, nfsv4acls)
zroot/usr/home on /usr/home (zfs, local, noatime, nfsv4acls)
zroot/usr/ports on /usr/ports (zfs, local, noatime, nosuid, nfsv4acls)
zroot/usr/src on /usr/src (zfs, local, noatime, nfsv4acls)
zroot/var/audit on /var/audit (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/crash on /var/crash (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/log on /var/log (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/mail on /var/mail (zfs, local, nfsv4acls)
zroot/var/tmp on /var/tmp (zfs, local, noatime, nosuid, nfsv4acls)
zroot on /zroot (zfs, local, noatime, nfsv4acls)
# zpool list -pH
zroot   270582939648    1668632576      268914307072    -       0%      0       1.00x   ONLINE  -

답변1

당신은 너무 복잡하게 생각하고 있습니다.

각 파일 시스템이 아닌 각 풀만 0으로 채우면 됩니다! (후자는 ZFS에서는 별로 의미가 없습니다.)

따라서 모든 풀을 반복합니다(pass zpool list). 각 풀에 대해 다음을 수행합니다.

  • (!) 압축이 비활성화된 새 ZFS 파일 시스템 만들기
  • 이 시스템에 0으로 채워진 새 파일을 만듭니다.
  • 동기화
  • ZFS 파일 시스템 파괴

위의 알고리즘은 파일 시스템을 포함하지 않는 일부 풀이 있는 특수한 경우에도 작동합니다. (아직 파일 시스템이 없거나 더 이상 파일 시스템이 없습니다)

답변2

zpool listZFS 풀 목록과 zfs list모든 ZFS 데이터 세트 목록이 제공됩니다.

관련 정보