前面系列文章講解了VI編輯器、常用命令、防火墻及網路服務管理,本篇將講解磁盤管理相關知識,
本文將會介紹大量的Linux命令,其中有一部分在“linux入門系列5--新手必會的linux命令”一文中已經介紹,遺忘了或沒學習過的請自行查看,
磁盤管理主要涉及磁盤擴容以及磁盤配額管理,當服務器磁盤空間達到一定程度(個人認為一般使用量占到總容量的70-80%)就需要考慮新加磁盤實作擴容,一般操作步驟為磁區、格式化、掛載、驗證及使用,而磁盤配額主要是針對用戶設定其最大的磁盤空間使用量,防止當個用戶占用磁盤過多的情況,下面將在虛擬機中模擬磁盤的這些管理操作,生產環境中操作命令和方式都是一樣的,
在演示具體操作之前先了解一下相關的理論知識,
一、磁盤管理相關理論知識
1.1 檔案存盤結構與檔案定位
Linux系統中一切都是檔案,既然是檔案那就涉及檔案的存盤以及檔案的定位查找,
1.1.1 檔案存盤結構
在windows系統中,我們存盤檔案一般是將磁盤劃分為幾個不同的盤符(比如C、D、E、F等等),然后將資料存盤在不同的盤符下,查找的時候也是根據對應的盤符找到相應的存盤檔案夾,進而找到對應的檔案,
但是在Linux下,情況有些不一樣,一切檔案都是從根目錄開始的,并不像windows一樣存在盤符的說法,并且Linux下的目錄名稱是嚴格區分大小寫的,
檔案在Linux中存盤是有一定規律的,它是按照檔案系統層次化標準(FHS)采用樹形結構來存放檔案,并且定義了常見的目錄的用途(也就是規定了什么檔案夾放什么檔案),具體的樹形目錄結構與FHS規定的目錄用途參見系列第二篇文章“linux入門系列2--GUI基本操作及目錄結構”的Centos目錄結構部分,在此不再贅述,
注意:FHS只是一個約定的標準并沒有強制要求某一類檔案一定要放在指定的檔案夾下,因此在接手一臺新服務器時需要注意,有的人可能并沒按這個標準來放置檔案,需要靈活對待,當然強烈建議按FHS要求來對檔案進行管理,
1.1.2 檔案定位
檔案是通過路徑來定位,分為絕對路徑和相對路徑,
絕對路徑是指從根目錄開始到檔案或目錄,而相對路徑則是相對于當前路徑,
示例中假設當前路徑為:/root/test/test1
[root@heimatengyun test1]# pwd
/root/test/test1
[root@heimatengyun test1]# ls
hello test
[root@heimatengyun test1]# cat hello
hello
[root@heimatengyun test1]# cat /root/test/test1/hello
hello
[root@heimatengyun test1]#
在/root/test/test1目錄下有一個hello檔案,其中“cat hello”命令是相對于當前路徑下的hello檔案,而 “cat /root/test/test1/hello ”則是給出了完整的絕對路徑,通過相對路徑和絕對路徑都可以訪問到具體的檔案,
1.2 Linux檔案的快捷方式
1.2.1 Linux的“快捷方式”
相信大家一定熟悉windows下的快捷方式,尤其是軟體的快捷方式,比如第一篇文章“linux入門系列1--環境準備及linux安裝”講解安裝虛擬機VMware時,相應的檔案安裝在指定的盤符下,同時會在桌面和選單中創建快捷方式,這樣每次啟動虛擬機只需要點擊桌面快捷方式即可,而無需每次找到對應的盤符,然后在進入目錄點擊相應的運行檔案,
快捷方式的好處顯而易見,同樣Linux系統中也存在快捷方式,只是Linux中的快捷方式和Windows中的快捷方式有些區別,
Windows中額快捷方式是指向原始檔案的一個連接檔案,原檔案一旦洗掉或移動位置就會導致快捷方式的連接失效,但是在Linux中鏈接卻分為兩種:軟鏈接和硬鏈接,
- 軟鏈接
也稱為符號連接(symbolic link),僅僅包含所鏈接檔案的路徑名,可以連接目錄檔案,也可以跨越檔案系統進行鏈接,與Windows中的快捷方式類似,洗掉原始檔案后,鏈接檔案將失效,
- 硬鏈接
硬鏈接與原始檔案是同一個檔案,只是名字不同而已,每添加一個硬鏈接,該檔案的inode連接數就會加1,并且只有當該檔案的連接數為0時才算徹底洗掉檔案,簡單說就是硬鏈接實際是指向原檔案的指標,即便洗掉原始檔案,依然可以通過硬鏈接檔案來訪問,不能跨磁區對目錄檔案進行鏈接,
1.2.2 Linux軟、硬鏈接創建
創建鏈接采用ln命令,語法格式為:ln [選項] 目標檔案 鏈接名稱
常見引數如下表,更多引數及用法請使用“man ln”命令查看,
| 引數 | 作用 |
|---|---|
| -s | symbolic,創建符號連接,如果不帶此引數默認創建硬鏈接 |
| -f | force,強制創建檔案或目錄的鏈接 |
| -i | 覆寫前先詢問 |
案例:
(1)創建軟鏈接并洗掉原檔案,驗證能否查看鏈接檔案
[root@heimatengyun test]# mkdir testln
[root@heimatengyun test]# cd testln/
[root@heimatengyun testln]# echo "symbolic link">slink
[root@heimatengyun testln]# ln -s slink slink.ln
[root@heimatengyun testln]# cat slink
symbolic link
[root@heimatengyun testln]# cat slink.ln
symbolic link
[root@heimatengyun testln]# ll
total 4
-rw-r--r--. 1 root root 14 Dec 26 23:23 slink
lrwxrwxrwx. 1 root root 5 Dec 26 23:24 slink.ln -> slink
[root@heimatengyun testln]# rm -f slink
[root@heimatengyun testln]# cat slink.ln
cat: slink.ln: No such file or directory
[root@heimatengyun testln]# ls
slink.ln
[root@heimatengyun testln]# rm slink.ln
rm: remove symbolic link ‘slink.ln’? y
[root@heimatengyun testln]# ls
[root@heimatengyun testln]#
先創建testln檔案夾,并切換到該檔案夾下創建slink原始檔案,然后創建slink檔案的軟鏈接slink.ln,查看檔案發現參考量為1,并且鏈接檔案會有箭頭標識,此時洗掉原始檔案slink,然后鏈接檔案slink.lnye 也不能訪問,雖然檔案不能訪問但是檔案還存在,可以手動洗掉它,
(2)創建硬鏈接并洗掉原檔案,驗證能否查看鏈接檔案
[root@heimatengyun testln]# ls
[root@heimatengyun testln]# echo "hard link">hlink
[root@heimatengyun testln]# ln hlink hlink.ln
[root@heimatengyun testln]# cat hlink
hard link
[root@heimatengyun testln]# cat hlink.ln
hard link
[root@heimatengyun testln]# ll
total 8
-rw-r--r--. 2 root root 10 Dec 26 23:30 hlink
-rw-r--r--. 2 root root 10 Dec 26 23:30 hlink.ln
[root@heimatengyun testln]# rm -f hlink
[root@heimatengyun testln]# cat hlink.ln
hard link
[root@heimatengyun testln]# ll
total 4
-rw-r--r--. 1 root root 10 Dec 26 23:30 hlink.ln
先創建hlink原始檔案,然后hlink檔案的硬鏈接hlin.ln檔案,查看檔案參考量顯示為2,并且不會像軟連接一樣有箭頭標識,洗掉原檔案,鏈接檔案依然能正常訪問,再次查看檔案的應用量已經變為1,
1.3 物理硬體設備命名規則
硬體設備在Linux中是以檔案形式進行定義和管理,而檔案需要命名規范,udev設備管理器在/dev/目錄下為所有的設備定義了內核設備的名稱,它是當前Linux默認的設備管理工具,以守護行程的形式運行,通過偵聽內核發出來的uevent 來管理/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 |
常用的也就SCSI/SATA硬碟或光驅,當進行磁盤擴容等空間管理時會用到磁盤設備,當安裝光碟鏡像時會用到光驅設備,
硬碟設備一般以“/dev/sd”開頭,而一臺主機上可以有多塊硬碟,因此系統采用 a~p 來代表 16 塊不同的硬碟,默認從a開始分配,磁區編號也有一定規則:主磁區或擴展磁區的編號從 1- 4 ,而邏輯磁區從5開始編號,
假設一個設備檔案名為:/dev/sda5,我們詳細分析下該設備檔案名包含哪些資訊?

