ZFSプールとマウントをどのように区別しますか?

ZFSプールとマウントをどのように区別しますか?

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ファイルシステムの破壊

上記のアルゴリズムは、ファイルシステムを含まないいくつかのプールがある特別な場合でも機能します。 (まだファイルシステムがないか、ファイルシステムがもうありません)

おすすめ記事