Linux中设备管理(二):磁盘配额,LVM:逻辑卷管理器
1. 磁盘配额
linux系统中,由于是多用户、多任务的环境,所以会有多用户共同使用一个硬盘空间的情况发生,如果其中有少数几个用户大量占掉了硬盘空间的话,会影响到其他用户的使用权限。因此系统管理员用该适当限制硬盘的空间给用户,以妥善分配系统资源。
下面就来介绍如何限制系统中的用户对磁盘的使用
1.1 首先建立一个新的磁盘分区,作为系统用户的公用磁盘
[root@station ~]# fdisk /dev/vdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
........(中间省略)........
Command (m for help): p
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
........(中间省略)........
Disk label type: dos
Disk identifier: 0x000a6cc4
Device Boot Start End Blocks Id System
/dev/vdb1 2048 2099199 1048576 83 Linux
1.2 对新建分区的文件系统进行格式化(可以选择常规的xfs
或ext
文件系统类型)
[root@localhost ~]# mkfs.xfs /dev/vdb1
[root@localhost ~]# mount /dev/vdb1 /mnt
[root@localhost ~]# chmod 777 /mnt #修改权限作为公共磁盘
[root@localhost ~]# mkfs.ext3 /dev/vdb2
[root@localhost ~]# mount /dev/vdb2 /mnt
[root@localhost ~]# chmod 777 /mnt #修改权限作为公共磁盘
1.3.进行配额激活
文件系统为xfs的无需进行手动激活,在执行挂载命令后自动激活;
文件系统为ext的,需要执行以下命令进行手动激活。
- quotacheck -u /dev/vdb2 #quotacheck:扫描文件系统并新建quota的配置文件
#-u:针对用户扫描文件与目录使用情况- quotaon -u /dev/vdb2 #启动quota服务;
#-u:针对用户启动quota
- xfs文件系统
[root@localhost ~]# mount -o usrquota /dev/vdb1 /mnt
-o usrquota #以此方式进行挂载才能被quota识别
[root@localhost ~]# edquota -u student
edquota #用来编辑用户或用户组的限额命令
Disk quotas for user student (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/vdb1 0 0 200M 0 0 0
~
blocks #在磁盘上已经用的大小
soft #软件限额 磁盘容量的软件容限,单位为KB
hard #硬件限额 用了多少后就不能再应使用,单位为KB 修改此处
inodes #文件已有的个数
soft #建立多少个文件后会受到警告
hard #建立多少文件后就不会建立了
执行如下:
- ext3文件系统
[root@localhost ~]# mount -o usrquota /dev/vdb2 /mnt
[root@localhost ~]# quotacheck /dev/vdb2 #扫描文件系统
[root@localhost ~]# quotaon /dev/vdb2 #启动quota服务
[root@localhost ~]# edquota -u linux #用来编辑用户linux的限额命令
Disk quotas for user linux (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/vdb2 0 0 200M 0 0 0
~
执行如下:
以上就完成了用户对磁盘的配额,可通过dd
指令进行验证配额是否成功
在设定了设定配额用户下进行(切换到已配额用户下)
[root@localhost ~]# su - linux #切换到已配额用户
[linux@localhost ~]$ dd if=/dev/zero of=/mnt/linuxfile bs=1M count=201
#从无限零设备中截取201块,每块大小为1M,作为/mnt/linuxfile
dd:截取命令
if:inputfile
of:outfile
bs:截取快的大小
count:块
报错: vdb2: write failed, user block limit reached. #写入失败,用户块限制到达。
dd: error writing ‘/mnt/linuxfile’: Disk quota exceeded #错误写入/mnt/linuxfile:超过了磁盘配额
200+0 records in
199+0 records out
209506304 bytes (210 MB) copied, 0.170388 s, 1.2 GB/s
这样就可以验证上面对linux用户进行的磁盘可用大小为200M的限额命令
执行如下:
想要开机自动激活配额存在
- 编辑:vim /etc/fstab
内容:/dev/vdb1 /mnt xfs(ext3) defaults,usrquota 0 0
2. LVM(Logical Volume Manager)逻辑卷管理器
我们在进行服务器或者主机建立时,规划给服务器或者主机的用户家目录(/home)一定的内存,但是经过一段时间的运行,用户越来越多,服务器或/home目录内存不够用,想解决这个问题,将服务器或者/home下的内容全部进行复制然后移动到另一个更大的服务器或目录中,完成扩容,这样太过于麻烦,耗费时间,者和死后就需要LVM了。
LVM可以整合多个物理分区在一起,让这些分区看起来就像是一个磁盘一样,而且还可以在将来其他物理分区或将其从这个LVM管理的磁盘中删除,十分方便。
- LVM的作法是将几个实体的分区(或磁盘)通过软件组合成为一块看起来是独立的大磁盘(VG) ,然后将这块大磁盘再经过分区成为可使用分区(LV),最终就能够挂载使用了。
下面介绍一下pv,vg,pe,lv这几个重要概念
- PV:( Physical Volume )物理卷
通过 fidsk 将实际的分区(或磁盘)的系统识别码(system ID)调整为为 8e (LVM 的识别
码),然后再经过 pvcreate 的指令将他转成 LVM 最底层的物理卷轴(PV),之后才能够将
这些 PV 加以利用。- VG:( Volume Group )物理卷组
所谓的 LVM 大磁盘就是将许多 PV 整合成 VG 。所以 VG 就是 LVM 组合起来的大磁盘。- PE:(Physical Extent)实体范围区块
LVM 默认使用 4MB 的 PE 区块,他是整个 LVM 最小的储存区块,也就是说,其实我们的文件数据都是借由写入 PE 来处理的。简单的说,这个 PE 类似于文件系统里面的 block 大小。- LV:(Logical Volume)逻辑卷
最终的VG 会被切成 LV, LV 就是最后可以被格式化使用的类似分区的东西。LV不可以随意指定大小。 PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。
下面就来进行LVM的建立删除,扩大与缩减
注:
可通过监控命令:watch -n 1 ‘pvs;vgs;lvs;df -h’来进行观测对于LVM的建立
2.1 新建分区修改ID 8e
[root@localhost ~]# fdisk /dev/vdb
Command (m for help): n
......(省略创建过程)......
Device Boot Start End Blocks Id System
/dev/vdb1 2048 2099199 1048576 8e Linux LVM
/dev/vdb2 2099200 4196351 1048576 8e Linux LVM
/dev/vdb3 4196352 6293503 1048576 8e Linux LVM
2.2 建立LVM
[root@localhost ~]# pvcreate /dev/vdb1 #初始化一个磁盘或分区供LVM使用
[root@localhost ~]# vgcreate vg0 /dev/vdb1 #创建一个名为vg0的卷组
[root@localhost ~]# lvcreate -L 300M -n lv0 vg0 #在现有卷组中创建逻辑卷
-L:表示创建的大小
-n:逻辑卷名称
2.3 格式化分区
注:
xfs 文件系统只支持拉伸不支持缩减,而ext类型则可以进行拉神与缩减
对逻辑卷进行分区格式化
[root@localhost ~]# mkfs.ext4 /dev/vg0/lv0
2.4 进行挂载使用
[root@localhost ~]# mount /dev/vg0/lv0 /mnt
2.5 进行扩展LVM
[root@localhost ~]# pvcreate /dev/vdb2 #添加物理卷
[root@localhost ~]# vgextend vg0 /dev/vdb2 #将物理卷添加到已有卷组中
[root@localhost ~]# lvextend -L 1800M /dev/vg0/lv0 #扩展逻辑卷的大小
注意:-L是将原有物理卷扩展到1800M而不是加上1800M
执行如下:
直接扩展后lv的实际可用内存还是原来的大小,需要将文件系统也进行扩展
[root@localhost ~]# xfs_growfs /dev/vg0/lv0 #扩展xfs文件系统
[root@localhost ~]# resize2fs /dev/vg0/lv0 1800M #扩展ext文件系统
2.6 缩减LVM大小(ext文件系统)
[root@localhost ~]# umount /mntt #先保证LVM空闲
[root@localhost ~]# e2fsck -f /dev/vg0/lv0 #检查Linux ext文件系统
[root@localhost ~]# resize2fs /dev/vg0/lv0 1000M #调整文件系统
[root@localhost ~]# mount /dev/vg0/lv0 /mnt #挂载设备,查看效果
[root@localhost ~]# lvreduce -L 1000M /dev/vg0/lv0 #减小逻辑卷的大小
执行如下:
卸载并检查文件系统
调整文件系统大小并挂载查看效果
减小逻辑卷的大小
- 缩减vg,移除pv
当需要移除的pv设备未闲置时执行:
[root@localhost ~]# pvmove /dev/vdb1 /dev/vdb2 #移动物理区段,将需要移除的物理卷中
#的内容转移到另一个闲置物理卷中
[root@localhost ~]# vgreduce vg0 /dev/vdb1 #减少一个卷组
[root@localhost ~]# pvremove /dev/vdb1 #删除一个物理卷
2.7 LVM快照
所谓快照就是将当时的系统信息记录下来,就好像照相记录一样,未来若有任何数据更动了,则原始数据会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。
将l原来的lv0进行挂载然后创建文件,以此点建立快照
[root@localhost ~]# touch /mnt/test{1..5} #创建文件
[root@localhost ~]# ls /mnt/
[root@localhost ~]# lvcreate -L 50M -n lv0snapshot -s /dev/vg0/lv0 #建立LVM快照
[root@localhost ~]# umount /mnt #卸载原LVM
[root@localhost ~]# mount /dev/vg0/lv0snapshot /mnt #挂载快照
[root@localhost ~]# ls /mnt #查看原LVM内容是否存在
执行如下:
建立文件,并建立快照
挂载快照,查看原文件是否被被保存
若是不小心对进行了错误操作,可通过重新创建快照来恢复到进行快照的点。
如:不小心删除了上面建立的文件test{1..5}就可以通过如下操作进行恢复
[root@localhost ~]# umount /mnt #卸载快照
[root@localhost ~]# lvremove /dev/vg0/lv0snapshot #删除快照
[root@localhost ~]# lvremove /dev/vg0/lv0snapshot #重新创建快照
[root@localhost ~]# mount /dev/vg0/lv0 /mnt #挂载
[root@localhost ~]# ls /mnt #检查文件是否存在
执行如下:
删除文件,并查看是否删除,后卸载快照
删除快照,重新建立快照,挂载后,查看文件是否存在
2.8 删除LVM
可以通过以下指令来删除不需要的LVM
[root@localhost ~]# umount /mnt #卸载LVM
[root@localhost ~]# lvremove /dev/vg0/lv0snapshot #删除LVM快照
[root@localhost ~]# lvremove /dev/vg0/lv0 #删除LVM
[root@localhost ~]# vgremove vg0 #删除一个卷组
[root@localhost ~]# pvremove /dev/vdb2 #删除一个物理卷
执行如下:
卸载LVM后,删除快照,删除LVM,删除VG卷组,删除PV