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 list
ZFS 풀 목록과 zfs list
모든 ZFS 데이터 세트 목록이 제공됩니다.