[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 20G 4.2G 14G 23% /
tmpfs 499M 1004K 498M 1% /dev/shm
/dev/sda1 93M 52M 36M 60% /boot
/dev/sda3 20G 18G 690M 97% /home
以上信息显示 /home 目录已占用分区97%的空间。因为采用标准分区,不能在原有的基础上扩容。为了以后更好地管理磁盘,我们需要将现有的标准分区转换成 LVM 分区。
目前有两种可选方案:
[root@localhost ~]# fdisk -l
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 102400 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 13 2563 20480000 83 Linux
/dev/sda3 2563 5113 20480000 83 Linux
/dev/sda4 5113 12162 56622080 5 Extended
/dev/sda5 5113 5374 2097152 82 Linux swap / Solaris
以上信息显示 /dev/sda4 为扩展分区,约有56G的可用空间。所以,选用第二种方案为皆。
因为swap交换区在 /dev/sda4 扩展分区内,为数据安全起见,我们需要先关闭 swap 交换区,再通过 fdisk 指令的一系列操作来实现分区的删除和建立。
# 查看系统物理内存及 swap 内存情况
[root@localhost ~]# free
total used free shared buffers cached
Mem: 1020936 476744 544192 142312 17996 293256
-/+ buffers/cache: 165492 855444
Swap: 2097148 135024 1962124 # 交换区在使用中
# 关闭所有交换区,并显示详细信息
[root@localhost ~]# swapoff -av
swapoff on /dev/sda5
[root@localhost ~]# free
total used free shared buffers cached
Mem: 1020936 579804 441132 177268 18152 329192
-/+ buffers/cache: 232460 788476
Swap: 0 0 0 # 交换区已关闭
[root@localhost ~]# fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It's ...
Command (m for help): d # 删除 /dev/sda4 扩展分区
Partition number (1-6): 4
Command (m for help): p
Disk /dev/sda: 100.0 GB, 100030242816 bytes
........此处省略........
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 102400 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 13 2563 20480000 83 Linux
/dev/sda3 2563 5113 20480000 83 Linux
Command (m for help): n # 新建 /dev/sda4 主要分区
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 4
....下面的步骤按回车即可
Command (m for help): p
........此处省略........
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 102400 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 13 2563 20480000 83 Linux
/dev/sda3 2563 5113 20480000 83 Linux
/dev/sda4 5113 12161 56619808+ 83 Linux
Command (m for help): w
The partition table has been altered!
........此处省略........
重启系统,使分区改动生效。
在 /dev/sda4 主要分区的基础上,遵循 LVM 分区建立的原则,根据新建物理卷(pv),生成卷组(vg),新建逻辑卷(lv)这几个步骤即可完成 LVM 分区的建立。
# 新增物理卷
[root@localhost ~]# pvcreate /dev/sda4
Physical volume "/dev/sda4" successfully created
# 新增卷组
[root@localhost ~]# vgcreate VG2019 /dev/sda4
Volume group "VG2019" successfully created
# 查看卷组详情
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name VG2019
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 53.99 GiB
PE Size 4.00 MiB
Total PE 13822
Alloc PE / Size 0 / 0
Free PE / Size 13822 / 53.99 GiB # 可用空间
VG UUID oPptrC-aPF6-Dre1-H3Tu-4LfL-Dm6I-2zBbA5
# 新增逻辑卷 LVroot 和 LVhome 分别用于还原旧分区的根目录和 /home 目录
[root@localhost ~]# lvcreate -L 20G -n LVroot VG2019
Logical volume "LVroot" created.
[root@localhost ~]# mkfs -t ext4 /dev/VG2019/LVroot
[root@localhost ~]# lvcreate -L 33G -n LVhome VG2019
Logical volume "LVhome" created.
[root@localhost ~]# mkfs -t ext4 /dev/VG2019/LVhome
[root@localhost ~]# lvscan
ACTIVE '/dev/VG2019/LVroot' [20.00 GiB] inherit
ACTIVE '/dev/VG2019/LVhome' [33.00 GiB] inherit
用 dump 指令和 restore 指令备份及还原根目录到新分区。
用 dd 指令克隆 /home 目录到新分区。
为什么要选用两种不同的方法?
# 新建 backup, restore 目录。
[root@localhost ~]# mkdir /mnt/backup /mnt/restore
[root@localhost ~]# ls /mnt/
backup restore usb
# 把 /dev/mapper/VG2019-LVhome 挂载到 /mnt/backup 目录,用于存放根目录备份文件。
# 把 /dev/mapper/VG2019-LVroot 挂载到 /mnt/restore 目录,用于还原根目录。
[root@localhost ~]# mount /dev/mapper/VG2019-LVhome /mnt/backup/
[root@localhost ~]# mount /dev/mapper/VG2019-LVroot /mnt/restore/
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 20G 4.2G 14G 24% /
tmpfs 499M 148K 499M 1% /dev/shm
/dev/sda1 93M 52M 36M 60% /boot
/dev/sda3 20G 18G 690M 97% /home
/dev/mapper/VG2019-LVhome 33G 48M 31G 1% /mnt/backup
/dev/mapper/VG2019-LVroot 20G 44M 19G 1% /mnt/restore
# 备份根目录
[root@localhost ~]# dump -0f /mnt/backup/rootfs0913.bak /
# 还原根目录
[root@localhost ~]# cd /mnt/restore/
[root@localhost restore]# restore -rf /mnt/backup/rootfs0913.bak
# 查看 LVroot 逻辑卷使用情况
[root@localhost restore]# df -h /dev/mapper/VG2019-LVroot
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VG2019-LVroot 20G 4.2G 15G 23% /mnt/restore
从还原前后的逻辑卷 LVroot 的空间使用情况进行对比,可知道根目录已还原到此卷上。
# 移动根目录备份文件到其他目录保存,如后继不需要此备份,可省略此步骤
[root@localhost mnt]# mv backup/rootfs0913.bak /mnt/
# 用 dd 指令克隆 /home 目录所在分区到 LVhome 逻辑卷分区
[root@localhost ~]# dd if=/dev/sda3 of=/dev/mapper/VG2019-LVhome
在另一个终端窗口输入以下指令,可在 dd 指令所在窗口中显示拷贝进度。
[root@localhost ~]# watch -n 5 pkill -USR1 -x dd
dd 指令拷贝数据完成后,查看各分区的 UUID。我们会发现一个问题, /dev/sda3 与 /dev/mapper/VG2019-LVhome 的 UUID 是一样的。此时,我们修改其中一个分区的 UUID 即可。
[root@localhost ~]# blkid
/dev/sda1: UUID="3b93bfac-1a0d-4735-85c3-ae5f721ad84e" TYPE="ext4"
/dev/sda2: UUID="8b50a8ab-931f-4bd6-a0b7-ca826b4c93c3" TYPE="ext4"
/dev/sda3: UUID="5a8cd0b9-f8b9-4b73-9a7b-d655e855df5a" TYPE="ext4"
/dev/sda4: UUID="fmLY2K-ELmg-74IX-EtAM-FG3Z-f016-KstZfp" TYPE="LVM2_member"
/dev/mapper/VG2019-LVroot: UUID="51fde19e-463e-4efb-b2af-554a74656bfc" TYPE="ext4"
/dev/mapper/VG2019-LVhome: UUID="5a8cd0b9-f8b9-4b73-9a7b-d655e855df5a" TYPE="ext4"
我们选择修改 /dev/mapper/VG2019-LVhome 的 UUID ,方法如下:
[root@localhost ~]# uuidgen | xargs tune2fs /dev/mapper/VG2019-LVhome -U
再次查看各分区的 UUID :
[root@localhost restore]# blkid
/dev/sda1: UUID="3b93bfac-1a0d-4735-85c3-ae5f721ad84e" TYPE="ext4"
/dev/sda2: UUID="8b50a8ab-931f-4bd6-a0b7-ca826b4c93c3" TYPE="ext4"
/dev/sda3: UUID="89dc312e-4099-43ae-aa2b-4a25c5607d87" TYPE="ext4"
/dev/sda4: UUID="fmLY2K-ELmg-74IX-EtAM-FG3Z-f016-KstZfp" TYPE="LVM2_member"
/dev/mapper/VG2019-LVroot: UUID="51fde19e-463e-4efb-b2af-554a74656bfc" TYPE="ext4"
/dev/mapper/VG2019-LVhome: UUID="3cd0bb7c-ba62-4bf0-8507-c424b7f2ef2b" TYPE="ext4"
为了系统能够使用新的根目录和 /home 目录,我们需要修改启动引导配置文件和文件系统配置表。 grub.conf 文件决定系统从哪个分区启动,fstab 文件决定根目录和 /home 挂载到哪个分区。
切记: 不要直接 /etc/fstab
# 修改根目录( /home 目录)所要挂载到的分区的 UUID, blkid 指令可查各分区 UUID
[root@localhost ~]# vim /mnt/restore/etc/fstab
修改以下两项的 UUID :
UUID=51fde19e-463e-4efb-b2af-554a74656bfc /
UUID=3cd0bb7c-ba62-4bf0-8507-c424b7f2ef2b /home
如果 /boot 目录不是独立分区,需要到还原后的根目录所在分区找到此文件修改。
[root@localhost ~]# vim /boot/grub/grub.conf
修改 UUID: root=UUID=51fde19e-463e-4efb-b2af-554a74656bfc
删除所有 rd_NO_LVM 选项, 这个很重要
改好以上两个文件后,重启系统:
[root@localhost ~]# reboot
以上信息显示,根目录和 /home 目录已挂载到 LVM 分区,并且能正常工作。但是这里 /home 目录还有个问题: 经过 dd 指令克隆到新分区后,新分区的总容量变为之前 /home 目录所在分区 /dev/sda3 的容量(20G),与 lv 逻辑卷划分的33G容量明显矛盾。我们可以通过对新分区扩容来解决这个问题。
[root@localhost ~]# lvextend -L +200M /dev/VG2019/LVhome
[root@localhost ~]# e2fsck -f /dev/VG2019/LVhome
[root@localhost ~]# resize2fs -p /dev/VG2019/LVhome
再次用 df -h 查看磁盘情况:
/home目录总容量信息显示正常了。
修改思路: 删除两分区,新建一个主要分区(相当于两分区合并),生成物理卷,加入 VG2019 这个卷组。