Не удалось загрузить lvmcache: "устройство отображения: политика кеша: неизвестный тип политики"
TL;TR
Не удалось загрузить с новым параметром кэширования пула по умолчанию в lvm2 cache-policy-smq
Эта проблема
Я создал диск lvm с lvmcache на SSD-накопителе в Ubuntu 16.04. После этого я не смог смонтировать корневой том после перезагрузки сервера.
Я могу загрузить 16.04 live 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.
Настройки у меня сейчас
/ и т.д. / initramfs-инструменты / модули
dm_cache
dm_cache_mq
dm_cache_smq
dm_persistent_data
dm_bufio
/ И т.д. / initramfs-инструменты / крючки / 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
Временное решение
Я переключаю 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
Рекомендации
- Как установить Ubuntu с шифрованием диска и SSD-кэшированием
- Boot-Repair
- Ошибка 1247386 - lvcreate и lvchange нуждаются в проверках допустимости '--cachepolicy'
1 ответ
Это, вероятно, поздно в качестве ответа, но я сделал вещи в вашем посте (но с установкой Ubuntu 16.04.1), и он работал с smq-policy. Кажется, проблема, с которой вы столкнулись, была решена.
Это то, что я сделал, команда за командой.
Во-первых, у меня был большой жесткий диск на / dev / sda и SSD на / dev / sdb.
Я отформатировал / dev / sda, чтобы вначале было 10 МБ свободного места, затем следовал основной раздел ext4 объемом 1 ГБ, который будет использоваться для / 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
На этом этапе я устанавливаю Ubuntu в раздел /dev/VG/lv как /, с / 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 машинах уже, больше следовать.
Чтобы сделать ситуацию более интересной, моя корневая файловая система находится на томе lvm в массиве md raid 5. Кэширование с обратной записью корневого тома на SSD-диске привело к невозможности загрузки системы и остановке в busybox, где мне нужно внимательно прочитать приведенное выше решение, чтобы исправить это. Чтобы восстановить загрузку, я запустил систему с загрузочного USB-накопителя Ubuntu, установил mdadm для запуска массива md, добавил вселенную в /etc/apt/sources.list, чтобы иметь возможность устанавливать инструменты тонкого обеспечения и удалил кеширование в корне объем:
Boot from Ubuntu USB startup stick
# sudo edit /etc/apt/sources.list # add "universe" to all deb lines
# sudo apt update
# sudo apt install -y mdadm
# sudo mdadm --assemble /dev/md0
# sudo apt install -y thin-provisioning-tools
# sudo lvm
lvm> lvconvert --splitcache vg/root
Logical volume vg/root is not cached and cache pool vg/CacheRoot is unused.
# exit
# reboot
Успешная загрузка в некэшированный корень и готовность к следующему испытанию.