ディレクトリ/ファイルがあるサブボリュームを確認するには?

ディレクトリ/ファイルがあるサブボリュームを確認するには?

ファイルまたはディレクトリがどのサブボリュームにあるかを確認したいと思います。たとえば、サブボリュームのマウントポイント/mnt/btrfs-subvolとディレクトリがあり、それを/mnt/btrfs-subvol/some/dir実行した場合。something /mnt/btrfs-subvol/some/dirbtrfs-subvol

私が考えることができる最善の方法は、戻ってstat256個のinodeで各ディレクトリをテストすることですが、それが唯一の方法とは想像できません。それとも走ることができます。

until btrfs sub show `pwd`; cd ..;done; echo `pwd`

しかし、私はもう少しエレガントな解決策が必要だと思います。

答え1

これが利用可能でありstat(POSIXでは不要)、そのオプションが十分に豊富である場合、次のコマンドは次のようになります。

stat --format=%m /mnt/btrfs-subvol/some/dir

欲しいものを教えてくれます。コメントはdirどんなタイプでも構いません。文書、必ずしもディレクトリである必要はありません。

メモ:

  • マニュアル%mにはBtrfsのマウントポイントを意味するとされていますが、これはやや誤解を招くことがあります。 Kubuntu 18.04.5 LTSでテストしたところ、明示的なマウントポイントではない(/mnt/btrfs-subvol/つまりmount whatever /mnt/btrfs-subvol/発生しなかった)サブボリューム(/またはとして明示的にマウントされたサブボリューム内/mnt/)の場合、コマンドはマウントとして処理されます。指す。これがあなたが望むようです。

  • 出力は、デバイスのBtrfsディレクトリ(およびサブボリューム)ツリーの有効なパスではなく、オペレーティングシステムのディレクトリ構造内の有効なパスです(違いがわからない場合は、以下を参照してください)。この問題そして私の答え)。今回もこの動作が正確にあなたが望む動作のようです。

  • このコマンドは、Btrfs以外のファイルシステム(Kubuntuからstat --format=%m /dev/null印刷/devなど)で機能します。明らかに、他のファイルシステムには通常、サブボリュームの概念はありません。探しているファイルがBtrfsファイルシステムにあることを最初に確認する必要があるかもしれません。

    stat --file-system --format=%T /mnt/btrfs-subvol/some/dir
    

    この内容が表示されたら、デフォルトbtrfsのコマンドを使用してサブボリュームを探します。残念ながら、1回の呼び出しでstat2つの情報(インクルードまたは除外)を印刷する方法はありません。--file-system

  • 上記の結論は、2回実行する必要があることを意味しますstatdirルートの下に同じコンテンツが表示されるという保証はありません/mnt/btrfs-subvol/some/dir。途中でいくつかの(削除)インストールが発生した場合はどうなりますか?比較するトゥクトゥ。 Linuxでは、statファイル記述子を使用して、TOCTOUなしで同じファイルで2つのsを確実に実行できます。

    ( stat --dereference --file-system --format=%T /proc/self/fd/3
      stat --dereference --format=%m /proc/self/fd/3 ) 3</mnt/btrfs-subvol/some/dir
    

    シンボリックリンク自体の場合、dirコマンドはそれに従います。

    後で作業できるようにサブボリュームを知りたい場合があります。何があっても、あなたはそれを道として扱うでしょう。使用前に状況が変わることがあり、TOCTOUがあなたに当たる可能性があります。

    関連パスがあなたの同意なしに意味を変更しないと確信している場合は、statsとその結果を簡単な方法で処理できます。

  • 私のテストでは、stat --file-system …動作は次のとおりですstat --file-system --dereference …。これは、ターゲットファイルがシンボリックリンクの場合、sがstatあるかどうか、または--file-system(両方とも明示的に)一貫性のない結果を生成できることを意味します。--dereference

関連情報