web-dev-qa-db-fra.com

Echec du démarrage de lvmcache: "device-mapper: cache-policy: type de politique inconnu"

TL; TR

Échec d'initialisation avec le nouveau paramètre de pool de cache par défaut de lvm2, cache-policy-smq

Le problème

J'ai créé un disque LVM avec lvmcache sur le lecteur SSD sur Ubuntu 16.04 suite à cela , mais n'a pas réussi à monter mon volume racine après le redémarrage du serveur.

Je peux démarrer dans le CD 16.04 et monter /dev/mapper/vg0-root avec succès (avec réparation de démarrage , mdadm, thin-provisioning-tools).

Après quelques recherches, il semble que la nouvelle stratégie de lvmcache dm-cache-smq soit manquante/non prise en charge quelque part, mais je ne sais pas du tout comment procéder.

Comment puis-je réparer cela?

Messages d'erreur au démarrage

Le message d'erreur se répète jusqu'à ce que le délai d'attente de montage soit dépassé, puis la console supprime un shell (initramfs).

Begin: Running /scripts/local-block . . . lumetad is not active yet, using direct activation during sysinit
/sbin/nodprobe failed: 1
  device-mapper: cache: You have created a cache device with a lot of individual cache blocks (7600000)
  All these mappings can consume a lot oF kernel memory, and take some time to read/write
  Please consider increasing the cache block size to reduce the overall cache block count
  device-mapper: cache-policy: unknown policy type
  device-mapper: table: 252:4: cache: Error creating cache's policy
  device-napper: ioctl: error adding target to table
  device-mapper: reload ioctl on (252:4) failed: Invalid argument
done.

Paramètres que j'ai maintenant

/ etc/initramfs-tools/modules

dm_cache
dm_cache_mq
dm_cache_smq
dm_persistent_data
dm_bufio

/ etc/initramfs-tools/hooks/lvmcache

#!/bin/sh
PREREQ="lvm2"
prereqs()
{
  echo "$PREREQ"
}
case $1 in
prereqs)
  prereqs
  exit 0
  ;;
esac
if [ ! -x /usr/sbin/cache_check ]; then
  exit 0
fi
. /usr/share/initramfs-tools/hook-functions
copy_exec /usr/sbin/cache_check
manual_add_modules dm_cache dm_cache_mq dm_cache_smq dm_persistent_data dm_bufio

Workaround

Je modifie lvmcache en mq policy pour mettre mon serveur en ligne temporairement, mais cherche toujours des solutions pour le cache avec smq policy.

lvremove vg0/cachedata
lvcreate -L 480M -n cachemeta vg0 /dev/sde
lvcreate -L 475000M -n cachedata vg0 /dev/sde
# Use mq here
lvconvert --type cache-pool --cachepolicy mq --chunksize 8192 --poolmetadata vg0/cachemeta --cachemode writeback vg0/cachedata --yes
lvconvert --type cache --cachepool vg0/cachedata vg0/root

Références

2
jcppkkk

C’est probablement une réponse tardive, mais j’ai fait les choses dans votre message (mais avec une installation d’ubuntu 16.04.1), et cela a fonctionné avec la politique smq. Il semble que le problème que vous avez eu été résolu.

C'est ce que j'ai fait, commande par commande.

Tout d'abord, j'ai eu un gros disque dur sur/dev/sda et un disque dur SSD sur/dev/sdb.

J'ai formaté le fichier/dev/sda pour qu'il dispose de 10 Mo d'espace libre au début, suivi d'une partition primaire ext4 de 1 Go, qui sera utilisée pour/boot lors de l'installation (vous ne pouvez pas mettre en cache le noyau, les noyaux peuvent y aller). Le reste de/dev/sda est effacé en tant que sda2.

Sudo pvcreate /dev/sda2
Sudo pvcreate /dev/sdb
Sudo vgcreate VG /dev/sda2 /dev/sdb
Sudo lvcreate -L 3.5T -n lv VG /dev/sda2
Sudo lvcreate -L 450G -n lv_cache VG /dev/sdb
Sudo lvcreate -L 4.5G -n lv_cache_meta VG /dev/sdb
Sudo lvconvert --type cache-pool --cachemode writeback --poolmetadata VG/lv_cache_meta VG/lv_cache
Sudo lvs -a
Sudo lvconvert --type cache --cachepool VG/lv_cache VG/lv
Sudo lvs -a
Sudo lvdisplay
Sudo mkfs.ext4 /dev/VG/lv

Sur ce point, j’installe ubuntu sur la partition/dev/VG/lv en tant que /, avec/boot sur/dev/sda1.

Après l'installation, le noyau de cette nouvelle installation doit être recompilé avec quelques modifications (dans le cas d'ubuntu 16.04.1)

#### mount existing installation
Sudo chmod 777 /var/cache/app-info/xapian/default -R
Sudo add-apt-repository universe
Sudo apt-get update
Sudo apt-get install thin-provisioning-tools
Sudo vgchange -a y VG
Sudo mkdir /new
Sudo nano /etc/fstab
###add this line to fstab: /dev/VG/lv /new ext4 defaults 0 0
Sudo mount /dev/VG/lv

### We will need to install some new packages in the chroot, so fix internet
Sudo mount --bind /dev /new/dev
Sudo mount --bind /proc /new/proc
Sudo mount --bind /sys /new/sys
Sudo cp /etc/resolv.conf /new/etc/resolv.conf
Sudo chroot /new
echo 'nameserver 8.8.4.4' | Sudo tee -a /etc/resolv.conf
Sudo add-apt-repository universe
Sudo apt-get update
Sudo apt-get install thin-provisioning-tools

#### recompile kernel with additional hook for dm_cache_smq
echo "dm_cache" >> /etc/initramfs-tools/modules
echo "dm_cache_mq"  >> /etc/initramfs-tools/modules
echo "dm_cache_smq"  >> /etc/initramfs-tools/modules
echo "dm_persistent_data"  >> /etc/initramfs-tools/modules
echo "dm_bufio"  >> /etc/initramfs-tools/modules

nano /etc/initramfs-tools/hooks/cache_hook

contenu à partir d'ici: http://forums.debian.net/viewtopic.php?f=5&t=119644 La dernière ligne a été modifiée pour que le smq fonctionne

#!/bin/sh

PREREQ="lvm2"

prereqs()
{
    echo "$PREREQ"
}

case $1 in
prereqs)
    prereqs
    exit 0
    ;;
esac

if [ ! -x /usr/sbin/cache_check ]; then
    exit 0
fi

. /usr/share/initramfs-tools/hook-functions

copy_exec /usr/sbin/cache_check

manual_add_modules dm_cache dm_cache_mq dm_cache_smq dm_persistent_data dm_bufio

Ensuite, nous continuons avec ce qui suit pour compiler le noyau et le placer au bon endroit.

chmod +x /etc/initramfs-tools/hooks/cache_hook
mkdir /realboot
mount /dev/sda1 /realboot
update-initramfs -v -u -k all -b /realboot

Maintenant, redémarrez, et cela a fonctionné. J'ai déjà essayé cela sur 2 machines, plus à suivre.

1
317070