Mein Anwendungsfall ist, dass ich eine VMWare-Vorlage habe, die ich mit dem Hostnamen "template" installiert habe. Sobald ich diese Vorlage bereitgestellt habe, wäre es mir lieber, wenn der vg-Name nicht für alle diese Computer "template-vg" wäre. Bei der allgemeinen Vorstellung, dass der vgname mit dem Hostnamen zusammenhängt, habe ich mein Setup-Skript für die Vorlage, um die vg mit dem Hostnamen umzubenennen. Außerdem kann ich auf einfache Weise sicherstellen, dass ich an der richtigen vg arbeite und nicht irgendwie in der falschen ssh-Sitzung.
Flickerfly
Antworten:
25
HINWEIS: Ihre Distribution kann die Bearbeitung von /boot/grub/grub.cfg verhindern. In diesem Fall ist dieses Skript möglicherweise eine schlechte Idee. Alternativ können Sie möglicherweise auch grub-mkconfig ausführen, um das zu beheben. Ich habe diese Distributionen nicht getestet, also überprüfe deine Situation.
Zunächst müssen Sie wissen, dass der Name der Datenträgergruppe möglicherweise einen Bindestrich enthält. Wenn dies der Fall ist, muss jede Verwendung von / dev / mapper / reference zwei Bindestriche enthalten. In 16.04 wird standardmäßig ein "-vg" an den Namen angehängt, daher sollte dies angenommen werden.
Zweitens sollten Sie wissen, dass ein Durcheinander dieses Problems dazu führen kann, dass Ihr System nicht mehr gestartet werden kann und dass Sie von einer Rettungsdiskette booten und Probleme beheben müssen, die Ausfallzeiten verursachen. (aka: Mach das nicht in der Produktion. )
Verwenden Sie, um die eigentliche Umbenennung durchzuführen lvrename oldname newname.
Nach dem Umbenennen müssen Sie beide bearbeiten /etc/fstabund /boot/grub/grub.cfgdie Verwendung des Namens für alle Verweise auf Ihr Stammverzeichnis und möglicherweise auch Ihre Auslagerungsorte aktualisieren.
Darüber hinaus müssen Sie diesen Befehl ausführen, um die initramfs für alle Kernel zu aktualisieren.
update-initramfs -c -k all
Ich verwende das folgende Skript, um dies beim Bereitstellen einer neuen Vorlage zu handhaben. Wiederum sollten Sie dies nicht in der Produktion tun, es sei denn, Sie haben eine hohe Toleranz für Ausfallzeiten.
#!/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
Wenn Sie Verbesserungen an diesem Skript haben, teilen Sie diese bitte mit. Ich bin immer auf der Suche nach Möglichkeiten zur Verbesserung und Berücksichtigung verschiedener Randfälle.
Wenn Sie sed -iohne Eingabedatei ausführen, tritt ein Fehler auf sed: no input files. Entfernen Sie die -iFlagge.
wjandrea
Ah, okay. Das macht Sinn. Ich frage mich, ob meine Version von sed das anders gehandhabt hat. Sieht auch so aus, als hätte @Diego Souza es geschafft, ohne sich in einem anderen Kommentar völlig zu beruhigen.
Flickerfly
2
Ich glaube, Sie meinten es vgrenameeher so lvrenameund da /boot/grub/grub.cfges aus Einträgen in generiert /etc/grub.dwird, müssen Sie es update-grubnach dem Umbenennen ausführen, anstatt es direkt zu bearbeiten.
Eric Streeper
Nein, ich meinte Volumengruppe. Vielleicht unterscheidet sich auch Ihre Distribution von meiner in der Grub-Konfiguration.
Flickerfly
3
Es scheint, dass update-grubvor dem Neustart nicht richtig ausgeführt werden kann - es schlägt fehl mit einem Fehler von /usr/sbin/grub-probe: error: failed to get canonical path of '/dev/mapper/ubuntu--vg-root'für mich. Auf Systemen, auf denen /boot/grub/grub.cfgautomatisch generiert wird, ist es möglicherweise die sicherste Option, die Aktualisierung manuell durchzuführen, wie in diesem Skript beschrieben, und anschließend neu zu starten update-grub, dann auszuführen und erneut zu starten .
Michael Firth
1
Die Datei /boot/grub/grub.cfgsollte nicht manuell bearbeitet werden.
Es gibt Dateikopfzeile unten:
"
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
"
Ja, meine Antwort wird ein bisschen alt und mein Anwendungsfall dafür ist nicht mehr aktuell. Ich möchte Sie ermutigen, alles beizutragen, was Sie lernen, um es auf den neuesten Stand zu bringen. Auf welcher Distribution und Version sehen Sie das?
Flickerfly
1
Dies hat mich auf Ubuntu 18.04.1 LTS erwischt - der vgrename und der Boot sind fehlgeschlagen. Ich bemerkte auch, dass das Herunterfahren ins Stocken geriet, weil der Swap (der auf den alten vg-Namen verweist) umount fehlgeschlagen ist.
Ich benannte das vg zurück in das, was es mit lvm an der initramfs-Eingabeaufforderung benutzte. Der vname wurde noch nicht "richtig" gemäß den obigen Anweisungen geändert.
Nach dem Umbenennen müssen Sie beide bearbeiten /etc/fstabund /boot/grub/grub.cfgdie Verwendung des Namens für alle Verweise auf Ihr Stammverzeichnis und möglicherweise auch Ihre Auslagerungsorte aktualisieren. /etc/initramfs-tools/conf.d/resumewird auch gebraucht.
Also, füge diesen Code hinzu:
sed -i "s/${vg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume
Ich musste das auf Ubuntu nicht machen. 'update-initramfs -c -k all' war ausreichend. Welche Distribution benutzt du, die dieses Bedürfnis gezeigt hat? Hat es nicht das Tool update-initramfs? Ich führe unmittelbar nach dem Ausführen des Skripts, das dies enthält, einen Neustart durch, damit dies auch für meine unterschiedlichen Ergebnisse von Bedeutung sein kann.
Flickerfly
0
Hier ist eine überarbeitete Version, die das Ersetzen von Zeichenketten von vg behebt und auch aktualisierte Dateien druckt.
#!/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
Bei Verwendung dieses Skripts wird der Computer möglicherweise nicht ordnungsgemäß heruntergefahren, da er versucht, die Zuordnungen zu stoppen. Abhängig von Ihrer Konfiguration kann dies sogar so aussehen, als ob sich die Maschine in einem Boot-Zustand befindet, während sie in Wirklichkeit nicht einmal zuerst heruntergefahren wird.
Es ist hilfreich, "quiet splash" aus GRUB_CMDLINE_LINUX_DEFAULT zu entfernen, wenn Sie dann die Nachrichten sehen.
Ich habe das Skript ein wenig modifiziert, um auch den Hostnamen zu ändern.
#!/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
Das Boot-Menü musste auch auf Ubuntu 18 (und wahrscheinlich anderen) bearbeitet werden. So - vereinfacht, um nur einen vg-Namen zu ändern und die Verwendung eines Bindestrichs im Namen beizubehalten:
#!/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
Antworten:
HINWEIS: Ihre Distribution kann die Bearbeitung von /boot/grub/grub.cfg verhindern. In diesem Fall ist dieses Skript möglicherweise eine schlechte Idee. Alternativ können Sie möglicherweise auch grub-mkconfig ausführen, um das zu beheben. Ich habe diese Distributionen nicht getestet, also überprüfe deine Situation.
Zunächst müssen Sie wissen, dass der Name der Datenträgergruppe möglicherweise einen Bindestrich enthält. Wenn dies der Fall ist, muss jede Verwendung von / dev / mapper / reference zwei Bindestriche enthalten. In 16.04 wird standardmäßig ein "-vg" an den Namen angehängt, daher sollte dies angenommen werden.
Zweitens sollten Sie wissen, dass ein Durcheinander dieses Problems dazu führen kann, dass Ihr System nicht mehr gestartet werden kann und dass Sie von einer Rettungsdiskette booten und Probleme beheben müssen, die Ausfallzeiten verursachen. (aka: Mach das nicht in der Produktion. )
Verwenden Sie, um die eigentliche Umbenennung durchzuführen
lvrename oldname newname
.Nach dem Umbenennen müssen Sie beide bearbeiten
/etc/fstab
und/boot/grub/grub.cfg
die Verwendung des Namens für alle Verweise auf Ihr Stammverzeichnis und möglicherweise auch Ihre Auslagerungsorte aktualisieren.Darüber hinaus müssen Sie diesen Befehl ausführen, um die initramfs für alle Kernel zu aktualisieren.
Ich verwende das folgende Skript, um dies beim Bereitstellen einer neuen Vorlage zu handhaben. Wiederum sollten Sie dies nicht in der Produktion tun, es sei denn, Sie haben eine hohe Toleranz für Ausfallzeiten.
Wenn Sie Verbesserungen an diesem Skript haben, teilen Sie diese bitte mit. Ich bin immer auf der Suche nach Möglichkeiten zur Verbesserung und Berücksichtigung verschiedener Randfälle.
quelle
sed -i
ohne Eingabedatei ausführen, tritt ein Fehler aufsed: no input files
. Entfernen Sie die-i
Flagge.vgrename
eher solvrename
und da/boot/grub/grub.cfg
es aus Einträgen in generiert/etc/grub.d
wird, müssen Sie esupdate-grub
nach dem Umbenennen ausführen, anstatt es direkt zu bearbeiten.update-grub
vor dem Neustart nicht richtig ausgeführt werden kann - es schlägt fehl mit einem Fehler von/usr/sbin/grub-probe: error: failed to get canonical path of '/dev/mapper/ubuntu--vg-root'
für mich. Auf Systemen, auf denen/boot/grub/grub.cfg
automatisch generiert wird, ist es möglicherweise die sicherste Option, die Aktualisierung manuell durchzuführen, wie in diesem Skript beschrieben, und anschließend neu zu startenupdate-grub
, dann auszuführen und erneut zu starten .Die Datei
/boot/grub/grub.cfg
sollte nicht manuell bearbeitet werden.Es gibt Dateikopfzeile unten:
quelle
Dies hat mich auf Ubuntu 18.04.1 LTS erwischt - der vgrename und der Boot sind fehlgeschlagen. Ich bemerkte auch, dass das Herunterfahren ins Stocken geriet, weil der Swap (der auf den alten vg-Namen verweist) umount fehlgeschlagen ist.
Ich benannte das vg zurück in das, was es mit lvm an der initramfs-Eingabeaufforderung benutzte. Der vname wurde noch nicht "richtig" gemäß den obigen Anweisungen geändert.
quelle
Nach dem Umbenennen müssen Sie beide bearbeiten
/etc/fstab
und/boot/grub/grub.cfg
die Verwendung des Namens für alle Verweise auf Ihr Stammverzeichnis und möglicherweise auch Ihre Auslagerungsorte aktualisieren./etc/initramfs-tools/conf.d/resume
wird auch gebraucht.Also, füge diesen Code hinzu:
quelle
Hier ist eine überarbeitete Version, die das Ersetzen von Zeichenketten von vg behebt und auch aktualisierte Dateien druckt.
Bei Verwendung dieses Skripts wird der Computer möglicherweise nicht ordnungsgemäß heruntergefahren, da er versucht, die Zuordnungen zu stoppen. Abhängig von Ihrer Konfiguration kann dies sogar so aussehen, als ob sich die Maschine in einem Boot-Zustand befindet, während sie in Wirklichkeit nicht einmal zuerst heruntergefahren wird.
Es ist hilfreich, "quiet splash" aus GRUB_CMDLINE_LINUX_DEFAULT zu entfernen, wenn Sie dann die Nachrichten sehen.
quelle
Ich habe das Skript ein wenig modifiziert, um auch den Hostnamen zu ändern.
quelle
Das Boot-Menü musste auch auf Ubuntu 18 (und wahrscheinlich anderen) bearbeitet werden. So - vereinfacht, um nur einen vg-Namen zu ändern und die Verwendung eines Bindestrichs im Namen beizubehalten:
quelle