Voglio rinominare il gruppo di volumi su cui è attivo il mio volume di root. Come posso fare questo?
Voglio rinominare il gruppo di volumi su cui è attivo il mio volume di root. Come posso fare questo?
Risposte:
NOTA: la distro potrebbe scoraggiare la modifica di /boot/grub/grub.cfg. In tal caso, questo script potrebbe essere una cattiva idea. In alternativa, potresti essere in grado di eseguire grub-mkconfig per risolvere il problema. Non ho ancora testato su queste distro, quindi controlla la tua situazione.
Innanzitutto, è necessario sapere che il nome del gruppo di volumi potrebbe contenere un trattino. In tal caso, qualsiasi uso del riferimento / dev / mapper / dovrà avere due trattini. In 16.04, per impostazione predefinita viene aggiunto "-vg" al nome, quindi dovrebbe essere assunto.
In secondo luogo, dovresti sapere che rovinare tutto ciò può rendere il tuo sistema non avviabile e comportare l'avvio da un disco di ripristino e la correzione di cose che causano tempi di inattività. (aka: non farlo in produzione. )
Per fare l'attuale ridenominazione usare lvrename oldname newname
.
Dopo aver rinominato è necessario modificare entrambi /etc/fstab
e /boot/grub/grub.cfg
per aggiornare l'uso del nome per qualsiasi riferimento alla propria radice e probabilmente anche alle posizioni di scambio.
Inoltre, è necessario eseguire questo comando per aggiornare initramfs per tutti i kernel.
update-initramfs -c -k all
Uso il seguente script per gestire questo quando si distribuisce un nuovo modello. Ancora una volta, non farlo in produzione a meno che non si abbia un'alta tolleranza per i tempi di fermo.
#!/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
Se hai qualche miglioramento di questo script, ti preghiamo di condividere. Sono sempre alla ricerca di modi per migliorare e tenere conto di vari casi limite.
sed -i
senza un file di input, si verificano errori sed: no input files
. Rimuovi la -i
bandiera.
vgrename
piuttosto allora lvrename
, e poiché /boot/grub/grub.cfg
è generato dalle voci in /etc/grub.d
, dovrai eseguire update-grub
dopo la ridenominazione anziché modificarlo direttamente.
update-grub
non possa funzionare correttamente prima del riavvio - fallisce con un errore di /usr/sbin/grub-probe: error: failed to get canonical path of '/dev/mapper/ubuntu--vg-root'
per me. Per i sistemi in cui /boot/grub/grub.cfg
viene generato automaticamente, forse l'opzione più sicura è l'aggiornamento manuale, come in questo script, quindi riavviare, quindi eseguire update-grub
, quindi riavviare nuovamente.
Il file /boot/grub/grub.cfg
non deve essere modificato manualmente.
Di seguito è riportata l'intestazione del file:
"
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
"
Questo mi ha sorpreso su Ubuntu 18.04.1 LTS - ha fatto il vgrename e l'avvio fallito. Ho anche notato che l'arresto si è arrestato perché lo scambio (riferendosi al vecchio nome vg) umount non è riuscito.
Ho rinominato il vg in quello che stava usando lvm al prompt di initramfs. Non ho ancora rifatto il vgrename ancora "correttamente" secondo le istruzioni sopra.
Dopo aver rinominato è necessario modificare entrambi /etc/fstab
e /boot/grub/grub.cfg
per aggiornare l'uso del nome per qualsiasi riferimento alla propria radice e probabilmente anche alle posizioni di scambio. /etc/initramfs-tools/conf.d/resume
è necessario anche.
Quindi, aggiungi questo codice:
sed -i "s/${vg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume
Ecco una versione rivista, correzione sulla sostituzione di stringhe di vg e stampa anche i file aggiornati.
#!/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
Quando si utilizza questo script, la macchina potrebbe non arrestarsi correttamente nel tentativo di "arrestare" i mapping. A seconda della configurazione, ciò può anche sembrare che la macchina sia in uno stato di avvio mentre in realtà non è nemmeno prima lo spegnimento.
È utile rimuovere "splash silenzioso" da GRUB_CMDLINE_LINUX_DEFAULT mentre vedi i messaggi.
Ho fatto una piccola modifica sullo script per cambiare anche il nome host.
#!/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
Il menu di avvio doveva anche essere modificato su Ubuntu 18 (e probabilmente altri). Quindi - semplificato per cambiare solo un nome vg e preservare l'uso di un trattino nel nome:
#!/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