1. 程式人生 > >Redhat、CentOS新增硬碟,硬碟分割槽,配置掛載硬碟操作,新增交換分割槽,磁碟容量配額。

Redhat、CentOS新增硬碟,硬碟分割槽,配置掛載硬碟操作,新增交換分割槽,磁碟容量配額。

文章目錄

1、環境說明

本次實驗是在Redhat7虛擬機器上進行(CentOS7操作相同)。

2、準備

軟、硬體準備

1、Redhat7或CentOS7作業系統機器或虛擬機器;

知識儲備

本節主要介紹Linux檔案系統、儲存結構與磁碟劃分相關理論知識,方便更好的理解本文,若瞭解可跳過本節。

1、 物理裝置的命名規則;
  在 Linux 系統中一切都是檔案,硬體裝置也不例外。既然是檔案,就必須有檔名稱。在 Linux 系統中一切都是檔案,硬體裝置也不例外。既然是檔案,就必須有檔名稱。系統核心中的 udev 裝置管理器會自動把硬體名稱規範起來,目的是讓使用者通過裝置檔案的名字可以猜出裝置大致的屬性以及分割槽資訊等;這對於陌生的裝置來說特別方便。另外,udev裝置管理器的服務會一直以守護程序的形式執行並偵聽核心發出的訊號來管理/dev 目錄下的裝置檔案。Linux 系統中常見的硬體裝置的檔名稱如表所示。在 Linux 系統中一切都是檔案,硬體裝置也不例外。既然是檔案,就必須有檔名稱。在 Linux 系統中一切都是檔案,硬體裝置也不例外。既然是檔案,就必須有檔名稱。系統核心中的 udev 裝置管理器會自動把硬體名稱規範起來,目的是讓使用者通過裝置檔案的名字可以猜出裝置大致的屬性以及分割槽資訊等;這對於陌生的裝置來說特別方便。另外,udev裝置管理器的服務會一直以守護程序的形式執行並偵聽核心發出的訊號來管理/dev 目錄下的裝置檔案。Linux 系統中常見的硬體裝置的檔名稱如表所示。

常見的硬體裝置及其檔名稱:

硬體裝置 檔名稱
IDE 裝置 /dev/hd[a-d]
SCSI/SATA/U 盤 /dev/sd[a-p]
軟碟機 /dev/fd[0-1]
印表機 /dev/lp[0-15]
光碟機 /dev/cdrom
滑鼠 /dev/mouse
磁帶機 /dev/st0 或/dev/ht0

由於現在的 IDE 裝置已經很少見了,所以一般的硬碟裝置都會是以“/dev/sd”開頭的。

而一臺主機上可以有多塊硬碟,因此係統採用 a~p 來代表 16 塊不同的硬碟(預設從 a 開始
分配),而且硬碟的分割槽編號也很有講究:
  ➢ 主分割槽或擴充套件分割槽的編號從 1 開始,到 4 結束;
  ➢ 邏輯分割槽從編號 5 開始。
/dev 目錄中 sda 裝置之所以是 a,並不是由插槽決定的,而是由系統核心的識別順序來決定的,/dev/sda表示核心識別的第一塊硬碟/dev/sdb表示核心識別的第二塊硬碟。/dev/sda3 表示是第一塊硬碟編號為 3 的分割槽。
在這裡插入圖片描述
首先,/dev/目錄中儲存的應當是硬體裝置檔案;其次,sd 表示是儲存裝置;然後,a 表示系統中同類介面中第一個被識別到的裝置,最後,5表示這個裝置是一個邏輯分割槽。一言以蔽之,“/dev/sda5”表示的就是“這是系統中第一塊被識別到的硬體裝置中分割槽編號為5的邏輯分割槽的裝置檔案”。接下來簡單科普一下硬碟相關的知識。

正是因為計算機有了硬碟裝置,我們才可以在玩遊戲的過程中或遊戲通關之後隨時存檔,而不用每次重頭開始。硬碟裝置是由大量的扇區組成的,每個扇區的容量為512位元組。其中第一個扇區最重要,它裡面儲存著主引導記錄與分割槽表資訊。就第一個扇區來講,主引導記錄需要佔用446位元組,分割槽表為64位元組,結束符佔用2位元組;其中分割槽表中每記錄一個分割槽資訊就需要16位元組,這樣一來最多隻有4個分割槽資訊可以寫到第一個扇區中,這4個分割槽就是4個主分割槽。第一個扇區中的資料資訊如下圖所示。

