设置分区配额,配置LVM

来源:互联网 发布:ubuntu做什么 编辑:程序博客网 时间:2024/05/22 01:41

一、设置分区配额

1.先新建一个设备

# fdisk /dev/vdb

2.格式化

# mdfs.xfs /dev/vdb1 -f

3.挂载

# mkdir /pub

# mount -o usrquota,grpquota /dev/vdb1 /pub

4.开启设备的配额功能

# quotaon -ugv /dev/vdb1

5.对某个用户设置配额

# edquota -u student

Disk quotas for user student (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/vdb1                     10240          0      10240          1        0        0

配置完对student的配额之后我们可以切换到student用户下进行测试:

[student@localhost ~]$ dd if=/dev/zero of=/test/file bs=1M count=100
dd: error writing ‘/test/file’: Disk quota exceeded                         ##超出磁盘配额
11+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.0214635 s, 489 MB/s


6.查看配额

$ quota

# repquota -a

7.永久激活配额

编写/etc/fstab文件

/dev/vdb1 /test xfs defaults,usrquota,grpquota  0 0

8.如何关闭配额

先卸载,再重新挂载

# umount /pub

# mount /dev/vdb1 /pub


二、使用逻辑卷管理器管理灵活存储


1.什么是LVM 


  LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。LVM是磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。物理卷(physical volume)物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
 

2.LVM解决了什么难题

  每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。因为如果估 计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区。   虽然现在有 很多动态调整磁盘的工具可以使用,例如PartationMagic等等,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽;另外一个方面这需要 重新引导系统才能实现,对于很多关键的服务器,停机是不可接受的,而且对于添加新硬盘,希望一个能跨越多个硬盘驱动器的文件系统时,分区调整程序就不能解 决问题。   因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。幸运的是Linux提供的逻辑盘卷管理(LVM,LogicalVolumeManager)机制就是一个完美的解决方案。  
  归纳来讲LVM提供两种比较厉害的功能:
     1):可以动态的增大或者缩小磁盘的大小而不影响磁盘原有的数据
     2):提供一种实现数据备份的通道--快照功能


3.几个需要了解的术语



*物理存储介质(PhysicalStorageMedia)
指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。

*物理卷(Physical Volume,PV)
指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

*卷组(Volume Group,VG)
类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。

*逻辑卷(Logical Volume,LV)
类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。

*物理块(Physical Extent,PE)
每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。

*逻辑块(Logical Extent,LE)

逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
图所示LVM抽象模型,展示了PV、VG、LV三者之间关系:
和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容:PV描述符、VG描述符、LV描述符、和一些PE描述符。
系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。


4.LVM的逻辑结构


这里要说明以下几点:
  1),pv被创建后是由很多的PE(physical extension物理盘区)组成的,物理盘区就相当于我们说的block,不过通常比一般的block大,可以是4M,8M,16M等,
  2),当VG被创建后,我们才能正常查看PE的数量
  3),其实最后的LV就是由这些PE组成的,不过在LV里面这些PE叫做LE
  4),一个系统上可以有很多个PV,VG,LV


5.配置LVM

做实验可以用一个bash来监控逻辑卷的状态

# watch -n 1 'pvs;echo ====;vgs;echo ======;lvs;echo ====;df -h /data'

1)准备物理卷

# fdisk /dev/vdb

要用t 修改ID为Linux LVM

2)创建pv

# pvcreate /dev/vdb1                    ##用物理卷创建pv

3)创建vg

# vgcreate vg0 /dev/vdb1             ##用pv创建vg

# vgremove vg0                            ##删除pv

# vgcreate -s 2m vg0 /dev/vdb1   ##创建大小为2M的vg

4)创建逻辑卷

# lvcreate -L 100M -n lv0 vg0       ##创建逻辑卷

# mkfs.xfs /dev/vg0/lv0                  ##格式化逻辑卷

# mount /dev/vg0/lv0 /data            ##挂载之后就可以使用了


6.扩大逻辑卷

1)当组里的空间够

# lvextend -L 500M /dev/vg0/lv0            ##将逻辑卷lv0扩大到500M

# xfs_growfs /dev/vg0/lv0                      ##将挂载点的空间也同步为刚扩大的500M


2)当组里的空间不够

# pvcreate /dev/vdb2
# vgextend vg0 /dev/vdb2
# lvextend -L 1200M /dev/vg0/lv0
# xfs_growfs /dev/vg0/lv0


7.缩小逻辑卷

1)

xfs不能缩减,所以先要将lvm设备格式化为ext4
# mkfs.ext4 /dev/vg0/lv0
2)

# e2fsck -f /dev/vg0/lv0先扫,防止缩的太小把数据弄坏了
3)

# resize2fs /dev/vg0/lv0                    刷新扩展空间
4)

# lvreduce -L 500M /dev/vg0/lv0       减小空间

5)恢复为xfs文件系统 

# mkfs.xfs /dev/vg0/lv0 -f

重新挂载

# mount /dev/vg0/lv0 /data


8.建立LVM快照

# lvcreate -L 40M -n lv0-snap -s /dev/vg0/lv0 建立快照
# mount /dev/vg0/lv0-snap /data
如果在快照里删除了某些东西,还可以恢复
先删除快照,在照一遍
# lvremove /dev/vg0/lv0-snap
# lvcreate -L 40M -n lv0-snap -s /dev/vg0/lv0
# mount /dev/vg0/lv0-snap /data

0 0