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

Убедитесь, что все четыре файла изменены правильно. После перезагрузки ОС все работает так, как вы планировали.

Другие вопросы по тегам