Linux
檢查哪些網路塊設備正在使用
如何判斷 /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