在這裡插入圖片描述

現在,問題來了——第一個扇區最多隻能創建出4個分割槽?於是為了解決分割槽個數不夠的問題,可以將第一個扇區的分割槽表中16位元組(原本要寫入主分割槽資訊)的空間(稱之為擴充套件分割槽)拿出來指向另外一個分割槽。也就是說,擴充套件分割槽其實並不是一個真正的分割槽,而更像是一個佔用16位元組分割槽表空間的指標——一個指向另外一個分割槽的指標。這樣一來,使用者一般會選擇使用3個主分割槽加1個擴充套件分割槽的方法,然後在擴充套件分割槽中創建出數個邏輯分割槽,從而來滿足多分割槽(大於4個)的需求。當然,就目前來講大家只要明白為什麼主分割槽不能超過4個就足夠了。主分割槽、擴充套件分割槽、邏輯分割槽可以像下圖那樣來規劃。
在這裡插入圖片描述

注:
所謂擴充套件分割槽,嚴格地講它不是一個實際意義的分割槽,它僅僅是一個指向下一個分割槽的指標,這種指標結構將形成一個單向連結串列。

2、檔案系統與資料資料
使用者在硬體儲存裝置中執行的檔案建立、寫入、讀取、修改、轉存與控制等操作都是依靠檔案系統來完成的。檔案系統的作用是合理規劃硬碟,以保證使用者正常的使用需求。Linux 系統支援數十種的檔案系統,而最常見的檔案系統如下所示。

Ext3:是一款日誌檔案系統,能夠在系統異常宕機時避免檔案系統資料丟失,並能自動修復資料的不一致與錯誤。然而,當硬碟容量較大時,所需的修復時間也會很長,而且也不能百分之百地保證資料不會丟失。它會把整個磁碟的每個寫入動作的細節都預先記錄下來,以便在發生異常宕機後能回溯追蹤到被中斷的部分,然後嘗試進行修復。
Ext4:Ext3的改進版本,作為 RHEL 6 系統中的預設檔案管理系統,它支援的儲存容量高達 1EB(1EB=1,073,741,824GB),且能夠有無限多的子目錄。另外,Ext4 檔案系統能夠批量分配 block 塊,從而極大地提高了讀寫效率。
XFS:是一種高效能的日誌檔案系統,而且是 RHEL 7 中預設的檔案管理系統,它的優勢在發生意外宕機後尤其明顯,即可以快速地恢復可能被破壞的檔案,而且強大的日誌功能只用花費極低的計算和儲存效能。並且它最大可支援的儲存容量為 18EB,這幾乎滿足了所有需求。

3、新增硬碟裝置

我們先來理清一下新增硬碟裝置的操作思路:首先需要在虛擬機器中模擬新增入一塊新的硬碟儲存裝置,然後再進行分割槽、格式化、掛載等操作,最後通過檢查系統的掛載狀態並真實地使用硬碟來驗證硬碟裝置是否成功新增。

掛載:當用戶需要使用硬碟裝置或分割槽中的資料時,需要先將其與一個已存在的目錄檔案進行關聯,而這個關聯動作就是“掛載”。

鑑於我們不需要為了做這個實驗而特意買一塊真實的硬碟,而是通過虛擬機器軟體進行硬體模擬,因此這再次體現出了使用虛擬機器軟體的好處。具體的操作步驟如下。

首先把虛擬機器系統關機,稍等幾分鐘會自動返回到虛擬機器管理主介面,然後單擊“編輯虛擬機器設定”選項,在彈出的介面中單擊“新增”按鈕,新增一塊硬體裝置;
在這裡插入圖片描述
在這裡插入圖片描述
選擇想要新增的硬體型別為“硬碟”,然後單擊“下一步”按鈕就可以了;
在這裡插入圖片描述
選擇虛擬硬碟的型別為 SCSI(預設推薦),並單擊“下一步”按鈕,這樣虛擬機器中的裝置名稱過一會兒後應該為/dev/sdb;
在這裡插入圖片描述
選中“建立新虛擬磁碟”單選按鈕,而不是其他選項,再次單擊“下一步”按鈕;
在這裡插入圖片描述
將“最大磁碟大小”設定為預設的 20GB。這個數值是限制這臺虛擬機器所使用的最大硬碟空間,而不是立即將其填滿,因此預設 20GB 就很合適了。單擊“下一步”按鈕
在這裡插入圖片描述
設定磁碟檔案的檔名和儲存位置(這裡採用預設設定即可,無需修改),直接單擊“完成”按鈕;
在這裡插入圖片描述

