Estou ciente de que posso usar o cryptsetup isLuks
comando 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 lsblk
para obter o dispositivo de bloco de um ponto de montagem, mas isso retorna o /dev/mapper/vault
caminho.
└─sda2 8:8 0 9.3G 0 part
└─vault 252:0 0 9.3G 0 crypt /mountpoint
Se eu pudesse resolver /dev/mapper/vault
de /dev/sda2
alguma forma, seria capaz de usar a substituição de comando dentro do cryptsetup isLuks
comando.
Seria ótimo encontrar algo mais elegante do que usar awk
ou 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 FSTYPE
mostrará crypto_LUKS
e 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 lsblk
e adicione quaisquer opções após o -o
que 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_LUKS
pelo 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 lsblk
comando tinha apenas a NAME
opção, portanto obteremos apenas o nome das partições do sistema. Também sai -ln
do título e da forma de árvore, portanto é uma lista pura. O grep
comando é opcional, ele irá ignorar a verificação das partições de loop criadas pelo snap. Depois outro lsblk
para a partição detectada como LUKS.
É complicado, mas LUKS e cryptsetup
funciona 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.