LVM逻辑卷管理
应用场景:想象一下,你通过传统的硬盘分区方式为某些用户提供了一块磁盘,随着用户数据的不断增加,分区的容量告急。这时要增加容量,只能选择用另一块容量更大的硬盘或分区来替换,在这个过程中,你需要将数据先拷贝至新设备,拷贝完成之后,再用新设备替换容量告罄的设备。假设你很有耐心并且整个数据的拷贝过程是顺顺利利的,你也需要考虑靠背后文件的权限变化、替换过程中用户业务终止造成的损失;即便你搞定了所有的问题,当用户业务迎来快速增长,或者你业务增长估计不足,或者出于节省开支的考虑,你需要缩减用户的硬盘空间,这时,你要怎么做呢?
还是来看看LVM吧。
LVM(Logical Volume Manager)是内核提供的一种逻辑卷管理器。适用于管理大型存储设备,允许用户动态调整文件系统的大小。LVM提供逻辑上的存储设备,用户不用再关心底层的物理硬盘。
一、逻辑卷的创建过程:
将一个或多个硬盘创建为PV(物理卷,Physical Volume),由一个或多个物理硬盘组合成VG(卷组,Volume Group),卷组是逻辑概念上的设备,其最小构成单位被称为PE(物理长度,Physical Extended),再将指定个数的PE组合成LV(逻辑卷Logic Volume)
二、创建逻辑卷
实验:给系统新增3块硬盘,容量分别为20G、20G、10G。在此基础上,创建一个名为newbie的VG,PE大小为8M,容量为35G,在VG的基础上创建一个名为newbie_lv的LV,容量为25G。将其挂载至/newbie目录,文件系统要求为xfs。
2.1 创建PV
要达到容量为35G需求,需要对sdb或sdc进行分区,创建一个大小为5G的分区。以sdb为例。
注意:创建完成后,要将分区的类型转换为LVM,类型选项8e。之后通知内核硬盘所做的改动:
CentOS6:partx
CentOS5、7:partxprobe
通过lsblk可查看到分区已创建完成。
之后,开始创建PV
使用:pvcreate device
pvcreate /dev/sdb1
因为之前sdd被使用过,并且创建了文件系统,系统询问是否擦掉硬盘上的文件系统,测试用,删之。
创建成功之后。可以通过pvs、pvdisplay常看系统上的PV信息。pvdisplay能查看详细信息。
/dev/sda2为安装系统时的配置。通过pvdisplay可以查看到每个pv的PE大小,总的PE数,剩余PE数,已使用PE数等信息。
~]#pvdisplay
"/dev/sdc" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name #属于哪个卷组,因为还没有将其加入到卷组中,所以无信息
PV Size 20.00 GiB #PV大小
Allocatable NO
PE Size 0 #PE大小
Total PE 0 #总PE数
Free PE 0 #剩余PE数
Allocated PE 0 #已使用PE数
PV UUID ClySli-njRv-u4Ot-AuNL-6qte-jCt3-2bqXOj
2.2 PV创建完成之后,将PV加入VG
根据实验要求,大小为35G,名称为newbie,PE大小为8M
使用vgcreate命令
vgcreate vg_name [option] devices
常用option:
-s:指定PE的大小。默认为4M
创建成功之后,通过vgs、vgdisplay(查看详细信息)查看VG的相关信息
vgdisplay [vgname]
2.3 在vg的基础上创建名为newbie_lv的逻辑卷,大小为25G
使用lvcreate命令创建lv
lvcreate [options] vgname
-n lvname :指定lv名称
-L size:指定lv的大小,单位为{M|G|T}
-l pe_count:指定创建的lv包含的PE数量(一般情况下直接指定大小。)
创建之后,查看,lvs、lvdisplay(详细信息)
lv在创建完成之后,其目录存放于/dev目录下,以dm-开头。为了方便使用,创建了2个软连接指向lv;分别为/dev/mapper/vgname-lvname、/dev/vgname/lvname,如图:
2.4 使用创建完成的lv
lv创建完成之后,就可以格式化和挂载使用了。此过程不再赘述
三、逻辑卷的扩容和缩减
3.1 逻辑卷扩容
LV的大小不能超过VG的大小,LV可扩展的大小即为VG的剩余大小。
VG的大小由PV决定,若VG大小不足,增加新的PV至VG中即可。
在上文中,我们增加了一个大小为25G的LV,已知VG的大小为35G,怎样将LV的大小扩容至45G。
在前文中,增加的硬盘容量共计为50G,我们只使用了35G,还有15G可用。将剩余的15G划分为一个分区,创建为PV,加入到VG中。
PV创建之后,使用vgextend来将PV加入VG
用法:vgextend vgname pvname
VG容量扩展之后,就可以将LV的容量扩展至45G了。
使用lvcreate来扩展
用法:
lvcreate lvname [option]
常用option;
-L m{M|G|T}:直接指定LV的大小为m {M|G|T}
-L + m{M|G|T}:在原有大小之上,再增加m{M|G|T}
注:请注意两者之间的区别,并且,新增后的LV大小不能小于原有的大小
这时,我们去查看/newbie是否相应的增加。注意在扩容的过程中没有umount该LV
发现/newbie的容量并没有增加,这是因为逻辑卷边界扩展之后,对应的文件系统边界并没有相应的扩展。需要注意的是,扩展ext系列的文件系统与xfs文件系统的方式并不一致。
扩展ext系列文件系统的边界:
resize2fs /dev/vg_name/lv_name
扩展xfs文件系统的边界:
扩展文件系统的边界之后,整个逻辑卷的扩展才算成功。
3.2 缩减LV
在生成环境中,缩减LV是一个比较危险的操作,为了避免数据被破坏,在操作前应将LV上的数据备份。建议慎用此操作。
将newbie_lv的大小缩减为40G。
逻辑卷的缩减顺序:
1)、先卸载,umount /dev/vg_name-lv_name
2)、强制检测修复文件系统:
ext系列:e2fsck -f /dev/vg_name-lv_name
xfs系列:xfs_repair /dev/vg_name-lv_name
3)、缩减文件系统(逻辑边界):resize2fs /dev/vg_name/lv_name m[MGT]
4)、缩减lvm: lvreduce -L [-]#[MGT] /dev/vg_name/lv_name
5)、挂载使用:mount
google了下,发现xfs文件系统只能扩容,不能缩减,没办法,只好把LV的文件系统调整为ext4了。我擦!当然,有兴趣的同志可以试试xfsdump和xfsrestore命令,前者用来备份,后者用来还原。
1)先卸载(注意:若将LV同时挂载到多个目录上,应全部卸载之后再操作),再修改文件系统类型(ext文件系统忽略)
~]#mkfs.ext4 /dev/newbie/newbie_lv
2)强制检测文件系统;缩减文件系统逻辑边界,缩减LV
注意:在缩减时,是先缩减文件系统的逻辑边界,再缩减LV
3)挂载使用。因为文件系统改变了,所以LV的UUID也发生了变化,在挂载时注意修改,
RAID管理
RAID:Redundent Arrays of Independent Disks 独立磁盘冗余阵列,其 思想是:将多块独立的磁盘按不同的方式组合为一个逻辑磁盘,从而提高存储容量,提升存储性能或提供数据备份功能
注意:RAID只是为磁盘自身提供冗余,避免出现因为磁盘损坏导致数据丢失的现象,并不能替代数据备份。
RAID实现的方式:
硬件方式:生产环境中多采用此方式
外接式磁盘阵列,通过扩展卡提供适配能力
内接式磁盘阵列,主板集成RAID控制器
软件方式:
Software RAID
一、RAID级别:
不同的级别表示多块磁盘组织在一起的工作方式不同。级别之间并无高低、上下之分。
1、RAID-0:0,不含校验和冗余的条带卷(strip)
数据被分割为多个部分,分别写入每块硬盘,所以能极大地提升存储性能和存储空间,磁盘利用率为100%,但无容错能力,一旦某块磁盘被损坏,则数据将被破坏,数据安全得不到保障。最少需要2块磁盘。
例:下图中,数据被同步分别存放于A、B、C三块磁盘中。若每块磁盘的容量为100G,则可利用的总容量为300G。因为没有备份和校验,若其中一块磁盘损坏,则会导致文件无法读取。
2、RAID-1:不含校验的镜像卷(mirror)
使用磁盘镜像技术,在一个磁盘上存放数据的同时也在另一个磁盘存放相同的数据。写性能下降,读取性能提升。具有冗余能力,数据安全得到保障,但最少需要2块磁盘,磁盘利用率低,仅为50%
RAID2,3,4(不常用,不做介绍)
3、RAID-5:
数据以block为单位同步式分别写入不同的磁盘上,并对数据作奇偶校验,并将校验码存入磁盘,校验码交互存放在各个磁盘中,当某块磁盘中的数据发送损坏时,可以通过其他2块磁盘来计算出损坏盘的数据,从而保证了数据的安全,数据的读写性能也得到提升。校验码占用一个磁盘空间大小。可用空间:(n-1)/n。具有容错能力:冗余1块。最少需要3块磁盘。还可以额外提供一块磁盘用作spare,并不真正加入阵列中,但当阵列中的某块磁盘损坏时,能自动替换损坏的磁盘。
4、RAID-6:
类似于RAID-5,但多用一块磁盘做校验。
磁盘利用率为(n-2)/n,
冗余2块,
最少磁盘数为4
二、RAID组合模式:
1、RAID-10:RAID1和RAID0的组合,先做RAID1(优于RAID01)。继承了RAID0的高效和RAID1的安全。磁盘利用率为50%,最少4块磁盘。
先将磁盘A和B做出一个RAID1,再将磁盘C和D做出一个RAID1,之后再将两个RAID1做成RAID0。当数据写入时,首先会议条带的方式分别写入由两个RAID1组合成的RAID0中,随后,在RAID1中又会以镜像的方式,写入数据时,同时备份该数据并写入到阵列中的另一块磁盘上。
2、RAID-01:RAID0和RAID1的组合,先做RAID0
3、RAID-50
最少6块磁盘
三、软RAID的实现方式:
注:在生产环境中尽量不要使用这种方式。应该采用硬件的方式来实现RAID功能。
使用mdadm命令来实现软raid
madam:模式化的工具
mdadm [mode] <RAIDdevice> [OPTIONS] <component-devices>
支持的RAID级别:RAID0、RAID1、RAID4、RAID5、RAID6
模式:
创建: -C
装配: -A
监控: -F
管理: -f,-r,-a
<RAIDdevice>:/dev/md#
-C:创建模式
-n #:使用#个块设备来创建此RAID
-l #:指明要创建的RAID的级别
-a {yes|no}:自动创建目标RAID设备的设备文件
-c CHUNK_SIZE:指明块大小
-x #:指明空闲盘的个数
创建软RAID的过程:
1)、创建磁盘分区。fdisk,并将分区格式修改为riad
2)、创建RAID5
mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sdb{5,6,7,8}
3)、给RAID5创建文件系统
4)、挂载该RAID。在/etc/fstab中挂载最好使用UUID来挂载
查看当前系统的磁盘阵列信息:cat /proc/mdstat
mdadm -D /dev/md0 查看指定磁盘阵列的详细信息
mdadm /dev/md0 -f /dev/sdb5 将属于某 磁盘阵列中的某块磁盘指定为损坏
mdadm /dev/md0 -r /dev/sdb5 将阵列中损坏的磁盘移除
mdadm /dev/md0 -a /dev/sdb5 为阵列增加新的磁盘
mdadm -S /dev/md0 停止md设备
四、实战演练:
例1:创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录
步骤:
(1)新增一块1G的硬盘
(2)将其分为2个分区,大小分别为500M
(3)创建raid1。
mdadm –C /dev/md100 –a yes –n2 –l 1 /dev/sdb{1,2}
(4)为raid1创建文件系统
mkfs.ext4 /dev/md100
(5)设置自动挂载
mkdir /backup
cat /etc/fstab
/dev/md100 /backup ext4 default 0 0
mount -a
例2:创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录
步骤:
(1)增加三块硬盘,容量分别为500M、500M、1G
(2)创建RAID5,指定chunk大小为256k
mdadm –C /dev/md200 –c 256 –n 3 –l 5 /dev/sd{c,d,e}
(3)创建文件系统
mkfs.ext4 /dev/md100
(4)设置自动挂载
mkdir /mydata
cat /etc/fstab
/dev/md200 /mydata ext4 default 0 0
mount -a
五、磁盘配额
综述:
配额在内核中执行,以文件系统为单位启用。对不同组或者用户的策略不同,可灵活应用。根据块或者节点进行限制
如何实现磁盘配额限制:
配额限制只能对磁盘进行操作
要对某个目录进行限额,需要将其挂载至独立的磁盘上。
步骤:
1、挂载时启用配额选项
vim /etc/fstab;在挂载选项增加usrquota,grpquota
2、创建配额数据库
quotacheck -cug /home
-c:创建
-u:usrquota
-g:grpquota
注:若提示权限问题,关闭selinux,setenforce 0
3、启用数据库
quotaon /home
quotaon -p /home:查看数据库是否启用
4、配置配额:三种方式
1)、edquota hadoop
文件格式:
blocks soft hard inodes soft hard
已使用的大小 警告大小 限定大小 已创建文件数 警告文件数 限定文件数
2)、edquota -p hadoop gentoo:参考hadoop用户的配额设置gentoo用户的配额限制
3)、setquota hadoop 100000 150000 0 0 /home
5、测试
quota hadoop
repoquota /home
dd往目录写文件
注:如何判断文件是否属于该用户:判断文件的属主,而不是文件的存放位置。
例:以给/home下每用户限额1G为例。
1)、给系统新增一块10G的硬盘。将硬盘挂载至/mnt/home。将/home的数据拷贝至/mnt/home
2)、卸载/mnt/home,将新增的磁盘设置自动挂载到/home目录下,注意在挂载是,挂载特性应增加上usrquota,grpquota两个选项。
3)、quotacheck -cug /home/;若报错,执行:setenforce 0
4)、quotaon -p /home/
5)、edquota hadoop,为hadoop用户配置限额
6)、edquota -p hadoop gentoo,参考hadoop用户配置gentoo用户的配额
原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/42311