將新硬碟新增好後就可以看到裝置資訊了。這裡不需要做任何修改,直接單擊“確認”按鈕後就可以開啟虛擬機器了。
在這裡插入圖片描述
在虛擬機器中模擬添加了硬碟裝置後就應該能看到抽象成的硬碟裝置檔案了。按照前文講解的 udev 服務命名規則,第二個被識別的 SCSI 裝置應該會被儲存為/dev/sdb,這個就是硬碟裝置檔案了。
在這裡插入圖片描述
但在開始使用該硬碟之前還需要進行分割槽操作,例如從中取出一個 2GB 的分割槽裝置以供後面的操作使用。

fdisk 命令

在 Linux 系統中,管理硬碟裝置最常用的方法就當屬 fdisk 命令了。fdisk 命令用於管理磁碟分割槽,格式為“fdisk [磁碟名稱]”,它提供了集新增、刪除、轉換分割槽等功能於一身的“一站式分割槽服務”。不過與前面講解的直接寫到命令後面的引數不同,這條命令的引數(見下表)是互動式的,因此在管理硬碟裝置時特別方便,可以根據需求動態調整。

fdisk 命令中的引數以及作用:

引數 作用
m 檢視全部可用的引數
n 新增新的分割槽
d 刪除某個分割槽資訊
l 列出所有可用的分割槽型別
t 改變某個分割槽的型別
p 檢視分割槽資訊
w 儲存並退出
q 不儲存直接退出

我們首先使用 fdisk 命令來嘗試管理/dev/sdb 硬碟裝置。在看到提示資訊後輸入引數 p 來檢視硬碟裝置內已有的分割槽資訊,其中包括了硬碟的容量大小、扇區個數等資訊:


[[email protected] ~]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在記憶體中,直到您決定將更改寫入磁碟。
使用寫入命令前請三思。

Device does not contain a recognized partition table
使用磁碟識別符號 0x012f51c1 建立新的 DOS 磁碟標籤。

命令(輸入 m 獲取幫助):p

磁碟 /dev/sdb:21.5 GB, 21474836480 位元組,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x012f51c1

裝置 Boot Start End Blocks Id System


輸入引數 n 嘗試新增新的分割槽。系統會要求您是選擇繼續輸入引數 p 來建立主分割槽,還是輸入引數 e 來建立擴充套件分割槽。這裡輸入引數 p 來建立一個主分割槽:


命令(輸入 m 獲取幫助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p


在確認建立一個主分割槽後,系統要求您先輸入主分割槽的編號。我們在前文得知,主分割槽的編號範圍是 1~4,因此這裡輸入預設的 1 就可以了。接下來系統會提示定義起始的扇區位置,這不需要改動,我們敲擊回車鍵保留預設設定即可,系統會自動計算出最靠前的空閒扇區的位置。最後,系統會要求定義分割槽的結束扇區位置,這其實就是要去定義整個分割槽的大小是多少。我們不用去計算扇區的個數,只需要輸入+2G 即可創建出一個容量為 2GB 的硬碟分割槽。


分割槽號 (1-4,預設 1):1
起始 扇區 (2048-41943039,預設為 2048):此處敲回車鍵
將使用預設值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-41943039,預設為 41943039):+2G
分割槽 1 已設定為 Linux 型別,大小設為 2 GiB


再次使用引數 p 來檢視硬碟裝置中的分割槽資訊。果然就能看到一個名稱為/dev/sdb1、起始扇區位置為 2048、結束扇區位置為 4196351 的主分割槽了。這時候千萬不要直接關閉視窗,而應該敲擊引數 w 後回車,這樣分割槽資訊才是真正的寫入成功啦。


命令(輸入 m 獲取幫助):p

磁碟 /dev/sdb:21.5 GB, 21474836480 位元組,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x012f51c1

裝置 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux

