FreeBSD仮想マシンのパーティションのすべての空き領域をゼロにしたいと思います。
VMには、512Kブートfreebsd-boot
タイプスライス(ここでは用語を理解してください)と2.0Gfreebsd-swap
スライスと254.0Gfreebsd-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 タグが一覧表示され、スペースがなくなるまでそのマウントにゼロで埋められたファイルが作成されました。
しかし、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
あなたはとても複雑に思っています。
各ファイルシステムではなく、各プールだけをゼロで埋めるだけです! (後者はZFSではあまり意味がありません。)
したがって、すべてのプールを繰り返します(pass zpool list
)。各プールに対して、次の操作を行います。
- (!) 圧縮が無効な新しい ZFS ファイルシステムの作成
- このシステムにゼロで埋められた新しいファイルを作成します。
- 同期
- ZFSファイルシステムの破壊
上記のアルゴリズムは、ファイルシステムを含まないいくつかのプールがある特別な場合でも機能します。 (まだファイルシステムがないか、ファイルシステムがもうありません)
答え2
zpool list
ZFS プールのリストとzfs list
すべての ZFS データ・セットのリストが提供されます。