web-dev-qa-db-ja.com

パスがZFSデータセットマウントポイントのルートであるかどうかを確認するにはどうすればよいですか?

任意のパスが(Python)スクリプトで評価するためのZFSマウントポイントのルートであるかどうかを確認したいと思います(したがって、出力の解析よりもコマンドの戻りコードが優先されます)。同等のbtrfsはbtrfs subvolume show [path]で、0または1を返します。パスがbtrfsサブボリュームのルートであるかどうかです。

Afaik zfs listを使用して解析しますが、もっとエレガントな方法があるかもしれません。

Linux4.8.0を搭載したUbuntu16.10でZFS0.6.5.8を使用しています。

4
Karl Richter

現在マウントされているファイルシステムのみ

現在マウントされている ZFSファイルシステムに制限する場合は、/proc/mountsを解析でき、特定のZFS知識は必要ありません(特にZFSファイルシステムに制限する場合を除く)。 )。

これは、Linux以外のシステムでは機能する場合と機能しない場合があります。

/ proc/mountsは基本的に/ etc/mtabですが、カーネルによって維持されます。これには、ファイルシステムバッキングデバイス、マウントパス、ファイルシステムタイプ、およびファイルシステムフラグのリストが含まれています。

たとえば、マウントされているすべてのZFSファイルシステムのマウントポイントを一覧表示するには、次のようにします。

$ awk '$3 == "zfs" { print $2 }' < /proc/mounts

特定のディレクトリがマウントされたZFSファイルシステムのマウントポイントに対応するかどうかを確認するには、

$ awk '$3 == "zfs" && $2 == "/some/particular/absolute/path" { print "yes" }' < /proc/mounts

(ZFSだけでなく)すべてのファイルシステムを許可するには、$3 == "zfs"チェックを削除するだけです。

マウント済みまたはマウントされていないZFSファイルシステム

現在インポートされているプールにマウントされていないファイルシステムを含める必要がある場合は、zfs getを使用して、現在インポートされているプール内のすべてのZFSマウントポイントのリストを取得する必要があります。

$ Sudo zfs list -pH -o mountpoint | grep -q '^/some/particular/absolute/path$' && echo yes

マウントポイントが/some/particular/absolute/pathのファイルシステムが現在インポートされているプールに存在する場合、そのファイルシステムが現在マウントされているかどうかに関係なく、yesを出力します。

エクスポートされたプール上のファイルシステム

問題のプールのファイルシステムに関する帯域外の知識がなければ、エクスポートされたプールのファイルシステムを一覧表示する方法を知りません。したがって、私はこの組み合わせが可能であるとは思わない。

仕上げのメモ

必要なことを実行するユーティリティが存在するかどうかを常に検討してください。たとえば、副作用として、dfは、現在マウントされているファイルシステムとそのバッキングデバイスのリストを出力し、カーネルマジックに参加しないことが期待できます(パブリック使用を目的としたインターフェイスのみを使用)。その場合、strace df 2>&1 | lessは、必要な情報を見つける方法を確認するための良いスタートです。

3
a CVn

zfs getを使用して、mountpointなどの選択したプロパティを表示できます。

# zfs get -pH -o value mountpoint rpool/swap

説明:

  • -pは、区切り文字としてタブを使用して解析可能な出力を生成します
  • -Hはヘッダーを省略します
  • -o name,property,value,sourceは、4つの列、またはそれらのバリエーションを表示します

マウントポイントとして設定されたパス(ほとんどの場合、これは/とデータセット名(1)ですが、異なる場合もあります(2))、-のいずれかを受け取ります。 =マウントポイントが設定されていない場合(3)、またはレガシー(4)。次に、grepを使用して以下を区別できます。

# zfs get -pH -o value mountpoint rpool
/rpool
# zfs get -pH -o value mountpoint rpool/export/home
/export/home
# zfs get -pH -o value mountpoint rpool/swap
-
# zfs get -pH -o value mountpoint rpool/ROOT
legacy
2
user121391