Verifique quais dispositivos de bloco de rede estão em uso

2

Como posso saber se um dispositivo / dev / nbd * está em uso? O "lsof" vai me dizer? Ou há uma maneira melhor? Existe um equivalente a "losetup -a" que me dirá o próximo free?

    
por Lorin Hochstein 05.03.2012 / 21:32

2 respostas

0

nbd-client -c /dev/nbdX não faz o trabalho corretamente.

Pode-se dizer que /dev/nbdX não está em uso enquanto ainda é usado internamente no driver do kernel. Nesse caso, você não verá isso em dmsetup nem com nbd-client .

Exemplo:

% 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

Na verdade, o segundo indicador que você precisa é revelado por 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)

Compare isso com um dispositivo NBD realmente não utilizado:

% 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

Portanto, esta é a maneira correta de determinar que /dev/nbdX não é usado:

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;
}

use como nbd="'get-available-nbd'" || fail "no free NBD device"

    
por 25.09.2016 / 23:54
2

Da página man :

nbd-client -c /dev/nbdX
    
por 14.03.2012 / 17:01