Pertanyaan Bagaimana Anda mengubah nama grup volume yang berisi volume root di LVM?


Saya ingin mengganti nama grup volume yang volume root saya aktif. Bagaimana saya bisa melakukan ini?


14
2018-04-29 17:15


asal


Hanya penasaran: Mengapa apakah saya ingin melakukan ini? - guntbert
Kasus penggunaan saya adalah bahwa saya memiliki template VMWare yang saya instal dengan "template" nama host. Setelah saya menyebarkan template itu, saya lebih suka vgname tidak menjadi "template-vg" untuk semua mesin itu. Berpegang pada gagasan umum bahwa vgname terkait dengan nama host, saya memiliki skrip pengaturan saya untuk template yang mengganti nama vg dengan nama host. Ini juga memungkinkan saya untuk dengan mudah memastikan saya bekerja pada vg yang benar dan tidak dalam sesi ssh yang salah entah bagaimana. - flickerfly


Jawaban:


Pertama, Anda perlu tahu nama grup volume mungkin memiliki sedikit tanda di dalamnya. Jika ya, daripada penggunaan / dev / mapper / referensi harus memiliki dua garis. Pada 16.04, default untuk memiliki "-vg" ditambahkan ke nama jadi ini harus diasumsikan.

Kedua, Anda harus tahu bahwa mengacaukan ini dapat menyebabkan sistem Anda menjadi tidak dapat boot dan mengakibatkan harus boot dari disk penyelamat dan memperbaiki barang-barang yang menyebabkan downtime. (alias: Jangan lakukan ini dalam produksi.)

Untuk melakukan penggunaan rename yang sebenarnya lvrename oldname newname.

Setelah mengganti nama Anda harus mengedit keduanya /etc/fstab dan /boot/grub/grub.cfg untuk memperbarui penggunaan nama untuk referensi apa pun ke root Anda dan mungkin juga lokasi swap Anda.

Selain itu, Anda perlu menjalankan perintah ini untuk memperbarui initramfs untuk semua kernel.

update-initramfs -c -k all

Saya menggunakan skrip berikut untuk menangani ini ketika menerapkan templat baru. Lagi, jangan lakukan ini dalam produksi kecuali Anda memiliki toleransi yang tinggi untuk downtime.

#!/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

Jika Anda memiliki perbaikan dari skrip ini, silakan bagikan. Saya selalu mencari cara untuk meningkatkan dan memperhitungkan berbagai kasus tepi.


21
2018-04-29 17:15



Jika Anda lari sed -i tanpa file input, itu kesalahan sed: no input files. Hapus -i bendera. - wjandrea
Ah, baiklah. Itu masuk akal. Bertanya-tanya apakah versi saya dari sed yang ditangani itu berbeda. Juga, terlihat seperti @Diego Souza melakukannya tanpa ada komentar sama sekali. - flickerfly
Saya percaya maksud Anda vgrename sebaliknya lvrename, dan sejak itu /boot/grub/grub.cfg dihasilkan dari entri di /etc/grub.d, Anda harus berlari update-grub setelah mengganti nama daripada mengeditnya secara langsung. - Eric Streeper
Tidak, maksud saya kelompok volume. Juga, mungkin distro Anda berbeda dari saya di konfigurasi grub. - flickerfly
Tampaknya update-grubtidak dapat berjalan dengan baik sebelum reboot - gagal dengan kesalahan /usr/sbin/grub-probe: error: failed to get canonical path of '/dev/mapper/ubuntu--vg-root' untuk saya. Untuk sistem di mana /boot/grub/grub.cfg dihasilkan secara otomatis, mungkin opsi yang paling aman adalah memperbarui secara manual, seperti pada skrip ini, lalu reboot, lalu jalankan update-grub, lalu reboot lagi. - Michael Firth


Setelah mengganti nama Anda harus mengedit keduanya /etc/fstab dan /boot/grub/grub.cfg untuk memperbarui penggunaan nama untuk referensi apa pun ke root Anda dan mungkin juga lokasi swap Anda. /etc/initramfs-tools/conf.d/resume diperlukan juga.

Jadi, tambahkan kode ini:

sed -i "s/${vg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume

0
2017-08-03 06:33



Saya tidak perlu melakukan ini di Ubuntu. 'update-initramfs -c -k all' sudah cukup. Apa distro yang Anda gunakan yang menunjukkan kebutuhan ini? Apakah tidak memiliki alat pembaruan-initramfs? Saya melakukan reboot segera setelah menjalankan skrip yang menyertakan ini sehingga mungkin juga menjadi faktor dalam hasil yang berbeda. - flickerfly


Berikut ini adalah versi yang direvisi, perbaiki penggantian string vg dan juga cetak file yang diperbarui.

#!/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

Saat menggunakan skrip ini, mesin mungkin tidak mati dengan benar saat mencoba "menghentikan" pemetaan. Tergantung pada konfigurasi Anda, ini mungkin tampak seperti mesin berada dalam kondisi boot sementara pada kenyataannya bahkan tidak mematikan terlebih dahulu.

Akan sangat membantu untuk menghapus "quiet splash" dari GRUB_CMDLINE_LINUX_DEFAULT ketika Anda melihat pesan-pesannya.


0
2018-04-05 17:35