मैं वॉल्यूम समूह का नाम बदलना चाहता हूं जो मेरी रूट वॉल्यूम चालू है। मैं यह कैसे कर सकता हूँ?
मैं वॉल्यूम समूह का नाम बदलना चाहता हूं जो मेरी रूट वॉल्यूम चालू है। मैं यह कैसे कर सकता हूँ?
जवाबों:
नोट: आपका डिस्ट्रॉ संपादन /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
झंडा हटाओ ।
vgrename
तब था lvrename
, और चूंकि /boot/grub/grub.cfg
प्रविष्टियों में से उत्पन्न होता है /etc/grub.d
, आपको update-grub
इसे सीधे संपादित करने के बजाय नाम बदलने के बाद चलाने की आवश्यकता होगी ।
update-grub
रिबूट से पहले ठीक से नहीं चल सकता है - यह /usr/sbin/grub-probe: error: failed to get canonical path of '/dev/mapper/ubuntu--vg-root'
मेरे लिए एक त्रुटि के साथ विफल रहता है। ऐसे सिस्टम के लिए जहां /boot/grub/grub.cfg
स्वतः उत्पन्न होता है, शायद सबसे सुरक्षित विकल्प मैन्युअल रूप से अपडेट करना है, जैसे कि इस स्क्रिप्ट में, फिर रिबूट, फिर चलाएं update-grub
, फिर से रिबूट करें।
फ़ाइल /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
"
इसने मुझे ubuntu 18.04.1 LTS पर पकड़ लिया - क्या इसका नाम और बूट विफल रहा। मैंने यह भी कहा कि शटडाउन रुक गया क्योंकि स्वैप (पुराने वीजी नाम का उल्लेख करते हुए) ऑमाउंट विफल हो गया।
मैंने वीजी को फिर से नाम दिया कि यह इनट्राम्राम्स प्रॉम्प्ट में lvm का उपयोग कर रहा था। ऊपर दिए गए निर्देशों के अनुसार अभी तक फिर से "ठीक से" नहीं किया गया।
नाम बदलने के बाद, आपको दोनों को संपादित करना होगा /etc/fstab
और /boot/grub/grub.cfg
अपने रूट के किसी भी संदर्भ के लिए नाम के उपयोग को अपडेट करना होगा और शायद आपके स्वैप स्थान भी। /etc/initramfs-tools/conf.d/resume
जरूरत है, भी।
तो, इस कोड को जोड़ें:
sed -i "s/${vg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume
यहां एक संशोधित संस्करण है, वीजी के स्ट्रिंग प्रतिस्थापन पर फिक्स करें और अपडेट की गई फ़ाइलों को भी प्रिंट करें।
#!/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 से "शांत स्पलैश" को हटाना सहायक होता है।
मैंने होस्टनाम बदलने के लिए स्क्रिप्ट पर थोड़ा संशोधन किया।
#!/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
बूट मेनू को उबंटू 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