Não é possível fazer com que o cache LVM seja persistente após a reinicialização do sistema

Não é possível fazer com que o cache LVM seja persistente após a reinicialização do sistema

Eu tenho o volume lógico LVM além da configuração MDADM RAID1. Estou tentando adicionar um dispositivo SSD como cache a este volume lógico por meio de:

vgextend dataVG /dev/sdd
lvcreate --type cache --cachemode writethrough -L 120G -n dataLV_cachepool dataVG/dataLV /dev/sdd

Tudo parece estar bem até eu reiniciar meu sistema. Após a reinicialização, ele não inicia e recebo o modo de recuperação (Ubuntu).

Vejo os seguintes erros durante o processo de inicialização:

lvm[740]:   dataVG: autoactivation failed.
systemd[1]: lvm2-pvscan@9:2.service: Main process exited, code=exited, status=5/NOTINSTALLED
systemd[1]: lvm2-pvscan@9:2.service: Failed with result 'exit-code'.
systemd[1]: Failed to start LVM2 PV scan on device 9:2.
lvm[774]:   /usr/sbin/cache_check: execvp failed: No such file or directory
lvm[774]:   Check of pool dataVG/dataLV_cachepool failed (status:2). Manual repair required!
lvm[774]:   0 logical volume(s) in volume group "dataVG" now active
lvm[774]:   dataVG: autoactivation failed.
systemd[1]: Started File System Check on /dev/mapper/BACKUPVG-mainbackup.
systemd[1]: lvm2-pvscan@8:16.service: Main process exited, code=exited, status=5/NOTINSTALLED
systemd[1]: lvm2-pvscan@8:16.service: Failed with result 'exit-code'.
systemd[1]: Failed to start LVM2 PV scan on device 8:16.
systemd[1]: Mounting /mnt/mainbackup...
systemd[1]: Mounted /mnt/mainbackup.
kernel: EXT4-fs (dm-1): mounted filesystem with ordered data mode. Opts: (null)
systemd[1]: dev-mapper-dataVG\x2dataLV.device: Job dev-mapper-dataVG\x2dataLV.device/start timed out.
systemd[1]: Timed out waiting for device dev-mapper-dataVG\x2dataLV.device.
systemd[1]: Dependency failed for /mnt/dataLV.
systemd[1]: Dependency failed for Local File Systems.
systemd[1]: local-fs.target: Job local-fs.target/start failed with result 'dependency'.
systemd[1]: local-fs.target: Triggering OnFailure= dependencies.
systemd[1]: mnt-dataLV.mount: Job mnt-dataLV.mount/start failed with result 'dependency'.
systemd[1]: Dependency failed for File System Check on /dev/mapper/dataVG-dataLV.
systemd[1]: systemd-fsck@dev-mapper-dataVG\x2dataLV.service: Job systemd-fsck@dev-mapper-dataVG\x2dataLV.service/start failed with resu
systemd[1]: dev-mapper-dataVG\x2dataLV.device: Job dev-mapper-dataVG\x2dataLV.device/start failed with result 'timeout'.

Funciona apenas quando eu removo a unidade em cache do VG:

lvconvert --uncache dataVG/dataLV

Não tenho certeza de como abordar esse problema ...

Versão LVM:

LVM version:     2.02.176(2) (2017-11-03)
Library version: 1.02.145 (2017-11-03)

Responder1

Tive o mesmo problema no Debian 8. A resolução consiste em duas etapas.

Primeiro, como os módulos necessários não são carregados durante a inicialização, os sistemas resultam na inicialização com LVMs de estado inativo para LVs armazenados em cache.

Tentar ativá-los manualmente resulta em erro:

vgchange -a y vg0/home_cache
   /usr/sbin/cache_check: execvp failed: No such file or directory
   Check of pool vg0/home_cache failed (status:2). Manual repair required!

Na verdade, o comando /usr/sbin/cache_check não existe. Corrija instalando:

apt-get install thin-provisioning-tools

Em segundo lugar, corrija o problema, que é a razão pela qual os volumes de cache LVM não estão ativados. Existem poucos módulos necessários para estarem presentes na imagem de inicialização do initramfs. Adicione-os aos módulos forçados para incluir:

sudo echo "dm_cache" >> /etc/initramfs-tools/modules
sudo echo "dm_cache_mq" >> /etc/initramfs-tools/modules
sudo echo "dm_persistent_data" >> /etc/initramfs-tools/modules
sudo echo "dm_bufio" >> /etc/initramfs-tools/modules

E depois disso faça:

update-initramfs -k `uname -r` -u -t

e finalmente proteja-se:

update-grub

Verifique tudo duas vezes e finalmente reinicie.

Responder2

Eu acho que você precisa do módulo de cache do kernel (dm-cache) e das ferramentas /usr/sbin/cache_* em seu ramdisk de inicialização. No fedora isso é tratado pelo dracut, no pacote initramfs-tools do debian (e ubuntu).

informação relacionada