《鳥哥的Linux私房菜 基礎學習篇(第四版)》 第14章 磁盤配額(Quota)與進階文件系統管理 筆記


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM