LVM创建、扩容、数据迁移
实验:
1、新增一块10G硬盘sdb,分为sdb1、sdb2,建立5G的lv01,然后将lv扩容到10G;
2、新增一块40G硬盘sdc,将sdb硬盘里的10G数据全部迁移到sdc里,删除掉sdb盘。
一、LVM创建
1.1 fdisk划分磁盘
[root@node1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─asianux-root 253:0 0 17G 0 lvm /
└─asianux-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
sr0 11:0 1 4.3G 0 rom
[root@node1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/asianux-root 17G 6.8G 11G 41% /
devtmpfs 977M 0 977M 0% /dev
/dev/sda1 976M 129M 781M 15% /boot
[root@node1 ~]# fdisk /dev/sdb
命令(输入 m 获取帮助):n
Select (default p): p # 修改项
分区号 (1-4,默认 1):1 # 修改项
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB # 修改项
命令(输入 m 获取帮助):t # 修改项
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e # 修改项
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):n
...
Last 扇区, +扇区 or +size{K,M,G} (10487808-20971519,默认为 20971519):
将使用默认值 20971519 # 修改项,不填写默认使用剩余所有空间
分区 2 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):t # 修改项
分区号 (1,2,默认 2):2
Hex 代码(输入 L 列出所有代码):8e # 修改项
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p # 查看分区
...
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 8e Linux LVM
/dev/sdb2 10487808 20971519 5241856 8e Linux LVM
命令(输入 m 获取帮助):w # 保存写入
...
正在同步磁盘。
1.2 创建pv vg lv
[root@node1 ~]# pvcreate /dev/sdb1 /dev/sdb2
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
[root@node1 ~]# vgcreate vg01 /dev/sdb1 # 创建卷组
Volume group "vg01" successfully created
[root@node1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
asianux 1 2 0 wz--n- 19.00g 0
vg01 1 0 0 wz--n- 5.00g 5.00g
[root@node1 ~]# lvcreate -L 5G -n lv01 vg01 # 报错:空间不足5G
Volume group "vg01" has insufficient free space (1279 extents): 1280 required.
[root@node1 ~]# lvcreate -L 100%FREE -n lv01 vg01 # L跟数字,l跟100%
Invalid argument for --size: 100%FREE
Error during parsing of command line.
[root@node1 ~]# lvcreate -l 100%FREE -n lv01 vg01 # 使用全部空间
Logical volume "lv01" created.
[root@node1 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root asianux -wi-ao---- 17.00g
swap asianux -wi-ao---- 2.00g
lv01 vg01 -wi-a----- 5.00g
[root@node1 ~]# mkfs.ext4 /dev/vg01/lv01 # 格式化
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: 完成
...
Writing superblocks and filesystem accounting information: 完成
[root@node1 ~]# lsblk # 查看现在分区
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 5G 0 part
│ └─vg01-lv01 253:2 0 5G 0 lvm
└─sdb2 8:18 0 5G 0 part
sr0 11:0 1 4.3G 0 rom
1.3 lv扩容
[root@node1 ~]# vgextend vg01 /dev/sdb2
Volume group "vg01" successfully extended
[root@node1 ~]# lvextend -l +100%FREE /dev/vg01/lv01
Size of logical volume vg01/lv01 changed from 5.00 GiB (1279 extents) to 9.99 GiB (2558 extents).
Logical volume vg01/lv01 successfully resized.
[root@node1 ~]# resize2fs /dev/vg01/lv01 # 刷新分区
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg01/lv01 to 2619392 (4k) blocks.
The filesystem on /dev/vg01/lv01 is now 2619392 blocks long.
[root@node1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 5G 0 part
│ └─vg01-lv01 253:2 0 10G 0 lvm
└─sdb2 8:18 0 5G 0 part
└─vg01-lv01 253:2 0 10G 0 lvm
sr0 11:0 1 4.3G 0 rom
1.4 挂载使用
[root@node1 ~]# mkdir /data01
[root@node1 ~]# vim /etc/fstab
...
/dev/vg01/lv01 /data01 ext4 defaults 0 0
[root@node1 ~]# mount -a
[root@node1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/asianux-root 17G 6.8G 11G 41% /
...
/dev/mapper/vg01-lv01 9.8G 23M 9.2G 1% /data01
二、PV数据迁移
- 备注:新硬盘容量一定在大于旧硬盘中的数据容量,并且新旧硬盘必须在同一个VG中
- 过程:pvcreate sdc , vg扩展 —— pv迁移数据 —— vg移除 —— pv删除
2.1 新硬盘pvcreate,vg扩展
[root@node1 ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
[root@node1 ~]# vgextend vg01 /dev/sdc
Volume group "vg01" successfully extended
2.2 pv数据迁移到sdc上
[root@node1 ~]# pvmove /dev/sdb1 /dev/sdc
/dev/sdb1: Moved: 0.16%
/dev/sdb1: Moved: 52.23%
/dev/sdb1: Moved: 100.00%
[root@node1 ~]# pvmove /dev/sdb2 /dev/sdc
/dev/sdb2: Moved: 0.23%
/dev/sdb2: Moved: 59.19%
/dev/sdb2: Moved: 100.00%
[root@node1 ~]# pvs
PV VG Fmt Attr PSize PFree
...
/dev/sdc vg01 lvm2 a-- 40.00g 30.00g
[root@node1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
...
vg01 3 1 0 wz--n- 49.99g 40.00g
2.3 vg移除掉sdb1 sdb2
[root@node1 ~]# vgreduce vg01 /dev/sdb1
Removed "/dev/sdb1" from volume group "vg01"
[root@node1 ~]# vgreduce vg01 /dev/sdb1
Failed to find physical volume "/dev/sdb1".
[root@node1 ~]# vgreduce vg01 /dev/sdb2
Removed "/dev/sdb2" from volume group "vg01"
[root@node1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
asianux 1 2 0 wz--n- 19.00g 0
vg01 1 1 0 wz--n- 40.00g 30.00g
2.4 pv删除掉sdb1 sdb2
[root@node1 ~]# pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped.
[root@node1 ~]# pvremove /dev/sdb2
Labels on physical volume "/dev/sdb2" successfully wiped.
2.5 lv重新扩容,刷新容量
[root@node1 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root asianux -wi-ao---- 17.00g
swap asianux -wi-ao---- 2.00g
lv01 vg01 -wi-ao---- 9.99g
[root@node1 ~]# lvextend -l +100%FREE /dev/vg01/lv01
Size of logical volume vg01/lv01 changed from 9.99 GiB (2558 extents) to 40.00 GiB (10239 extents).
Logical volume vg01/lv01 successfully resized.
[root@node1 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root asianux -wi-ao---- 17.00g
swap asianux -wi-ao---- 2.00g
lv01 vg01 -wi-ao---- 40.00g
[root@node1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
...
/dev/mapper/vg01-lv01 9.8G 23M 9.2G 1% /data01
[root@node1 ~]# resize2fs /dev/vg01/lv01
[root@node1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
...
/dev/mapper/vg01-lv01 40G 30M 38G 1% /data01
问题收集:
- 1、空间不足
[root@node1 ~]# lvcreate -L 5G -n lv01 vg01 # 报错:空间不足5G
Volume group "vg01" has insufficient free space (1279 extents): 1280 required.
- 2、参数错误,l与L(大小写)
[root@node1 ~]# lvcreate -L 100%FREE -n lv01 vg01 # L跟数字,l跟100%
Invalid argument for --size: 100%FREE
Error during parsing of command line.
[root@node1 ~]# lvextend -l 100%FREE /dev/vg01/lv01
New size (1279 extents) matches existing size (1279 extents).
[root@node1 ~]# lvextend -l 100%FREE /dev/vg01/lv01
New size of 0 not permitted.