Tôi muốn đổi tên nhóm âm lượng mà âm lượng gốc của tôi được bật. Tôi có thể làm cái này như thế nào?
Tôi muốn đổi tên nhóm âm lượng mà âm lượng gốc của tôi được bật. Tôi có thể làm cái này như thế nào?
Câu trả lời:
LƯU Ý: Bản phân phối của bạn có thể không khuyến khích chỉnh sửa /boot/grub/grub.cfg. Nếu đó là trường hợp, kịch bản này có thể là một ý tưởng tồi. Thay phiên, bạn chỉ có thể chạy grub-mkconfig để khắc phục điều đó. Tôi chưa thử nghiệm trên các bản phát hành đó, vì vậy hãy kiểm tra tình hình của bạn.
Trước tiên, bạn cần biết tên nhóm âm lượng có thể có dấu gạch ngang trong đó. Nếu có, hơn bất kỳ việc sử dụng / dev / mapper / Reference sẽ cần phải có hai dấu gạch ngang. Trong 16.04, nó mặc định có một "-vg" được gắn vào tên để điều này được giả sử.
Thứ hai, bạn nên biết rằng việc làm rối điều này có thể khiến hệ thống của bạn không thể khởi động được và dẫn đến việc phải khởi động từ đĩa cứu hộ và sửa chữa các thứ gây ra thời gian chết. (aka: Đừng làm điều này trong sản xuất. )
Để làm được việc sử dụng đổi tên thực tế lvrename oldname newname
.
Sau khi đổi tên, bạn phải chỉnh sửa cả hai /etc/fstab
và /boot/grub/grub.cfg
để cập nhật việc sử dụng tên cho bất kỳ tham chiếu nào đến thư mục gốc của bạn và có thể cả vị trí trao đổi của bạn.
Ngoài ra, bạn cần chạy lệnh này để cập nhật initramfs cho tất cả các kernel.
update-initramfs -c -k all
Tôi sử dụng tập lệnh sau để xử lý việc này khi triển khai một mẫu mới. Một lần nữa, đừng làm điều này trong sản xuất trừ khi bạn có khả năng chịu đựng cao đối với thời gian chết.
#!/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
Nếu bạn có bất kỳ cải tiến của kịch bản này, xin vui lòng chia sẻ. Tôi luôn tìm cách cải thiện và tính đến các trường hợp khác nhau.
sed -i
mà không có tệp đầu vào, nó sẽ bị lỗi sed: no input files
. Bỏ -i
cờ.
vgrename
là sau đó lvrename
, và vì /boot/grub/grub.cfg
được tạo ra từ các mục trong /etc/grub.d
, bạn sẽ cần phải chạy update-grub
sau khi đổi tên thay vì chỉnh sửa trực tiếp.
update-grub
không thể chạy đúng trước khi khởi động lại - nó không thành công với lỗi của /usr/sbin/grub-probe: error: failed to get canonical path of '/dev/mapper/ubuntu--vg-root'
tôi. Đối với các hệ thống /boot/grub/grub.cfg
được tạo tự động, có lẽ tùy chọn an toàn nhất là cập nhật thủ công, như trong tập lệnh này, sau đó khởi động lại, sau đó chạy update-grub
, sau đó khởi động lại.
Tập tin /boot/grub/grub.cfg
không nên được chỉnh sửa bằng tay.
Có tiêu đề tập tin dưới đây:
"
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
"
Điều này đã thu hút tôi trên Ubuntu 18.04.1 LTS - đã làm vgrename và khởi động thất bại. Tôi cũng lưu ý rằng việc tắt máy bị đình trệ vì hoán đổi (tham chiếu tên vg cũ) không thành công.
Tôi đã đổi tên vg trở lại cái mà nó đang sử dụng lvm thành dấu nhắc initramfs. Chưa thực hiện lại vgrename "đúng cách" theo hướng dẫn ở trên.
Sau khi đổi tên, bạn phải chỉnh sửa cả hai /etc/fstab
và /boot/grub/grub.cfg
để cập nhật việc sử dụng tên cho bất kỳ tham chiếu nào đến thư mục gốc của bạn và có thể cả vị trí trao đổi của bạn. /etc/initramfs-tools/conf.d/resume
là cần thiết, quá.
Vì vậy, thêm mã này:
sed -i "s/${vg}/${newvg}/g" /etc/initramfs-tools/conf.d/resume
Đây là phiên bản sửa đổi, sửa lỗi thay thế chuỗi của vg và in các tệp đã cập nhật.
#!/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
Khi sử dụng tập lệnh này, máy có thể không tắt chính xác vì nó cố gắng "dừng" ánh xạ. Tùy thuộc vào cấu hình của bạn, điều này thậm chí có vẻ như máy đang ở trạng thái khởi động trong khi thực tế nó thậm chí không tắt máy trước.
Sẽ rất hữu ích khi xóa "giật gân yên tĩnh" khỏi GRUB_CMDLINE_LINUX_DEFAULT khi bạn thấy các tin nhắn.
Tôi đã sửa đổi một chút về kịch bản để thay đổi tên máy chủ.
#!/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
Menu khởi động cũng cần chỉnh sửa trên Ubuntu 18 (và có thể là những người khác). Vì vậy - đơn giản hóa chỉ thay đổi tên vg và duy trì việc sử dụng dấu gạch ngang trong tên:
#!/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