高级文件系统管理
内核必须支持磁盘配额
[root@localhost ~]# grep CONFOG_QUOTA /boot/config-2.6.32-573.el6.x86_64 [root@localhost ~]# grep CONFOG_QUOTA /boot/config-3.10.0-957.el7.x86_64系统中必须安装quota工具,我们Linux默认安装了quota工具,查看命令如下
[root@localhost ~]# rpm -qa | grep quota quota-nls-4.01-19.el7.noarch quota-4.01-19.el7.x86_641)用户配额和组配额 2)磁盘容量限制和文件个数限制 3)软限制和硬限制 4)宽限时间 如果用户的空间占用数处于软限制和硬限制之间,统会在用户登陆时警告用户磁盘将满,,这个时间就是宽限时间,默认是7天。如果达到了宽限时间,用户的磁盘占用量还超过软限制,那么软限制就会升级为硬限制。
分配一个5GB的/dev/sdb1分区,把他挂载到/disk目录中
创新需要配额的用户及用户组,假设用户为user1、user2、user3和且这三个用户同属于用户组test。
test组磁盘容量硬限制为500MB,软限制450MB,文件个数不做限制;
user1用户为了便于测试,磁盘容量硬限制为50MB,软限制为40MB,文件个数硬限制限制为10个,软限制为8个
user2和user3用户磁盘容量硬限制为250MB,软限制为200MB,文件个数不做限制
大家发现user1、user2和user3用户加起来的磁盘容量限制为550MB,超过了test组的磁盘容量限制500MB。这样的话,某个用户可能达不到自己的用户限制,而达到组限制时就不能再写入数据了。
**也就是说,如果用户限制和组限制同时存在,那么哪个限制更小,哪个限制优先生效。**所以实验不进行限制组的实验只作用户限制
系统宽限时间我们改为8天。
临时生效
[root@localhost /]# mount -o remount,usrquota,grpquota /disk #查看 [root@localhost /]# mount /dev/mapper/VolGroup-lv_root on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") /dev/sda1 on /boot type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/sdb5 on /disk type ext4 (rw,usrquota,grpquota)永久生效,修改/etc/fstab
[root@localhost /]# vim /etc/fstab /dev/sdb5 /disk ext4 defaults,usrquota,grpquota 0 0 #修改配置之后如果要生效需要重启服务器,或者重新挂载分区如果要给根分区开启配额功能,需要
[root@localhost~]#vi /etc /fstab UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,usrquota,grpquota 1 1 #开启/分区的配额功能 [root@localhost~]#mount -o remount/ #重新挂载/分区 [root@localhost~]#quotacheck - avugm #如果我们自动扫描/分区建立配额配置文件时,因为/分区已经挂载成读写系统,而quotacheck需要把分区先挂载成只读分区,然后建立配置文件,最后再挂载回来,所以不能直接在/分区建立配置文件。这时就需要使用-m强制以读写方式扫描文件系统了我们给user1用户设定的配额限制是:磁盘空间软限制是40MB,硬限制是50MB;文件个数的软限制是8个,硬限制是10个(稍微小一点,一会测试时方便测试)。命令如下:
[root@localhost ~]# edquota -u user1 #edquota命令进入之后,就是标准的vi操作方法 #磁盘配额是设定用户user1(UID是500) Disk quotas for user user1 (uid 500): Filesystem blocks soft hard inodes soft hard /dev/sdb5 0 40000 50000 0 8 11 # 分区名 已占用容量 软限制 硬限制 已占用文件数软 软限制 硬限制启动和关闭配额配额的配置完成,接下来只需要启动配额就大功告成了,启动命令如下:
[root@localhost~]# quotaon [选项] [分区名] 选项: -a:依据/etc/mtab文件启动所有的配额分区。如果不加-a,后面就一定要指定分区名 -u:启动用户配额 -g:启动组配额 -V:显示启动过程的信息 [root@localhost ~]# quotaon -vu /disk /dev/sdb5 [/disk]: user quotas turned on #启动/disk分区的配额 [root@localhost~]#quotaon -avug关闭配额命令如下
[root@localhost~]# quotaoff [选项] [分区名] 选项 -a:依据/etc/mtab文件关闭所有的配额分区。如果不加-a,后面就一定要指定分区名 -u:关闭用户配额 -g:关闭组配额 [root@localhost~] #quotaoff -a #依据/etc/mtab文件关闭配额分区修改/disk所有者权限(有写权限)
[root@localhost disk]# chown user1 /disk登录user1用户
磁盘容量配额测试
#测试(利用磁盘对拷命令) [user1@localhost ~]$ dd if=/dev/zero of=/disk/test bs=1M count=60 sdb5: warning, user block quota exceeded. sdb5: write failed, user block limit reached. dd: 正在写入"/disk/test": 超出磁盘限额 记录了49+0 的读入 记录了48+0 的写出 51200000字节(51 MB)已复制,0.0630509 秒,812 MB/秒 #检查,设置50M磁盘配额,写入为60M,实际写进去50M说明磁盘配额生效 [user1@localhost ~]$ ll -h /disk/ 总用量 49M -rw-------. 1 root root 7.0K 9月 22 11:30 aquota.user drwx------. 2 root root 16K 9月 22 07:21 lost+found -rw-rw-r--. 1 user1 user1 49M 9月 22 11:52 test磁盘个数配额测试
touch 文件进行测试,说明文件个数配额生效 [user1@localhost disk]$ touch {1..8}.txt sdb5: warning, user file quota exceeded. [user1@localhost disk]$ touch 11.txt sdb5: write failed, user file limit reached. touch: 无法创建"11.txt": 超出磁盘限额user2用户的配额值和user1用户完全一样,我们就可以使用user1用户作为模板进行复制。这样我们如果需要建立大量的配额值一致的用户时,就会非常方便,不用一个个手工建立了。复制命令如下:
[root@localhost disk]# edquota -p user1 -u user2 #命令 -p 源用户 -u 目标用户这个命令在写脚本批量设置时更加方便。当然写脚本时也可以先建立一个模板的用户,设定好磁盘配额,再进行配额复制,也是可以的
[root@localhost~]# setquota -u user3 40000 50000 8 10 /disk [root@localhost~]# setquota -u 用户名 容量软限制 容量硬限制 个数软限制 个数硬限制 分区名 #查询 [root@localhost disk]# quota -vus user3 Disk quotas for user user3 (uid 502): Filesystem blocks quota limit grace files quota limit grace /dev/sdb5 0 40000 50000 0 8 10LVM是logical Volume Manager的简称,中午就是逻辑卷整理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PE0L1Tlg-1601731675811)(高级文件系统管理.assets/image-20201003164041650.png)]
物理卷(PV,PhysicalVolume):就是真正的物理硬盘或分区。卷组(VG,VolumeGroup):将多个物理卷合起来就组成了卷组,组成同一个卷组的物理卷可以是同一个硬盘的不同分区,也可以是不同硬盘上的不同分区。我们可以把卷组想象为一个逻辑硬盘。逻辑卷(LV,LogicalVolume):卷组是一个逻辑硬盘,硬盘必须分区之后才能使用,这个分区我们称作逻辑卷。逻辑卷可以格式化和写入数据。我们可以把逻辑卷想象成为分区。物理扩展(PE,PhysicalExtend):PE是用来保存数据的最小单元,我们的数据实际上都是写入PE当中,PE的大小是可以配置的,默认是4MB。boot分区只能分到标准分区中,不能分到LVM,
图形界面进行分配如图,先创建boot标准分区及LVM物理卷,将物理卷整合为卷组,卷组内进行逻辑卷划分
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UsHcKMtR-1601731675814)(高级文件系统管理.assets/image-20201003170037245.png)]
创建方式就是使用fdisk交互命令,不过需要注意的是分区的系统ID不再是Linux默认的分区ID号83了,而要改成LVM的ID号8e。
Command (m for help): n Command action e extended p primary partition (1-4) e Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1360 Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (1-1361, default 1): 1 Last cylinder, +cylinders or +size{K,M,G} (1-1361, default 1361): 380 Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (381-1361, default 381): Using default value 381 Last cylinder, +cylinders or +size{K,M,G} (381-1361, default 1361): +380 Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (762-1361, default 762): Using default value 762 Last cylinder, +cylinders or +size{K,M,G} (762-1361, default 1361): Using default value 1361 Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xce16ffbb Device Boot Start End Blocks Id System /dev/sdb1 1 1361 10932201 5 Extended /dev/sdb5 1 380 3052287 83 Linux /dev/sdb6 381 761 3060351 83 Linux /dev/sdb7 762 1361 4819468+ 83 Linux Command (m for help): t Partition number (1-7): 5 Hex code (type L to list codes): 8e Changed system type of partition 5 to 8e (Linux LVM) Command (m for help): t Partition number (1-7): 6 Hex code (type L to list codes): 8e Changed system type of partition 6 to 8e (Linux LVM) Command (m for help): t Partition number (1-7): 7 Hex code (type L to list codes): 8e Changed system type of partition 7 to 8e (Linux LVM) Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xce16ffbb Device Boot Start End Blocks Id System /dev/sdb1 1 1361 10932201 5 Extended /dev/sdb5 1 380 3052287 8e Linux LVM /dev/sdb6 381 761 3060351 8e Linux LVM /dev/sdb7 762 1361 4819468+ 8e Linux LVM Command (m for help): w建立物理卷时,我们说即可以把整块硬盘都建立成物理卷,也可以把某个分区建立成物理卷。如果要把整块硬盘都建立成物理卷,命令如下
[root@localhost~]# pvcreate /dev/sdb在我们的使用中,是要把分区建立成为物理卷,所以执行以下命令:
[root@localhost~]# pvcreate /dev/sdb5命令一:pvscan
[root@localhost ~]# pvscan PV /dev/sda2 VG VolGroup lvm2 [19.51 GiB / 0 free] PV /dev/sdb5 lvm2 [2.91 GiB] PV /dev/sdb6 lvm2 [2.92 GiB] PV /dev/sdb7 lvm2 [4.60 GiB] Total: 4 [29.93 GiB] / in use: 1 [19.51 GiB] / in no VG: 3 [10.43 GiB]我们可以看到在我的系统中,/dev/sdb5-7这三个分区是物理卷。最后一行的意思是:总共4个物理卷[大小]/使用了1个卷[大小]/空闲3个卷[大小]。
命令二:pvdisplay
它可以查看到更详细的物理卷状态,命令如下:
[root@localhost ~]# pvdisplay "/dev/sdb5" is a new physical volume of "2.91 GiB" --- NEW Physical volume --- PV Name /dev/sdb5 #PV名 VG Name #属于的VG名,还没有分配,所以空白 PV Size 2.91 GiB #PV的大小 Allocatable NO #是否已经分配 PE Size 0 #PE大小,因为还没有分配,所以PE大小也没有指定 Total PE 0 #PE总数 Free PE 0 #空闲PE数 Allocated PE 0 #可分配的PE数 PV UUID vAJNB4-hvyW-N2CU-0dTZ-LIlX-r9wC-k56dpd #PV的UUID将/dev/sdb5和/dev/sdb6加入卷组test,留着/dev/sdb7一会实验调整卷组大小,命令如下:
[root@localhost ~]# vgcreate test /dev/sdb5 /dev/sdb6 Volume group "test" successfully created查看卷组的命令同样是两个,vgscan主要是查看系统中是否有卷组,而vgdisplay则是查看卷组的详细状态的。命令如下:
[root@localhost ~]# vgscan Reading all physical volumes. This may take a while... Found volume group "test" using metadata type lvm2 Found volume group "VolGroup" using metadata type lvm2 #test的卷组确实存在查看卷组命令vgdisplay
[root@localhost ~]# vgdisplay --- Volume group --- VG Name test #卷组名 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write #卷组访问状态 VG Status resizable #卷组状态 MAX LV 0 #最大逻辑卷数 Cur LV 0 Open LV 0 Max PV 0 #最大物理卷数 Cur PV 2 #当前物理卷数 Act PV 2 VG Size 5.82 GiB #卷组大小 PE Size 4.00 MiB #PE大小 Total PE 1490 #PE总数 Alloc PE / Size 0 / 0 #已用PE数量/大小 Free PE / Size 1490 / 5.82 GiB #空闲PE数量/大小 VG UUID dbghf8-BTNr-w6n2-gEBv-BwAp-pkxB-C1k9Zb #VG的uuid我们建立一个2GB的testlv逻辑卷命令如下
[root@localhost ~]# lvcreate -L 2GB -n testlv test Logical volume "testlv" created. #在test卷组中建立2GB的testlv逻辑卷建立完逻辑卷之后,还要格式化和挂载之后逻辑卷才能正常使用。格式化和挂载命令和操作普通分区时是一样的,不过需要注意的是逻辑卷的设备文件名是/dev/卷组名/逻辑卷名,如我们的testlv的设备文件名就是“/dev/test/testlv”,具体命令如下:
#格式化 [root@localhost ~]# mkfs -t ext4 /dev/test/testlv mke2fs 1.41.12 (17-May-2010) 文件系统标签= 操作系统:Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 131072 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=536870912 16 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 正在写入inode表: 完成 Creating journal (16384 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 This filesystem will be automatically checked every 38 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. #建立挂载点,并挂载 [root@localhost ~]# mkdir test [root@localhost ~]# mount /dev/test/testlv test #验证 [root@localhost ~]# mount ...省略 /dev/mapper/test-testlv on /root/test type ext4 (rw) #已经挂载了 #如果需要开机自动挂载,也要修改/etc/fstab文件同样的查看命令是两个,第一个命令lvscan只能看到系统中是否拥有逻辑卷,命令如下:
[root@localhost ~]# lvscan ACTIVE '/dev/test/testlv' [2.00 GiB] inherit #能够看到激活的逻辑卷,大小是2GB第二个命令是lvdisplay可以看到逻辑卷的详细信息,命令如下:
[root@localhost ~]# lvdisplay --- Logical volume --- LV Path /dev/test/testlv #逻辑卷设备文件名 LV Name testlv #逻辑卷名 VG Name test #所属的卷组名 LV UUID 6P7MO8-ZINU-rAym-hbV6-XuiV-XRd4-8eFXMQ #uuid LV Write Access read/write #lv访问状态 LV Creation host, time localhost.localdomain, 2020-09-24 06:37:26 +0800 LV Status available # open 1 LV Size 2.00 GiB #逻辑卷大小 Current LE 512 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2我们刚刚的testlv的大小是2GB,我们的test中还有3GB的空闲空间,那么增加我们的userlv逻辑卷的大小到3GB吧
[root@localhost test]# lvresize -L 3GB /dev/test/testlv Size of logical volume test/testlv changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents). Logical volume testlv successfully resized #增加userlv逻辑卷的大小到3GB #当然命令也可以这样写 [root@localhost test]# lvresize -L +1GB /dev/test/testlv #查看 [root@localhost test]# lvdisplay --- Logical volume --- LV Path /dev/test/testlv LV Name testlv VG Name test LV UUID 6P7MO8-ZINU-rAym-hbV6-XuiV-XRd4-8eFXMQ LV Write Access read/write LV Creation host, time localhost.localdomain, 2020-09-24 06:37:26 +0800 LV Status available # open 1 LV Size 3.00 GiB #容量增加到了3GB Current LE 768 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2发现一个问题df-h查看挂载还是2GB
[root@localhost test]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/test-testlv 2.0G 3.1M 1.9G 1% /root/test #大小仍为2G我们还要使用resize2fs命令来调整分区的大小。不过这里就体现了LVM的优势,我们不需要卸载分区,直接就能调整分区的大小。
resize2fs命令如下:
[root@localhost~]#resize2fs [选项][设备文件名][调整的大小] 选项: -f:强制调整 设备文件名:指定调整哪个分区的大小 调整的大小:指定把分区调整到多大,要加M,G等单位。如果不加大小,会使用整个 分区 [root@localhost ~]# resize2fs -f /dev/test/testlv 3G 那么我们已经把逻辑卷调整到了3GB,这时我们就需要把整个逻辑卷都加入/test分区,命令如下: [root@localhost ~]# resize2fs /dev/test/testlv resize2fs 1.41.12 (17-May-2010) The filesystem is already 786432 blocks long. Nothing to do! #已经调整了分区大小 [root@localhost ~]# df -h /dev/mapper/test-testlv 2.9G 3.1M 2.8G 1% /root/test #分区大小已经是3G了。 #文件也没有丢失 [root@localhost ~]# cd test/ [root@localhost test]# ls lost+found test test.txt