续《磁盘管理-LVM(1)》
1、扩展逻辑卷
调整逻辑卷大小的功能是LVM最有用的功能。这个部分会讨论我们怎么样扩展一个存在的逻辑卷。下面,我们将会扩展先前创建的逻辑卷‘mylv1’扩大到3G。
注意,调整逻辑卷大小之后,也需要对文件系统调整大小进行匹配。这个额外的步骤各不相同,取决于创建文件系统的类型。命令的执行顺序是很重要的。
### lvextend - extend the size of a logical volume # lvextend {-l|--extents [+]LogicalExtentsNumber[%{VG|LV|PVS|FREE|ORIGIN}] | -L|--size [+]LogicalVolumeSize[bBsSkKmMgGtTpPeE]} LogicalVolumePath ### lvresize - resize a logical volume # lvresize {-l|--extents [+]LogicalExtentsNumber[%{VG|LV|PVS|FREE|ORIGIN}] | -L|--size [+]LogicalVolumeSize[bBsSkKmMgGtTpPeE]} LogicalVolumePath ### lvextend,lvresize都能够满足我们的需求,这些必须注意的是如何指定逻辑卷的大小 # [ + ] # -L 3G ## 指定逻辑卷大小为3G # -L +3G ## 在原来的基础上再增加3G ### 首先卸载,当然lvm也支持在线扩展 [root@localhost ~]# umount /dev/myvg/mylv1 # 扩展逻辑卷 [root@localhost ~]# lvextend -L 3G /dev/myvg/mylv1 Extending logical volume mylv1 to 3.00 GB Logical volume mylv1 successfully resized ### 强制检查磁盘错误 [root@localhost ~]# e2fsck -f /dev/myvg/mylv1 e2fsck 1.39 (29-May-2006) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/myvg/mylv1: 11/262144 files (9.1% non-contiguous), 25406/524288 blocks ### 扩展文件系统 [root@localhost ~]# resize2fs /dev/myvg/mylv1 resize2fs 1.39 (29-May-2006) Resizing the filesystem on /dev/myvg/mylv1 to 786432 (4k) blocks. The filesystem on /dev/myvg/mylv1 is now 786432 blocks long. [root@localhost ~]# lvdisplay --- Logical volume --- LV Name /dev/myvg/mylv1 VG Name myvg LV UUID D1NF1V-zPl7-cvXs-hk0c-2Fbx-WKZ1-tF49Fi LV Write Access read/write LV Status available # open 0 LV Size 3.00 GB # 已经扩展到了3G Current LE 768 Segments 4 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
那么,现在此逻辑卷可以重新被挂载了。
2、缩减逻辑卷(必须首先卸载)
缩减与扩展的操作类似,但是值得关注的是命令的顺序。并且,下列命令对ext2/3/4文件系统同样有效。
首先查看逻辑卷空间使用情况
不能在线缩减,必须首先卸载
确保缩小后的空间大小依然能够存储原来存储的所有数据,否则将丢失数据
在缩减之前应该首先进行文件系统一致性检查
注意减少逻辑卷的大小值若小于储存的数据大小,存储在后面的数据会丢失。
### 卸载逻辑卷 [root@localhost ~]# umount /dev/myvg/mylv1 ### 强制文件系统检查 [root@localhost ~]# e2fsck -f /dev/myvg/mylv1 e2fsck 1.39 (29-May-2006) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/myvg/mylv1: 11/393216 files (9.1% non-contiguous), 29518/786432 blocks ### 缩减文件系统 [root@localhost ~]# resize2fs /dev/myvg/mylv1 1G resize2fs 1.39 (29-May-2006) Resizing the filesystem on /dev/myvg/mylv1 to 262144 (4k) blocks. The filesystem on /dev/myvg/mylv1 is now 262144 blocks long. ### 缩减逻辑卷 [root@localhost ~]# lvresize -L 1G /dev/myvg/mylv1 WARNING: Reducing active logical volume to 1.00 GB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce mylv1? [y/n]: y Reducing logical volume mylv1 to 1.00 GB Logical volume mylv1 successfully resized
3、扩展卷组
当我们发现卷组空间不够时,我们如何进行扩展呢?下面就讲解如何把一个物理卷PV加入到当前的VG中。
承接上一篇文章,我们仅用了/dev/sdb{1,2,3}创建VG,此时我想把/dev/sdb5也加入VG。
[root@localhost ~]# pvcreate /dev/sdb5 # 创建pv Writing physical volume data to disk "/dev/sdb5" Physical volume "/dev/sdb5" successfully created [root@localhost ~]# pvs # 显示pv PV VG Fmt Attr PSize PFree /dev/sdb1 myvg lvm2 a-- 964.00M 0 /dev/sdb2 myvg lvm2 a-- 964.00M 0 /dev/sdb3 myvg lvm2 a-- 964.00M 844.00M /dev/sdb5 lvm2 a-- 964.81M 964.81M # 我们可以看到,新创建的pv不属于任何vg [root@localhost ~]# vgextend myvg /dev/sdb5 # 扩展vg Volume group "myvg" successfully extended [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 myvg lvm2 a-- 964.00M 0 /dev/sdb2 myvg lvm2 a-- 964.00M 0 /dev/sdb3 myvg lvm2 a-- 964.00M 844.00M /dev/sdb5 myvg lvm2 a-- 964.00M 964.00M # OK, 已经加入myvg [root@localhost ~]# vgdisplay --- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 4 Act PV 4 VG Size 3.77 GB PE Size 4.00 MB Total PE 964 Alloc PE / Size 512 / 2.00 GB Free PE / Size 452 / 1.77 GB VG UUID 99yTE0-Lc3f-b5rz-qa4F-d8YD-XBfM-U4DYoM
通过观察VG Size,可以看出myvg已经扩展。
4、缩减卷组
其实缩减卷组的情况不是太常见,在缩减之前,我们必须考虑以下问题:缩减VG也就是,把PV从VG中移除。那么我们如何知道数据时存储在哪个PV上的呢?我们无从得知。所以我们在移除PV的时候,首先要做的就是把此PV上的数据转移到其他PV上去。
pvmove /dev/sdb1 ### 将/dev/sdb1上存储的数据转移到其他物理卷上去
vgreduce myvg /dev/sdb1 ### 将PV: /dev/sdb1从VG: myvg中移除
pvremove /dev/sdb1 ### 将/dev/sdb1从物理卷上移除
[root@localhost ~]# pvs # 查看pv PV VG Fmt Attr PSize PFree /dev/sdb1 myvg lvm2 a-- 964.00M 0 #PV:/dev/sdb1空间已经被占完 /dev/sdb2 myvg lvm2 a-- 964.00M 904.00M /dev/sdb3 myvg lvm2 a-- 964.00M 964.00M /dev/sdb5 myvg lvm2 a-- 964.00M 964.00M [root@localhost ~]# pvmove /dev/sdb1 # 把/dev/sdb1上的数据转移 /dev/sdb1: Moved: 20.3% /dev/sdb1: Moved: 100.0% [root@localhost ~]# vgreduce myvg /dev/sdb1 # 把/dev/sdb1从myvg中移除 Removed "/dev/sdb1" from volume group "myvg" [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 a-- 964.81M 964.81M /dev/sdb2 myvg lvm2 a-- 964.00M 904.00M /dev/sdb3 myvg lvm2 a-- 964.00M 0 #PV: 看到把/dev/sdb1的数据转移过来了 /dev/sdb5 myvg lvm2 a-- 964.00M 964.00M [root@localhost ~]# pvremove /dev/sdb1 # 把/dev/sdb1从物理卷上移除 Labels on physical volume "/dev/sdb1" successfully wiped [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb2 myvg lvm2 a-- 964.00M 904.00M /dev/sdb3 myvg lvm2 a-- 964.00M 0 /dev/sdb5 myvg lvm2 a-- 964.00M 964.00M
5、LVM实现快照,进行热备
lvm快照可以用于实时备份(moment-in-time),即为了保持系统的一致性,我们先做一个快照冻结当前系统状态,这样快照里面的内容可暂时保持不变,系统本身继续运行,通过备份快照来实现不中断服务的的备份。
注意合理的选择:快照的大小。否则将会导致失败
### lvcreate -s # 创建快照 # lvcreate -s -L 30M -n mysp -p r /dev/myvg/mylv1 # -L 快照大小 -n 快照名称 -p 权限 -s 创建快照 ### 我们把/dev/myvg/mylv1挂载到/mnt目录下 [root@localhost ~]# mount /dev/myvg/mylv1 /mnt [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 8.6G 2.4G 5.8G 30% / /dev/sda1 190M 12M 169M 7% /boot tmpfs 62M 0 62M 0% /dev/shm /dev/mapper/myvg-mylv1 2.0G 68M 1.9G 4% /mnt ### 拷贝一个文件作为测试 [root@localhost ~]# cp install.log /mnt ### 对/dev/myvg/mylv1创建快照 [root@localhost ~]# lvcreate -s -L 30M -n my_sp -p r /dev/myvg/mylv1 Rounding up size to full physical extent 32.00 MB Logical volume "my_sp" created [root@localhost ~]# lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert my_sp myvg sri-a- 32.00M mylv1 0.04 mylv1 myvg owi-ao 2.00G ### 创建挂载目录,并把快照挂载, 注意我们并没有为该快照创建文件系统 [root@localhost ~]# mkdir /backup [root@localhost ~]# mount /dev/myvg/my_sp /backup/ mount: block device /dev/myvg/my_sp is write-protected, mounting read-only [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 8.6G 2.4G 5.8G 30% / /dev/sda1 190M 12M 169M 7% /boot tmpfs 62M 0 62M 0% /dev/shm /dev/mapper/myvg-mylv1 2.0G 68M 1.9G 4% /mnt /dev/mapper/myvg-my_sp 2.0G 68M 1.9G 4% /backup ### 模拟系统正在运行,向/mnt写入文件 [root@localhost ~]# cp /boot/initrd-2.6.18-308.el5.img /boot/vmlinuz-2.6.18-308.el5 /mnt ### 此时,我们可以针对/backup备份,而不会受系统动态运行的影响 [root@localhost ~]# tar zcvpf my_sp.tar.gz /backup tar: Removing leading `/' from member names /backup/ /backup/lost+found/ /backup/install.log 看,实际备份的只是我们做快照时系统的状态,后来向/mnt写入文件,并不影响我们的备份。