LVM
LVM
Logic Volume Manager,version:2
dm:device manager
将一个或多个底层块设备组织成一个逻辑设备的模块
/dev/dm-#
/dev/mapper/VG_NAME-LV_NAME
/dev/mapper/v0_l0
/dev/VG_NAME/LV_NAME
/dev/v0/l0
上面这两方式都是指向LV设备的链接文件,真正LV设备文件是/dev/dm-#
PV管理工具
pvs
简要pv信息显示
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg0 lvm2 a-- 59.99g 7.99g
pvdisplay
显示pv的详细信息
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name vg0
PV Size 60.00 GiB / not usable 8.00 MiB
Allocatable yes
PE Size 8.00 MiB
Total PE 7679
Free PE 1023
Allocated PE 6656
PV UUID WOJfGB-lKLN-Gvbl-MZmT-r4gK-AkSg-8lb9uj
在这里,显示了LV的详细信息,包括他的PV、VG名称,PV大小,PE的大小,PE总额和PV UUID
pvcreate
- 创建之前
已经分配了4个分区,大小都是5G,但是他们的ID都是fd也就是用于创建raid,再创建PV之前要把他们的ID修改为8e(Linux LVM)
- 创建PV
pvcreate /dev/DISK#
“
[root@localhost ~]# pvcreate /dev/sdb{1,2,3}
Physical volume “/dev/sdb1” successfully created
Physical volume “/dev/sdb2” successfully created
Physical volume “/dev/sdb3” successfully created
![](http://i.imgur.com/ig6yuwg.jpg)
pvmove
pvmove /dev/DISK#
pvmove命令用于移除VG中的PV,没有加入VG的PV是不能pvmove的
pvremove
pvremove /dev/DISK#
pvremove用于将PV分区(磁盘)删除,删除之后,这个磁盘就可以当作正常的分区使用了
VG管理工具
vgs
vgdisplay
vgcreate
vgcreate [-s|--physicalextentsize PhysicalExtentSize[bBsSkKmMgGtT]] VolumeGroupName PhysicalDevicePath...
-s选项用于指定PE的大小,默认大小为4MB
将上述的sdb1,sdb2,sdb3合并作为一个VG
[root@localhost ~]# vgcreate -s 8M vghusa /dev/sdb{1,2,3}
Volume group "vghusa" successfully created
在这里指定PE大小为8M
vgreduce
vgreduce VolumeGroupName PhysicalDevicePath...
这里要先使用pvmove,表示移走了pv
首先使用pvmove移除PV,但是VG中仍然是15G
然后使用vgreduce移除PV所在分区,VG的大小就变了
vgextend
vgextend VolumeGroupName PhysicalDevicePath...
[root@localhost ~]# vgextend vghusa /dev/sdb3
Volume group "vghusa" successfully extended
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 1 4 0 wz--n- 59.99g 7.99g
vghusa 3 0 0 wz--n- 15.02g 15.02g
再次把移除的PV添加进来,VG大小变为15G
vgremove
移除VG
lv管理工具
lvs
lvdisplay
lvdisplay /PATH/TO/LV
这个命令只能使用LV详细的设备文件,不能只是用LV的名称
lvcreate
lvcreate -L|--size LogicalVolumeSize[bBsSkKmMgG]} [-n|--name LogicalVolume{Name|Path}] VolumeGroup{Name|Path}
-L指定逻辑卷大小-n指定逻辑卷名称
[root@localhost ~]# lvcreate -L 5G -n lvhusa vghusa
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root vg0 -wi-ao---- 20.00g
swap vg0 -wi-ao---- 2.00g
usr vg0 -wi-ao---- 10.00g
var vg0 -wi-ao---- 20.00g
lvhusa vghusa -wi-a----- 5.00g
可以看到已经创建了LV
lv文件系统创建
当LV建立以后,LV就是一种建立在各种分区上的设备了,此时就要给LV建立文件系统
在LV上创建文件系统之后,这个LV就可以投入使用了,以下是挂载并创建文件的过程
[root@localhost ~]# mkdir /backup
[root@localhost ~]# mount /dev/dm-4 /backup
[root@localhost ~]# cd /backup
[root@localhost backup]# ls
lost+found
[root@localhost backup]# touch lvhusa.rootfile
[root@localhost backup]# cc
[root@localhost backup]# vim lvhusa.rootfile
this is a file created by root in lvhusa
扩展逻辑卷
lvextend
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
这里lv要使用上述的这种形式
+表示增加多少
没有+表示直接指定lv大小
因为LV直接建立在VG之上,以上还没有完全是用掉VG,所以还可以继续扩展LV的容量
resize2fs
虽然扩展了物理空间,但是文件系统还是原来的大小,所以还要格式化lv
resize2fs /dev/VG_NAME/LV_NAME
修改lv文件系统,这样lv就扩大了
扩展逻辑卷之后LV自动调整大小了,所以也就不用再resizeLV的大小了
缩减逻辑卷
缩减逻辑卷是一个危险的操作,因为可能丢失LV上建立的文件,缩减LV要在LV卸载的状态下进行
卸载lv
umount /dev/VG_NAME/LV_NAME
[root@localhost /]# umount /dev/dm-4
文件系统检测
e2fsck -f /dev/VG_NAME/LV_NAME
[root@localhost /]# e2fsck -f /dev/dm-4
e2fsck 1.41.12 (17-May-2010)
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
ext4husa: 12/655360 files (0.0% non-contiguous), 76784/2621440 blocks
修改lv文件系统大小
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
[root@localhost /]# resize2fs /dev/dm-4 5G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/dm-4 to 1310720 (4k) blocks.
The filesystem on /dev/dm-4 is now 1310720 blocks long.
缩减lv大小
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
[root@localhost /]# lvreduce -L 5G /dev/vghusa/lvhusa
WARNING: Reducing active logical volume to 5.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lvhusa? [y/n]: y
Size of logical volume vghusa/lvhusa changed from 10.00 GiB (1280 extents) to 5.00 GiB (640 extents).
Logical volume lvhusa successfully resized
注意:这里要使用上面的这种路径形式,否则会报错
重新挂载lv
[root@localhost /]# ls /backup/
[root@localhost /]# mount /dev/vghusa/lvhusa /backup/
[root@localhost /]# ls /backup/
lost+found lvhusa.rootfile
从以上可以看出,缩减了大小之后以前创建的文件还存在
注意:以上文件系统的检查和修改大小仅仅针对ext文件系统,其他文件系统(xfs、btrfs)需要用相应的管理工具
删除逻辑卷
lvremove
[root@localhost /]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root vg0 -wi-ao---- 20.00g
swap vg0 -wi-ao---- 2.00g
usr vg0 -wi-ao---- 10.00g
var vg0 -wi-ao---- 20.00g
Snapshot Volumes
快照卷是逻辑卷中的元数据的一种备份,可以理解为它是LV中文件的另一条访问路径。
当LV中的文件没有发生变化,那么snapshot volume能够正确的访问当时的文件,但是如果LV中的文件变化,那么snapshot也只能访问创建快照卷那一刻的文件,任何新增的文件是不能找到的
序列化
把文件转换为一种传输的形式,java中类的序列化
创建snapshot volume
lv -L #[mMgGtT] -p PERM -s -n snapshot_lv_name orginal_lv
以上过程中,快照卷中的文件是快照那一刻的文件,后来的任何修改都不会影响快照卷,因此,可以备份快照卷的内容,备份完毕之后,快照卷也就没有什么作用了
另外,由于快照卷也是建立在LV之上,所以可以直接挂载而不用建立文件系
注意:快照卷的作用用于备份,如果原卷变化,则路径不再存在,需要把原卷的内容复制到快照卷。快照卷用完复制(备份)就要删除了,快照卷不要长期存在,其空间超过设定容量,直接崩溃
例子
1、创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB,而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录。
2、新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,赋值/erc/pam.d目录至自己的家目录
3、扩展testlv至7G,要求archlinux用户的文件不能丢失
4、收缩testlv至3G,要求archlinux用户的文件不能丢失
5、对testlv创建快照,并尝试基于快照备份数据,验证快照的功能
dd命令
cp通过文件系统赋值,但是dd通过blocks复制
用法
dd if=/PATH/TO/SRC of=/PATH/to/DEST
bs=#:block size,复制单元大小,大小为字节
count=#:复制多少个bs
拷贝磁盘
dd if=/dev/sda of=/dev/sdb
备份MBR
dd if=/dev/sda of=/dev/mbr.bak bs=512 count=1
清除MBR和bootloader
dd if=/dev/zero of=/dev/sda bs=512 count=1
dd if=/dev/zero of=/dev/sda bs=256 count=1
实验过程
可以发现系统不能开启了
特殊设备
/dev/null
/dev/zero