如何轻松找出块设备(或其一部分)是否以某种方式安装

Hau*_*ing 10 linux mount proc sysfs block-device

我想知道确定(没有 root 权限)是否安装了块设备(例如sdb)或其任何部分(以及它的哪一部分)的最简单方法是什么。

检查/proc/mountssdb 是不够的,因为sdbLVM 可能使用它的分区之一。您可以检查,/sys/block/sdb/sdb*/holders/但您会得到dm-x必须解析为/dev/mapper名称才能检查的条目/proc/mounts。可能,但如果有更简单的解决方案......(应该不需要 root 权限)

tyl*_*erl 14

这基本上是检查一整袋边角箱的问题。

  • 驱动器可以出现在 /proc/mounts
  • 一个驱动器可以用作交换(使用 /proc/swaps)
  • 驱动器可以是活动 LVM pv 的一部分(使用 pvdisplay)
  • 驱动器可以是 dm-mapper RAID 组的一部分(使用 /proc/mdstat)
  • 应用程序可以直接访问驱动器(例如 Oracle 支持直接写入驱动器或分区而不是文件系统)(使用 fuser)
  • 虚拟机可以直接访问驱动器(使用 fuser)
  • 驱动器可以被环回设备引用(例如:mount /dev/sda -o offset=1M /foo(使用 Lostup -a)

这些只是我想出的例子,给了我一分半的时间来思考。我敢肯定还有十几个。

我认为最后一个例子是最有趣的,而且很少有人知道。它允许您在不使用分区的情况下挂载文件系统。只需指定起始偏移量,Linux 就会透明地创建一个环回设备。上面的例子产生以下结果:

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

# losetup -a
/dev/loop0 [0005]:2048 (/dev/sda), offset 1048576
Run Code Online (Sandbox Code Playgroud)

为什么要这么做?通常情况下,它涉及以前出现严重错误的情况。

还要记住,现在主线中的命名空间功能(请参阅unshare),不同的进程可以对已挂载和未挂载的内容有不同的看法。事情开始变得有点红。