Kök birimimin açık olduğu birim grubunu yeniden adlandırmak istiyorum. Bunu nasıl yapabilirim?
Kök birimimin açık olduğu birim grubunu yeniden adlandırmak istiyorum. Bunu nasıl yapabilirim?
Yanıtlar:
NOT: Dağıtımınız /boot/grub/grub.cfg düzenlemesini engelleyebilir. Bu durumda, bu komut dosyası kötü bir fikir olabilir. Alternatif olarak, bunu düzeltmek için grub-mkconfig komutunu çalıştırabilirsiniz. Bu dağıtımları test etmedim, bu yüzden durumunuzu kontrol edin.
İlk olarak, birim grubu adının içinde tire işareti olabileceğini bilmeniz gerekir. Varsa, / dev / mapper / reference öğesinin herhangi bir kullanımından iki tire işareti gerekecektir. 16.04'te, varsayılan olarak, adın sonuna "-vg" eklenir ve bu varsayılır.
İkincisi, bunu karıştırmanın sisteminizin önyüklenememesine neden olabileceğini ve bir kurtarma diskinden önyükleme yapmak ve arıza süresine neden olan şeyleri düzeltmek zorunda kaldığını bilmelisiniz. (aka: Bunu üretimde yapma. )
Gerçek yeniden adlandırma yapmak için kullanın lvrename oldname newname
.
Yeniden adlandırma işleminden sonra, her ikisini de düzenlemeniz /etc/fstab
ve /boot/grub/grub.cfg
kökünüze ve muhtemelen takas konumlarınıza başvuruda bulunmak için adın kullanımını güncellemeniz gerekir .
Ayrıca, tüm çekirdekler için initramf'leri güncelleştirmek üzere bu komutu çalıştırmanız gerekir.
update-initramfs -c -k all
Yeni bir şablon dağıtırken bu işlemek için aşağıdaki komut dosyası kullanın. Yine, kesinti süresine karşı yüksek bir toleransınız olmadığı sürece bunu üretimde yapmayın .
#!/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
Bu komut dosyasında iyileştirmeler yaptıysanız lütfen paylaşın. Her zaman çeşitli uç durumları iyileştirmenin ve açıklamanın yollarını arıyorum.
sed -i
girdi dosyası olmadan çalışırsanız hata verir sed: no input files
. -i
Bayrağı kaldırın .
vgrename
o zaman demek istediğine inanıyorum lvrename
ve /boot/grub/grub.cfg
girişlerde üretildiğinden, doğrudan düzenlemek yerine yeniden adlandırdıktan sonra /etc/grub.d
çalıştırmanız gerekecek update-grub
.
update-grub
yeniden başlatmadan önce düzgün çalışamaz gibi görünüyor - /usr/sbin/grub-probe: error: failed to get canonical path of '/dev/mapper/ubuntu--vg-root'
benim için bir hata ile başarısız . /boot/grub/grub.cfg
Otomatik olarak oluşturulan sistemlerde , belki de en güvenli seçenek, bu komut dosyasında olduğu gibi manuel olarak güncellenmek, ardından yeniden başlatmak, sonra çalıştırmak update-grub
ve yeniden başlatmaktır.
Dosya /boot/grub/grub.cfg
manuel olarak düzenlenmemelidir.
Aşağıda dosya başlığı var:
"
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
"
Bu beni 18.04.1 LTS ubuntu üzerinde yakaladı - vgrename ve önyükleme başarısız oldu. Ayrıca takas (eski vg adı atıfta) umount başarısız olduğu için kapatma durdu kaydetti.
Ben vg initramfs istemine lvm kullanarak ne için yeniden adlandırdı. Yukarıdaki talimatlara göre vgrename henüz "düzgün" yeniden yapılmadı.
Yeniden adlandırma işleminden sonra, her ikisini de düzenlemeniz /etc/fstab
ve /boot/grub/grub.cfg
kökünüze ve muhtemelen takas konumlarınıza başvuruda bulunmak için adın kullanımını güncellemeniz gerekir . /etc/initramfs-tools/conf.d/resume
de gereklidir.
Yani, bu kodu ekleyin:
sed -i "s/${vg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume
İşte gözden geçirilmiş bir sürüm, vg dizesinin değiştirilmesi düzeltildi ve ayrıca güncellenmiş dosyaları yazdırın.
#!/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
Bu komut dosyasını kullanırken, makine eşlemeleri "durdurmaya" çalıştığından makine düzgün kapanmayabilir. Yapılandırmanıza bağlı olarak, bu gerçekte ilk önce kapanmıyorken, makine önyükleme durumundaymış gibi görünebilir.
Mesajları gördüğünüzde GRUB_CMDLINE_LINUX_DEFAULT kodundan "sessiz sıçramayı" kaldırmak yararlı olacaktır.
Ana bilgisayar adını da değiştirmek için komut dosyasında küçük bir değişiklik yaptım.
#!/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
Önyükleme menüsü ayrıca Ubuntu 18 (ve muhtemelen diğerleri) üzerinde düzenleme gerektiriyordu. Yani - sadece bir vg adını değiştirmek ve adda bir tire kullanımını korumak için basitleştirilmiştir:
#!/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