Como capturar todos os discos que não possuem um sistema de arquivos

5

Eu quero capturar todos os discos que não possuem um sistema de arquivos (todos os discos que mkfs não executam neles)

Eu tentei o abaixo, mas ainda dá o sistema operacional (sda).

Qual é a melhor abordagem com lsblk ou outro comando para capturar todos os discos sem sistema de arquivos?

  lsblk -f | egrep -v "xfs|ext3|ext4"
  NAME             FSTYPE      LABEL UUID                                   
  MOUNTPOINT
 fd0
  sda
 └─sda2           LVM2_member       v0593a-KiKU-9emb-STbx-ByMz-S95k-jChr0m
 ├─vg00-lv_swap swap              1beb675f-0b4c-4225-8455-e876cafc5756   
 [SWAP]
 sdg
 sdh
 sdi
 sdj
 sdk
 sr0
    
por yael 22.12.2017 / 12:23

4 respostas

3
lsblk -o NAME,FSTYPE -dsn

Isso imprimirá uma lista de dispositivos de bloco que não são proprietários de partições (eles não têm uma tabela de partições). O tipo de sistema de arquivos detectado está na segunda coluna. Se estiver em branco, não há sistema de arquivos reconhecido.

Então, para obter a saída desejada em um comando

lsblk -o NAME,FSTYPE -dsn | awk '$2 == "" {print $1}'
    
por 22.12.2017 / 15:20
0

Na minha opinião, a melhor opção é o FDISK. sintaxe:

fdisk -l | grep -i ^disk
    
por 22.12.2017 / 16:26
0

Você pode usar o utilitário parted para listar todos os discos, tenham ou não sistemas de arquivos:

sudo se separou

e, em seguida, digite "imprimir grátis".

Ele imprimirá todas as unidades particionadas e não particionadas.

    
por 24.12.2017 / 15:39
0

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.

    
por 25.12.2017 / 13:44