web-dev-qa-db-ja.com

lvmcacheの起動に失敗しました:「デバイスマッパー:キャッシュポリシー:不明なポリシータイプ」

TL; TR

Lvm2の新しいデフォルトのキャッシュプール設定cache-policy-smqで起動に失敗しました

問題

Ubuntu 16.04のSSDドライブにlvmcacheを使用してlvmディスクを作成しました これに続く ですが、サーバーの再起動後にルートボリュームのマウントに失敗しました。

16.04のライブCDを起動して、/dev/mapper/vg0-rootを正常にマウントできます( Boot-repair 、mdadm、thin-provisioning-toolsを使用)。

掘り下げた後、lvmcacheの新しいポリシーdm-cache-smqがどこかで見つからない/サポートされていないようですが、次に何をすべきかわかりません。

どうすれば修正できますか?

起動時のエラーメッセージ

エラーメッセージは、マウント待機タイムアウトまで表示され、コンソールは(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.

現在の設定

/ 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

サーバーを一時的にオンラインにするためにlvmcacheをmqポリシーに戻しますが、smqポリシーを使用したキャッシュのソリューションを探しています。

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

参照資料

2
jcppkkk

これはおそらく回答としては遅れていますが、私はあなたの投稿で行いましたが(ubuntu 16.04.1のインストールで)、smq-policyで機能しました。あなたが抱えていた問題は解決されたようです。

これは、コマンドごとに私がやったことです。

まず、/ dev/sdaに大きなハードディスクがあり、/ dev/sdbにSSDがありました。

最初に/ dev/sdaをフォーマットして10MBの空き容量を確保し、その後1GBのext4プライマリパーティションをインストールしました。これはインストールの/ bootに使用されます(カーネルをキャッシュできないため、カーネルを入れることができます)。/dev/sdaの残りは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

この時点で、/ dev/VG/lvパーティションにubuntuを/としてインストールし、/ bootを/ dev/sda1にインストールします。

インストール後、この新しいインストールのカーネルをいくつかの変更を加えて再コンパイルする必要があります(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

ここからの内容: http://forums.debian.net/viewtopic.php?f=5&t=119644 smqが機能するように最後の行が変更されました

#!/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

次に、カーネルをコンパイルして正しい場所に配置するために、次の手順に進みます。

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

今再起動し、それは働いた。私はすでに2台のマシンでこれを試しましたが、あとに続きます。

1
317070