Bash scripting: Como saber se uma partição pode ser montada?

1

Situação: Criação automatizada de arquivos usando o Python no Linux. Nenhuma maneira de Python que eu possa encontrar para fazer isso usando chamadas de sistema (o que tecnicamente significa que eu estou fazendo bash scripting, só que eu estou fazendo isso através do Python).

Problema: Obter rótulos de disco não é suficiente para montar os discos. Por exemplo, posso obter o rótulo de disco /dev/sda , mas apenas /dev/sda1 é montável, /dev/sda2 é uma partição SWAP.

fdisk outputs e parted outputs não estão realmente ajudando a decidir quais discos podem ser montados (ou seja, ter um sistema de arquivos legível válido)

Pergunta: Como posso, usando comandos do Linux / Bash, descobrir quais discos podem ser montados (não me importo de encadear mais de 10% degrep pipes para obter o resultado final).

    
por Timothy Wong 20.02.2018 / 05:09

1 resposta

4

Tanto o lsblk quanto o blkid podem ser usados para descobrir o que há em uma partição (por exemplo, swap, sistema de arquivos conhecido, dados brutos). Ambos têm várias opções para especificar o formato de saída para que você possa extrair apenas as informações necessárias (por exemplo, tipo de sistema de arquivos, rótulo fs, uuid, etc).

IMO blkid é uma ferramenta melhor para operações com script e, na minha experiência, é melhor para detectar o que uma partição existente está sendo usada, não importa que tipo de dispositivo de bloco esteja sendo examinado (por exemplo, lsblk doesn ' Não sei o que fazer com um ZFS do ZFS. blkid o trata como qualquer outro dispositivo de bloco - que é exatamente o que ele deve fazer porque é exatamente isso que um ZVOL é). lsblk pode ser usado em scripts, mas é, na verdade, orientado mais para o uso interativo com uma saída bastante impressa.

por exemplo. em um dos meus sistemas:

# blkid /dev/sda*
/dev/sda: PTUUID="3a1e16ae" PTTYPE="dos"
/dev/sda1: UUID="08799b67-8ed7-4cee-aea1-0f9e7bd1fc04" TYPE="ext4" PARTUUID="3a1e16ae-01"
/dev/sda2: UUID="db8bda5f-4f18-4abb-a151-08494e398047" TYPE="swap" PARTUUID="3a1e16ae-02"
/dev/sda3: UUID="fc967791-b9cf-4145-9047-8a8b223ac4bb" TYPE="xfs" PARTUUID="3a1e16ae-03"

Ou se eu quiser apenas o tipo de sistema de arquivos / dev / sda1:

# blkid -o value --match-tag TYPE /dev/sda1
ext4

Veja a página de manual para blkid para detalhes.

BTW, file -s também pode ser usado, mas a saída é mais difícil de analisar. por exemplo,

# file -s /dev/sda1
/dev/sda1: Linux rev 1.0 ext4 filesystem data, UUID=08799b67-8ed7-4cee-aea1-0f9e7bd1fc04 (needs journal recovery) (extents) (large files) (huge files)
    
por 20.02.2018 / 06:21