我们有 2 个服务器共享的 DRBD 卷。通常每个卷上都有一个文件系统,而不是堆叠的 LVM 等。在以 DRBD 卷为主的服务器上,如何判断它是否正在使用?我可以使用例如 /proc/mounts 来判断它是否直接安装,但也可能有 XEN VM 使用该卷。

我可以运行drbdadm secondary并查看是否会出现“设备被某人保持打开”的错误。有没有办法在不实际将设备设为辅助设备的情况下判断?

额外的好处是可以告诉有多少个进程打开了该设备(好的,应该只有 1 个,但是……),并确定是什么使它保持打开状态。


最佳答案
2

免责声明:自我上次使用 DRBD 以来已经有一段时间了,所以可能有更好的方法来做你想做的事情。

您尝试将主服务器“降级”为辅助服务器,并将辅助服务器“提升”回主服务器。如果操作成功,则表示没有人使用您的分布式卷。如果操作失败,则表示有人持有卷锁。有关更多详细信息,请参阅官方文档。

lsof通常是fuser我会使用的。

lsof是一个在 Linux 中列出打开的文件、目录、块文件等的实用程序。例如,我dd在后台运行 DRBD 设备,可以在lsof输出中看到该进程:

# lsof /dev/drbd1000 
COMMAND     PID USER   FD   TYPE   DEVICE   SIZE/OFF NODE NAME
dd      2537055 root    1w   BLK 147,1000 0xb34ed000 1877 /dev/drbd1000

fuser显示使用指定文件或文件系统的进程的 PID。Fuser 还将显示内核进程,如已安装的设备。例如,我已格式化并安装了 DRBD 设备/mnt

# fuser -vm /dev/drbd1000 
                     USER        PID ACCESS COMMAND
/dev/drbd1000:       root     kernel mount /mnt

2

  • 2
    不幸的是,您在此处推荐的方法不适用于 LVM 或任何其他卷管理器或块设备直通,这是 ProxMox 处理 VM 存储的标准方式。


    – 

  • 1
    Proxmox 应该不会有太大问题!DRBD 的所有者 Linbit 搞砸了他们的许可后,使用 Proxmox 和 DRBD 的人就不多了。这很好!


    –