Как переименовать группу томов, которая содержит корневой том в LVM?

Я хочу переименовать группу томов, в которой находится мой корневой том. Как я могу это сделать?

20
задан 29 April 2016 в 22:06

7 ответов

ПРИМЕЧАНИЕ: Ваш дистрибутив может препятствовать редактированию/boot/grub/grub.cfg. Если это так, этот сценарий может быть плохой идеей. Поочередно, можно просто смочь выполнить личинку-mkconfig для фиксации этого. Я не протестировал на тех дистрибутивах, так проверьте свою ситуацию.

Первый, необходимо знать, что название группы объема может иметь тире в нем. Если это делает, чем какое-либо использование/dev/mapper/ссылки должно будет иметь двух тире. В 16,04, это принимает значение по умолчанию к добавлению "-vg" к имени, таким образом, это должно быть принято.

1110-секундный, необходимо знать, что портить это может заставить систему быть незагрузочной и привести к необходимости загрузиться от спасательного диска и зафиксировать материал, вызывающий время простоя. (иначе: не делают этого в производстве. )

, Чтобы сделать фактические переименовывают использование lvrename oldname newname.

После переименования Вас должен отредактировать и /etc/fstab и /boot/grub/grub.cfg для обновления использования названия любой ссылки на корень и вероятно также местоположения подкачки.

Кроме того, необходимо выполнить эту команду для обновления initramfs для всех ядер.

update-initramfs -c -k all

я использую следующий сценарий для обработки этого при развертывании нового шаблона. Снова, не делают этого в производстве , если у Вас нет высокого допуска в течение времени простоя.

#!/bin/bash

# Must be run with root permissions 
# sudo will be sufficient

if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

#Ask for new hostname $newhost
read -p "Enter new hostname: "
newhostname=$REPLY
oldhostname=$(cat /etc/hostname)

