lvm
lvm practise
基础操作
1.准备工作
lvmdiskscan #查看磁盘情况(包括虚拟磁盘)
mkdir /disk
2.创造块设备
dd if=/dev/zero of=/disk/hda bs=1M count=100
dd if=/dev/zero of=/disk/hdb bs=1M count=100
losetup /dev/loop0 /disk/hda
losetup /dev/loop1 /disk/hdb
lvm 操作步骤
fdisk -l
3.物理卷
pvcreate /dev/loop{0,1} #初始化物理卷
pvscan #扫描物理卷
pvdisplay #查看物理卷信息
4.卷组
vgscan #扫描卷组
vgdisplay #查看卷组大小
vgcreate vgloop01 /dev/loop{0,1} #创建卷组
5.创建逻辑卷
lvcreate -L 20m -n lvloop01 vgloop01 #创建逻辑卷命名为lvloop01 大小20M
lvscan #扫描逻辑卷
lvdisplay #显示逻辑卷信息
6.格式化和挂载
mkfs.ext3 /dev/vgloop01/lvloop01 #格式化逻辑卷
mount /dev/vgloop01/lvloop01 /disk/lvm #挂载
df -h #查看当前磁盘情况
高级操作
==========增加=============
# lv增加30M存储
lvextend -L +30M /dev/vgloop01/lvloop01
# lv增加所有vg空余存储
#lvextend -l 100%FREE /dev/vgloop01/lvloop01
lvextend -l +100%FREE /dev/vgloop01/lvloop01
# ext filesystem
e2fsck -f /dev/vgloop01/lvloop01
# ext3/4
resize2fs /dev/mapper/vg_ptmsdevdb-lv_root
# xfs filesystem
xfs_growfs /dev/dm-0
lvdisplay
resize2fs /dev/vgloop01/lvloop01 50M
# 如果提示 exfsck lv_root is mounted. e2fsck: Cannot continue, aborting.
resize2fs /dev/vg/lv_root
==========减小============
umount /disk/lvm/
e2fsck -f /dev/vgloop01/lvloop01
resize2fs /dev/vgloop01/lvloop01 20M
lvresize --size 20M /dev/vgloop01/lvloop01
lvdisplay
mount /dev/vgloop01/lvloop01 /disk/lvm/
2.增加pv
假设卷的size调整了
pvresize /dev/sda3
dd if=/dev/zero of=/disk/hdc bs=1M count=100
losetup /dev/loop2 /disk/hdc
losetup -a
pvcreate /dev/loop2
vgdisplay
vgextend vgloop01 /dev/loop2
模拟磁盘损坏
1.准备数据文件
cp -R /boot/vmlinuz-2.6.18-92.el5 /disk/lvm/
md5sum /disk/lvm/vmlinuz-2.6.18-92.el5
b3654261b1f775e81adfe33657f3b965 /disk/lvm/vmlinuz-2.6.18-92.el5
2.假设/dev/loop0 设备损坏
pvmove -n /dev/vgloop01/lvloop01 /dev/loop0 /dev/loop2 #将/disk/lvm 中的数据从 /dev/loop0 迁移至 /dev/loop2上
vgreduce vgloop01 /dev/loop0 #将/dev/loop0 从vgloop01 中移出来
pvscan
PV /dev/loop1 VG vgloop01 lvm2 [96.00 MB / 96.00 MB free]
PV /dev/loop2 VG vgloop01 lvm2 [96.00 MB / 76.00 MB free]
PV /dev/loop0 lvm2 [100.00 MB]
pvremove /dev/loop0
备注:新硬盘容量一定在大于旧硬盘中的数据容量,并且新旧硬盘必须在同一个VG中 PS:pvmove命令用来把使用的pv移动到其他空余的pv中,需要内核的dm_mirror的支持,然而2.6.22内核中的dm_mirror有bug,执行会出错,建议升级到6.2.23。
lvm 删除
umount /disk/lvm
lvremove /dev/vgloop01/lvloop01
vgremove vgloop01
pvremove /dev/loop{0,1,2}
losetup -a
losetup -d /dev/loop0
losetup -d /dev/loop1
losetup -d /dev/loop2