¿Cómo determinar si una partición es LUKS desde su punto de montaje?

¿Cómo determinar si una partición es LUKS desde su punto de montaje?

Soy consciente de poder utilizar el cryptsetup isLukscomando para averiguar si una partición es un contenedor LUKS. Quiero poder usar este comando con el punto de montaje del contenedor LUKS en el caso de que no pueda estar seguro de conocer el nombre del dispositivo de la partición. ¿Cómo puedo hacer esto en un solo comando?

Por ejemplo, tengo un contenedor Luks en /dev/sda2, lo abro con

$ cryptsetup luksOpen /dev/sda2 vault

Luego monto el contenedor con

$ mount /dev/mapper/vault /mountpoint

En este punto me gustaría saber si /mountpointes un contenedor 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 usaría lsblkpara obtener el dispositivo de bloque de un punto de montaje, pero esto devuelve la /dev/mapper/vaultruta.

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

Si pudiera resolverlo /dev/mapper/vaultde /dev/sda2alguna manera, podría usar la sustitución de comandos dentro del cryptsetup isLukscomando.

Sería genial encontrar algo más elegante que usar awko algo para analizar el resultado de mount, pero si esa es la única manera, supongo que funciona.

Respuesta1

Tuve el mismo problema. Resuelto así.

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

Volver, por ejemplo/dev/sda2

Respuesta2

Esto debería funcionar. Es un poco largo, pero crear una función bash lo simplificaría:

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

Respuesta3

alguien mencionó usarlsblk

Esta es una manera relativamente fácil, pero sólo si lo haces.

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

Luego, la salida de lsblk tendrá mucha información adicional útil, y FSTYPEmostrará crypto_LUKSy luego mostrará las particiones resultantes debajo. Y también tendrá el modelo del disco y el número de serie como referencia, lo cual me resulta útil para entender las cosas.

man lsblky agregue cualquier opción después -oque pueda encontrar para que sea más útil para usted.

Creo que de esta manera... obtener una simple lista de árbol visible de todos los discos que Linux ve actualmente... es la forma más sencilla con menos escritura para saber qué discos/particiones están encriptados con luks, se mostrará como crypto_LUKSal menos eso es lo que Veo que estoy usando RHEL 7.9.

Respuesta4

Esto funcionó para mí:

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

El lsblkcomando solo tenía la NAMEopción, por lo que solo obtendremos el nombre de las particiones en el sistema. También -lnabandonan el título y la forma de árbol, por lo que es una lista pura. El grepcomando es opcional, omitirá la verificación de las particiones de bucle creadas por snap. Luego otro lsblka la partición detectada como LUKS.

Es complicado, pero LUKS cryptsetupfunciona con particiones, no con puntos de montaje. Si va a utilizarlo dentro de un script, puede crearlo como una función para una mejor práctica.

información relacionada