目的

将两块空硬盘合并为“一块”,挂载到指定目录下,达到在一个目录使用2块硬盘所有空间的效果。

条件

  • 硬盘1 /dev/sdb # 硬盘1 200G
  • 硬盘2 /dev/sdc # 硬盘2 300G
  • 硬盘3 /dev/sdd # 硬盘2 500G

操作方法

创建逻辑卷

磁盘分区

# 查看新硬盘路径, 如: /dev/sdb
fdisk -l
# 执行对硬盘的分区操作
fdisk /dev/sdb

创建物理卷(pv)

pvcreate /dev/sdb1
pvcreate /dev/sdc1
# 显示有关物理卷的信息
pvs
# 显示物理卷的信息
pvdisplay

创建卷组(vg)

# `vgcreate [自定义LVM名称] [设备]`
# 先使用硬盘1创建vg:LVM
vgcreate ZKER_DATA /dev/sdb1
vgextend ZKER_DATA /dev/sdc1
# 显示有关卷组的信息
vgs
# 显示卷组的信息
vgdisplay

可以看出默认PE大小为4MB,PE是卷组的最小存储单元.可以通过 –s参数修改大小。

创建逻辑卷(lv)

# `lvcreate -L [自定义分区大小] -n [自定义分区名称] [vg名称]`
lvcreate -L 5.0G -n DB_DATA ZKER_DATA
# 或
lvcreate -l 100%VG -n DB_DATA ZKER_DATA
# 显示有关逻辑卷的信息
lvs
# 显示逻辑卷组的信息
lvdisplay

格式化分区

mkfs.ext4 /dev/ZKER_DATA/DB_DATA
# 或
mkfs -t ext4 /dev/ZKER_DATA/DB_DATA

挂载分区

# `mount [分区位置] [目录地址]`
mount /dev/ZKER_DATA/DB_DATA /data
# 查看挂载情况
df -h

设置开机加载

/etc/fstab文件末尾添加如下行。

/dev/ZKER_DATA/DB_DATA /data ext4 defaults 1 2

扩展逻辑卷空间

硬盘分区

# 执行对硬盘的分区操作
fdisk /dev/sdd

创建物理卷(pv)

pvcreate /dev/sdd1
pvs
pvdisplay

扩展vg

# `vgextend [自定义vg名称] [设备]`
# 使用硬盘2扩展vg
vgextend ZKER_DATA /dev/sdd1

创建lv

# `lvcreate -l +[自定义分区大小百分比][FREE|VG] [vg卷组设备路径]`\
lvextend -l +100%FREE /dev/ZKER_DATA/DB_DATA
lvdisplay /dev/ZKER_DATA/DB_DATA
resize2fs /dev/ZKER_DATA/DB_DATA

减少逻辑卷空间

# 卸载逻辑卷
umount /data
# 检测逻辑卷的剩余空间
e2fsck -f /dev/ZKER_DATA/DB_DATA
# 将文件系统减少到20G
resize2fs /dev/ZKER_DATA/DB_DATA 20G
# 重新挂载使用
mount -a

删除逻辑卷

lvdisplay
# 卸载目录
umount /dev/ZKER_DATA/DB_DATA
# 删除开机加载
vi /etc/fstab

# 删除逻辑卷
lvremove /dev/ZKER_DATA/DB_DATA

## 删除卷组
vgs
vgdisplay
vgremove ZKER_DATA

## 将物理卷转换成普通分区
pvs
pvdisplay
pvremove /dev/sdb1
pvremove /dev/sdc1
pvremove /dev/sdd1

## 修改分区id标识为普通分区

# 依次按键 t, 1, 83, w
fdisk /dev/sdc

移动逻辑卷(待测试)

例子:卷组vg2有两个物理卷/dev/sdb1(20G),/dev/sdc1(10G)。

[root@zg1 /]# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sda2  vg_zg1 lvm2 a--  19.51g     0
  /dev/sdb1  vg2    lvm2 a--  19.99g 19.99g
  /dev/sdc1  vg2    lvm2 a--   9.99g  9.99g
[root@zg1 /]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  vg2      2   0   0 wz--n- 29.98g 29.98g
  vg_zg1   1   2   0 wz--n- 19.51g     0

## 在卷组下创建一个逻辑卷data占用8G空间。

[root@zg1 /]# lvcreate -L +8G -n data vg2
  Logical volume "data" created
[root@zg1 /]# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sda2  vg_zg1 lvm2 a--  19.51g     0
  /dev/sdb1  vg2    lvm2 a--  19.99g 11.99g
  /dev/sdc1  vg2    lvm2 a--   9.99g  9.99g
[root@zg1 /]# mkfs.ext4 /dev/vg2/data
[root@zg1 ~]# blkid
[root@zg1 ~]# vi /etc/fstab
[root@zg1 ~]# mount -a

## 这个时候如果想把sdb1数据转移到sdbc1空间

# 转移空间数据
[root@zg1 /]# pvmove /dev/sdb1 /dev/sdc1
  /dev/sdb1: Moved: 0.3%
  /dev/sdb1: Moved: 100.0%

# 查看空间剩余,可以看到数据被转移
[root@zg1 /]# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sda2  vg_zg1 lvm2 a--  19.51g     0
  /dev/sdb1  vg2    lvm2 a--  19.99g 19.99g
  /dev/sdc1  vg2    lvm2 a--   9.99g  1.99g
  
# 从卷组中移除不需要的硬盘
[root@zg1 /]# vgreduce vg2 /dev/sdb1
  Removed "/dev/sdb1" from volume group "vg2"
[root@zg1 /]# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sda2  vg_zg1 lvm2 a--  19.51g     0
  /dev/sdb1         lvm2 a--  19.99g 19.99g
  /dev/sdc1  vg2    lvm2 a--   9.99g  1.99g
# 
[root@zg1 ~]# pvremove /dev/sdb1

然后就可以将硬盘手工拆除了。

参考资料