任意のパスが(Python)スクリプトで評価するためのZFSマウントポイントのルートであるかどうかを確認したいと思います(したがって、出力の解析よりもコマンドの戻りコードが優先されます)。同等のbtrfsはbtrfs subvolume show [path]
で、0または1を返します。パスがbtrfsサブボリュームのルートであるかどうかです。
Afaik zfs list
を使用して解析しますが、もっとエレガントな方法があるかもしれません。
Linux4.8.0を搭載したUbuntu16.10でZFS0.6.5.8を使用しています。
現在マウントされている 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 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
は、必要な情報を見つける方法を確認するための良いスタートです。
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