命令(輸入 m 獲取幫助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁碟。


在上述步驟執行完畢之後,Linux 系統會自動把這個硬碟主分割槽抽象成/dev/sdb1 裝置檔案。
在這裡插入圖片描述
我們可以使用 file 命令檢視該檔案的屬性,但是工作中發現,有些時候系統並沒有自動把分割槽資訊同步給 Linux 核心,而且這種情況似乎還比較常見(但不能算作是嚴重的 bug)。我們可以輸入 partprobe 命令手動將分割槽資訊同步到核心,而且一般推薦連續兩次執行該命令,效果會更好。如果使用這個命令都無法解決問題,那麼就重啟計算機吧,這個殺手鐗百試百靈,一定會有用的。


[[email protected] ~]# file /dev/sdb1
/dev/sdb1: cannot open (No such file or directory)
[[email protected] ~]# partprobe
[[email protected] ~]# partprobe
[[email protected] ~]# file /dev/sdb1
/dev/sdb1: block


如果硬體儲存裝置沒有進行格式化,則 Linux 系統無法得知怎麼在其上寫入資料。因此,在對儲存裝置進行分割槽後還需要進行格式化操作。在 Linux 系統中用於格式化操作的命令是mkfs。這條命令很有意思,因為在 Shell 終端中輸入 mkfs 名後再敲擊兩下用於補齊命令的 Tab鍵,會有如下所示的效果:


[[email protected] ~]# mkfs
mkfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs


對!這個 mkfs 命令很貼心地把常用的檔案系統名稱用字尾的方式儲存成了多個命令檔案,用起來也非常簡單—mkfs.檔案型別名稱。例如要格式分割槽為 XFS 的檔案系統,則命令應為 mkfs.xfs /dev/sdb1。


[[email protected] ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=256 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0


終於完成了儲存裝置的分割槽和格式化操作,接下來就是要來掛載並使用儲存裝置了。與之相關的步驟也非常簡單:首先是建立一個用於掛載裝置的掛載點目錄;然後使用 mount 命令將儲存裝置與掛載點進行關聯;最後使用 df -h 命令來檢視掛載狀態和硬碟使用量資訊。


[[email protected] ~]# mkdir /newFS
[[email protected] ~]# mount /dev/sdb1 /newFS
[[email protected] ~]# df -h
檔案系統 容量 已用 可用 已用% 掛載點
/dev/mapper/rhel-root 18G 1.1G 17G 6% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 497M 96M 401M 20% /boot
/dev/sdb1 2.0G 33M 2.0G 2% /newFS

du 命令

既然儲存裝置已經順利掛載,接下來就可以嘗試通過掛載點目錄向儲存裝置中寫入檔案了。在寫入檔案之前,先介紹一個用於檢視檔案資料佔用量的 du 命令,其格式為“du [選項] [檔案]”。簡單來說,該命令就是用來檢視一個或多個檔案佔用了多大的硬碟空間。我們還可以使用 du -sh /*命令來檢視在 Linux 系統根目錄下所有一級目錄分別佔用的空間大小。下面,我們先從某些目錄中複製過來一批檔案,然後檢視這些檔案總共佔用了多大的容量:


[[email protected] ~]# ls /newFS
[[email protected] ~]# cp -rf /etc/* /newFS/
[[email protected] ~]# ls /newFS/
adjtime
aliases
aliases.db
alternatives
anacrontab
asound.conf
----省略部分輸入資訊----
xinetd.d
[[email protected] ~]# du -sh /newFS/
20M /newFS/


注:
使用 mount 命令掛載的裝置檔案會在系統下一次重啟的時候失效。如果想讓這個裝置檔案的掛載永久有效,則需要把掛載的資訊寫入到配置檔案中:


#/etc/fstab
#Created by anaconda on Thu Dec 20 17:33:14 2018

#Accessible filesystems, by reference, are maintained under ‘/dev/disk’
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

[[email protected] ~]# vim /etc/fstab
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=55e273f1-0964-4670-870b-410eb199f46d /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/sdb1 /newFS xfs defaults 0 0

/etc/fstab檔案詳解
參考:http://blog.51cto.com/13570193/2070157

該檔案中存在六列引數:

第一列:裝置檔案或UUID或label(三者的區別看下面)
第二列:裝置的掛載點(空目錄)
第三列:該分割槽檔案系統的格式(可以使用特殊的引數auto,自動識別分割槽的分割槽格式)
第四列:檔案系統的引數,設定格式的選項
第五列:dump備份的設定(0表示不進行dump備份,1代表每天進行dump備份,2代表不定日期的進行dump備份)
第六列:磁碟檢查設定(其實是一個檢查順序,0代表不檢查,1代表第一個檢查,2後續.一般根目錄是1,數字相同則同時檢查)

4、新增交換分割槽

SWAP(交換)分割槽是一種通過在硬碟中預先劃分一定的空間,然後將把記憶體中暫時不常用的資料臨時存放到硬碟中,以便騰出實體記憶體空間讓更活躍的程式服務來使用的技術,其設計目的是為了解決真實實體記憶體不足的問題。但由於交換分割槽畢竟是通過硬碟裝置讀寫資料的,速度肯定要比實體記憶體慢,所以只有當真實的實體記憶體耗盡後才會呼叫交換分割槽的資源。交換分割槽的建立過程與前文講到的掛載並使用儲存裝置的過程非常相似。在對/dev/sdb 儲存裝置進行分割槽操作前,有必要先說一下交換分割槽的劃分建議:在生產環境中,交換分割槽的大小一般為真實實體記憶體的 1.5~2 倍,為了讓大家更明顯地感受交換分割槽空間的變化,這裡取出一個大小為 6GB 的主分割槽作為交換分割槽資源。在分割槽建立完畢後儲存並退出即可:


[[email protected] ~]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在記憶體中,直到您決定將更改寫入磁碟。
使用寫入命令前請三思。

命令(輸入 m 獲取幫助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分割槽號 (2-4,預設 2):2
起始 扇區 (4196352-41943039,預設為 4196352):此處敲擊回車鍵
將使用預設值 4196352
Last 扇區, +扇區 or +size{K,M,G} (4196352-41943039,預設為 41943039):+6G
分割槽 2 已設定為 Linux 型別,大小設為 6 GiB

命令(輸入 m 獲取幫助):p

磁碟 /dev/sdb:21.5 GB, 21474836480 位元組,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x012f51c1

裝置 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 16779263 6291456 83 Linux

命令(輸入 m 獲取幫助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 裝置或資源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁碟。


使用 SWAP 分割槽專用的格式化命令 mkswap,對新建的主分割槽進行格式化操作:


[[email protected] ~]# mkswap /dev/sdb2
正在設定交換空間版本 1,大小 = 6291452 KiB
無標籤,UUID=419f58bf-2c07-4948-9e19-ba02203de6da


使用 swapon 命令把準備好的 SWAP 分割槽裝置正式掛載到系統中。我們可以使用 free -m 命令檢視交換分割槽的大小變化(由 2.0G 增加到 8.0G):


[[email protected] ~]# free -h
total used free shared buffers cached
Mem: 3.7G 345M 3.4G 8.5M 1.6M 122M
-/+ buffers/cache: 220M 3.5G
Swap: 2.0G 0B 2.0G

[[email protected] ~]# swapon /dev/sdb2

[[email protected] ~]# free -h
total used free shared buffers cached
Mem: 3.7G 349M 3.3G 8.5M 1.6M 122M
-/+ buffers/cache: 224M 3.5G
Swap: 8.0G 0B 8.0G


為了能夠讓新的交換分割槽裝置在重啟後依然生效,需要按照下面的格式將相關資訊寫入到配置檔案中,並記得儲存:


[[email protected] ~]# vim /etc/fstab

#/etc/fstab
#Created by anaconda on Thu Dec 20 17:33:14 2018

#Accessible filesystems, by reference, are maintained under ‘/dev/disk’
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

/dev/mapper/rhel-root / xfs defaults 1 1
UUID=55e273f1-0964-4670-870b-410eb199f46d /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/sdb1 /newFS xfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0

5、磁碟容量配額

Linux 系統的設計初衷就是讓許多人一起使用並執行各自的任務,從而成為多使用者、多工的作業系統。但是,硬體資源是固定且有限的,如果某些使用者不斷地在 Linux 系統上建立檔案或者存放電影,硬碟空間總有一天會被佔滿。針對這種情況,root 管理員就需要使用磁碟容量配額服務來限制某位使用者或某個使用者組針對特定資料夾可以使用的最大硬碟空間或最大檔案個數,一旦達到這個最大值就不再允許繼續使用。

可以使用 quota 命令進行磁碟容量配額管理,從而限制使用者的硬碟可用容量或所能建立的最大檔案個數。quota命令還有軟限制和硬限制的功能。
  ➢ 軟限制:當達到軟限制時會提示使用者,但仍允許使用者在限定的額度內繼續使用。
  ➢ 硬限制:當達到硬限制時會提示使用者,且強制終止使用者的操作。
RHEL 7 系統中已經安裝了 quota 磁碟容量配額服務程式包,但儲存裝置卻預設沒有開啟對 quota 的支援,此時需要手動編輯配置檔案,讓 RHEL 7 系統中的/boot 目錄能夠支援 quota磁碟配額技術。另外,對於學習過早期的 Linux 系統,或者具有 RHEL 6 系統使用經驗的讀者來說,這裡需要特別注意。早期的 Linux 系統要想讓硬碟裝置支援 quota 磁碟容量配額服務,使用的是 usrquota 引數,而 RHEL 7 系統使用的則是 uquota 引數。在重啟系統後使用 mount命令檢視,即可發現/boot 目錄已經支援 quota 磁碟配額技術了:


[[email protected] ~]# mount|grep boot
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

[[email protected] ~]# vim /etc/fstab

#/etc/fstab
#Created by anaconda on Thu Dec 20 17:33:14 2018

#Accessible filesystems, by reference, are maintained under ‘/dev/disk’
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

/dev/mapper/rhel-root / xfs defaults 1 1
UUID=55e273f1-0964-4670-870b-410eb199f46d /boot xfs defaults,uquota 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/sdb1 /newFS xfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0

[[email protected] ~]# reboot

[[email protected] ~]# mount|grep boot
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)


接下來建立一個用於檢查 quota 磁碟容量配額效果的使用者 tom,並針對/boot 目錄增加其他人的寫許可權,保證使用者能夠正常寫入資料:


[[email protected] ~]# useradd tom
[[email protected] ~]# chmod -Rf o+w /boot


xfs_quota 命令

xfs_quota命令是一個專門針對XFS檔案系統來管理quota磁碟容量配額服務而設計的命令,格式為“xfs_quota [引數] 配額 檔案系統”。其中,-c 引數用於以引數的形式設定要執行的命令;-x 引數是專家模式,讓運維人員能夠對 quota 服務進行更多複雜的配置。接下來我們使用 xfs_quota命令來設定使用者 tom 對/boot 目錄的 quota 磁碟容量配額。具體的限額控制包括:硬碟使用量的軟限制和硬限制分別為 3MB 和 6MB;建立檔案數量的軟限制和硬限制分別為 3 個和 6 個。


[[email protected] ~]# xfs_quota -x -c ‘limit bsoft=3m bhard=6m isoft=3m ihard=6m tom’ /boot
[[email protected] ~]# xfs_quota -x -c report /boot
User quota on /boot (/dev/sda1)
Blocks
User ID Used Soft Hard Warn/Grace


root 72360 0 0 00 [--------]
tom 0 3072 6144 00 [--------]


當配置好上述的各種軟硬限制後,嘗試切換到這個普通使用者,然後分別嘗試建立一個體積為 5MB 和 8MB 的檔案。可以發現,在建立 8MB 的檔案時受到了系統限制:


[[email protected] ~]# su - tom
[[email protected] ~]$ dd if=/dev/zero of=/boot/tom bs=5M count=1
記錄了1+0 的讀入
記錄了1+0 的寫出
5242880位元組(5.2 MB)已複製,0.00486121 秒,1.1 GB/秒
[[email protected] ~]$ dd if=/dev/zero of=/boot/tom bs=8M count=1
dd: 寫入"/boot/tom" 出錯: 超出磁碟限額
記錄了1+0 的讀入
記錄了0+0 的寫出
6291456位元組(6.3 MB)已複製,0.0130212 秒,483 MB/秒

edquota 命令

edquota 命令用於編輯使用者的 quota 配額限制,格式為“edquota [引數] [使用者] ”。在為使用者設定了 quota 磁碟容量配額限制後,可以使用 edquota 命令按需修改限額的數值。其中,-u引數表示要針對哪個使用者進行設定;-g 引數表示要針對哪個使用者組進行設定。edquota 命令會呼叫 Vi 或 Vim 編輯器來讓 root 管理員修改要限制的具體細節。下面把使用者 tom 的硬碟使用量的硬限額從 5MB 提升到 8MB:


[[email protected] ~]# edquota -u tom
Disk quotas for user tom (uid 1006):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 8192 3072 8192 1 3 6
[[email protected] ~]# su - tom
上一次登入:四 1月 3 01:15:44 CST 2019pts/0 上
[[email protected] ~]$ dd if=/dev/zero of=/boot/tom bs=8M count=1
記錄了1+0 的讀入
記錄了1+0 的寫出
8388608位元組(8.4 MB)已複製,0.0523109 秒,160 MB/秒