/dev/目錄中保存的應當是硬體設備檔案;sd 表示是存盤設備;a 表示 系統中同類介面中第一個被識別到的設備;5 表示這個設備是一個邏輯磁區,一句話描述:這是系統中第一塊被識別到的硬體設備中磁區編號為5的邏輯磁區的設備檔案,
再來看一下另外一個例子,查看本機掛載的磁盤設備
[root@heimatengyun ~]# df -h
Filesystem Size Used Avail Use% Mounted on
...省略部分內容
/dev/sda1 497M 119M 379M 24% /boot
/dev/sda1表示這是系統中第一塊被識別到的硬體設備中磁區編號為1的主磁區的設備檔案,
1.4 Linux檔案系統型別
檔案系統的作用是合理規劃硬碟,用戶在硬體存盤設備中執行的檔案建立、寫入、讀取、修改、轉存與控制等操作都是依 靠檔案系統來完成的,
Linux系統支持數十種的檔案系統,常見的有以下幾種:
| 檔案系統 | 描述 |
|---|---|
| Ext3 | 是一款日志檔案系統,能夠在系統例外宕機時避免檔案系統資料丟失,并能 自動修復資料的不一致與錯誤,缺點是當硬碟容量很大時,修復時間長 |
| Ext4 | 改進版的Ext3,是RHEL6默認的檔案管理系統,存盤容量達到1EB,讀寫效率比Ext3極大的提高 |
| XFS | 是一種高性能的日志檔案系統,是RHEL7默認的檔案管理系統,優點是意外宕機后恢復非常快,并且支持最大存盤容量為18EB |
拿到一塊新的硬碟存盤設備后,需要先磁區,然后再格 式化檔案系統,最后才能掛載并正常使用,硬碟的磁區操作取決于需求和硬碟大小,也可以選擇不進行磁區,但是必須對硬碟進行格式化處理,
剛說到Linux系統支持數十種檔案系統,其實每種檔案系統底層操作肯定有很多區別,但是為了讓用戶在讀取和寫入檔案是不用關心底層的硬碟結構,Linux內核中的軟體層為用戶程式提供 了一個VFS介面(Virtual File System),這個介面封裝了底層檔案系統的特性和細節,這樣用戶實際上在操作檔案時就是統一對這個VFS進行操作,從而不必關心每種檔案系統的不同,
VFS架構示意圖如下:

