磁盤配額(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