echo "Changing LVM names"
# ${var//-} syntax removes all dashes from the name simplifying the 
# requirement to use a double-dash in some places to escape the dash
newvg=${newhostname//-}

# Find the volume group that root is in 
vg=`lvdisplay -C|awk '$1=="root" {print $2}'`
if [[ ${vg} == *"-"* ]]; then
    #has dashes in current name
    vgrename ${vg} ${newhostname//-}
    vg=`echo $vg|sed "s/-/--/g"`
    sed -i "s/${vg}/${newvg}/g" /etc/fstab
    sed -i "s/${vg}/${newvg}/g" /boot/grub/grub.cfg
  else
    #no dashes in current name
    vgrename ${vg} ${newvg}
    sed -i "s/${vg}/${newvg}/g" /etc/fstab
    sed -i "s/${vg}/${newvg}/g" /boot/grub/grub.cfg
fi

update-initramfs -c -k all

, Если у Вас есть какие-либо улучшения этого сценария, совместно используйте. Я всегда ищу способы улучшиться и составлять различные пограничные случаи.

25
ответ дан 30 April 2016 в 08:06
  • 1
    Если Вы хотите эмулировать " область screenshot" (где Вы привлекаете выбор на своем экране с Вашей мышью), необходимо войти gnome-screenshot -a в поле команды . Как детализировано в man gnome-screenshot, можно заменить (или добавить к) -a с: -c для копирования изображения в буфере обмена (таким образом, Вы можете Ctrl+V это), вместо файла; -w, если Вы хотите скопировать текущее окно; и т.д. – ebosi 17 October 2018 в 00:46

После переименования Вас должен отредактировать и /etc/fstab и /boot/grub/grub.cfg для обновления использования названия любой ссылки на корень и вероятно также местоположения подкачки. /etc/initramfs-tools/conf.d/resume необходим, также.

Так, добавьте этот код:

sed -i "s/${vg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume
0
ответ дан 30 April 2016 в 08:06

Вот исправленная версия, закрепите на строковой замене vg и также распечатайте обновленные файлы.

#!/bin/bash

# Must be run with root permissions
# sudo will be sufficient
if [ "$(id -u)" -ne 0 ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

# Ask for new hostname $newhost
read newhostname -p "Enter new hostname: "
#oldhostname=$(cat /etc/hostname)

echo "Changing LVM names"
# ${var//-} syntax removes all dashes from the name simplifying the
# requirement to use a double-dash in some places to escape the dash
newvg=${newhostname//-}

# Find the volume group that root is in
vg=$(lvdisplay -C | awk '$1=="root" {print $2}')
echo "old vg name: " $vg
echo "new vg name: " $newvg
if [[ ${vg} == *"-"* ]]; then
    # has dashes in current name
    vgrename ${vg} ${newhostname//-}
    vg=${vg//-/--}
    sed -i "s/${vg}/${newvg}/g" /etc/fstab
    sed -i "s/${vg}/${newvg}/g" /boot/grub/grub.cfg
    sed -i "s/${vg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume
else
    # no dashes in current name
    vgrename ${vg} ${newvg}
    sed -i "s/${vg}/${newvg}/g" /etc/fstab
    sed -i "s/${vg}/${newvg}/g" /boot/grub/grub.cfg
    sed -i "s/${vg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume
fi

#check files
echo fstab update:
grep ${newvg} /etc/fstab

echo grub.cfg update:
grep ${newvg} /boot/grub/grub.cfg

echo resume update:
grep ${newvg} /etc/initramfs-tools/conf.d/resume

update-initramfs -c -k all

При использовании этого сценария, машина не может завершить работу правильно, поскольку это пытается "остановить" отображения. В зависимости от Вашей конфигурации это может даже казаться, как машина находится в состоянии начальной загрузки, в то время как в действительности это даже не завершение работы сначала.

полезно удалить "тихий всплеск" из GRUB_CMDLINE_LINUX_DEFAULT, поскольку Вы затем видите сообщения.

0
ответ дан 30 April 2016 в 08:06

Для меню начальной загрузки также было нужно редактирование на Ubuntu 18 (и вероятно другие). Таким образом - упрощенный для того, чтобы только изменить vg имя и сохранить использование тире на имя:

#!/bin/bash

oldvg="ubu16svr-vg"
oldvgdash="ubu16svr--vg"
newvg="ubusvr-vg"
newvgdash="ubusvr--vg"

if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

vgrename ${oldvg} ${newvg}
sed -i "s/${oldvg}/${newvg}/g" /etc/fstab
sed -i "s/${oldvgdash}/${newvgdash}/g" /etc/fstab
sed -i "s/${oldvg}/${newvg}/g" /boot/grub/grub.cfg
sed -i "s/${oldvgdash}/${newvgdash}/g" /boot/grub/grub.cfg
sed -i "s/${oldvg}/${newvg}/g" /boot/grub/menu.lst
sed -i "s/${oldvgdash}/${newvgdash}/g" /boot/grub/menu.lst
sed -i "s/${oldvg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume
sed -i "s/${oldvgdash}/${newvgdash}/g" /etc/initramfs-tools/conf.d/resume
update-initramfs -c -k all
0
ответ дан 29 September 2019 в 17:07

Это ловило меня на ubuntu 18.04.1 LTS - сделал vgrename и отказавшую начальную загрузку. Я также отметил что завершение работы, остановленное потому что подкачка (ссылающийся на старое имя vg) umount отказавший.

я переименовал vg назад к тому, что он использовал lvm для подсказки initramfs. Не восстановили vgrename еще "правильно" согласно инструкциям выше.

1
ответ дан 29 September 2019 в 17:07

Файл /boot/grub/grub.cfg не должен быть отредактирован вручную.

ниже существует заголовок файла:

"
 DO NOT EDIT THIS FILE

 It is automatically generated by grub-mkconfig using templates
 from /etc/grub.d and settings from /etc/default/grub

BEGIN /etc/grub.d/00_header
"
1
ответ дан 16 November 2019 в 12:29

Я сделал немного модификации на сценарии, чтобы также изменить имя хоста.

#!/bin/bash

# Must be run with root permissions
# sudo will be sufficient

if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

#Ask for new hostname $newhost
read -p "Enter new hostname: "
newhostname=$REPLY
oldhostname=`cat /etc/hostname`

# ${var//-} syntax removes all dashes from the name simplifying the
# requirement to use a double-dash in some places to escape the dash
newvg=${newhostname//-}

# Find the volume group that root is in
vg=`lvdisplay -C|awk '$1=="root" {print $2}'`
echo
echo "old hostname          : " $oldhostname
echo "old vg name           : " $vg
echo "new hostname / vg name: " $newvg

echo
echo "Changing LVM names..."
vgrename ${vg} ${newvg}
if [[ ${vg} == *"-"* ]]; then
    #has dashes in current name
    vg=`echo $vg|sed "s/-/--/g"`
fi
sed -i "s/${vg}/${newvg}/g" /etc/fstab
sed -i "s/${vg}/${newvg}/g" /boot/grub/grub.cfg
sed -i "s/${vg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume

echo
echo "Changing Hostname..."
sed -i "s/${oldhostname}/${newvg}/g" /etc/hostname
sed -i "s/${oldhostname}/${newvg}/g" /etc/hosts

#check files
echo
echo fstab update:
grep ${newvg} /etc/fstab

echo grub.cfg update:
grep ${newvg} /boot/grub/grub.cfg

echo resume update:
grep ${newvg} /etc/initramfs-tools/conf.d/resume

echo hostname update:
grep ${newvg} /etc/hostname

echo hosts update:
grep ${newvg} /etc/hosts

update-initramfs -c -k all
0
ответ дан 23 November 2019 в 01:51

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

Похожие вопросы: