Wie benennen Sie die Datenträgergruppe, die den Stammdatenträger enthält, in LVM um?


20

Ich möchte die Volume-Gruppe umbenennen, auf der sich mein Root-Volume befindet. Wie kann ich das machen?


Nur neugierig: Warum sollte ich das tun wollen?
guntbert

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


0

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.


0

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

0

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.