आप LVM में रूट वॉल्यूम वाले वॉल्यूम समूह का नाम कैसे बदल सकते हैं?


20

मैं वॉल्यूम समूह का नाम बदलना चाहता हूं जो मेरी रूट वॉल्यूम चालू है। मैं यह कैसे कर सकता हूँ?


बस जिज्ञासु: मैं ऐसा क्यों करना चाहूंगा?
गुंटबर्ट

2
मेरा उपयोग मामला यह है कि मेरे पास एक VMWare टेम्पलेट है जिसे मैंने होस्टनाम "टेम्पलेट" के साथ स्थापित किया है। एक बार जब मैं उस टेम्पलेट को तैनात करता हूं, तो मैं उन सभी मशीनों के लिए vgname "टेम्पलेट-vg" नहीं होना चाहिए। सामान्य विचार के साथ चिपके रहते हैं कि vgname होस्टनाम से संबंधित है, मेरे पास टेम्पलेट के लिए मेरी सेटअप स्क्रिप्ट है, होस्टनाम के साथ vg का नाम बदलें। यह मुझे आसानी से यह आश्वासन देने की अनुमति देता है कि मैं सही vg पर काम कर रहा हूं और किसी भी तरह गलत ssh सत्र में नहीं।
फ़्लिकरफ्फ़र

जवाबों:


25

नोट: आपका डिस्ट्रॉ संपादन /boot/grub/grub.cfg संपादन को हतोत्साहित कर सकता है। यदि ऐसा है, तो यह स्क्रिप्ट एक बुरा विचार हो सकता है। वैकल्पिक रूप से, आप इसे ठीक करने के लिए grub-mkconfig को चलाने में सक्षम हो सकते हैं। मैंने उन विकृतियों पर परीक्षण नहीं किया है, इसलिए अपनी स्थिति की जाँच करें।

सबसे पहले, आपको यह जानना होगा कि वॉल्यूम समूह का नाम इसमें डैश हो सकता है। यदि ऐसा होता है, तो / dev / mapper / संदर्भ के किसी भी उपयोग की तुलना में दो डैश होने चाहिए। 16.04 में, इसे "-vg" नाम के साथ जोड़कर डिफॉल्ट करता है, इसलिए इसे मान लिया जाना चाहिए।

दूसरा, आपको पता होना चाहिए कि इसे गड़बड़ाने से आपका सिस्टम बेकार हो सकता है और परिणामस्वरूप बचाव डिस्क से बूट हो सकता है और डाउनटाइम के कारण सामान को ठीक कर सकता है। (उर्फ: उत्पादन में ऐसा न करें। )

वास्तविक नाम का उपयोग करने के लिए lvrename oldname newname

नाम बदलने के बाद आपको दोनों को संपादित करना होगा /etc/fstabऔर /boot/grub/grub.cfgअपने रूट के किसी भी संदर्भ के लिए नाम के उपयोग को अपडेट करना होगा और शायद आपके स्वैप स्थान भी।

इसके अतिरिक्त, आपको सभी kernels के लिए 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

यदि आपके पास इस स्क्रिप्ट का कोई सुधार है, तो कृपया साझा करें। मैं हमेशा सुधार करने और विभिन्न एज मामलों के लिए खाता ढूंढ रहा हूं।


यदि आप sed -iएक इनपुट फ़ाइल के बिना चलाते हैं , तो यह त्रुटि करता है sed: no input files-iझंडा हटाओ ।
वेजेंड्रिया

आह ठीक है। यह समझ आता है। आश्चर्य है कि अगर मेरे सेड का संस्करण अलग ढंग से संभाला। इसके अलावा, ऐसा लगता है जैसे @Diego Souza ने पूरी तरह से दूसरी टिप्पणी में इसे बिना किसी सेड के खींच लिया।
झिलमिलाहट

2
मेरा मानना ​​है कि आपका मतलब vgrenameतब था lvrename, और चूंकि /boot/grub/grub.cfgप्रविष्टियों में से उत्पन्न होता है /etc/grub.d, आपको update-grubइसे सीधे संपादित करने के बजाय नाम बदलने के बाद चलाने की आवश्यकता होगी ।
एरिक स्ट्रीपर

नहीं, मेरा मतलब वॉल्यूम ग्रुप है। इसके अलावा, शायद आपके डिस्ट्रो ग्रब कॉन्फ़िगरेशन में खदान से अलग है।
झिलमिलाहट

3
ऐसा लगता है कि update-grubरिबूट से पहले ठीक से नहीं चल सकता है - यह /usr/sbin/grub-probe: error: failed to get canonical path of '/dev/mapper/ubuntu--vg-root'मेरे लिए एक त्रुटि के साथ विफल रहता है। ऐसे सिस्टम के लिए जहां /boot/grub/grub.cfgस्वतः उत्पन्न होता है, शायद सबसे सुरक्षित विकल्प मैन्युअल रूप से अपडेट करना है, जैसे कि इस स्क्रिप्ट में, फिर रिबूट, फिर चलाएं update-grub, फिर से रिबूट करें।
माइकल फर्थ

1

फ़ाइल /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

इसने मुझे ubuntu 18.04.1 LTS पर पकड़ लिया - क्या इसका नाम और बूट विफल रहा। मैंने यह भी कहा कि शटडाउन रुक गया क्योंकि स्वैप (पुराने वीजी नाम का उल्लेख करते हुए) ऑमाउंट विफल हो गया।

मैंने वीजी को फिर से नाम दिया कि यह इनट्राम्राम्स प्रॉम्प्ट में lvm का उपयोग कर रहा था। ऊपर दिए गए निर्देशों के अनुसार अभी तक फिर से "ठीक से" नहीं किया गया।


0

नाम बदलने के बाद, आपको दोनों को संपादित करना होगा /etc/fstabऔर /boot/grub/grub.cfgअपने रूट के किसी भी संदर्भ के लिए नाम के उपयोग को अपडेट करना होगा और शायद आपके स्वैप स्थान भी। /etc/initramfs-tools/conf.d/resumeजरूरत है, भी।

तो, इस कोड को जोड़ें:

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

मुझे उबंटू पर ऐसा करने की आवश्यकता नहीं थी। 'update-initramfs -c -k सब' पर्याप्त था। क्या डिस्ट्रो इस्तेमाल कर रहे हैं जिसने इस जरूरत को दिखाया? क्या इसमें अपडेट-इनट्राम्राम्स टूल नहीं है? मैं स्क्रिप्ट को चलाने के तुरंत बाद एक रिबूट करता हूं जिसमें यह शामिल है ताकि मेरे विभिन्न परिणामों में एक कारक भी हो सके।
झिलमिलाहट

0

यहां एक संशोधित संस्करण है, वीजी के स्ट्रिंग प्रतिस्थापन पर फिक्स करें और अपडेट की गई फ़ाइलों को भी प्रिंट करें।

#!/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

मैंने होस्टनाम बदलने के लिए स्क्रिप्ट पर थोड़ा संशोधन किया।

#!/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

बूट मेनू को उबंटू 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.