Mi caso de uso es que tengo una plantilla VMWare que instalé con el nombre de host "plantilla". Una vez que implemente esa plantilla, prefiero que el vgname no sea "template-vg" para todas esas máquinas. Siguiendo con la idea general de que el vgname está relacionado con el nombre de host, tengo mi script de configuración para la plantilla cambiar el nombre de vg con el nombre de host. También me permite asegurar fácilmente que estoy trabajando en el vg correcto y no en la sesión ssh incorrecta de alguna manera.
flickerfly
Respuestas:
25
NOTA: Su distribución puede desalentar la edición /boot/grub/grub.cfg. Si ese es el caso, este script puede ser una mala idea. Alternativamente, es posible que pueda ejecutar grub-mkconfig para solucionarlo. No he probado en esas distribuciones, así que verifica tu situación.
Primero, debe saber que el nombre del grupo de volúmenes puede tener un guión. Si lo hace, cualquier uso de / dev / mapper / reference deberá tener dos guiones. En 16.04, el valor predeterminado es tener un "-vg" agregado al nombre, por lo que esto debe suponerse.
En segundo lugar, debe saber que estropear esto puede hacer que su sistema no se pueda iniciar y provocar que tenga que arrancar desde un disco de rescate y arreglar cosas que causen tiempo de inactividad. (también conocido como: No hagas esto en producción ) .
Para hacer el cambio de nombre real use lvrename oldname newname.
Después de cambiar el nombre, debe editar ambos /etc/fstaby /boot/grub/grub.cfgactualizar el uso del nombre para cualquier referencia a su raíz y probablemente también a sus ubicaciones de intercambio.
Además, debe ejecutar este comando para actualizar initramfs para todos los núcleos.
update-initramfs -c -k all
Utilizo el siguiente script para manejar esto al implementar una nueva plantilla. Nuevamente, no haga esto en producción a menos que tenga una alta tolerancia al tiempo de inactividad.
#!/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
Si tiene alguna mejora de este script, por favor comparta. Siempre estoy buscando formas de mejorar y dar cuenta de varios casos extremos.
Si ejecuta sed -isin un archivo de entrada, se produce un error sed: no input files. Quitar la -ibandera.
wjandrea
Ah bien. Eso tiene sentido. Me pregunto si mi versión de sed manejó eso de manera diferente. Además, parece que @Diego Souza lo logró sin sed completamente en otro comentario.
flickerfly
2
Creo que te referías a vgrenameeso lvrename, y dado que /boot/grub/grub.cfgse genera a partir de las entradas /etc/grub.d, deberás ejecutarlo update-grubdespués de cambiarle el nombre en lugar de editarlo directamente.
Eric Streeper
No, me refería al grupo de volumen. Además, quizás su distribución difiera de la mía en la configuración de grub.
flickerfly
3
Parece que update-grubno puede ejecutarse correctamente antes del reinicio, falla con un error de /usr/sbin/grub-probe: error: failed to get canonical path of '/dev/mapper/ubuntu--vg-root'para mí. Para los sistemas donde /boot/grub/grub.cfgse genera automáticamente, quizás la opción más segura es actualizar manualmente, como en este script, luego reiniciar, luego ejecutar update-gruby luego reiniciar nuevamente.
Michael Firth
1
El archivo /boot/grub/grub.cfgno debe editarse manualmente.
Hay un encabezado de archivo a continuación:
"
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
"
Sí, mi respuesta se está volviendo un poco vieja y mi caso de uso para esto ya no está en juego. Te animo a que contribuyas con todo lo que aprendas para actualizarlo. ¿En qué distribución y versión estás viendo esto?
flickerfly
1
Esto me sorprendió en ubuntu 18.04.1 LTS: ¿fallaron el vgrename y el arranque? También noté que el apagado se detuvo porque el intercambio (haciendo referencia al antiguo nombre vg) umount falló.
Cambié el nombre del vg a lo que estaba usando lvm en el indicador initramfs. No he vuelto a hacer el vgrename todavía "correctamente" según las instrucciones anteriores.
Después de cambiar el nombre, debe editar ambos /etc/fstaby /boot/grub/grub.cfgactualizar el uso del nombre para cualquier referencia a su raíz y probablemente también a sus ubicaciones de intercambio. /etc/initramfs-tools/conf.d/resumees necesario también
Entonces, agregue este código:
sed -i "s/${vg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume
No tuve que hacer esto en Ubuntu. 'update-initramfs -c -k all' fue suficiente. ¿Qué distribución estás usando que mostró esta necesidad? ¿No tiene la herramienta update-initramfs? Reinicio inmediatamente después de ejecutar el script que incluye esto, por lo que también puede ser un factor en mis diferentes resultados.
flickerfly
0
Aquí hay una versión revisada, corrige el reemplazo de cadenas de vg y también imprime archivos actualizados.
#!/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
Al usar este script, la máquina puede no apagarse correctamente ya que intenta "detener" las asignaciones. Dependiendo de su configuración, esto puede parecer incluso que la máquina está en un estado de arranque, mientras que en realidad ni siquiera se apaga primero.
Es útil eliminar "splash silencioso" de GRUB_CMDLINE_LINUX_DEFAULT cuando vea los mensajes.
Hice una pequeña modificación en el script para cambiar también el nombre de 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
El menú de arranque también necesitaba edición en Ubuntu 18 (y probablemente en otros). Entonces, simplificado para cambiar solo un nombre vg y preservar el uso de un guión en el nombre:
#!/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
Respuestas:
NOTA: Su distribución puede desalentar la edición /boot/grub/grub.cfg. Si ese es el caso, este script puede ser una mala idea. Alternativamente, es posible que pueda ejecutar grub-mkconfig para solucionarlo. No he probado en esas distribuciones, así que verifica tu situación.
Primero, debe saber que el nombre del grupo de volúmenes puede tener un guión. Si lo hace, cualquier uso de / dev / mapper / reference deberá tener dos guiones. En 16.04, el valor predeterminado es tener un "-vg" agregado al nombre, por lo que esto debe suponerse.
En segundo lugar, debe saber que estropear esto puede hacer que su sistema no se pueda iniciar y provocar que tenga que arrancar desde un disco de rescate y arreglar cosas que causen tiempo de inactividad. (también conocido como: No hagas esto en producción ) .
Para hacer el cambio de nombre real use
lvrename oldname newname
.Después de cambiar el nombre, debe editar ambos
/etc/fstab
y/boot/grub/grub.cfg
actualizar el uso del nombre para cualquier referencia a su raíz y probablemente también a sus ubicaciones de intercambio.Además, debe ejecutar este comando para actualizar initramfs para todos los núcleos.
Utilizo el siguiente script para manejar esto al implementar una nueva plantilla. Nuevamente, no haga esto en producción a menos que tenga una alta tolerancia al tiempo de inactividad.
Si tiene alguna mejora de este script, por favor comparta. Siempre estoy buscando formas de mejorar y dar cuenta de varios casos extremos.
fuente
sed -i
sin un archivo de entrada, se produce un errorsed: no input files
. Quitar la-i
bandera.vgrename
esolvrename
, y dado que/boot/grub/grub.cfg
se genera a partir de las entradas/etc/grub.d
, deberás ejecutarloupdate-grub
después de cambiarle el nombre en lugar de editarlo directamente.update-grub
no puede ejecutarse correctamente antes del reinicio, falla con un error de/usr/sbin/grub-probe: error: failed to get canonical path of '/dev/mapper/ubuntu--vg-root'
para mí. Para los sistemas donde/boot/grub/grub.cfg
se genera automáticamente, quizás la opción más segura es actualizar manualmente, como en este script, luego reiniciar, luego ejecutarupdate-grub
y luego reiniciar nuevamente.El archivo
/boot/grub/grub.cfg
no debe editarse manualmente.Hay un encabezado de archivo a continuación:
fuente
Esto me sorprendió en ubuntu 18.04.1 LTS: ¿fallaron el vgrename y el arranque? También noté que el apagado se detuvo porque el intercambio (haciendo referencia al antiguo nombre vg) umount falló.
Cambié el nombre del vg a lo que estaba usando lvm en el indicador initramfs. No he vuelto a hacer el vgrename todavía "correctamente" según las instrucciones anteriores.
fuente
Después de cambiar el nombre, debe editar ambos
/etc/fstab
y/boot/grub/grub.cfg
actualizar el uso del nombre para cualquier referencia a su raíz y probablemente también a sus ubicaciones de intercambio./etc/initramfs-tools/conf.d/resume
es necesario tambiénEntonces, agregue este código:
fuente
Aquí hay una versión revisada, corrige el reemplazo de cadenas de vg y también imprime archivos actualizados.
Al usar este script, la máquina puede no apagarse correctamente ya que intenta "detener" las asignaciones. Dependiendo de su configuración, esto puede parecer incluso que la máquina está en un estado de arranque, mientras que en realidad ni siquiera se apaga primero.
Es útil eliminar "splash silencioso" de GRUB_CMDLINE_LINUX_DEFAULT cuando vea los mensajes.
fuente
Hice una pequeña modificación en el script para cambiar también el nombre de host.
fuente
El menú de arranque también necesitaba edición en Ubuntu 18 (y probablemente en otros). Entonces, simplificado para cambiar solo un nombre vg y preservar el uso de un guión en el nombre:
fuente