LVM'de kök birimi içeren birim grubunu nasıl yeniden adlandırırsınız?


20

Kök birimimin açık olduğu birim grubunu yeniden adlandırmak istiyorum. Bunu nasıl yapabilirim?


Sadece merak ediyorum: Bunu neden yapmak isteyeyim?
guntbert

2
Benim durumum, ana bilgisayar adı "template" ile yüklediğim bir VMWare şablonum var. Bu şablonu dağıttıktan sonra, vgname'in tüm bu makineler için "template-vg" olmamasını tercih ederim. Vgname ana bilgisayar adı ile ilgili genel bir fikir ile yapıştırma, vg ana bilgisayar adı ile şablon yeniden adlandırmak için benim kurulum komut dosyası var. Ayrıca bir şekilde yanlış ssh oturumunda değil, doğru vg üzerinde çalıştığımı kolayca temin etmeme izin veriyor.
16:14, flickerfly

Yanıtlar:


25

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/fstabve /boot/grub/grub.cfgkö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.


Bir sed -igirdi dosyası olmadan çalışırsanız hata verir sed: no input files. -iBayrağı kaldırın .
wjandrea

Ah tamam. Mantıklı. Sed versiyonumun bunu farklı ele alıp almadığını merak ediyorum. Ayrıca, @Diego Souza tamamen başka bir yorumda sed olmadan çıkardı gibi görünüyor.
flickerfly

2
Ben vgrenameo zaman demek istediğine inanıyorum lvrenameve /boot/grub/grub.cfggirişlerde üretildiğinden, doğrudan düzenlemek yerine yeniden adlandırdıktan sonra /etc/grub.dçalıştırmanız gerekecek update-grub.
Eric Streeper

Hayır, ses grubu demek istedim. Ayrıca, belki dağıtımınız grub yapılandırmasında benimkinden farklıdır.
flickerfly

3
Bu update-grubyeniden 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.cfgOtomatik 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-grubve yeniden başlatmaktır.
Michael Firth

1

Dosya /boot/grub/grub.cfgmanuel 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
"

Evet, cevabım biraz yaşlanıyor ve bunun için kullanım durumum artık yok. Güncel hale getirmek için öğrendiğiniz her şeye katkıda bulunmanızı öneririm. Bunu hangi dağıtım ve sürümde görüyorsunuz?
flickerfly

1

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ı.


0

Yeniden adlandırma işleminden sonra, her ikisini de düzenlemeniz /etc/fstabve /boot/grub/grub.cfgkö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/resumede gereklidir.

Yani, bu kodu ekleyin:

sed -i "s/${vg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume

Bunu Ubuntu'da yapmam gerekmiyordu. 'update-initramfs -c -k all' yeterliydi. Bu ihtiyacı gösteren hangi dağıtımı kullanıyorsunuz? Update-initramfs aracı yok mu? Ben de farklı sonuçlarımda bir faktör olabilir bu içeren komut dosyası çalıştırdıktan hemen sonra yeniden başlatın.
flickerfly

0

İş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.


0

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

0

Ö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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.