Linux

檢查哪些網路塊設備正在使用

  • September 25, 2016

如何判斷 /dev/nbd* 設備是否正在使用?“lsof”會告訴我嗎?或者,還有更好的方法?是否有相當於“losetup -a”的方法,它會告訴我下一個免費的?

nbd-client -c /dev/nbdX沒有正確地完成工作。

它可能表明/dev/nbdX,它仍然在核心驅動程序內部使用時沒有被使用。在這種情況下,您既不會在 中dmsetup也不會在nbd-client.

例子:

% nbd-client -c /dev/ndb2; echo $?
1
% e2fsck /dev/nbd2; echo $?
e2fsck 1.42.13 (17-May-2015)
/dev/nbd2 is in use.
e2fsck: Cannot continue, aborting.
8

實際上,您需要的第二個指標通過以下方式顯示fsck

% strace e2fsck /dev/nbd2 2>&1 | grep open | grep /dev/nbd2
open("/dev/nbd2", O_RDONLY|O_EXCL) = -1 EBUSY (Device or resource busy)

將此與真正未使用的 NBD 設備進行比較:

% nbd-client -c /dev/ndb1; echo $?; strace e2fsck /dev/nbd1 2>&1 | grep open | grep /dev/nbd1
1
open("/dev/nbd1", O_RDONLY|O_EXCL) = 4

所以這是確定 a/dev/nbdX未使用的正確方法:

nbd-available()
{
nbd-client -c "$1";
[ 1 = $? ] &&
python -c 'import os,sys; os.open(sys.argv[1], os.O_EXCL)' "$1" 2>/dev/null;
}
get-available-nbd()
{
local a;
for a in /dev/nbd[0-9] /dev/nbd[1-9][0-9];
do
 nbd-available "$a" || continue;
 echo "$a";
 return;
done
return 1;
}

像使用它一樣nbd="get-available-nbd" || fail "no free NBD device"

man頁面:

nbd-client -c /dev/nbdX

引用自:https://unix.stackexchange.com/questions/33508