vgrename на root VG - проблемы с grub2
Я пытаюсь обновить grub2 после использования vgrename в моей корневой VG в Centos 7. Я успешно запустил vgrename, затем отредактировал /etc/fstab с именем VG, затем отредактировал 'GRUB_CMDLINE_LINUX=' в /etc/default/grub с новым именем VG, затем попытался запустить grub2-mkconfig. Именно в этот момент я получаю ошибку:
# grub2-mkconfig
/usr/sbin/grub2-probe: error: failed to get canonical path of ‘/dev/mapper/centos_prod--stor01-root’.
Этот канонический путь, на который он указывает, это старое имя VG. Я не понимаю этого, так как предполагал, что обновление имени VG в /etc/default/grub решило бы это? Любая помощь приветствуется:)
3 ответа
Я не уверен, необходимы ли все шаги для centos или требуется больше, но я надеюсь, что следующее поможет.
Для SLES 12 SP1 мне пришлось изменить следующие файлы после выполнения vgrename или lvrename:
- / И т.д. / по умолчанию / личинка
- / И т.д. / sysconfig / Загрузчик
- / И т.д. / Fstab
В / etc / default / grub я также добавил следующие строки:
- GRUB_DEVICE = / DEV / Имя_группы_томов / LVname
- GRUB_DEVICE_UUID = e35b6f76-15b7-44ef-8bea-cd2c1ef8a547
После этого вы должны переделать конфигурацию grub, используя grub2-mkconfig; однако, кажется, что проблема с этим сценарием, если вы изменяете путь устройства. Мне пришлось изменить строку (159 для меня, должно быть близко), чтобы сказать:
- GRUB_DEVICE = "` $ $ grub_probe} --target = device / `" || правда
Ключевое различие - верная часть. В противном случае, grub2-probe выдаст ошибку, распространяясь до grub2-mkconfig, потому что он находит текущее устройство вместо того, где будет новое устройство.
Вместо того, чтобы просто запустить grub2-mkconfig, я запустил mkinitrd, который проходит через него и dracut, который позволяет ядру загружать нужные файловые системы для загрузки.
Это раздражение вызвано неправильным предположением grub.
Если бы я побежал vgrename centos7 vg_centos7
чтобы изменить имя группы томов, затем:
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos7-root 6.5G 1.3G 5.3G 20% /
# ls /dev/mapper
control vg_centos7-root vg_centos7-swap
Имя смонтированного тома и /dev/mapper
символическая ссылка больше не соответствует. В этом сценарии grub2 использует имя текущего смонтированного тома (centos7-root) и терпит неудачу, если не может найти его в/dev/mapper/
(поскольку его только что переименовали в vg_centos-root).
Вы можете перемонтировать и chroot, чтобы обойти это, следующим образом:
mount /dev/mapper/vg_centos-root /mnt
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys/ /mnt/sys
mount --bind /run/ /mnt/run
mount --bind /boot/ /mnt/boot
cat << EOF | chroot /mnt
grub-mkconfig --output=/boot/grub/grub.cfg
exit
EOF
umount /mnt/boot
umount /mnt/run
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev
umount /mnt
Мой способ хорошо работает в CentOS 7 и 8.
Текущие vg и lvs
# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 4 0 wz--n- <325.97g 4.00m
# lvs
LV VG Attr LSize Pool
root cl -wi-ao---- <46.57g
Планируйте изменить имя vg с cl на vg_sys и изменить форму имени lv root на lv_root
переименовать имя vg и lv
vgrename -v cl vg_sys
lvrename /dev/cl/root /dev/vg_sys/lv_root
Затем измените /etc/fstab, /boot/grub2/grub.cfg, /etc/default/grub, /boot/grub2/grubenv.
sed -i 's/cl-root/vg_sys-lv_root/g' /etc/fstab
sed -i 's/cl-root/vg_sys-lv_root/g' /boot/grub2/grub.cfg
sed -i 's/cl\/root/vg_sys\/lv_root/g' /boot/grub2/grub.cfg
sed -i 's/cl-root/vg_sys-lv_root/g' /etc/default/grub
sed -i 's/cl\/root/vg_sys\/lv_root/g' /etc/default/grub
sed -i 's/cl-root/vg_sys-lv_root/g' /boot/grub2/grubenv
sed -i 's/cl\/root/vg_sys\/lv_root/g' /boot/grub2/grubenv
Убедитесь, что все четыре файла изменены правильно. После перезагрузки ОС все работает так, как вы планировали.