Como evitar a interferência do os-prober com uma partição criptografada

4

Em um servidor linux, dediquei uma grande partição, identificada como / dev / sdb1, a um sistema de arquivos criptografado. Estou usando

losetup /dev/loop0 /dev/sdb1

cryptsetup -c aes -h sha512 create crypto /dev/loop0

mount /dev/mapper/crypto /var/crypto/db/

e uma frase longa para montar a partição e usá-la. Na instalação de um novo pacote do kernel, o / usr / bin / os-prober é executado. Tanto quanto eu posso ver, verifica cada partição para instalações do sistema operacional. Obviamente, ele falha da maneira mais difícil em / dev / sdb1, onde nada além de ruído deve viver (a menos que você tenha a frase secreta e faça uso do dmcrypt, é claro).

De acordo com o meu syslog, imediatamente após

 running /usr/lib/os-probes/50mounted-tests on /dev/sdb1

a "Erro de E / S de Buffer no dev dm-0, ..." é registrada, um diário abortado é detectado e o sistema de arquivos é remontado / não. O registro continua com várias mensagens de falha relacionadas à detecção de um sistema de arquivos em / dev / sdb1, por exemplo

Aug 17 17:12:59 mibi202 kernel: [1903146.947192] EXT4-fs (sdb1): VFS: Can't find ext4 filesystem

squashfs: SQUASHFS error: Can't find a SQUASHFS superblock on sdb1

FAT-fs (sdb1): invalid media value (0xca)

Obviamente, o os-prober não pôde fazer sua mágica no dispositivo criptografado e de alguma forma interferiu em sua função adequada.

Desmontar o sistema de arquivos criptografado, removendo o dispositivo dmcrypt e o loop, e iniciar o material novamente na ordem correta me retorna ao sistema de arquivos.

Qualquer dica sobre como evitar o os-prober causando uma interrupção de serviço no servidor seria bem-vinda. Obrigado.

    
por Ernst M. 17.08.2016 / 17:54

1 resposta

1

Infelizmente os-prober é bem rústico, não aceita nenhum tipo de configuração (arquivo ou linha de comando). No entanto, entende LUKS.

Se você usar LUKS em vez de cryptsetup simples, ele parará de tentar interpretar essa partição (por outro lado, se a partição estiver aberta, ela tentará localizar e entender o dispositivo de loop).

Dentro de /usr/lib/os-probes/50mounted-tests o teste é realizado da seguinte forma:

types="$(fs_type "$partition")" || types=NOT-DETECTED
# ...
elif [ -z "$types" ]; then
    if type cryptsetup >/dev/null 2>&1 && \
       cryptsetup luksDump "$partition" >/dev/null 2>&1; then
        debug "$1 is a LUKS partition; skipping"
        exit 0
    fi

Portanto, usar o LUKS é a solução mais fácil.

No entanto, se você realmente não quiser usar o LUKS, basta hackear os-prober e incluir sua partição criptografada na fs_type check. Essa verificação é executada dentro de /usr/share/os-prober/common.sh e é realmente muito trivial:

fs_type () {
    if (export PATH="/lib/udev:$PATH"; type vol_id) >/dev/null 2>&1; then
        PATH="/lib/udev:$PATH" vol_id --type "$1" 2>/dev/null
    elif type blkid >/dev/null 2>&1; then
        blkid -o value -s TYPE "$1" 2>/dev/null
    else
        return 0
    fi
}

E você pode cortá-lo para:

fs_type () {
    if [ "x$1" = "x/dev/sdb1" ]; then
        return 0
    elif (export PATH="/lib/udev:$PATH"; type vol_id) >/dev/null 2>&1; then
        PATH="/lib/udev:$PATH" vol_id --type "$1" 2>/dev/null
    elif type blkid >/dev/null 2>&1; then
        blkid -o value -s TYPE "$1" 2>/dev/null
    else
        return 0
    fi
}

os-prober é realmente apenas uma coleção de scripts de shell.

    
por 18.08.2016 / 02:17

Tags