1. 程式人生 > >linux入門系列12--磁碟管理之分割槽、格式化與掛載

linux入門系列12--磁碟管理之分割槽、格式化與掛載

前面系列文章講解了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=/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技術