fli*_*fly 28
注意:您的发行版可能不鼓励编辑 /boot/grub/grub.cfg。如果是这种情况,这个脚本可能是个坏主意。或者,您可能只能运行 grub-mkconfig 来解决该问题。我还没有在这些发行版上测试过,所以请检查你的情况。
首先,您需要知道卷组名称中可能有一个破折号。如果是这样,那么 /dev/mapper/ 引用的任何使用都需要有两个破折号。在 16.04 中,它默认在名称后附加“-vg”,因此应该假设这一点。
其次,您应该知道将其弄乱可能会导致您的系统无法启动,并导致必须从救援磁盘启动并修复导致停机的内容。(又名:不要在生产中这样做。)
要进行实际重命名,请使用lvrename oldname newname.
重命名后,您必须编辑两者/etc/fstab并/boot/grub/grub.cfg更新名称的使用,以便对您的根以及可能还有您的交换位置进行任何引用。
此外,您需要运行此命令来更新所有内核的 initramfs。
update-initramfs -c -k all
Run Code Online (Sandbox Code Playgroud)
部署新模板时,我使用以下脚本来处理此问题。同样,除非您对停机时间有很高的容忍度,否则不要在生产中这样做。
#!/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
Run Code Online (Sandbox Code Playgroud)
如果您对此脚本有任何改进,请分享。我一直在寻找改进和解决各种边缘情况的方法。