Como determinar se uma partição é uma partição LUKS a partir do seu ponto de montagem?

Como determinar se uma partição é uma partição LUKS a partir do seu ponto de montagem?

Estou ciente de que posso usar o cryptsetup isLukscomando para descobrir se uma partição é um contêiner LUKS. Quero poder usar este comando com o ponto de montagem do contêiner LUKS caso não tenha certeza de saber o nome do dispositivo da partição. Como posso fazer isso em um comando?

Por exemplo, eu tenho um contêiner Luks em /dev/sda2, eu o abro com

$ cryptsetup luksOpen /dev/sda2 vault

Então eu monto o container com

$ mount /dev/mapper/vault /mountpoint

Neste ponto, gostaria de saber se /mountpointé um contêiner Luks

$ cryptsetup isLuks -v /dev/sda2
Command successful.
$ cryptsetup isLuks -v /mountpoint
Command failed with code 15: Block device required
$ cryptsetup isLuks -v /dev/mapper/vault
Command failed with code 22: Device /dev/mapper/vault is not a valid LUKS device.

Normalmente eu usaria lsblkpara obter o dispositivo de bloco de um ponto de montagem, mas isso retorna o /dev/mapper/vaultcaminho.

└─sda2   8:8    0   9.3G  0 part
  └─vault 252:0    0   9.3G  0 crypt /mountpoint

Se eu pudesse resolver /dev/mapper/vaultde /dev/sda2alguma forma, seria capaz de usar a substituição de comando dentro do cryptsetup isLukscomando.

Seria ótimo encontrar algo mais elegante do que usar awkou algo para analisar a saída de mount, mas se essa for a única maneira, suponho que funcione.

Responder1

Eu tive o mesmo problema. Resolvido assim.

lsblk -sJp | jq -r --arg dsk "/dev/mapper/disk_name" '.blockdevices | .[] | select(.name == $dsk) | .children | .[0] | .name'

Retornar, por exemplo/dev/sda2

Responder2

Isso deve funcionar. É um pouco longo, mas criar uma função bash simplificaria:

cryptsetup isLuks -v `df /mountpoint | tail -n1 | awk '{print $1;}'`

Responder3

alguém mencionou usarlsblk

Esta é uma maneira relativamente fácil, mas somente se você fizer

alias lsblk2='lsblk -o type,name,label,partlabel,size,fstype,model,serial,wwn,uuid'

Então a saída de lsblk terá muitas informações úteis extras e FSTYPEmostrará crypto_LUKSe depois mostrará as partições resultantes abaixo. E você também terá o modelo do disco e o número de série para referência, o que considero útil para fazer cara e coroa.

man lsblke adicione quaisquer opções após o -oque você achar que o tornará mais útil para você.

Eu acho que desta forma ... obter uma lista de árvore visível simples de todos os discos que o Linux vê atualmente ... é a maneira mais direta com menos digitação para saber quais discos / partições são criptografados luks, aparecerá como crypto_LUKSpelo menos é isso que Vejo usando RHEL 7.9.

Responder4

Isso funcionou para mim:

for part in $(lsblk -o NAME -ln | grep -E '^[^loop]'); do
    if cryptsetup isLuks /dev/$part 2> /dev/null; then
        lsblk /dev/$part -ln -o MOUNTPOINT
    fi
done

O lsblkcomando tinha apenas a NAMEopção, portanto obteremos apenas o nome das partições do sistema. Também sai -lndo título e da forma de árvore, portanto é uma lista pura. O grepcomando é opcional, ele irá ignorar a verificação das partições de loop criadas pelo snap. Depois outro lsblkpara a partição detectada como LUKS.

É complicado, mas LUKS e cryptsetupfunciona com partições, não com pontos de montagem. Se for usá-lo dentro de um script, você pode criá-lo como uma função para praticar melhor.

informação relacionada