逻辑卷管理器(LVM)
容许对卷进行方便操做的抽象层,包括从新设定文件系统的大小
容许在多个物理设备间从新组织文件系统
通常它的操做步骤为:app
- 将磁盘或者分区指定为物理卷,分区的话注意修改标签(fsidk或gdisk)
- 用一个或者多个物理卷来建立一个卷组
- 物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
- 在物理卷上建立的逻辑卷是由物理区域(PE)组成,PE是分配逻辑卷的基本单位,在建立卷组时能够指定,相似于普通硬盘分区时的块大小
- 能够在逻辑卷上建立文件系统
- 用卷组的free的PE空间建立逻辑卷,此逻辑卷即可做为普通硬盘使用。
- 对新建立的逻辑卷(至关于新分区)建立文件系统,挂载(mount和写入/etc/fstab)使用
LVM介绍
LVM: Logical Volume Manager, Version 2
dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块
设备名:/dev/dm-#
软连接:
/dev/mapper/VG_NAME-LV_NAME :mapper名加组名-逻辑卷名
/dev/mapper/vol0-root
/dev/VG_NAME/LV_NAME : 组名加逻辑卷名
/dev/vol0/rootide
LVM能够弹性的更改LVM的容量
经过交换PE来进行资料的转换,将原来LV内的PE转移到其余的设备中以下降LV的容量,或将其余设备中的PE加到LV中以加大容量工具
附加描述和注意点:
- 逻辑卷的提出就是为了解决在工做中硬盘分区完毕又没法扩展的空间不足问题(若是硬件上采用raid更加突出了可以随时扩展空间的重要性)
- 逻辑卷能够在线(挂载状态)进行扩展操做,转移硬盘数据并更换硬盘等等,所以用逻辑卷技术十分方便和效率。抽象的逻辑卷技术其配合硬件raid的容错性,能够保证数据硬盘空间的各类操做都行云流水。
- 组成卷组的时候各个物理卷既能够是分区也能够是一整块硬盘,其大小能够不相同。同时其分区方式(整块新硬盘的话就没有分区方式了)MBR或者GPT也能够不一样,(注意其文件系统格式(只有分区才有)也能够不一样,由于当把它做为物理卷的时候,它的文件系统格式直接就会被改为lvm格式。最后逻辑卷的时候会新建立文件系统)
- 注意将分区建立为物理卷以前最好先修改其标签(fdisk或gdisk中的t选项),虽然不修改也能使用,不过功能和说明标签不相符,最好仍是标准化提早修改标签。但若是直接一块硬盘没有分区也没有建立文件格式的时候直接拿来建立物理卷则不须要修改标签了(由于没有建立分区因此没法添加标签)
- 注意建立物理卷的时候会抹掉全部数据,更改文件系统格式,所以要提早备份号里面的数据,卸载掉挂载点,而后再进行操做。
- 建立线性逻辑卷的时候若指定名称,会出现 /dev/组名/逻辑卷名 和 /dev/mapper/组名-逻辑卷名 两个名称 ,但他们都只是软连接,指向/dev/dm-0 (编号从0开始的逻辑卷文件)
- 等建立完逻辑卷以后(至关于建立了新分区),而后别忘了建立文件系统,和以前物理卷的文件系统lvm注意区别,此时一个逻辑卷就像至关于一个新分区。
- 注意扩展逻辑卷的lvextend 后面也是小写l +PE数量 和大写L +空间大小。 须要关注的就是若是不加上+这个符号,则意思是把这个卷扩展到指定的PE数量或者空间大小,而不是增长空间(若是指定的大小比原先还要小,则变成了缩减). 扩展逻辑卷的时候确保卷组剩余的空间够用,若是不够用,须要增长物理卷到卷组中增长空间。
- 扩展物理卷到卷组命令为vgextend 卷组名 物理卷1 物理卷2...
- 扩展逻辑卷以后,若是用lvdisplay命令能够看到已经扩展成功,可是df命令仍然显示的是以前的数据,是由于df显示的是文件系统的大小,虽然逻辑卷已经扩展,但扩展上去的部分并无同步以前lvm已经建立的文件系统,是空的文件系统。所以须要同步一下文件系统。
- xfs_growfs /mnt/vgtest/vgtest1或者/dev/vgtest/lvtest1 : xfs扩展文件系统命令,即为xfs_growfs 挂载点或者设备名
- resize2fs 挂载点或者设备名 :ext4扩展文件系统命令
- 固然扩展的时候 能够加上-r 选项 直接扩展空间的同时同步文件系统,支持xfs和ext4格式,就不须要再两次操做了
lvextend -r -L +1G /dev/vgtest/lvtest1
- 扩展逻辑卷的时候能够在线(挂载状态)扩展,同时数据也不会受到影响,从这里也能够看出lvm的强大和好处。
- xfs文件系统的逻辑卷不支持缩减,可是ext系列的支持缩减(通常不多用),但会有数据丢失的风险(数据比要缩减后的大小要多时,但即便很少于,也有可能丢失数据),所以必定要提早备份。
- 注意扩展的时候能够在线扩展,而缩减的时候必需要先离线卸载掉
- 扩展的时候两步的话先扩展空间再同步文件系统,缩减的时候恰好相反先缩减文件系统而后再减小空间。
- lvresize 便可以缩减也能够扩展。
pvcreate /dev/sdb2 /dev/sdb3 /dev/sdd
pvdisplay
vgcreate vgtest /dev/sdb{2,3} /dev/sdd
vgdisplay
lvcreate -n lvtest1 -L 3G vgtest #建立线性逻辑卷
lvcreate -n lvtest2 -L 2G vgtest
lvdisplay
# ll /dev/vgtest/lvtest1 或者ll /dev/mapper/vgtest-lvtest1 查看软连接指向的文件
mkfs.xfs /dev/vgtest/lvtest1
mkfs.ext4 /dev/vgtest/lvtest2
blkid
mkdir /mnt/vgtest/lvtest{1,2}
写挂载文件到fstab上
mount -a #挂载逻辑卷
lvextend -L +1G /dev/vgtest/lvtest1 #扩展逻辑卷1 ,xfs格式的
xfs_growfs /dev/vgtest/lvtest1 #同步文件系统xfs格式
lvextend -L +500M /dev/vgtest/lvtest2 #扩展逻辑卷2 ,ext4格式的
resize2fs /dev/vgtest/lvtest2 #同步文件系统ext4格式
也能够一步到位:
lvextend -r -L +1G /dev/vgtest/lvtest1
缩减ext4格式LVM:
umount /dev/vgtest/lvtest2 :先卸载
fsck -f /dev/vgtest/lvtest2 :再检查
resize2fs /dev/vgtest/lvtest2 2G :缩减到2G
lvreduce -L 2G /dev/vgtest/lvtest2 :注意大小要和上面写的同样
mount /dev/vgtest/lvtest2 /mnt/vgtest/lvtest2 或者mount -a
建立快照:
lvcreate -s -L 1G -n lvtest1_snapshot -p r /dev/vgtest/lvtest1(-pr可加可不加,建议加上,这是以只读方式建立,挂载mount命令的时候也可再加上。不过通过测试,这里加上-pr 则mount中即使加上-o nouuid的方式也挂载不上去了)
lvconvert --merge /dev/vgtest/lvtest1_snapshot(还原合并以前都要卸载掉先)
转移将要损坏的硬盘或者分区的PE块用于更换:
首先查看卷组中剩余PE空间是否足够,不够的话建立新物理卷并加入
pvcreate /dev/sde
vgextend /dev/vgtest /dev/sde
pvmove /dev/sdd
vgreduce /dev/vgtest /dev/sdd
pvremove /dev/sdd
- 逻辑卷的迁移相似硬盘分区的迁移,硬盘分区迁移只能拆掉包含这个分区的硬盘,而逻辑卷的迁移也是将组成这个逻辑卷的全部PE块的数据迁移到其余机器上,则须要迁移这整个卷组。
- 问题:将原先以普通分区方式分区的硬盘根目录下某个大文件夹(好比home目录)迁移到新装的逻辑卷上,这样就能够用逻辑卷扩展此文件夹,避免此文件夹继续增大占满根目录。如何操做?
- 首先要新加装硬盘或者分区,建立逻辑卷(物理卷-标签-卷组-逻辑卷),(注意增长分区标签的时候要看清分区格式选择用fdisk仍是gdisk,而后用t修改标签,若是把一整块硬盘做为物理卷就没有标签这一说了)
- 而后就是将逻辑卷挂载到临时挂载文件夹下,将home目录的全部数据拷贝到此逻辑卷中(注意拷贝命令用 cp -av /home/. 临时挂载点 的方式来拷贝,可以拷贝全部隐藏非隐藏文件),拷贝以后检查一下是否彻底拷贝成功(用ls ll du 等命令)
- 拷贝完毕后删除home下的数据(或者稳妥起见,先不删除试用,不删除的话跳过这一步)
- 最后将此逻辑卷挂载到根目录下源文件夹所在地址即为/home处便可,注意将自动挂载写入fstab文件中。(上一步不删除的话home内的文件没有入口被隐藏了,等到逻辑卷经测试可以稳定使用了以后再删除掉原先根目录里面的文件,这样最稳妥)
- 注意根分区是不可能迁移的,操做系统装在根上不能迁移,不如直接重装。
pv管理工具
显示pv信息
pvs:简要pv信息显示
pvdisplay :现实详细物理卷信息测试
建立pv
pvcreate /dev/DEVICE ... :能够多个同时建立ui
删除pv
pvremove /dev/DEVICE ... :能够多个同时移除url
vg管理工具
显示卷组
vgs
vgdisplay操作系统
建立卷组
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]code
- 即为vgcreate 卷组名 物理卷1 物理卷2... 能够加上其它选项好比-s 指定PE大小等等
管理卷组
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]rem
删除卷组
先作pvmove,再作vgremove同步
lv管理工具
显示逻辑卷
lvs
Lvdisplay
建立线性逻辑卷
lvcreate -L #[mMgGtT] -n NAME VolumeGroup :大写L后面直接写大小,小写l后面跟的是PE的数量
- lvcreate -L 大小 -n 逻辑卷名称 卷组名
lvcreate -l 60%VG -n mylv testvg
lvcreate -l 100%FREE -n yourlv testvg
- 注意lvextend 也能够用百分号的方式来扩展逻辑卷
lvrename 更名字
使用lvrename命令更改逻辑卷名
lvrename /dev/VolGroup00/LogVol00 /dev/VolGroup00/lv_root
lvrename /dev/VolGroup00/LogVol01 /dev/VolGroup00/lv_swap
删除逻辑卷
lvremove /dev/VG_NAME/LV_NAME
重设文件系统大小
fsadm [options] resize device [new_size[BKMGTEP]]
resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]
xfs_growfs /mountpoint
扩展和缩减逻辑卷
扩展逻辑卷:
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME
lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
- 注意扩展逻辑卷的时候只须要写上逻辑卷的名称(软连接或者说dm-#),不须要写卷组名了,但要保证卷组有足够空间,扩展时也可用 lvextend -l 百分数free 的方式.
缩减逻辑卷:
umount /dev/VG_NAME/LV_NAME :先卸载
e2fsck -f /dev/VG_NAME/LV_NAME :再检查
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT] :缩减文件系统到多大
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME :缩减空间到多大,要和上面的文件系统对应
mount :再次挂载
跨主机迁移卷组
源计算机上
- 在旧系统中,umount此卷组上的全部逻辑卷
- 禁用卷组
vgchange –a n vg0
lvdisplay
- 导出卷组
vgexport vg0
pvscan
vgdisplay
拆下旧硬盘
在目标计算机上
- 在新系统中安装旧硬盘,并导入卷组:vgimport vg0
- vgchange –ay vg0 启用
- mount全部卷组上的逻辑卷
建立逻辑卷示例
- 建立物理卷
pvcreate /dev/sda3
- 为卷组分配物理卷
vgcreate vg0 /dev/sda3
- 从卷组建立逻辑卷
lvcreate -L 256M -n data vg0
mkfs.xfs /dev/vg0/data
- 挂载
mount /dev/vg0/data /mnt/data
逻辑卷管理器快照
- 快照是特殊的逻辑卷,它是在生成快照时对于指定的存在的逻辑卷的准确拷贝
- 对于须要备份或者复制的现有数据临时拷贝以及其它操做来讲,快照是最合适的选择,
- 快照只有在它们和原来的逻辑卷不一样时才会消耗空间
- 在生成快照时会分配给它必定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间
- 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中
- 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据
- 创建快照的卷大小小于等于原始逻辑卷(大于它没有意义),也可使用lvextend扩展快照的卷
使用LVM快照
为现有逻辑卷建立快照(新建逻辑卷并做为快照盘,指向须要备份的逻辑卷)
lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data
-s 表明快照的标签 -p r是以只读方式建立这个快照盘(这里-p r不加也能够,能够挂载的时候用mount中命令只读挂载)
挂载快照(快照能够不挂载,就算要挂载也最好用只读挂载方式)
mkdir -p /mnt/snap
mount -o ro /dev/vg0/data-snapshot /mnt/snap
恢复快照(须要先卸载掉快照区域和对应的逻辑卷区域)
umount /dev/vg0/data-snapshot
umount /dev/vg0/data
lvconvert --merge /dev/vg0/data-snapshot
删除快照(先卸载再删除)
umount /mnt/databackup
lvremove /dev/vg0/databackup
注意点:
- 快照就是将当时的系统信息记录下来,就好像照相通常,若未来有任何数据改动了,则原始数据会被移动到快照区,以后对其进行屡次改动甚至删除也不会再影响快照内的内容了,它只会保留第一次修改前的最初的原数据内容。而没有改动的数据则由快照区和文件系统共享
- 因为快照区与本来的LV共用不少PE的区块,所以快照与被快照的LV必须在同一个VG中.系统恢复的时候的文件数量不能高于快照区的实际容量
- 快照建立时就会保留建立时的对应逻辑卷的状态,若是想要保留多个状态,则须要再次开辟快照区域并指定好逻辑卷目标
- 建立快照前确保卷组内还有空间,没有的话须要增长物理卷增长卷组空间
- 快照的大小决定了它最多能保留和恢复原逻辑卷改动的内容,所以不能设置的过小,它的优势就是可以备份逻辑卷快照时的状态(比cp速度快),缺点就是会影响读写逻辑卷的速度(由于读写时将同时将原文件cp送到快照里面),以及占用卷组的空间。所以快照长期不用或者用完了以后必定要删除,不只占用空间还影响原逻辑卷读写速率。(先卸载再删除,若是想要删除有快照盘的逻辑卷,须要先删除快照盘才可)
- 按照原理来讲若是不更改原逻辑卷内内容,快照内没有数据,可是挂载快照以后通过测试发现仍然可以看到里面存有数据。这个是人为系统设置的功能,为了给人一种快照盘确实已经备份成功的感受,否则若是查看快照盘内内容空空如也,会给人一种没有备份成功的错觉。
- 快照盘和对应逻辑卷UUID相同,所以用mount挂载的时候会报错,(只在s系列中须要,若是是 ext系列中不须要加-o nouuid)必须加上选项 mount -o nouuid /dev/vgtest/lvtest1_snapshot /mnt/lvtest1_snapshot,若是建立快照盘的时候没有加上-pr 则此时最好也加上-o ro选项。
- 注意了新建快照逻辑卷时必须指定标签-s 以及它想要备份的逻辑卷盘(普通盘指定的是卷组,快招盘制定的是想要备份的逻辑卷),建立命令结束以后其实就已经完工了。注意快照盘不须要建立文件系统格式,它会根据对应要备份的逻辑卷自动建立文件格式
- 恢复快照盘的时候必需要卸载mount,原有的逻辑卷以及快照盘都要卸载才能还原。可是注意还原以后,这个快照盘就会被自动删除并释放空间。
- 问题:若是一个硬盘或者分区(注意不是逻辑卷)将要损坏,要怎么办?
- 先用pvdisplay查看此硬盘(或者包含分区的硬盘,下同,就再也不注明了)PE块使用状况,而后把此硬盘的PE块(包括PE组成的块里的内容)所有转移到此卷组的剩余物理卷的PE上去,固然前提是这个卷组剩余的free空PE块要比这个硬盘所占的PE空间块多。若是不够用的话,增添硬盘,新建立物理卷并添加进卷组中便可。
- 转移完此硬盘PE块(包括里面的数据)以后,即可卸载掉这个物理卷,而后就能够把这个硬盘拆掉更换新的硬盘了。
- 注意转移完PE以后要先把物理卷从卷组中移除而后才能删除这个物理卷,最后再拆除硬盘或者包含分区的硬盘。