特定の最上位ディレクトリにどの「本当の」ファイルシステムがマウントされていて、どのデバイスからマウントされているかをどうやって知ることができますか?
背景は、debootstrapの後に実行されるスクリプトでfstab(5)が自動的に生成されることです。ホストOSはGNU / Linuxです(私がサブルーチンで使用するすべてがGNU / kFreeBSDまたはGNU / Hurdで安全であるとは思わない)。
これまでに見つけたものの中で最も近いようfindmnt -l --real
ですが、まだバインドマウントが表示されますが、これは私のユースケースに比べて「実際」ではありません。ブロックデバイスがサポートするマウントポイントが必要です。 (ここにはリングマウントを含めることができます。)
ベストアンサー1
Linuxカーネルの観点からは、バインドマウントと「一般」マウントの間に違いはありません。彼ら概念的には、シンボリックリンクよりもハードリンクに近い。。
ただし、たとえば、次のようにして範囲を絞り込むことができます。
findmnt -lv --real --output "FSROOT,SOURCE,TARGET,FSTYPE,OPTIONS" | grep "^/\s"
FSROOT
これは、マウントポイントに接続されているマウントされたファイルシステムのパス以外のパスを持つすべてのマウントをフィルタリングします/
。
バインドマウントはファイルシステム全体を再マウントします。
mount /dev/sda /a
mount --bind /a /b
検出するのが難しいです。SOURCE
比較または列に基づいてリストをさらにフィルタリングし、この方法で重複項目を削除する必要がありますMAJ:MIN
。
それでもいくつかの極端なケースがあります(たとえば、空白文字で始まるサブディレクトリ/ファイルの正規表現が誤って許可されているバインドマウントとBtrfsサブボリュームマウントがバインドマウントのように見えるため、リストから削除されます)。ただし、これは開始点を提供する必要があります。 。