磁盘配额
现在有这样一个场景,当我们将一个文件系统挂载一个目录下,大小为10个G,用户都可以在这个目录下创建和删除目录,如果一个用户在这个目录下存储了10G的文件,那么其他的用户就不可以写文件了,所以我们就需要对这个文件系统进行磁盘的配额,限制每个用户能够存储的最大空间
quotacheck
通过扫描指定的文件系统,获取磁盘的使用情况,创建、检查和修复磁盘配额(quota)文件。执行quotacheck指令,扫描挂入系统的分区,并在各分区的文件系统根目录下产生quota.user和quota.group文件,设置用户和群组的磁盘空间限制。常用选项:
- -c:创建一个配额文件
- -u:配合c使用,创建一个用户配额文件
- -g:配合c使用,创建一个组的配额文件
限制配额
-
先准备一个空闲的文件系统,并将其挂载在/testdir下,记得一定要加挂载选项usrquota和grpquota
[root@centos7 /]# cat /etc/fstab |grep quota UUID=4e788a6f-2f77-4cee-b36f-9c5254204fb1 /testdir ext4 defaults,usrquota,grpquota 0 0 [root@centos7 /]# df | grep sdb4 /dev/sdb4 10190100 36888 9612540 1% /testdir [root@centos7 /]# cat /proc/mounts |grep sdb4 /dev/sdb4 /testdir ext4 rw,seclabel,relatime,quota,usrquota,grpquota,data=ordered 0 0
-
使用quotacheck创建用户、组的配额数据文件,位于挂载点的根目录
[root@centos7 /]# quotacheck -cug /testdir/ [root@centos7 /]# ll /testdir/ total 32 -rw-------. 1 root root 6144 Jun 7 20:58 aquota.group -rw-------. 1 root root 6144 Jun 7 20:58 aquota.user drwx------. 2 root root 16384 Jun 7 20:46 lost+found
-
quotaon启用配额(使用quotaoff关闭配额)
[root@centos7 /]# quotaon /testdir/
-
使用edquota USERNAME对指定的用户进行配,调用的是VIM,其中blocks和inodes列是不需要指定的,前面一对soft和hard表示的是大小的软硬限制,当超过软限制的时候,会有警告,并给用户一定的期限(默认是7天),后面是一对soft和hard表示的是inode数量的软硬限制,其实就是文件数量的限制。这里设置了liubei用户的配置
isk quotas for user liubei (uid 1001): Filesystem blocks soft hard inodes soft hard /dev/sdb4 0 2G 3G 0 10 15
-
查看用户的配额信息
[root@centos7 ~]# quota -v liubei Disk quotas for user liubei (uid 1001): Filesystem blocks quota limit grace files quota limit grace /dev/sdb4 0 2097152 3145728 0 10 15
-
尝试创建一个大小大于软限制的文件,并查看配额信息
[liubei@centos7 testdir]$ dd if=/dev/zero of=lliubei.file bs=1M count=3000 sdb4: warning, user block quota exceeded. 3000+0 records in 3000+0 records out 3145728000 bytes (3.1 GB) copied, 2.71819 s, 1.2 GB/s [liubei@centos7 testdir]$ quota -v liubei Disk quotas for user liubei (uid 1001): Filesystem blocks quota limit grace files quota limit grace /dev/sdb4 3072004* 2097152 3145728 7days 1 10 15
-
可以使用setquota非交互式的设置配额
[root@centos7 testdir]# setquota zhangfei 2G 4G 10 15 /testdir/ [root@centos7 testdir]# setquota guanyu 3G 4G 10 15 /testdir/ Disk quotas for user zhangfei (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sdb4 0 2097152 4194304 0 10 15 [root@centos7 testdir]# quota -v guanyu Disk quotas for user guanyu (uid 1003): Filesystem blocks quota limit grace files quota limit grace /dev/sdb4 0 3145728 4194304 0 10 15
-
使用repquota -v显示设置过配额的用户的信息
[root@centos7 testdir]# repquota -v /testdir/ *** Report for user quotas on device /dev/sdb4 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 20 0 0 2 0 0 liubei +- 3072004 2097152 3145728 6days 1 10 15 zhangfei -- 0 2097152 4194304 0 10 15 guanyu -- 0 3145728 4194304 0 10 15 Statistics: Total blocks: 7 Data blocks: 1 Entries: 4
-
使用warnquota向已经超过软限制的用户发邮件,邮件的内容可在warnquota的配置文件中定制
[root@centos7 Packages]# warnquota [root@centos7 Packages]# su - liubei Last login: Thu Jun 7 22:33:19 CST 2018 on pts/0 [liubei@centos7 ~]$ mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/liubei": 2 messages 2 new >N 1 root@example.com Thu Jun 7 22:56 29/1030 "NOTE: You are exceeding your allocat" N 2 root@example.com Thu Jun 7 22:56 29/1030 "NOTE: You are exceeding your allocat" &
RAID
概念
就是把多个硬盘组合起来,成为一个硬盘阵列组,操作系统会把他当成是一个硬盘,其性能能够达到甚至超过过单个昂贵容量大的硬盘。RAID提供了多种硬盘组合的方式,相比当个硬盘来说,提高了硬盘的I/O能力。多个磁盘之间相互冗余,提供了耐用性。
实现模式
软件磁盘阵列,由CPU处理和协调一个RAID里面各个硬盘的作业,这样就会给CPU带来较多的运算压力,分为3种:(虽然软RAID实现的有多种,但是在生产环境还是不建议使用的 )
硬件磁盘阵列,在RAID卡上内置了CPU处理器,这样就不占用服务器的CPU了。一般硬件磁盘阵列都会有备份的电源模块和NVRAM(非易失性内存),当系统断掉后,备份电源开始供电,将硬盘读写的日志保存在内存中,当系统恢复,备份电源关闭供电,再在NVRAM读取日志数据,继续完成上次断电前没有完成的作业。
RAID 0
也称条带卷(striping)。在RAID0中,数据会被切成片,按一定顺序会被写到所有的磁盘里面,优缺点:
- 速度快,写和读的能力得到了提高
- RAID0没有冗余的能力,一旦一块磁盘出现了故障,则所有的数据都将不会恢复
- RAID0需要N块磁盘才能实现(N>=2)
- 能够存储数据的大小为N*min(S1,S2,S3,S4….)
RAID 1
也称镜像化,在RAID1中,数据会被复制成多份,存储在多个磁盘上,优缺点:
- 冗余性和数据的可靠性最高,只要不是磁盘同时损坏了,一般都不会带来数据丢失的问题
- RAID1的容量取决容量最小的那个磁盘,写入速度也是取决于最小的那个磁盘,较大的磁盘的剩余空间可以分区使用,不会造成浪费
- RAID1的读取速度理论上来说是磁盘个数的倍数
- RAID1需要N块磁盘才能实现(N>=2)
- 能够存储数据的大小为min(S1,S2,S3…)
RAID 5
数据被条带化存储到了磁盘上,并且每个磁盘上都能够存储奇偶检验值,其读写速度和RAID0差不多,可能写的时候要慢一点,毕竟要计算奇偶检验,这样,即使坏掉一块磁盘,只需要更换上好的磁盘,RAID会利用剩下奇偶检验去重建磁盘上的数据,优缺点:
- 较高的容错能力;
- 读写速度快;
- RAID5需要N块磁盘(N>=3);
- 能够存储数据的大小为(N-1)*min(S1,S2,S3,S4….)
RAID 10
RAID10和RAID01在读写速度上没有什么太大的差别,RAID01可靠性较低,这里就不在敖述,但是RAID10的数据安全性比较高,若下图左边那组RAID1中磁盘损坏了一个,另外一个也能用,右边那组RAID1再损坏一个数据也是恢复的,除非一组RAID1中的磁盘都坏掉了,优缺点:
- 较高的容错能力
- RAID10需要N个磁盘(N>=4)
RAID 50
RAID 50是RAID5和RAID0的组合,先做RAID5,再做RAID0,RAID 5至少需要3颗硬盘,因此要以多组RAID 5构成RAID 50,至少需要6颗硬盘,在底层的任意一组或者多组的RAID5中出现了一个磁盘的损坏是可以接受的,但是若出现了2个或者以上的磁盘损坏,整个RAID50就会损坏,优缺点:
- 较高的容错能力
- RAID10需要N个磁盘(N>=6)
mdadm
模式化工具,用于实现软RAID,常用选项:
- -C:创建
- -n #:使用#个块设备来创建此RAID
- -l #:指明要创建的RAID的级别
- -a yes/no:自动创建目标RAID设备的设备文件
- -c CHUNK_SIZE:指明块大小
- -x #:指明空闲盘的个数
- -D:显示raid的详细信息
- -f:标记指定磁盘为损坏
- -a:添加磁盘
- -r:移除磁盘
- cat /proc/mdstat:观察md的状态
软RAID
-
创建RAID10
[root@centos7 ~]# mdadm -C /dev/md1 -a yes -l 10 -n 4 /dev/sda{6,7,8,9}
-
给RAID添加新成员
[root@centos7 ~]# mdadm –G /dev/md0 –n 3 -a /dev/sda10
-
删除RAID:先卸载,再停掉,最后清空每个成员的superblock
[root@centos7 ~]# mdadm -S /dev/mdX [root@centos7 ~]# mdadm --zero-superblock /dev/sdX /dev/sdY ……
-
模拟损坏
[root@centos7 ~]# mdadm /dev/md0 -f /dev/sda6
-
模拟移除
[root@centos7 ~]# mdadm /dev/md0 -r /dev/sda10
-
模拟增加
[root@centos7 ~]# mdadm /dev/md0 -a /dev/sda10
-
保存指定raid状态
[root@centos7 ~]# mdadm -D -s /dev/md0 > /etc/mdadm.conf
-
保存当前所有RAID状态
[root@centos7 ~]# mdadm -D -s > /etc/mdadm.conf
-
共享热备盘(没啥用,企业也不差钱)
-
编辑mdadm.conf
ARRAY /dev/md1 metadata=1.2 name=instructor.magedu.com:1 UUID=eb6fbe24:2449dde5:da515f42:48694ac4 spar e-group=magedisk ARRAY /dev/md5 metadata=1.2 spares=1 name=instructor.magedu.com:5 UUID=19dea50d:2cecbdbf:5891cb66:463e 6c2c spare-group=magedisk MAILADDR root
-
启动服务
centos6:service mdmonitor restart centos7:systemctl restart mdmonitor
-
练习
-
创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录
[root@centos6 ~]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sda{6,7} -x 1 /dev/sda8 [root@centos6 ~]# mkfs.ext4 /dev/md1 [root@centos6 ~]# fdisk /dev/md1 [root@centos6 ~]# blkid /dev/md1 [root@centos6 ~]# echo "UUID=cf3c163b-74a4-4616-a263-058395ad7f8a /backup ext4 deflaults 0 0" >> /etc/fstab
-
创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录
[root@centos6 ~]# mdadm -C /dev/md5 -a yes -l 5 -c 256k -n 3 /dev/sda{9,10,11} [root@centos6 ~]# mkfs.ext4 /dev/md5 [root@centos6 ~]# fdisk /dev/md5 [root@centos6 ~]# blkid /dev/md5 [root@centos6 ~]# echo "UUID=cf3c163b-74a4-4616-a263-058395ad7f8a /mydata ext4 deflaults 0 0" >> /etc/fstab
LVM
概念
pv管理工具
pvcreate /dev/DEVICE ...:创建pv
pvs/pvdisplay:显示简要或详细pv信息
vg管理工具
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath:创建vg
vgs/vgdisplay:显示简要或详细vg信息
vgextend/vgreduce:vg扩增或减少
vgremove:删除vg,主要要先做pvmove
lv管理工具
lvcreate -L #[mMgGtT] -n NAME VolumeGroup:创建lv
lvcreate -l 60%VG -n mylv testvg
lvcreate -l 100%FREE -n yourlv testvg
lvs/lvdisplay:显示简要或详细lv信息
lvremove /dev/VG_NAME/LV_NAME:删除逻辑卷
重设文件系统大小
fsadm [options] resize device [new_size[BKMGTEP]]
resize2fs [-f][-F] [-M][-P][-p] device [new_size]
创建逻辑卷
-
创建pv
[root@centos7 ~]# pvcreate /dev/sda{6..9}
-
创建vg
[root@centos7 ~]# vgcreate vgfanjie /dev/sda{6..9}
-
创建lv
[root@centos7 ~]# lvcreate -l 50%VG -n lvfanjie vgfanjie [root@centos7 ~]# lvcreate -L 1.99G -n lvfanjie vgfanjie
-
格式化并创建文件系统
[root@centos7 ~]# mkfs.ext4 /dev/vgfanjie/lvfanjie
-
挂载到指定目录
[root@centos7 ~]# mount /dev/vgfanjie/lvfanjie /app
扩容逻辑卷
卷组可以提供足够空间,那么直接进行扩容
-
ext文件系统
# 先扩展逻辑卷,再扩展文件系统 [root@centos7 ~]# lvextend -L +1G /dev/vgfanjie/lvfanjie [root@centos7 ~]# resize2fs /dev/vgfanjie/lvfanjie # 直接一步到位 [root@centos7 ~]# lvextend -L +1G /dev/vgfanjie/lvfanjie -r
-
xfs文件系统
# 先扩展逻辑卷,再扩展文件系统 [root@centos7 ~]# lvextend -L +1G /dev/vgfanjie/lvxfs [root@centos7 ~]# xfs_growfs /dev/vgfanjie/lvxfs # 直接一步到位 [root@centos7 ~]# lvextend -L +1G /dev/vgfanjie/lvxfs -r
卷组无法提供足够空间,那么要先扩容vg,在依次扩容
-
扩容vg
[root@centos7 app]# pvcreate /dev/sda10 [root@centos7 app]# vgextend vgfanjie /dev/sda10
-
扩容lv
[root@centos7 app]# lvextend -L +1G /dev/vgfanjie/lvfanjie -r
缩减逻辑卷
-
卸载逻辑卷
[root@centos7 ~]# umount /dev/vgfanjie/lvfanjie
-
扫描逻辑卷
[root@centos7 ~]# e2fsck -f /dev/vgfanjie/lvfanjie
-
缩减文件系统
[root@centos7 ~]# resize2fs /dev/vgfanjie/lvfanjie 2G
-
缩减逻辑卷
[root@centos7 ~]# lvreduce -L 2G /dev/vgfanjie/lvfanjie
跨主机迁移卷组
-
因为vg占用的有可能只是某个硬盘的一个分区,直接拆卸这些磁盘,会导致错误,因此最好将所有数据都移动到一块独立的物理卷上,如果卷组当前没有满足条件的物理卷,那就直接新增一块硬盘,移到此盘上
[root@centos7 ~]# pvmove /dev/md5 /dev/sdk
-
将源卷组设置为非激活
[root@centos7 ~]# vgchange -an vgfanjie
-
移除不需要拆卸的pv
[root@centos7 ~]# vgreduce vgfanjie /dev/md1 /dev/md5 /dev/sdi /dev/sdj
-
将源卷组设置为export状态,并拆下指定硬盘,装在欲迁移的主机上
[root@centos7 ~]# vgexport vgfanjie
-
把vgmage设置为import
[root@centos7 ~]# vgimport vgfanjie
-
把卷组设置为激活
[root@centos7 ~]# lvchange -ay vgfanjie
-
挂载
[root@centos7 ~]# mount /dev/vgfanjie/lvfanjie /app/ext4
LVM快照
快照是特殊的逻辑卷,快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享
为现有逻辑卷创建快照,-l选项指定pe数量
[root@centos7 ~]# lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data
[root@centos7 ~]# lvcreate -L 1G -s -n data-snapshot -p r /dev/vg0/data
挂载快照
[root@centos7 ~]# mount -o ro/dev/vg0/data-snapshot /mnt/snap
恢复快照,注意要先卸载
[root@centos7 ~]# umount/dev/vg0/data;umount/dev/vg0/data-snapshot
[root@centos7 ~]# lvconvert--merge /dev/vg0/data-snapshot
删除快照,注意也要先卸载
[root@centos7 ~]# umount/mnt/databackup;lvremove/dev/vg0/databackup
练习
-
创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
[root@centos7 ~]# vgcreate -s 16M testvg /dev/sda11 /dev/sda12 [root@centos7 ~]# lvcreate -L 5G -n testlv testvg [root@centos7 ~]# [root@centos7 ~]# mkfs.ext4 /dev/testvg/testlv;mount /dev/testvg/testlv /users
-
新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录
[root@centos7 ~]# useradd -d /users/archlinux archlinux [archlinux@centos7 ~]$ cp -a /etc/pam.d/ /users/archlinux/
-
扩展testlv至7G,要求archlinux用户的文件不能丢失
[root@centos7 ~]# lvextend -L 7G /dev/testvg/testlv -r
-
收缩testlv至3G,要求archlinux用户的文件不能丢失
[root@centos7 ~]# umount /users/ [root@centos7 ~]# e2fsck -f /dev/testvg/testlv [root@centos7 ~]# resize2fs /dev/testvg/testlv 3G [root@centos7 ~]# lvreduce -L 3G /dev/testvg/testlv [root@centos7 ~]# mount /dev/testvg/testlv /users/
-
对testlv创建快照,并尝试基于快照备份数据,验证快照的功能
[root@centos7 ~]# lvcreate -l 64 -s -n testlv-snapshot -p r /dev/testvg/testlv [root@centos7 ~]# cp /etc/* /users/ [root@centos7 ~]# umount /users/ [root@centos7 ~]# lvconvert --merge /dev/testvg/testlv-snapshot