1.5 mount命令掛載硬體設備
相信大家都在windows上使用過移動硬碟或U盤,即插即用,無須其他操作非常方便,但實際上windows其實是悄悄幫我們做了很多事情,才使得我們能訪問新插入的設備,在Linux系統中當我們拿到一塊全新的硬碟后,我們需要先磁區、格式化、然后才是掛載使用,
此處提到的掛載其實就是當需要使用硬碟設備或磁區中的資料時,先將其與一個已存在的目錄檔案進行關聯的程序,掛載和取消掛載主要用到兩個命令:mount、umount,下面分別進行介紹,
1.5.1 mount命令
語法:
? mount [引數] 檔案系統 掛載目錄
引數:
| 引數 | 作用 |
|---|---|
| -a | 掛載所有在/etc/fstab 中定義的檔案系統 |
| -t | 指定檔案系統的型別 |
其中-a引數,它會在執行后自動檢查 /etc/fstab 檔案中有無疏漏被掛載的設備檔案,如果有,則進行自動掛載操作,而-t引數相對于較新的Linux系統來說無須指定,系統會自動進行判斷,
案例:
(1)把設備/dev/sdb2掛載到/test目錄
在 mount 命令中填寫設備與掛載目錄引數即可,系統會自動去判斷要掛載檔案的型別,
[root@heimatengyun ~]# mount /dev/sdb2 /backup
說明:此處只是為了說明mount命令的用法,實際上此時并沒有加入sdb第二塊硬體設備,因此如果立刻執行此命令可能不會成功,下一節“添加硬碟”實戰將完整演示如何將一塊新的磁盤設備掛載到系統中,
執行上邊mount命令后設備即可掛載成功,但是這是臨時的,當系統重啟后掛載就會失效,需要每次開機都手動掛載一下,這比較麻煩,我們可以通過將掛載資訊按指定格式寫入/etc/fstab檔案,這樣硬體設備就會在每次開機后自動進行關聯,
下面我們研究下該fstab檔案的內容和格式:
[root@heimatengyun ~]# cat /etc/fstab
...省略注釋部分
/dev/mapper/centos-root / xfs defaults 1 1
UUID=bfd83b27-ed2b-4770-8d17-9e5412f2be27 /boot xfs defaults 1 2
/dev/mapper/centos-swap swap swap defaults 0 0
可以看到,其格式固定為: “設備檔案 掛載目錄 格式型別 權限選項 是否備份 是否自檢”
各個自動含義如下表:
| 欄位 | 含義 |
|---|---|
| 設備檔案 | 一 般 為 設 備 的 路 徑 + 設 備 名 稱 , 也 可 以 寫 唯 一 識 別 碼 ( UUID , Universally Unique Identifier) |
| 掛載目錄 | 指定要掛載到的目錄,需在掛載前創建好 |
| 格式型別 | 指定檔案系統的格式,比如 Ext3、Ext4、XFS、SWAP、iso9660(此為光碟設備)等 |
| 權限選項 | 若設定為 defaults,則默認權限為:rw, suid, dev, exec, auto, nouser, async |
| 是否備份 | 若為 1 則開機后使用 dump 進行磁盤備份,為 0 則不備份 |
| 是否自檢 | 若為 1 則開機后自動進行磁盤自檢,為 0 則不自檢 |
學習fstab檔案格式后,我們便可以將上邊通過命令掛載的/dev/sdb2設備資訊寫入fstab檔案,使其永久生效,
假設檔案系統型別為ext4,保持默認全選無須開機自檢,則在fstab檔案添加如下一行即可,
/dev/sdb2 /test ext4 defaults 0 0
1.5.2 umount命令
umount 命令用于撤銷已經掛載的設備檔案,掛載檔案系統的目的是為了使用硬體資源,而卸載檔案系統就意味不再使用硬體的設備資源,掛載操作就是把硬體設備與目錄進行關聯的動作,因此卸載操作只需要說明想要 取消關聯的設備檔案或掛載目錄的其中一項即可,
語法:
? umount [掛載點/設備檔案]
案例:
? 假設卸載掉前邊掛載的/dev/sdb2設備,命令如下:
[root@heimatengyun ~]# umount /dev/sdb2
1.6 du命令查看目錄或檔案大小
我們使用du命令查看一個或多個檔案占用了多大的硬碟空間,
語法:
? du [選項] [檔案或目錄]
選項:
| 引數 | 作用 |
|---|---|
| -h | human-readable,已人類可讀的方式顯示單位(K、M、G等) |
| -s | summarize,僅顯示后邊引數的總數 |
案例:
(1)使用du命令查看目錄大小
以我本機的test目錄為例,其中有目錄有檔案,如下圖:
[root@heimatengyun ~]# ll test/
total 104
-rw-rwxr--+ 1 root root 135 Dec 1 23:26 case.sh
-rw-rwxr--+ 1 root root 219 Dec 2 23:57 function.sh
-rw-rwxr--+ 1 root root 91 Dec 2 21:55 getsum.sh
-rw-rwxr--+ 1 root root 85 Dec 2 21:48 greeting.sh
-rwxrwxrwx+ 1 root root 53 Dec 1 09:22 hello.sh
-rw-rwxr--+ 1 root root 186 Dec 1 23:11 if.sh
-rwsrwxrwx+ 1 root root 145 Dec 1 16:06 mypid.sh
-rw-rwxr--+ 1 root root 142 Dec 3 00:18 para.sh
-rw-rwxr--+ 1 root root 338 Dec 1 16:00 pid.sh
-rw-rwxr--+ 1 root root 99 Dec 1 15:22 sum.sh
drwxrwxrwx+ 2 test test 29 Dec 20 14:52 test1
-rw-rwxr--+ 1 root root 9 Nov 30 20:43 test1.txt
-rw-rwxr--+ 1 root root 0 Nov 30 15:34 test2.txt
drwxr-xr-x. 2 root root 21 Dec 26 23:31 testln
-rw-rwxr--+ 1 root root 139 Dec 2 23:55 while.sh
接下來,我們看下不同引數的作用
[root@heimatengyun ~]# du test/
20 test/test1
4 test/testln
132 test/
[root@heimatengyun ~]# du -s test/
132 test/
[root@heimatengyun ~]# du -sh test/
132K test/
通過以上案例,我們可以看到,僅僅可以看到test目錄下的一級目錄大小,如果加-s引數則僅僅能看到自身目錄大小,如果加-h引數則可以看到添加了單位k,
如何查看目錄下所有內容呢?
(2)查看目錄包括檔案和目錄的所有內容的大小
[root@heimatengyun ~]# du test/*
8 test/case.sh
8 test/function.sh
8 test/getsum.sh
8 test/greeting.sh
8 test/hello.sh
8 test/if.sh
8 test/mypid.sh
8 test/para.sh
8 test/pid.sh
8 test/sum.sh
20 test/test1
8 test/test1.txt
4 test/test2.txt
4 test/testln
8 test/while.sh
[root@heimatengyun ~]# du -s test/*
8 test/case.sh
8 test/function.sh
8 test/getsum.sh
8 test/greeting.sh
8 test/hello.sh
8 test/if.sh
8 test/mypid.sh
8 test/para.sh
8 test/pid.sh
8 test/sum.sh
20 test/test1
8 test/test1.txt
4 test/test2.txt
4 test/testln
8 test/while.sh
[root@heimatengyun ~]# du -sh test/*
8.0K test/case.sh
8.0K test/function.sh
8.0K test/getsum.sh
8.0K test/greeting.sh
8.0K test/hello.sh
8.0K test/if.sh
8.0K test/mypid.sh
8.0K test/para.sh
8.0K test/pid.sh
8.0K test/sum.sh
20K test/test1
8.0K test/test1.txt
4.0K test/test2.txt
4.0K test/testln
8.0K test/while.sh
[root@heimatengyun ~]#
對比以上三個命令可以看出,如果命令后用*表示查看所有內容,那么-s引數將失去意義,加與不加此引數效果都一樣,
1.7 df命令查看磁盤空間
df命令用戶查磁盤的掛載資訊及空間占用情況,
語法:
? df [引數] [目錄]
常用引數:
| 引數 | 作用 |
|---|---|
| -a | all,顯示所有檔案,包括虛擬檔案系統 |
| -h | human-readable,以人類可讀的方式大小,比如單位K,M,G等 |
案例:
(1)查看指定目錄掛載狀態及占用的磁盤空間
[root@heimatengyun ~]# df -h /newDisk/
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 2.0G 33M 2.0G 2% /newDisk
(2)查看所有一級目錄占用空間大小
[root@heimatengyun ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 3.7G 14G 21% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 80K 914M 1% /dev/shm
tmpfs 914M 8.9M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sdb1 2.0G 33M 2.0G 2% /newDisk
/dev/sda1 497M 119M 379M 24% /boot
如果加-a引數,則顯示所有的目錄
[root@heimatengyun ~]# df -ah
Filesystem Size Used Avail Use% Mounted on
rootfs 18G 3.7G 14G 21% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devtmpfs 905M 0 905M 0% /dev
...省略部分內容
具體引數可以通過man命令查看,并多多練習查看不同引數的不同結果,
二、添加硬碟
通過前面的學習,我們已經具備磁盤管理的能力,因此本節將模擬真實生產環境中對服務器添加磁盤設備進行擴容管理,
整體步驟為:在虛擬機中模擬添加入一塊新的硬碟存盤設備、磁區、格 式化、掛載、檢查系統的掛載狀態、真實使用硬碟驗證是否成功添加,
2.1 添加新磁盤
此程序我們在虛擬機中模擬添加一塊新的磁盤設備,
確保關閉虛擬機后,我們在虛擬機管理主界面單擊“編輯虛擬機設定”選項

在彈出框中單擊“添加按鈕”

選擇硬體型別為“磁盤”

點擊“下一步”按鈕,在新彈出的對話框中,保持默認的磁盤型別為SCSI

點擊“下一步”按鈕,在新彈出對話中中保持默認的“創建新的虛擬磁盤”

單擊“下一步”按鈕,在新彈出的界面中保持默認的容量即可

單擊“下一步”按鈕,在新界面中選擇磁盤檔案的保存位置,也可以保持默認即可,

點擊“完成”按鈕,將回傳虛擬機設定界面,并在此界面中可以看到剛才新添加的磁盤,

單擊“確定”按鈕,磁盤添加完成,并在虛擬機管理主界面中也可以看到剛才添加的新磁盤,

根據前面講解的物理設備命名規則,我們大膽猜想設備名稱應該為sdb,表示是第二塊識別到的磁盤,后邊的步驟中,我們將驗證這個猜想的正確性,
2.2 磁盤磁區
正式磁區之前,先介紹一下Linux的磁盤磁區命令fdisk,它提供了集添加、洗掉、轉換磁區等功能于一身的全套服務,
語法:fdisk [磁盤名稱]
fdisk提供了互動式的引數,可以根據需求動態調整,常見引數如下:
| 引數 | 作用 |
|---|---|
| m | 查看全部可用的引數 |
| n | 添加新的磁區 |
| d | 洗掉某個磁區資訊 |
| l | 列出所有可用的磁區型別,所有磁盤資訊包括未加載磁盤 |
| t | 改變某個磁區的型別 |
| p | 查看磁區資訊 |
| w | 保存并退出 |
| q | 不保存直接退出 |
除了fdisk之外,再介紹一個命令lsblk,這個命令可以列出所有可用塊設備的資訊,而且還能顯示他們之間的依賴關系,
2.2.1 查看新添加的設備
學會fdisk和lsblk命令之后,我們先查看一下第一步新添加的磁盤資訊(找出還沒有磁區的設備),
可以使用fdisk -l 命令查看,結果如下:
[root@heimatengyun ~]# fdisk -l
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
...省略部分內容
也可以通過lsblk命令查看,結果如下:
[root@heimatengyun ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 19.5G 0 part
├─centos-swap 253:0 0 2G 0 lvm [SWAP]
└─centos-root 253:1 0 17.5G 0 lvm /
sdb 8:16 0 20G 0 disk
sr0 11:0 1 3.9G 0 rom
可以看到設備名稱為sdb,跟我們前面猜想的設備名稱吻合,
2.2.2 磁盤磁區
使用fdisk命令管理/dev/sdb硬碟設備
通過引數p查看硬碟設備已有的磁區資訊,可以看到硬碟的容量大小、扇區個數等資訊:
[root@heimatengyun ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xf69cc7c1.
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xf69cc7c1
Device Boot Start End Blocks Id System
通過n引數添加新磁區,接下來會提示創建主磁區(p)還是擴展磁區(e),我們用引數p創建主磁區:
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
接下來會讓輸入主磁區編號,我們采用默認1,接下來會提示輸入扇區的起始位置,我們保持默認直接按回車鍵,系統會自動幫我們計算最靠前的空閑扇區位置,隨后提示我們輸入扇區結束位置,我們直接輸入+2G即可:
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G
Partition 1 of type Linux and of size 2 GiB is set
這個扇區結束位置其實是定義整個磁區的大小,我們無需計算扇區的個數,直接輸入+2g即可創建一個容量為2GB的硬碟磁區,
接下來我們再次用p引數查看剛才的磁區資訊:
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xf69cc7c1
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
這樣我們就可以看到名稱為/dev/sdb1的主磁區資訊了,可以看到它的起始扇區位置為2048,結束扇區位置為4196351,
此時通過w引數保存并回車:
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
這樣磁區資訊就寫入成功,可以通過前文講解的fdisk -l命令或lsblk命令查看硬體設備的磁區資訊,
經過上面的一些列操作之后,Linux 系統會自動把這個硬碟主磁區抽象成/dev/sdb1設備檔案,下面我們就通過file命令進行查看該設備檔案,
2.2.3 查看磁區設備檔案
可以通過file命令查看檔案該磁區設備檔案,在查看之前,我們先學習以下file命令
語法格式:file [引數選項] 目錄或檔案
作用:辨識檔案型別
明確語法格式之后,我們用file命令查看剛才的磁區檔案/dev/sdb1設備檔案型別
[root@heimatengyun ~]# file /dev/sdb1
/dev/sdb1: block special
由此可見,剛才添加磁區的操作已經成功了,
注意:有時候系統并沒有自動把磁區資訊同步給Linux內核,因此執行上邊陳述句時可能得到的結果為:/dev/sdb1: cannot open (No such file or directory),如果出現這種情況需要手動執行partprobe命令將磁區資訊同步到內核中,并且建議是連續執行兩次partprobe命令,如果執行二次還是無效,可以直接重啟計算機,重啟之后就可以了,
確認磁區設備檔案成功之后,我們在補充下file命令的案例:
[root@heimatengyun ~]# file test/
test/: directory
[root@heimatengyun ~]# file test/test1.txt
test/test1.txt: ASCII text
可以看到file命令可以方便的查看出目錄或檔案的型別,
磁區創建成功,接下來就要格式化磁盤,
2.3 磁盤格式化
如果硬體存盤設備沒有進行格式化,Linux 系統無法得知怎么在其上寫入資料,Linux中用于磁盤格式化的命令為mkfs,
語法格式:mkfs.檔案系統型別 設備磁區檔案
我們通過命令補齊命令可以查看到mkfs命令根據系統型別分為不同的命令:
[root@heimatengyun ~]# mkfs
mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
了解mkfs命令之后,我們使用xfs檔案型別將之前創建的磁區/dev/sdb1進行格式化:
[root@heimatengyun ~]# mkfs.xfs /dev/sdb1
meta-data=https://www.cnblogs.com/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
這樣就完成了磁區的格式,接下來對檔案進行掛載后就可以使用設備了,
2.4 掛載磁盤
掛載磁盤使用之前講解的mount命令,需要先創建一個掛載點目錄,
[root@heimatengyun ~]# mkdir /newDisk
[root@heimatengyun ~]# mount /dev/sdb1 /newDisk/
[root@heimatengyun ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 3.7G 14G 21% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 80K 914M 1% /dev/shm
tmpfs 914M 8.9M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
/dev/sdb1 2.0G 33M 2.0G 2% /newDisk
掛載成功后,通過df -h命令即可查看到已經掛載的設備,
接下來就可以使用新加的磁盤設備了,
切換到新加設備所在的目錄,添加檔案并查看檔案及其占用的大小:
[root@heimatengyun ~]# cd /newDisk/
[root@heimatengyun newDisk]# echo 'test'>test.txt
[root@heimatengyun newDisk]# ll
total 4
-rw-r--r--. 1 root root 5 Dec 28 18:57 test.txt
[root@heimatengyun newDisk]# du -sh /newDisk/
4.0K /newDisk/
可以看到檔案創建成功,
接下來使用df -h命令查看掛載狀態和硬碟使用量:
[root@heimatengyun ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 3.7G 14G 21% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 80K 914M 1% /dev/shm
tmpfs 914M 8.9M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sdb1 2.0G 33M 2.0G 2% /newDisk
/dev/sda1 497M 119M 379M 24% /boot
可以看到磁盤掛載成功,至此,說明新掛載的檔案沒有任何問題,可以正常使用,
到目前為止磁盤可以正常使用了,但是正如前面提到的mount命令掛載的設備需要寫入fstab檔案才能永久生效,因此我們編輯fstab檔案將掛載資訊寫入:
[root@heimatengyun newDisk]# vi /etc/fstab
...省略部分內容,添加以下一行即可
/dev/sdb1 /newDisk xfs defaults 0 0
這樣就完成了新磁盤設備添加,
三、添加交換磁區
交換磁區(SWAP)是在硬碟中預先劃分一定的空間,當真實物理記憶體不夠用時,將記憶體中暫時不常用的資料臨時放到硬碟中,以便騰出物理記憶體空間讓更活躍的程式服務來使用的技術,
但是需要注意的是,畢竟硬碟的讀寫速度肯定比記憶體man,所以也只有當真實物理記憶體耗盡后才會呼叫交換磁區的資源,
交換磁區的創建程序與掛載程序基本一致,前面添加的設備總大小為20G,/dev/sdb掛載使用了2G,此處添加一個4G的主磁區作為交換磁區,程序如下:
3.1 創建磁區
[root@heimatengyun ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (2-4, default 2):
First sector (4196352-41943039, default 4196352):
Using default value 4196352
Last sector, +sectors or +size{K,M,G} (4196352-41943039, default 41943039): +4G
Partition 2 of type Linux and of size 4 GiB is set
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xf69cc7c1
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 12584959 4194304 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
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)
Syncing disks.
[root@heimatengyun ~]#
3.2 格式SWAP磁區
交換磁區格式化使用的命令與產品磁區格式化有點區別,使用的是mkswap命令
[root@heimatengyun ~]# mkswap /dev/sdb2
/dev/sdb2: No such file or directory
[root@heimatengyun ~]# partprobe
如果遇到上述情況,需要執行partprobe或重啟即可
[root@heimatengyun ~]# mkswap /dev/sdb2
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=ef101e7c-e17d-42b7-8124-bed7c27a08e0
3.3 掛載磁區
掛載SWAP磁區使用的是swapon命令,注意普通磁區使用mount,
先使用free 命令查看下互動磁區的大小,然后再用swapon命令掛載SWAP磁區設備,再次對比查看磁區大小的變化:
[root@heimatengyun ~]# free -m
total used free shared buffers cached
Mem: 1826 605 1221 8 1 219
-/+ buffers/cache: 383 1443
Swap: 2047 0 2047
[root@heimatengyun ~]# swapon /dev/sdb2
[root@heimatengyun ~]# free -m
total used free shared buffers cached
Mem: 1826 608 1218 8 1 219
-/+ buffers/cache: 386 1440
Swap: 6143 0 6143
可以看到,掛載后SWAP交換磁區變大了,說明掛載成功,
與普通磁區掛載一樣,也需要將配置資訊寫入fstab檔案使其開啟自動掛載,在fstab檔案加入最后一行,注意檔案系統各型別為swap,
[root@heimatengyun ~]# vim /etc/fstab
...省略部分內容
/dev/sdb1 /newDisk xfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0
這樣交換磁區也就添加成功,
四、限定用戶磁盤容量
前文提到過,Linux系統是多用戶多任務作業系統,這就意味著可能有很多用戶同時在使用該作業系統,
但是服務器硬體資源是有限的,我們需要通過磁盤容量配額服務來限制某位用戶或某個用戶組針對特定檔案夾可以使用的 最大硬碟空間或最大檔案個數,一旦達到這個最大值就不再允許繼續使用,
磁盤容量配額功能通過quota命令實作,分為軟限制和硬限制,當達到軟限制時提示用戶但仍可以使用,直到達到硬配額為止;而達到硬限制則直接不允許用戶在繼續使用,
4.1 開啟quota支持
RHEL7已經安裝quota 磁盤容量配額服務程式包,但存盤設備默認沒有開啟對quota 的支持,需要手動編輯/etc/fstab組態檔,
在fstab組態檔中的掛載目錄/boot中添加uquota引數使其支持磁盤配額功能,
[root@heimatengyun ~]# vim /etc/fstab
...省略部分內容
UUID=bfd83b27-ed2b-4770-8d17-9e5412f2be27 /boot xfs defaults,uquota 1 2
...省略部分內容
重啟系統,查看是否生效
[root@heimatengyun ~]# reboot
[root@heimatengyun ~]# mount |grep boot
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)
可以看到包含了usrquota表明已經生效,
4.2 xfs_quota命令
xfs_quota命令是一個專門針對XFS檔案系統來管理quota磁盤容量配額服務而設計的命令,我們先了解一下xfs_quota命令的基本用法,
語法:
? xfs_quota [引數] 配額 檔案系統
引數:
| 引數 | 作用 |
|---|---|
| -x | 專家模式,可以對quota服務進行更多復雜的配置 |
| -c | 于以引數的形式設定要執行的命令 |
接下來我們使用 xfs_quota 命令來設定用戶對/boot 目錄的 quota 磁盤容量配額,
(1)先創建一個普通用戶:testquota,并對/boot目錄添加其他人寫入的權限,保證用戶能正常寫入資料:
[root@heimatengyun ~]# useradd testquota
[root@heimatengyun ~]# chmod -Rf o+w /boot/
(2)限制testquota用戶磁盤使用量和創建檔案的大小
具體的限額控制包括:硬碟使用量的軟限制和硬限制分別為1MB 和3MB;創建檔案數量的軟限制和硬限制分別為2個和4個,
創建磁盤配額并查看設定是否成功:
[root@heimatengyun ~]# xfs_quota -x -c 'limit bsoft=1m bhard=3m isoft=2 ihard=4 testquota' /boot/
[root@heimatengyun ~]# xfs_quota -x -c report /boot/
User quota on /boot (/dev/sda1)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 95328 0 0 00 [--------]
testquota 0 1024 3072 00 [--------]
創建成功后,切換到普通用戶并分別創建一個2M和4M的檔案,(選擇2M的目的是剛好超過最小配額但又沒超過最大配額,而選擇4M則是超過了最大配額,這樣就能模擬出磁盤配額的效果)
[root@heimatengyun ~]# su - testquota
[testquota@heimatengyun ~]$ dd if=/dev/zero of=/boot/testquota bs=2M count=1
1+0 records in
1+0 records out
2097152 bytes (2.1 MB) copied, 0.00166952 s, 1.3 GB/s
[testquota@heimatengyun ~]$ dd if=/dev/zero of=/boot/testquota bs=4M count=1
dd: error writing ‘/boot/testquota’: Disk quota exceeded
1+0 records in
0+0 records out
3145728 bytes (3.1 MB) copied, 0.00411569 s, 764 MB/s
[testquota@heimatengyun ~]$ ll /boot/testquota
-rw-rw-r--. 1 testquota testquota 3145728 Dec 28 21:07 /boot/testquota
[testquota@heimatengyun ~]$ exit
logout
可以看到2M的檔案創建成功,但是4M的檔案提示失敗了,說明針對用戶的磁盤配額生效了,
4.3 edquota命令
edquota 命令用于編輯用戶的 quota 配額限制,在為用 戶設定了quota 磁盤容量配額限制后,可以使用edquota命令按需修改限額的數值,
語法:
? edquota [引數] [用戶]
引數:
| 引數 | 作用 |
|---|---|
| -u | 要針對哪個用戶進行設定 |
| -g | 要針對哪個用戶組進行設定 |
edquota 命令會呼叫 Vi編輯器來讓 root 管理員修改要限制的具體細節,下面把 testquota用戶的硬碟使用量的硬限額從5M提升到8M:
[root@heimatengyun ~]# edquota -u testquota
Disk quotas for user testquota (uid 1002):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 3072 1024 3072 1 2 4
修改并保存即可,
本文介紹了Centos7系統中基本的磁盤管理技術,下一篇將講解更高級一點的磁盤陣列RAID及LVM技術,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/139400.html
標籤:Linux
上一篇:Linux 網路客戶端工具
