Como você renomeia o grupo de volumes que contém o volume raiz no LVM?

14

Eu quero renomear o grupo de volume no qual o volume da minha raiz está. Como posso fazer isso?

    
por flickerfly 29.04.2016 / 19:15

3 respostas

18

Primeiro, você precisa saber que o nome do grupo de volumes pode ter um traço. Em caso afirmativo, qualquer uso de / dev / mapper / reference precisará ter dois traços. Em 16.04, o padrão é ter um "-vg" anexado ao nome, portanto, isso deve ser assumido.

Em segundo lugar, você deve saber que bagunçar isso pode fazer com que seu sistema não seja inicializado e resultar em ter que inicializar a partir de um disco de recuperação e consertar o que causa o tempo de inatividade. (também conhecido por: Não faça isso em produção. )

Para fazer o uso real da renomeação lvrename oldname newname .

Após renomear, você deve editar /etc/fstab e /boot/grub/grub.cfg para atualizar o uso do nome para qualquer referência a sua raiz e provavelmente também a seus locais de troca.

Além disso, você precisa executar este comando para atualizar o initramfs para todos os kernels.

update-initramfs -c -k all

Eu uso o seguinte script para lidar com isso ao implantar um novo modelo. Novamente, não faça isso em produção , a menos que você tenha uma alta tolerância a tempo de inatividade.

#!/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 '=="root" {print }''
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 você tiver alguma melhoria deste script, compartilhe. Estou sempre procurando maneiras de melhorar e dar conta de vários casos extremos.

    
por flickerfly 29.04.2016 / 19:15
0

Após renomear, você deve editar /etc/fstab e /boot/grub/grub.cfg para atualizar o uso do nome para qualquer referência a sua raiz e provavelmente também a seus locais de troca. /etc/initramfs-tools/conf.d/resume é necessário também.

Então, adicione este código:

sed -i "s/${vg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume
    
por MiX YuG 03.08.2016 / 08:33
0

Aqui está uma versão revisada, corrija a substituição de strings do vg e também imprima arquivos atualizados.

#!/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 '=="root" {print }')
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
    
por Diego Souza 05.04.2017 / 19:35

Tags