私は、特定のパスが(Linux上の)バインドマウントポイントであるかどうかを判断する方法を探しています。定期的なマウントポイントを検出するための標準的な手法は機能していないようです。 mountpointコマンドでさえ、バインドマウントを検出できません。linuxでバインドマウントを検出中
答えて
私はバインドマウントがマウントスペース(ファイル階層ではない)のような「ハードリンク」であることを理解しているので、(おそらく/etc/mtab
または/etc/fstab
を除いて) )、ソースマウントポイントとターゲットマウントポイントを区別する方法はありません(バインドマウントが発生した後)。
なぜそれを聞いていますか?バインドマウントは(私見)アプリケーションの観点からこのようなことが
とmountpoint
(そうでなければ、彼らは、ディレクトリのためpossible-あるまれにシンボリックリンク-orも、ハードリンクを使用します)非表示にするには、主に有用ですstrace
ことで
% grep /home /etc/fstab
UUID=000008-0003-000c-9ecd-0f1a /home ext3 defaults 0 2
% grep /usr/src /etc/fstab
/home/Src /usr/src none bind 0 0
% mountpoint /usr/src
/usr/src is a mountpoint
% mountpoint /home/Src
/home/Src is not a mountpoint
がmountpoint
を-ing私はそれが/usr/src
&のようなディレクトリにlstat
、stat
とfstat
システムコールを行っていることがわかります:私はちょうど何かを見ているようだあなたの質問への感謝を発見しました(2016年11月に追加:)
も参照/proc/mounts
などを3210
私は、マウントポイントが使用する技術は、l/statパスとpath/..を探して、別のデバイスIDか同じiノードを探すことだと思います。 fstatの呼び出しに関しては、そのことはわかりませんが、マウントポイントのチェックに直接関係しないかもしれません。 「理由」については。あなたはそれらが使用されていることについての良い点を確認し、私は通常のディレクトリと同じデバイス内のリンクマウントを検討することに決めました。それは、私はまだ彼らがどのようにそれらを検出するかについては興味があると言われています。 現在、私が見つけた最良の方法は、/ proc/mountsと/ etc/mtabを調べて情報を調べることです。 – Shamless
$ mount | grep bind
は、このコマンドは、あなたのニーズに合うのですか?
これは機能しません。 –
パスとその親のデバイスIDを調べることで、パスがマウントポイントかどうかを検出できます(マウントされたファイルシステムが親ディレクトリのものと異なる場合 - 私はバインドマウントを試みたことはありません)自分自身へのディレクトリ!)。あなたはそれがマウントポイントであることを知っているしたら、そのデバイスIDが/proc/mounts
に複数のエントリにcommontされた場合、その後、あなたがそれらのいずれかがバインドマウントであると仮定することができ
$ cut -d ' ' -f2 /proc/mounts | xargs stat -c '%d %n'
18 /sys
4 /proc
6 /dev
19 /dev/pts
20 /run
2049/
7 /sys/kernel/security
21 /dev/shm
22 /run/lock
23 /sys/fs/cgroup
24 /sys/fs/cgroup/unified
25 /sys/fs/cgroup/systemd
26 /sys/fs/pstore
27 /sys/fs/cgroup/perf_event
28 /sys/fs/cgroup/cpu,cpuacct
29 /sys/fs/cgroup/pids
30 /sys/fs/cgroup/blkio
31 /sys/fs/cgroup/memory
32 /sys/fs/cgroup/cpuset
33 /sys/fs/cgroup/net_cls,net_prio
34 /sys/fs/cgroup/devices
35 /sys/fs/cgroup/freezer
39 /proc/sys/fs/binfmt_misc
17 /dev/mqueue
8 /sys/kernel/debug
37 /dev/hugepages
2066 /home
39 /proc/sys/fs/binfmt_misc
44 /run/user/1000
45 /sys/fs/fuse/connections
2049 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d
4 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/proc
18 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/sys
6 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/dev
19 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/dev/pts
2066 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/home
2049 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/tmp
:ここ
クイックコマンドラインデモです。どちらがバインドであり、バインドされているかを知ることは、この回答からまだ欠けている部分です。
'stat'では、なぜデバイス番号ではなく、iノード番号をリストアップしていますか? –
@Steve - umm、私は '-f'引数が必要であることを知るために十分注意深くmanページを読んでいなかったので。私はアホです。 –
- 1. Kubernetesのコンテナのバインドマウント
- 2. 実行中のドッキングウィンドウコンテナのボリュームにホストディレクトリをバインドマウント
- 3. プログラムでプロセッサタイプを検出する(Linux)
- 4. Linuxコマンドライン/ PHP bpm検出
- 5. Linuxキャリア検出通知
- 6. Linuxカーネルモジュールのメモリリーク検出ツール
- 7. Linux PCが検出したファイルをCygwinが検出しない
- 8. Linux NASMはEOFを検出します
- 9. Linuxですでに実行中のプロセスの出力を表示
- 10. 別の衝突検出を中断する衝突検出 - Swift
- 11. Cygwinで実行中のシェルスクリプトの検出
- 12. Htaccess:言語検出クリーンURLの中で
- 13. LinuxでUSBドライブを検出するCプログラム
- 14. Linuxでネットワーク接続の種類を検出します。
- 15. Linux端末アプリケーションでXOFFとXONを検出する方法
- 16. JSでMacOS、iOS、Windows、Android、Linux OSを検出
- 17. LinuxはアルテラのFPGAを検出できません
- 18. Linuxスケジューラで長い待機時間を検出する
- 19. xUnit検出の検出と実行中のテスト
- 20. シリアルポートを検出する方法は、LinuxゲストのVMWareプレーヤーで実行中に切断されましたか?
- 21. サイトの負荷中にタッチデバイスを検出
- 22. Windows/D3Dのアルファチャンネルを検出中
- 23. LinuxでHDDが検出された場合の通知方法
- 24. Arch LinuxでのChromeリモートデバッグ:Androidデバイスが検出されない
- 25. Mac OSおよびLinuxでの動的ライブラリ依存の検出
- 26. LinuxでPATH検索を中断する方法を教えてください。
- 27. IOSビデオをストリーミング中にコール中断を検出する
- 28. sysrootでクロスコンパイル中にarm-linux-gnueabihf-g ++から検索パスを削除します
- 29. Windowsで開発中のプログラムでメモリリークを検出する
私は本当にそのような質問をしている理由を理解したいと思います。 –
それは私が必要と思っていたものから始まり、今では「もっと知る必要がある」ものが増えています。 元の理由は、私はかなり包括的なファイルシステムのウォーカー/スキャナを書いているということでした。 – Shamless
次に、すでに訪れたiノードを覚えています。 –