O seguinte one-liner parece funcionar. Ela imprime todos os nomes de dispositivos de bloco, exceto aqueles que têm um tipo, tipo, marca ou partícula. Os dois últimos com o argumento de que algo com uma etiqueta provavelmente já está em uso.
Isso parece ser uma abordagem muito melhor do que usar grep -v
para excluir uma lista de tipos de sistema de arquivos conhecidos neste momento.
blkid | awk -F': ' '!/ ((PT)?TYPE|(PART)?LABEL)="[^"]+"/ {print $1}'
Nota: a lista de dispositivos de bloco produzidos por este NÃO é garantida de forma alguma por não estarem em uso, só que eles não têm nenhum dos marcadores comumente usados que o bloco em uso dispositivos têm. Eles provavelmente não estão em uso, mas sem gastar muito mais tempo pesquisando o assunto, estou extremamente relutante em sugerir que é qualquer tipo de lista garantida.
Em uma das minhas caixas ZFS On Linux, ela produz a seguinte saída:
# blkid | awk -F': ' '!/ ((PT)?TYPE|(PART)?LABEL)="[^"]*"/ {print $1}'
/dev/sdb9
Isso está correto para esse sistema. / dev / sdb9 IS uma partição não formatada e não utilizada. É uma partição de 8MB no final de um disco que é usado em um pool ZFS de disco único (esta é uma máquina doméstica para testar coisas e eu precisei de seu mirror drive para outra coisa e não precisei substituí-lo ainda)
BTW, blkid
leva significativamente mais tempo para ser executado do que lsblk
. Ele faz um lote mais trabalho tentando identificar que tipo de dispositivo de bloco ele está olhando.
Isso provavelmente só é perceptível em servidores com centenas de unidades / membros / zvols de discos e outros dispositivos de bloco.
Por exemplo, em um dos meus servidores de tamanho médio (com 362 dispositivos de bloco de vários tipos), blkid
leva cerca de 2 minutos para ser executado, enquanto lsblk
leva cerca de 0,09 segundos. Em outro sistema, muito menor, com apenas 39 dispositivos de bloco (a caixa de testes em casa mencionada acima), blkid
leva 0,16 segundos enquanto lsblk
leva 0,01 segundos.
Se você precisar executar isso repetidamente e o tempo de execução for muito longo, sempre será possível armazenar em cache a saída de blkdid
em um arquivo tmp por um curto período de tempo. por exemplo. se o cache não existir ou for mais antigo que, digamos, 30 minutos, gere o arquivo de cache ( blkid > /path/to/blkid.cache
) e use-o como entrada para awk
ou o que for.