需求描述
在操作系统部署时,根目录使用的是非LVM分区,后期空间不足又无法扩容。
提供一个思路是新增一块硬盘,创建为逻辑卷,把根目录迁移过去,然后引导以新分区启动。
迁移完成后,旧的根目录可以再格式化为逻辑卷,合并到新磁盘分区。
本操作仅在CentOS Linux release 7.9.2009实验过,其他环境可能不支持。
效果展示
迁移前:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17.7G 0 part /
sdb 8:16 0 30G 0 disk
└─sdb1 8:17 0 30G 0 part
sr0 11:0 1 1024M 0 rom
迁移后:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17.7G 0 part
sdb 8:16 0 30G 0 disk
└─sdb1 8:17 0 30G 0 part
└─my_vg-my_lv 253:0 0 30G 0 lvm /
sr0 11:0 1 1024M 0 rom
与旧分区合并:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17.7G 0 part
└─my_vg-my_lv 253:0 0 47.7G 0 lvm /
sdb 8:16 0 30G 0 disk
└─sdb1 8:17 0 30G 0 part
└─my_vg-my_lv 253:0 0 47.7G 0 lvm /
sr0 11:0 1 1024M 0 rom
新磁盘创建逻辑卷
将新磁盘创建逻辑卷分区,磁盘分区可选为8e
类型,过程不再赘述,只提供逻辑卷操作步骤:
# 创建物理卷(如果尚未创建)
pvcreate /dev/sdb1
# 创建卷组
vgcreate my_vg /dev/sdb1
# 创建逻辑卷
lvcreate -n my_lv -l 100%FREE my_vg
# 格式化分区
mkfs.ext4 /dev/mapper/my_vg-my_lv
迁移操作步骤:
注意事项和准备工作:
1、确保您拥有管理员权限或者以root用户身份登录。
2、确保您了解所执行操作的风险,并且已经备份了所有重要数据。
3、请谨慎操作,并严格按照下列步骤操作。
操作步骤:
1、挂载新的(逻辑卷)根分区:
[root@localhost ~]# mkdir /mnt/new_root
[root@localhost ~]# mount /dev/mapper/my_vg-my_lv /mnt/new_root/
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17.7G 0 part /
sdb 8:16 0 30G 0 disk
└─sdb1 8:17 0 30G 0 part
└─my_vg-my_lv 253:0 0 30G 0 lvm /mnt/new_root
sr0 11:0 1 1024M 0 rom
2、挂载旧的根分区:
[root@localhost ~]# mkdir /mnt/temp_root
[root@localhost ~]# mount /dev/sda3 /mnt/temp_root/
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17.7G 0 part /mnt/temp_root
sdb 8:16 0 30G 0 disk
└─sdb1 8:17 0 30G 0 part
└─my_vg-my_lv 253:0 0 30G 0 lvm /mnt/new_root
sr0 11:0 1 1024M 0 rom
3、迁移根目录数据到新的逻辑卷:
[root@localhost ~]# rsync -avxHAX /mnt/temp_root/ /mnt/new_root/ --info=progress2
4、数据检查:
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
***
/dev/sda3 xfs 18G 4.4G 14G 25% /
***
/dev/mapper/my_vg-my_lv ext4 30G 4.4G 24G 16% /mnt/new_root
可以看到sda3和my_vg-my_lv的Used数据量是一致的。
5、更新/boot下的引导信息:
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-8ff399da12b8416993db7c4fb98f39e4
Found initrd image: /boot/initramfs-0-rescue-8ff399da12b8416993db7c4fb98f39e4.img
Found CentOS Linux release 7.9.2009 (Core) on /dev/mapper/my_vg-my_lv
done
6、更新/mnt/new_root/etc/fstab
文件:
使用文本编辑器打开/mnt/new_root/etc/fstab
,将旧根分区的UUID更新为新逻辑卷的UUID。
[root@localhost ~]# vim /mnt/new_root/etc/fstab
UUID=</dev/mapper/my_vg-my_lv的UUID> / ext4 defaults 0 0
7、更新启动加载项:
[root@localhost ~]# grub2-install /dev/sdb
Installing for i386-pc platform.
Installation finished. No error reported.
如果/dev/sdb不是您的启动磁盘,请将其替换为正确的磁盘。
8、更新initramfs:
[root@localhost ~]# dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
9、卸载临时挂载点:
[root@localhost ~]# umount /mnt/temp_root
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17.7G 0 part /
sdb 8:16 0 30G 0 disk
└─sdb1 8:17 0 30G 0 part
└─my_vg-my_lv 253:0 0 30G 0 lvm /mnt/new_root
sr0 11:0 1 1024M 0 rom
10、注释掉/boot配置文件中旧的启动项,大概是在87~118行:
[root@localhost ~]# vim /boot/grub2/grub.cfg
11、重启系统:
[root@localhost ~]# reboot
12、检查迁移后的磁盘:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17.7G 0 part
sdb 8:16 0 30G 0 disk
└─sdb1 8:17 0 30G 0 part
└─my_vg-my_lv 253:0 0 30G 0 lvm /
sr0 11:0 1 1024M 0 rom
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
***
/dev/mapper/my_vg-my_lv ext4 30G 4.4G 24G 16% /
***
分区合并操作
若您希望将sda3分区添加到my_vg-my_lv逻辑卷中,您可以按照以下步骤进行操作:
确保sda3分区没有被挂载,否则需要先卸载它。
使用 pvcreate 命令将sda3分区转换为物理卷。
将新的物理卷添加到卷组(Volume Group)中,您可以使用 vgextend 命令。
最后,您可以使用 lvextend 命令将逻辑卷(Logical Volume)扩展至所需大小。
以下是具体的命令示例:
1、卸载sda3分区(如果已经挂载)
umount /dev/sda3
2、将sda3分区转换为物理卷
[root@localhost ~]# pvcreate /dev/sda3
WARNING: xfs signature detected on /dev/sda3 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/sda3.
Physical volume "/dev/sda3" successfully created.
3、将新的物理卷添加到卷组中
[root@localhost ~]# vgextend my_vg /dev/sda3
Volume group "my_vg" successfully extended
4、扩展逻辑卷至所需大小
[root@localhost ~]# lvextend -l +100%FREE /dev/mapper/my_vg-my_lv
Size of logical volume my_vg/my_lv changed from <30.00 GiB (7679 extents) to <47.70 GiB (12211 extents).
Logical volume my_vg/my_lv successfully resized.
5、(可选)对扩展后的逻辑卷进行文件系统的扩展,以便能够利用新的空间
[root@localhost ~]# resize2fs /dev/mapper/my_vg-my_lv
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/my_vg-my_lv is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 6
The filesystem on /dev/mapper/my_vg-my_lv is now 12504064 blocks long.
6、检查修改后的逻辑卷状态
[root@localhost ~]# lvdisplay /dev/mapper/my_vg-my_lv
--- Logical volume ---
LV Path /dev/my_vg/my_lv
LV Name my_lv
VG Name my_vg
LV UUID gEMnMQ-Hsqz-ZD9D-PTtp-2f1u-Rs4C-q3DbFL
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-10-18 18:16:25 -0700
LV Status available
# open 1
LV Size <47.70 GiB
Current LE 12211
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
7、检查修改后的磁盘状态
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17.7G 0 part
└─my_vg-my_lv 253:0 0 47.7G 0 lvm /
sdb 8:16 0 30G 0 disk
└─sdb1 8:17 0 30G 0 part
└─my_vg-my_lv 253:0 0 47.7G 0 lvm /
sr0 11:0 1 1024M 0 rom
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
***
/dev/mapper/my_vg-my_lv ext4 47G 4.4G 41G 10% /
***
注意事项和细节:
1、请务必仔细检查每个步骤,确保命令的准确性和正确的选项。
2、检查新的逻辑卷是否具有足够的空间来承载整个根分区的数据。
3、请确保文件系统和分区大小的兼容性。
4、在进行操作之前最好先在测试环境中尝试这些步骤。