web-dev-qa-db-ja.com

ブロックデバイス(またはその一部)が何らかの方法でマウントされているかどうかを簡単に確認する方法

ブロックデバイス(たとえばsdb)またはその一部がマウントされているかどうか(およびその一部)を判別する(ルート権限なしで)最も簡単な方法は何ですか?.

LVMがsdbまたはそのパーティションの1つを使用している可能性があるため、sdbの/proc/mountsを確認するだけでは不十分です。 /sys/block/sdb/sdb*/holders/を確認できますが、dm-xエントリを取得しますが、/dev/mapperを確認するには、/proc/mountsの名前に解決する必要があります。可能ですが、より簡単な解決策がある場合...(ルート権限は必要ありません)

10
Hauke Laging

これは基本的に、コーナーケースのバッグ全体をチェックすることです。

  • ドライブは/ proc/mountsに表示できます
  • ドライブはスワップとして使用できます(use/proc/swaps)
  • ドライブはアクティブなLVM pvの一部になることができます(pvdisplayを使用)
  • ドライブはdm-mapper RAIDグループの一部にすることができます(/ proc/mdstatを使用)
  • アプリケーションはドライブに直接アクセスできます(例:Oracleはファイルシステムではなくドライブまたはパーティションへの直接書き込みをサポートしています)(フューザーを使用)
  • 仮想マシンからドライブに直接アクセスできます(フューザーを使用)
  • ドライブはループバックデバイスから参照できます(例:mount /dev/sda -o offset=1M /foo(losetup -aを使用)

これらは私がそれについて考えるために1分半与えられた例にすぎません。他にもダースはたくさんいると思います。

私が思うこの最後の例は最も興味深いものであり、それについて知っている人はほとんどいません。パーティションを使用せずにファイルシステムをマウントできます。開始オフセットを指定するだけで、Linuxはループバックデバイスを透過的に作成します。上記の例では、次の結果が得られます。

# cat /proc/mounts
...
/dev/loop0 /foo ext4 relatime,data=ordered 0 0

# losetup -a
/dev/loop0 [0005]:2048 (/dev/sda), offset 1048576

どうしてそうするか?通常、これは以前にひどく間違っていた状況に関係しています。

また、名前空間機能がメインライン( nshare を参照)になっているため、マウントされているものとマウントされていないものについて、プロセスごとにビューが異なる可能性があることにも注意してください。ここで物事は少し赤い丸薬を取得し始めます。

12
tylerl

デバイスをマウントする方法はもっとたくさんあり、それらすべてを組み合わせることができるので、多くの場合、あなた次第です。

つまり、lvmで使用されるもの:pvdisplay

したがって、nfs、cifs、raid、loop、cryptなども含める必要があります。良い出発点は常に/proc/mounts、すでに述べたように。

1
user55518