磁盘配额(Quota)与进阶文件系统管理
一、磁盘配额(Quota)
1.1、quota 针对网络服务的设计:
- 针对 WWW server ,例如:每个人的网页空间的容量限制!
- 针对 mail server,例如:每个人的邮件空间限制。
- 针对 file server,例如:每个人最大的可用网络硬盘空间 (教学环境中最常见!)
1.2、quota针对 Linux 系统主机上面的设定:
- 限制某一群组所能使用的最大磁盘配额 (使用群组限制):你可以将你的主机上的用户分门别类,有点像是目前很流行的付费与免付费会员制的情况, 你比较喜好的那一群的使用配额就可以给高一些!呵呵! ^_^...
- 限制某一用户的最大磁盘配额 (使用用户限制):在限制了群组之后,你也可以再继续针对个人来进行限制,使得同一群组之下还可以有更公平的分配!
- 限制某一目录 (directory, project) 的最大磁盘配额:在旧版的 CentOS 当中,使用的预设文件系统为 EXT 家族,这种文件系统的磁盘配额主要是针对整个文件系统来处理,所以大多针对『挂载点』进行设计。 新的 xfs 可以使用 project 这种模式,就能够针对个别的目录 (非文件系统喔) 来设计磁盘配额耶!超棒的!
2、quota使用上的限制:
- 在 EXT 文件系统家族仅能针对整个 filesystem:
- EXT 文件系统家族在进行 quota 限制的时候,它仅能针对整个文件系统来进行设计,无法针对某个单一的目录来设计它的磁盘配额。 因此,如果你想要使用不同的文件系统进行 quota 时,请先搞清楚该文件系统支持的情况喔!因为 XFS 已经可以使用 project 模式来设计不同目录的磁盘配额。
- 核心必须支持 quota :
- Linux 核心必须有支持 quota 这个功能才行:如果你是使用 CentOS 7.x 的预设核心, 嘿嘿!那恭喜你了,你的系统已经默认有支持 quota 这个功能啰!如果你是自行编译核心的, 那么请特别留意你是否已经『真的』开启了 quota 这个功能?否则底下的功夫将全部都视为『白工』。
- 只对一般身份使用者有效:
- 并不是所有在 Linux 上面的账号都可以设定 quota 呢,例如 root 就不能设定 quota , 因为整个系统所有的数据几乎都是他的啊! ^_^
- 若启用 SELinux,非所有目录均可设定 quota :
- 新版的 CentOS 预设都有启用 SELinux 这个核心功能,该功能会加强某些细部的权限控制!由于担心管理员不小心设定错误,因此预设的情况下, quota 似乎仅能针对 /home 进行设定而已~因此,如果你要针对其他不同的目录进行设定,请参考到后续章节查阅解开 SELinux 限制的方法喔! 这就不是 quota 的问题了...
3、quota 针对 XFS filesystem 的限制:
分别针对用户、群组或个别目录 (user, group & project) | XFS 文件系统的 quota 限制中,主要是针对群组、个人或单独的目录进行磁盘使用率的限制! | |
容量限制或文件数量限制 (block 或 inode) | 我们在第七章谈到文件系统中,说到文件系统主要规划为存放属性的 inode 与实际文件数据的block 区块,Quota 既然是管理文件系统,所以当然也可以管理 inode 或 block 啰! 这两个管理的功能为: | 限制 inode 用量:可以管理使用者可以建立的『文件数量』 |
限制 block 用量:管理用户磁盘容量的限制,较常见为这种方式 | ||
柔性劝导与硬性规定 (soft/hard) | 既然是规范,当然就有限制值。不管是 inode/block ,限制值都有两个,分别是 soft 与 hard。 通常 hard 限制值要比 soft 还要高。举例来说,若限制项目为 block ,可以限制 hard 为 500MBytes而 soft 为 400MBytes。这两个限值的意义为: | hard:表示使用者的用量绝对不会超过这个限制值,以上面的设定为例, 用户所能使用的磁盘容量绝对不会超过 500Mbytes ,若超过这个值则系统会锁住该用户的磁盘使用权 |
soft:表示使用者在低于 soft 限值时 (此例中为 400Mbytes),可以正常使用磁盘,但若超过 soft 且低于 hard的限值 (介于 400~500Mbytes 之间时),每次用户登入系统时,系统会主动发出磁盘即将爆满的警告讯息, 且会给予一个宽限时间 (grace time)。不过,若使用者在宽限时间倒数期间就将容量再次降低于 soft 限值之下,则宽限时间会停止 | ||
会倒数计时的宽限时间 (grace time) | 刚刚上面就谈到宽限时间了!这个宽限时间只有在用户的磁盘用量介于 soft 到 hard 之间时,才会出现且会倒数的一个咚咚! 由于达到 hard 限值时,用户的磁盘使用权可能会被锁住。为了担心用户没有注意到这个磁盘配额的问题, 因此设计了 soft 。当你的磁盘用量即将到达 hard 且超过 soft 时,系统会给予警告,但也会给一段时间让用户自行管理磁盘。 一般预设的宽限时间为七天,如果七天内你都不进行任何磁盘管理,那么 soft 限制值会即刻取代 hard 限值来作为 quota的限制 |
[root@study ~]# xfs_quota -x -c "指令" [挂载点]
选项与参数:
- -x :专家模式,后续才能够加入 -c 的指令参数喔!
- -c :后面加的就是指令,这个小节我们先来谈谈数据回报的指令
指令:
- print :单纯的列出目前主机内的文件系统参数等资料
- df:与原本的 df 一样的功能,可以加上 -b (block) -i (inode) -h (加上单位) 等
- report:列出目前的 quota 项目,有 -ugr (user/group/project) 及 -bi 等资料
- state :说明目前支持 quota 的文件系统的信息,有没有起动相关项目等
[root@study ~]# xfs_quota -x -c "limit [-ug] b[soft|hard]=N i[soft|hard]=N name"
[root@study ~]# xfs_quota -x -c "timer [-ug] [-bir] Ndays"
选项与参数:
- limit :实际限制的项目,可以针对 user/group 来限制,限制的项目有
- bsoft/bhard : block 的 soft/hard 限制值,可以加单位
- isoft/ihard : inode 的 soft/hard 限制值
- name: 就是用户/群组的名称啊!
- timer :用来设定 grace time 的项目喔,也是可以针对 user/group 以及 block/inode 设定
书上命令:
[root@study ~]# umount /home
实操命令:
[root@localhost lib]# umount /home
报错:
umount: /home:目标忙。
(有些情况下通过 lsof(8) 或 fuser(1) 可以
找到有关使用该设备的进程的有用信息)
解决办法:重启电脑
书上命令:
[root@study ~]# xfs_quota -x -c "timer -ug -b 14days" /home
报错:
timer [-bir] [-g|-p|-u] value -- set quota enforcement timeouts
解决办法:u和g参数分开写:
[root@study ~]# xfs_quota -x -c "timer -u -b 14days" /home
[root@study ~]# xfs_quota -x -c "timer -g -b 14days" /home
二、软件磁盘阵列 (Software RAID)
磁盘阵列全名是『 Redundant Arrays of Inexpensive Disks, RAID 』,英翻中的意思是:容错式廉价磁盘阵列。 RAID 可以透过一个技术(软件或硬件),将多个较小的磁盘整合成为一个较大的磁盘装置;而这个较大的磁盘功能可不止是储存而已,他还具有数据保护的功能呢。
三、逻辑卷管理器 (LVM,Logical Volume Manager)
LVM 的重点在于可以弹性的调整 filesystem 的容量!
Physical Volume, PV, 物理卷
Volume Group, VG, 卷用户组
Physical Extent, PE, 物理扩展区
Logical Volume, LV, 逻辑卷。为了方便用户利用 LVM 来管理其系统,因此 LV 的装置文件名通常指定为『 /dev/vgname/lvname 』的样式。
图:PE 与 VG 的相关性图示
fdisk 分区
任务 | PV 阶段 | VG 阶段 | LV 阶段 | filesystem | |
XFS |
EXT4 | ||||
搜寻(scan) | pvscan | vgscan | lvscan | lsblk, blkid | |
建立(create) | pvcreate | vgcreate | lvcreate | mkfs.xfs | mkfs.ext4 |
列出(display) | pvdisplay | vgdisplay | lvdisplay | df, mount | |
增加(extend) | vgextend | lvextend (lvresize) | xfs_growfs | resize2fs | |
减少(reduce) | vgreduce | lvreduce (lvresize) | 不支援 | resize2fs | |
删除(remove) | pvremove | vgremove | lvremove | umount, 重新格式化 | |
改变容量(resize) | lvresize | xfs_growfs | resize2fs | ||
改变属性(attribute) | pvchange | vgchange | lvchange | /etc/fstab, remount |
LVM 必需要核心有支持且需要安装 lvm2 这个软件,好佳在的是, CentOS 与其他较新的distributions 已经预设将 lvm 的支持与软件都安装妥当了!
实作 LVM
书上要求:
- 使用 4 个 partition ,每个 partition 的容量均为 1GB 左右,且 system ID 需要为 8e;
- 全部的 partition 整合成为一个 VG,VG 名称设定为 vbirdvg;
- PE 的大小为 16MB;
- 建立一个名为 vbirdlv 的 LV,容量大约 2G ;
- 最终这个 LV 格式化为 xfs 的文件系统,且挂载在 /srv/lvm 中
rhsca7 d4:请按照以下要求调整本地逻辑卷lv0的容量:
- 逻辑卷及文件系统大小为290MiB
- 确保文件系统中已存在的内容不能被破坏
- 容量可能出现误差,只要在270MiB - 320MiB之间都是允许的
- 保证其挂载目录不改变,文件系统完成。
[root@localhost ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 52403200 27212792 25190408 52% /
devtmpfs 3834528 0 3834528 0% /dev
tmpfs 3852172 31628 3820544 1% /dev/shm
tmpfs 3852172 1292 3850880 1% /run
tmpfs 3852172 0 3852172 0% /sys/fs/cgroup
/dev/sda2 1038336 181036 857300 18% /boot
/dev/sda1 204580 9956 194624 5% /boot/efi
/dev/mapper/centos-home 914628260 2193560 912434700 1% /home
tmpfs 770436 56 770380 1% /run/user/1000
overlay 52403200 27212792 25190408 52% /var/lib/docker/overlay2/c673328bd7e692ab454f85be98e8fe5c9fcbf07444e8092e5239faeda5f3dab8/merged
shm 65536 0 65536 0% /var/lib/docker/containers/468e1aeb6353ad39a5651f64e6d632190f6a4f8e3345b5dd8180f37c30777931/mounts/shm
tmpfs 3852172 8 3852164 1% /var/lib/docker/containers/468e1aeb6353ad39a5651f64e6d632190f6a4f8e3345b5dd8180f37c30777931/mounts/secrets
哪些需要删除,和能删除?
重装系统后:
[weis@study ~]$ df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 10475520 4741544 5733976 46% /
devtmpfs 3916960 0 3916960 0% /dev
tmpfs 3934604 12448 3922156 1% /dev/shm
tmpfs 3934604 9452 3925152 1% /run
tmpfs 3934604 0 3934604 0% /sys/fs/cgroup
/dev/sda2 1038336 160604 877732 16% /boot
/dev/mapper/centos-home 5232640 876772 4355868 17% /home
/dev/sda1 51082 9928 41154 20% /boot/efi
tmpfs 786924 4 786920 1% /run/user/42
tmpfs 786924 44 786880 1% /run/user/1000
用 fdisk /dev/sda还是gdisk /dev/sda?
解决办法:
[root@localhost ~]# lsblk #列出本系统下的所有磁盘与磁盘内的分区信息
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 930.3G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 7.6G 0 lvm [SWAP]
└─centos-home 253:2 0 872.7G 0 lvm /home
[root@localhost ~]# parted /dev/sda print
Model: ATA TOSHIBA MQ01ABD1 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt #对应gdisk分区命令
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 211MB 210MB fat16 EFI System Partition 启动
2 211MB 1285MB 1074MB xfs
3 1285MB 1000GB 999GB lvm
分区:
1 parted /dev/sda print
2 gdisk /dev/sda
n 回车 回车 +1G 8e00 重复4次创建4个分区 p w y
3 partprobe -s
4 df
5 lsblk
6 gdisk -l /dev/sda
LV的创建:
7 pvscan
8 pvcreate /dev/sda{4,5,6,7}
9 pvscan
10 pvdisplay /dev/sda3
11 pvdisplay /dev/sda4
12 vgcreate -s 16M vbirdvg14-3-2 /dev/sda{4,5,6}
13 vgscan
14 pvscan
15 vgdisplay vbirdvg14-3-2
16 lvcreate -L 2G -n vbirdlv14-3-2 vbirdvg14-3-2
17 lvscan
18 lvdisplay /dev/vbirdvg14-3-2/vbirdlv14-3-2
挂载LV:
19 mkfs.xfs /dev/vbirdvg14-3-2/vbirdlv14-3-2
20 mkdir /srv/lvm
21 mount /dev/vbirdvg14-3-2/vbirdlv14-3-2 /srv/lvm
22 df -Th /srv/lvm/
23 cp -a /etc /var/log /srv/lvm
24 df -Th /srv/lvm/
25 rm -rf /srv/lvm/etc
26 rm -rf /srv/lvm/log
27 ll /srv/lvm/
尝试减少LV容量:
lvresize -L -1760M /dev/vbirdvg14-3-2/vbirdlv14-3-2
lvdisplay /dev/vbirdvg14-3-2/vbirdlv14-3-2
df -Th /srv/lvm
xfs_info /srv/lvm/
xfs_growfs /srv/lvm/
xfs_info /srv/lvm/
df -Th /srv/lvm #容量还是2.0G,未减少。目前的 XFS 文件系统中,并没有缩小文件系统容量的设计!也就是说,文件系统只能放大不能缩小喔!
删除LV重新创建新的LV,重新挂载:
umount /dev/vbirdvg14-3-2/vbirdlv14-3-2
lvremove /dev/vbirdvg14-3-2/vbirdlv14-3-2
lvcreate -L 290M -n vbirdlv14-3-2_2 vbirdvg14-3-2
lvdisplay
mkfs.xfs /dev/vbirdvg14-3-2/vbirdlv14-3-2_2
mount /dev/vbirdvg14-3-2/vbirdlv14-3-2_2 /srv/lvm/
df -Th /srv/lvm/
echo “# Device Mount point filesystem parameters dump fsck” >> /etc/fstab
echo “/dev/vbirdvg14-3-2/vbirdlv14-3-2_2 /srv/lvm xfs defaults 0 0” >> /etc/fstab
没有将 LVM 关闭就直接将那些 partition 删除或转为其他用途的话,系统是会发生很大的问题的。LVM删除流程:
1. 先卸除系统上面的 LVM 文件系统 (包括快照与所有 LV);
2. 使用 lvremove 移除 LV ;
3. 使用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志;
4. 使用 vgremove 移除 VG:
5. 使用 pvremove 移除 PV;
6. 最后,使用 fdisk 修改 ID 回来啊!
疑问:
系统时别码
统配符中大括号的使用
ll命令中->是连接符吗
/dev/mapper
普通帐号如何使用sudo。解决办法:
$ su -
# visudo
## Allow root to run any commands anywhere
root ALL=(ALL) ALL 之后插入:
weis ALL=(ALL) ALL