1. 程式人生 > >Linux學習筆記16——磁碟的分割槽、格式化、檢驗與掛載

Linux學習筆記16——磁碟的分割槽、格式化、檢驗與掛載

一、磁碟的分割槽、格式化、檢驗與掛載

對於一個系統管理者( root )而言,磁碟的的管理是相當重要的一環,尤其近來磁碟已經漸漸的被當成是消耗品了 ..... 如果我們想要在系統裡面新增一顆磁碟時,應該有哪些動作需要做的呢:

1. 對磁碟進行分割槽,以建立可用的 partition ;

2. 對該 partition 進行格式化 (format),以建立系統可用的 filesystem;

3. 若想要仔細一點,則可對剛剛建立好的 filesystem 進行檢驗;

4. 在 Linux 系統上,需要建立掛載點 (亦即是目錄),並將他掛載上來;

 

當然囉,在上述的過程當中,還有很多需要考慮的,例如磁碟分割槽 (partition) 需要定多大? 是否需要加入 journal 的功能?inode 與 block 的數量應該如何規劃等等的問題。但是這些問題的決定, 都需要與你的主機用途來加以考慮的~所以,在這個小節裡面,鳥哥僅會介紹幾個動作而已, 更詳細的設定值,則需要以你未來的經驗來參考囉!

 

1,觀察磁碟分割槽狀態

由於目前磁碟分割槽主要有 MBR 以及 GPT 兩種格式,這兩種格式所使用的分割槽工具不太一樣!你當然可以使用本章預計最後才介紹的 parted 這個通通有支援的工具來處理,不過,我們還是比較習慣使用 fdisk 或者是 gdisk 來處理分割槽啊!因此,我們自然就得要去找一下目前系統有的磁碟有哪些? 這些磁碟是 MBR 還是 GPT 等等的!這樣才能處理啦!

lsblk 列出系統上的所有磁碟列表

 

lsblk 可以看成“ list block device ”的縮寫,就是列出所有儲存裝置的意思!這個工具軟體真的很好用喔!來瞧一瞧!

[[email protected] ~]# lsblk [-dfimpt] [device]

選項與引數:

-d :僅列出磁碟本身,並不會列出該磁碟的分割槽資料

-f :同時列出該磁碟內的檔案系統名稱

-i :使用 ASCII 的線段輸出,不要使用複雜的編碼 (再某些環境下很有用)

-m :同時輸出該裝置在 /dev 下面的許可權資料 (rwx 的資料)

-p :列出該裝置的完整檔名!而不是僅列出最後的名字而已。

-t :列出該磁碟裝置的詳細資料,包括磁碟佇列機制、預讀寫的資料量大小等

範例一:列出本系統下的所有磁碟與磁碟內的分割槽資訊

[[email protected]

~]# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sr0 11:0 1 1024M 0 rom

vda 252:0 0 40G 0 disk # 一整顆磁碟

|-vda1 252:1 0 2M 0 part

|-vda2 252:2 0 1G 0 part /boot

`-vda3 252:3 0 30G 0 part

|-centos-root 253:0 0 10G 0 lvm / # 在 vda3 內的其他檔案系統

|-centos-swap 253:1 0 1G 0 lvm [SWAP]

`-centos-home 253:2 0 5G 0 lvm /home

從上面的輸出我們可以很清楚的看到,目前的系統主要有個 sr0 以及一個 vda 的裝置,而vda 的裝置下面又有三個分割槽, 其中 vda3 甚至還有因為 LVM 產生的檔案系統!相當的完整吧!從範例一我們來談談預設輸出的資訊有哪些。

NAME:就是裝置的檔名囉!會省略 /dev 等前導目錄!

MAJ:MIN:其實核心認識的裝置都是通過這兩個程式碼來熟悉的!分別是主要:次要裝置

程式碼!

RM:是否為可解除安裝裝置 (removable device),如光碟、USB 磁碟等等

SIZE:當然就是容量囉!

RO:是否為只讀裝置的意思

TYPE:是磁碟 (disk)、分割槽 (partition) 還是隻讀儲存器 (rom) 等輸出

MOUTPOINT:就是前一章談到的掛載點!

 

範例二:僅列出 /dev/vda 裝置內的所有資料的完整檔名

[[email protected] ~]# lsblk -ip /dev/vda

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

/dev/vda 252:0 0 40G 0 disk

|-/dev/vda1 252:1 0 2M 0 part

|-/dev/vda2 252:2 0 1G 0 part /boot

`-/dev/vda3 252:3 0 30G 0 part

|-/dev/mapper/centos-root 253:0 0 10G 0 lvm /

|-/dev/mapper/centos-swap 253:1 0 1G 0 lvm [SWAP]

`-/dev/mapper/centos-home 253:2 0 5G 0 lvm /home # 完整的檔名,由 / 開始寫

 

blkid 列出裝置的 UUID 等引數

 

雖然 lsblk 已經可以使用 -f 來列出檔案系統與裝置的 UUID 資料,不過,鳥哥還是比較習慣直接使用 blkid 來找出裝置的 UUID 喔! 什麼是 UUID 呢?UUID 是全域單一識別碼(universally unique identifier),Linux 會將系統內所有的裝置都給予一個獨一無二的識別碼, 這個識別碼就可以拿來作為掛載或者是使用這個裝置/檔案系統之用了。

[[email protected] ~]# blkid

/dev/vda2: UUID="94ac5f77-cb8a-495e-a65b-2ef7442b837c" TYPE="xfs"

/dev/vda3: UUID="WStYq1-P93d-oShM-JNe3-KeDl-bBf6-RSmfae" TYPE="LVM2_member"

/dev/sda1: UUID="35BC-6D6B" TYPE="vfat"

/dev/mapper/centos-root: UUID="299bdc5b-de6d-486a-a0d2-375402aaab27" TYPE="xfs"

/dev/mapper/centos-swap: UUID="905dc471-6c10-4108-b376-a802edbd862d" TYPE="swap"

/dev/mapper/centos-home: UUID="29979bf1-4a28-48e0-be4a-66329bf727d9" TYPE="xfs"

 

如上所示,每一行代表一個檔案系統,主要列出裝置名稱、UUID 名稱以及檔案系統的型別(TYPE)!這對於管理員來說,相當有幫助! 對於系統上面的檔案系統觀察來說,真是一目瞭然!

 

parted 列出磁碟的分割槽表型別與分割槽資訊

 

雖然我們已經知道了系統上面的所有裝置,並且通過 blkid 也知道了所有的檔案系統!不過,還是不清楚磁碟的分割槽型別。 這時我們可以通過簡單的 parted 來輸出喔!我們這裡僅簡單的利用他的輸出而已~本章最後才會詳細介紹這個指令的用法的!

[[email protected] ~]# parted device_name print

範例一:列出 /dev/vda 磁碟的相關資料

[[email protected] ~]# parted /dev/vda print

Model: Virtio Block Device (virtblk) # 磁碟的模組名稱(廠商)

Disk /dev/vda: 42.9GB # 磁碟的總容量

Sector size (logical/physical): 512B/512B # 磁碟的每個邏輯/物理扇區容量

Partition Table: gpt # 分割槽表的格式 (MBR/GPT)

Disk Flags: pmbr_boot

Number Start End Size File system Name Flags # 下面才是分割槽資料

1 1049kB 3146kB 2097kB bios_grub

2 3146kB 1077MB 1074MB xfs

3 1077MB 33.3GB 32.2GB lvm

 

看到上表的說明,你就知道啦!我們用的就是 GPT 的分割槽格式喔!這樣會觀察磁碟分割槽了嗎?接下來要來操作磁碟分割槽了喔!

 

2,磁碟分割槽: gdisk/fdisk

 

接下來我們想要進行磁碟分割槽囉!要注意的是:“MBR 分割槽表請使用 fdisk 分割槽, GPT 分割槽表請使用 gdisk 分割槽!” 這個不要搞錯~否則會分割槽失敗的!另外,這兩個工具軟體的操作很類似,執行了該軟體後,可以通過該軟體內部的說明資料來操作, 因此不需要硬背!只要知道方法即可。剛剛從上面 parted 的輸出結果,我們也知道鳥哥這個測試機使用的是 GPT 分割槽, 因此下面通通得要使用 gdisk 來分割槽才行!

gdisk

 

[[email protected] ~]# gdisk 裝置名稱

範例:由前一小節的 lsblk 輸出,我們知道系統有個 /dev/vda,請觀察該磁碟的分割槽與相關資料

[[email protected] ~]# gdisk /dev/vda <==仔細看,不要加上數字喔!

GPT fdisk (gdisk) version 0.8.6

Partition table scan:

MBR: protective

BSD: not present

APM: not present

GPT: present

Found valid GPT with protective MBR; using GPT. <==找到了 GPT 的分割槽表!

Command (? for help): <==這裡可以讓你輸入指令動作,可以按問號 (?) 來檢視可用指令

Command (? for help): ?

b back up GPT data to a file

c change a partition's name

d delete a partition # 刪除一個分割槽

i show detailed information on a partition

l list known partition types

n add a new partition # 增加一個分割槽

o create a new empty GUID partition table (GPT)

p print the partition table # 印出分割槽表 (常用)

q quit without saving changes # 不儲存分割槽就直接離開 gdisk

r recovery and transformation options (experts only)

s sort partitions

t change a partition's type code

v verify disk

w write table to disk and exit # 儲存分割槽操作後離開 gdisk

x extra functionality (experts only)

? print this menu

Command (? for help):

 

你應該要通過 lsblk 或 blkid 先找到磁碟,再用 parted /dev/xxx print 來找出內部的分割槽表型別,之後才用 gdisk 或 fdisk 來作業系統。 上表中可以發現 gdisk 會掃描 MBR 與 GPT 分割槽表,不過這個軟體還是單純使用在 GPT 分割槽表比較好啦!

老實說,使用 gdisk 這支程式是完全不需要背指令的!如同上面的表格中,你只要按下 ? 就能夠看到所有的動作! 比較重要的動作在上面已經用底線畫出來了,你可以參考看看。其中比較不一樣的是“q 與 w”這兩個玩意兒! 不管你進行了什麼動作,只要離開 gdisk 時按下“q”,那麼所有的動作“都不會生效!”相反的, 按下“w”就是動作生效的意思。所以,你可以隨便玩gdisk ,只要離開時按下的是“q”即可。 ^_^! 好了,先來看看分割槽表資訊吧!

Command (? for help): p <== 這裡可以輸出目前磁碟的狀態

Disk /dev/vda: 83886080 sectors, 40.0 GiB # 磁碟檔名/扇區數與總容量

Logical sector size: 512 Bytes # 單一扇區大小為 512 Bytes

Disk identifier (GUID): A4C3C813-62AF-4BFE-BAC9-112EBD87A483 # 磁碟的 GPT 識別碼

Partition table holds up to 128 entries

First usable sector is 34, last usable sector is 83886046

Partitions will be aligned on 2048-sector boundaries

Total free space is 18862013 sectors (9.0 GiB)

Number Start (sector) End (sector) Size Code Name # 下面為完整的分割槽資訊了!

1 2048 6143 2.0 MiB EF02 # 第一個分割槽資料

2 6144 2103295 1024.0 MiB 0700

3 2103296 65026047 30.0 GiB 8E00

# 分割槽編號 開始扇區號碼 結束扇區號碼 容量大小

Command (? for help): q

# 想要不儲存離開嗎?按下 q 就對了!不要隨便按 w 啊!

 

使用“ p ”可以列出目前這顆磁碟的分割槽表資訊,這個資訊的上半部在顯示整體磁碟的狀態。以鳥哥這顆磁碟為例,這個磁碟共有 40GB 左右的容量,共有 83886080 個扇區,每個扇區的容量為 512Bytes。 要注意的是,現在的分割槽主要是以扇區為最小的單位喔!

下半部的分割槽表資訊主要在列出每個分割槽的個別資訊專案。每個專案的意義為:

Number:分割槽編號,1 號指的是 /dev/vda1 這樣計算。

Start (sector):每一個分割槽的開始扇區號碼位置

End (sector):每一個分割槽的結束扇區號碼位置,與 start 之間可以算出分割槽的總容量

Size:就是分割槽的容量了

Code:在分割槽內的可能的檔案系統型別。Linux 為 8300,swap 為 8200。不過這個專案只是一個提示而已,不見得真的代表此分割槽內的檔案系統喔!

Name:檔案系統的名稱等等。

 

從上表我們可以發現幾件事情:

整部磁碟還可以進行額外的分割槽,因為最大扇區為 83886080,但只使用到 65026047 號而已;

分割槽的設計中,新分割槽通常選用上一個分割槽的結束扇區號碼數加 1 作為起始扇區號碼!

 

這個 gdisk 只有 root 才能執行,此外,請注意,使用的“裝置檔名”請不要加上數字,因為partition 是針對“整個磁碟裝置”而不是某個 partition 呢!所以執行“ gdisk /dev/vda1 ” 就會發生錯誤啦!要使用 gdisk /dev/vda 才對!

Tips 再次強調,你可以使用 gdisk 在您的磁碟上面胡搞瞎搞的進行實際操作,都不打緊,但是請“千萬記住,不要按下 w 即可!”離開的時候按下 q 就萬事無妨囉! 此外,不要在 MBR分割槽上面使用 gdisk,因為如果指令按錯,恐怕你的分割槽紀錄會全部死光光!也不要在 GPT上面使用 fdisk 啦!切記切記!

用 gdisk 新增分割槽

 

如果你是按照鳥哥建議的方式去安裝你的 CentOS 7,那麼你的磁碟應該會預留一塊容量來做練習的。如果沒有的話, 那麼你可能需要找另外一顆磁碟來讓你練習才行呦!而經過上面的觀察,我們也確認系統還有剩下的容量可以來操作練習分割槽! 假設我需要有如下的分割槽需求:

1GB 的 xfs 檔案系統 (Linux)

1GB 的 vfat 檔案系統 (Windows)

0.5GB 的 swap (Linux swap)(這個分割槽等一下會被刪除喔!)

 

那就來處理處理!

[[email protected] ~]# gdisk /dev/vda

Command (? for help): p

Number Start (sector) End (sector) Size Code Name

1 2048 6143 2.0 MiB EF02

2 6144 2103295 1024.0 MiB 0700

3 2103296 65026047 30.0 GiB 8E00

# 找出最後一個 sector 的號碼是很重要的!

Command (? for help): ? # 查一下增加分割槽的指令為何

Command (? for help): n # 就是這個!所以開始新增的行為!

Partition number (4-128, default 4): 4 # 預設就是 4 號,所以也能 enter 即可!

First sector (34-83886046, default = 65026048) or {+-}size{KMGTP}: 65026048 # 也能 enter

Last sector (65026048-83886046, default = 83886046) or {+-}size{KMGTP}: +1G # 決不要 enter

# 這個地方可有趣了!我們不需要自己去計算扇區號碼,通過 +容量 的這個方式,

# 就可以讓 gdisk 主動去幫你算出最接近你需要的容量的扇區號碼喔!

Current type is 'Linux filesystem'

Hex code or GUID (L to show codes, Enter = 8300): # 使用預設值即可~直接 enter 下去!

# 這裡在讓你選擇未來這個分割槽預計使用的檔案系統!預設都是 Linux 檔案系統的 8300 囉!

Command (? for help): p

Number Start (sector) End (sector) Size Code Name

1 2048 6143 2.0 MiB EF02

2 6144 2103295 1024.0 MiB 0700

3 2103296 65026047 30.0 GiB 8E00

4 65026048 67123199 1024.0 MiB 8300 Linux filesystem

 

重點在“ Last sector ”那一行,那行絕對不要使用預設值!因為預設值會將所有的容量用光!因此它預設選擇最大的扇區號碼! 因為我們僅要 1GB 而已,所以你得要加上 +1G 這樣即可!不需要計算 sector 的數量,gdisk 會根據你填寫的數值, 直接計算出最接近該容量的扇區數!每次新增完畢後,請立即“ p ”檢視一下結果喔!請繼續處理後續的兩個分割槽! 最終出現的畫面會有點像下面這樣才對!

Command (? for help): p

Number Start (sector) End (sector) Size Code Name

1 2048 6143 2.0 MiB EF02

2 6144 2103295 1024.0 MiB 0700

3 2103296 65026047 30.0 GiB 8E00

4 65026048 67123199 1024.0 MiB 8300 Linux filesystem

5 67123200 69220351 1024.0 MiB 0700 Microsoft basic data

6 69220352 70244351 500.0 MiB 8200 Linux swap

 

基本上,幾乎都用預設值,然後通過 +1G, +500M 來建立所需要的另外兩個分割槽!比較有趣的是檔案系統的 ID 啦!一般來說, Linux 大概都是 8200/8300/8e00 等三種格式, Windows幾乎都用 0700 這樣,如果忘記這些數字,可以在 gdisk 內按下:“ L ”來顯示喔! 如果一切的分割槽狀態都正常的話,那麼就直接寫入磁碟分割槽表吧!

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING

PARTITIONS!!

Do you want to proceed? (Y/N): y

OK; writing new GUID partition table (GPT) to /dev/vda.

Warning: The kernel is still using the old partition table.

The new table will be used at the next reboot.

The operation has completed successfully.

# gdisk 會先警告你可能的問題,我們確定分割槽是對的,這時才按下 y !不過怎麼還有警告?

# 這是因為這顆磁碟目前正在使用當中,因此係統無法立即載入新的分割槽表~

[[email protected] ~]# cat /proc/partitions

major minor #blocks name

252 0 41943040 vda

252 1 2048 vda1

252 2 1048576 vda2

252 3 31461376 vda3

253 0 10485760 dm-0

253 1 1048576 dm-1

253 2 5242880 dm-2

# 你可以發現,並沒有 vda4, vda5, vda6 喔!因為核心還沒有更新!

因為 Linux 此時還在使用這顆磁碟,為了擔心繫統出問題,所以分割槽表並沒有被更新喔!這個時候我們有兩個方式可以來處理! 其中一個是重新開機,不過很討厭!另外一個則是通過partprobe 這個指令來處理即可!

 

partprobe 更新 Linux 核心的分割槽表資訊

 

[[email protected] ~]# partprobe [-s] # 你可以不要加 -s !那麼螢幕不會出現訊息!

[[email protected] ~]# partprobe -s # 不過還是建議加上 -s 比較清晰!

/dev/vda: gpt partitions 1 2 3 4 5 6

[[email protected] ~]# lsblk /dev/vda # 實際的磁碟分割槽狀態

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

vda 252:0 0 40G 0 disk

|-vda1 252:1 0 2M 0 part

|-vda2 252:2 0 1G 0 part /boot

|-vda3 252:3 0 30G 0 part

| |-centos-root 253:0 0 10G 0 lvm /

| |-centos-swap 253:1 0 1G 0 lvm [SWAP]

| `-centos-home 253:2 0 5G 0 lvm /home

|-vda4 252:4 0 1G 0 part

|-vda5 252:5 0 1G 0 part

`-vda6 252:6 0 500M 0 part

[[email protected] ~]# cat /proc/partitions # 核心的分割槽紀錄

major minor #blocks name

252 0 41943040 vda

252 1 2048 vda1

252 2 1048576 vda2

252 3 31461376 vda3

252 4 1048576 vda4

252 5 1048576 vda5

252 6 512000 vda6

# 現在核心也正確的抓到了分割槽引數了!

 

用 gdisk 刪除一個分割槽

 

已經學會了新增分割槽,那麼刪除分割槽呢?好!現在讓我們將剛剛建立的 /dev/vda6 刪除!你該如何進行呢?鳥哥下面很快的處理一遍, 大家趕緊來瞧一瞧先!

[[email protected] ~]# gdisk /dev/vda

Command (? for help): p

Number Start (sector) End (sector) Size Code Name

1 2048 6143 2.0 MiB EF02

2 6144 2103295 1024.0 MiB 0700

3 2103296 65026047 30.0 GiB 8E00

4 65026048 67123199 1024.0 MiB 8300 Linux filesystem

5 67123200 69220351 1024.0 MiB 0700 Microsoft basic data

6 69220352 70244351 500.0 MiB 8200 Linux swap

Command (? for help): d

Partition number (1-6): 6

Command (? for help): p

# 你會發現 /dev/vda6 不見了!非常棒!沒問題就寫入吧!

Command (? for help): w

# 同樣會有一堆訊息!鳥哥就不重複輸出了!自己選擇 y 來處理吧!

[[email protected] ~]# lsblk

# 你會發現!怪了!怎麼還是有 /dev/vda6 呢?沒辦法!還沒有更新核心的分割槽表啊!所以當然有錯!

[[email protected] ~]# partprobe -s

[[email protected] ~]# lsblk

# 這個時候,那個 /dev/vda6 才真的消失不見了!瞭解吧!

 

萬分注意!不要去處理一個正在使用中的分割槽!例如,我們的系統現在已經使用了/dev/vda2 ,那如果你要刪除 /dev/vda2 的話, 必須要先將 /dev/vda2 解除安裝,否則直接刪除該分割槽的話,雖然磁碟還是慧寫入正確的分割槽資訊,但是核心會無法更新分割槽表的資訊的! 另外,檔案系統與 Linux 系統的穩定性,恐怕也會變得怪怪的!反正!千萬不要處理正在使用中的檔案系統就對了!

 

fdisk

 

雖然 MBR 分割槽表在未來應該會慢慢的被淘汰,畢竟現在磁碟容量隨便都大於 2T 以上了。而對於在 CentOS 7.x 中還無法完整支援 GPT 的 fdisk 來說, 這傢伙真的英雄無用武之地了啦!不過依舊有些舊的系統,以及虛擬機器的使用上面,還是有小磁碟存在的空間!這時處理MBR 分割槽表, 就得要使用 fdisk 囉!

因為 fdisk 跟 gdisk 使用的方式幾乎一樣!只是一個使用 ? 作為指令提示資料,一個使用 m作為提示這樣而已。 此外,fdisk 有時會使用柱面 (cylinder) 作為分割槽的最小單位,與gdisk 預設使用 sector 不太一樣!大致上只是這點差別! 另外, MBR 分割槽是有限制的(Primary, Extended, Logical...)!不要忘記了!鳥哥這裡不使用範例了,畢竟示範機上面也沒有 MBR 分割槽表... 這裡僅列出相關的指令給大家對照參考囉!

[[email protected] ~]# fdisk /dev/sda

Command (m for help): m <== 輸入 m 後,就會看到下面這些指令介紹

Command action

a toggle a bootable flag

b edit bsd disklabel

c toggle the dos compatibility flag

d delete a partition <==刪除一個partition

l list known partition types

m print this menu

n add a new partition <==新增一個partition

o create a new empty DOS partition table

p print the partition table <==在螢幕上顯示分割槽表

q quit without saving changes <==不儲存離開fdisk程式

s create a new empty Sun disklabel

t change a partition's system id

u change display/entry units

v verify the partition table

w write table to disk and exit <==將剛剛的動作寫入分割槽表

x extra functionality (experts only)

 

3,磁碟格式化(建立檔案系統)

 

分割槽完畢後自然就是要進行檔案系統的格式化囉!格式化的指令非常的簡單,那就是“makefilesystem, mkfs” 這個指令啦!這個指令其實是個綜合的指令,他會去呼叫正確的檔案系統格式化工具軟體!因為 CentOS 7 使用 xfs 作為預設檔案系統, 下面我們會先介紹 mkfs.xfs ,之後介紹新一代的 EXT 家族成員 mkfs.ext4,最後再聊一聊 mkfs 這個綜合指令吧!

XFS 檔案系統 mkfs.xfs

 

我們常聽到的“格式化”其實應該稱為“建立檔案系統 (make filesystem)”才對啦!所以使用的指令是 mkfs 喔!那我們要建立的其實是 xfs 檔案系統, 因此使用的是 mkfs.xfs 這個指令才對。這個指令是這樣使用的:

[[email protected] ~]# mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] \

[-r parms] 裝置名稱

選項與引數:

關於單位:下面只要談到“數值”時,沒有加單位則為 Bytes 值,可以用 k,m,g,t,p (小寫)等來解釋

比較特殊的是 s 這個單位,它指的是 sector 的“個數”喔!

-b :後面接的是 block 容量,可由 512 到 64k,不過最大容量限制為 Linux 的 4k 喔!

-d :後面接的是重要的 data section 的相關引數值,主要的值有:

agcount=數值 :設定需要幾個儲存群組的意思(AG),通常與 CPU 有關

agsize=數值 :每個 AG 設定為多少容量的意思,通常 agcount/agsize 只選一個設定即可

file :指的是“格式化的裝置是個檔案而不是個裝置”的意思!(例如虛擬磁碟)

size=數值 :data section 的容量,亦即你可以不將全部的裝置容量用完的意思

su=數值 :當有 RAID 時,那個 stripe 數值的意思,與下面的 sw 搭配使用

sw=數值 :當有 RAID 時,用於儲存資料的磁碟數量(須扣除備份碟與備用碟)

sunit=數值 :與 su 相當,不過單位使用的是“幾個 sector(512Bytes大小)”的意思

swidth=數值 :就是 su*sw 的數值,但是以“幾個 sector(512Bytes大小)”來設定

-f :如果裝置內已經有檔案系統,則需要使用這個 -f 來強制格式化才行!

-i :與 inode 有較相關的設定,主要的設定值有:

size=數值 :最小是 256Bytes 最大是 2k,一般保留 256 就足夠使用了!

internal=[0|1]:log 裝置是否為內建?預設為 1 內建,如果要用外部裝置,使用下面設定

logdev=device :log 裝置為後面接的那個裝置上頭的意思,需設定 internal=0 才可!

size=數值 :指定這塊登入區的容量,通常最小得要有 512 個 block,大約 2M 以上才行!

-L :後面接這個檔案系統的標頭名稱 Label name 的意思!

-r :指定 realtime section 的相關設定值,常見的有:

extsize=數值 :就是那個重要的 extent 數值,一般不須設定,但有 RAID 時,

最好設定與 swidth 的數值相同較佳!最小為 4K 最大為 1G 。

範例:將前一小節分割槽出來的 /dev/vda4 格式化為 xfs 檔案系統

[[email protected] ~]# mkfs.xfs /dev/vda4

meta-data=/dev/vda4 isize=256 agcount=4, agsize=65536 blks

= sectsz=512 attr=2, projid32bit=1

= crc=0 finobt=0

data = bsize=4096 blocks=262144, 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

# 很快格是化完畢!都用預設值!較重要的是 inode 與 block 的數值

[[email protected] ~]# blkid /dev/vda4

/dev/vda4: UUID="39293f4f-627b-4dfd-a015-08340537709c" TYPE="xfs"

# 確定建立好 xfs 檔案系統了!

 

使用預設的 xfs 檔案系統引數來建立系統即可!速度非常快!如果我們有其他額外想要處理的專案,才需要加上一堆設定值!舉例來說,因為 xfs 可以使用多個數據流來讀寫系統,以增加速度,因此那個 agcount 可以跟 CPU 的核心數來做搭配!舉例來說,如果我的伺服器僅有一顆 4 核心,但是有啟動 Intel 超執行緒功能,則系統會模擬出 8 顆 CPU 時,那個 agcount 就可以設定為 8 喔!舉個例子來瞧瞧:

範例:找出你係統的 CPU 數,並據以設定你的 agcount 數值

[[email protected] ~]# grep 'processor' /proc/cpuinfo

processor : 0

processor : 1

# 所以就是有兩顆 CPU 的意思,那就來設定設定我們的 xfs 檔案系統格式化引數吧!!

[[email protected] ~]# mkfs.xfs -f -d agcount=2 /dev/vda4

meta-data=/dev/vda4 isize=256 agcount=2, agsize=131072 blks

= sectsz=512 attr=2, projid32bit=1

= crc=0 finobt=0

.....(下面省略).....

# 可以跟前一個範例對照看看,可以發現 agcount 變成 2 了喔!

# 此外,因為已經格式化過一次,因此 mkfs.xfs 可能會出現不給你格式化的警告!因此需要使用 -f

 

XFS 檔案系統 for RAID 效能優化 (Optional)

 

我們在第14章會持續談到進階檔案系統的設定,其中就有磁碟陣列這個東西!磁碟陣列是多顆磁碟組成一顆大磁碟的意思, 利用同步寫入到這些磁碟的技術,不但可以加快讀寫速度,還可以讓某一顆磁碟壞掉時,整個檔案系統還是可以持續執行的狀態!那就是所謂的容錯。

基本上,磁碟陣列 (RAID) 就是通過將檔案先細分為數個小型的分割槽區塊 (stripe) 之後,然後將眾多的 stripes 分別放到磁碟陣列裡面的所有磁碟, 所以一個檔案是被同時寫入到多個磁碟去,當然效能會好一些。為了檔案的保全性,所以在這些磁盤裡面,會保留數個(與磁碟陣列的規劃有關) 備份磁碟 (parity disk), 以及可能會保留一個以上的備用磁碟(spare disk),這些區塊基本上會佔用掉磁碟陣列的總容量,不過對於資料的保全會比較有保障!

那個分割槽區塊 stripe 的數值大多介於 4K 到 1M 之間,這與你的磁碟陣列卡支援的專案有關。stripe 與你的檔案資料容量以及效能相關性較高。 當你的系統大多是大型檔案時,一般建議stripe 可以設定大一些,這樣磁碟陣列讀/寫的頻率會降低,效能會提升。如果是用於系統,那麼小檔案比較多的情況下, stripe 建議大約在 64K 左右可能會有較佳的效能。不過,還是都須要經過測試啦!完全是 case by case 的情況。 更多詳細的磁碟陣列我們在第 14 章再來談,這裡先有個大概的認識即可。14 章看完之後,再回來這個小節瞧瞧囉!

檔案系統的讀寫要能夠有最優化,最好能夠搭配磁碟陣列的引數來設計,這樣效能才能夠起來!也就是說,你可以先在檔案系統就將 stripe 規劃好, 那交給 RAID 去存取時,它就無須重複進行檔案的 stripe 過程,效能當然會更好!那格式化時,最優化效能與什麼咚咚有關呢?我們來假設個環境好了:

我有兩個執行緒的 CPU 數量,所以 agcount 最好指定為 2

當初設定 RAID 的 stripe 指定為 256K 這麼大,因此 su 最好設定為 256k

設定的磁碟陣列有 8 顆,因為是 RAID5 的設定,所以有一個 parity (備份碟),因此指定 sw 為 7

由上述的資料中,我們可以發現數據寬度 (swidth) 應該就是 256K*7 得到 1792K,可以指定 extsize 為 1792k

 

相關資料的來源可以參考文末[7]的說明,這裡僅快速的使用 mkfs.xfs 的引數來處理格式化的動作喔!

[[email protected] ~]# mkfs.xfs -f -d agcount=2,su=256k,sw=7 -r extsize=1792k /dev/vda4

meta-data=/dev/vda4 isize=256 agcount=2, agsize=131072 blks

= sectsz=512 attr=2, projid32bit=1

= crc=0 finobt=0

data = bsize=4096 blocks=262144, imaxpct=25

= sunit=64 swidth=448 blks

naming =version 2 bsize=4096 ascii-ci=0 ftype=0

log =internal log bsize=4096 blocks=2560, version=2

= sectsz=512 sunit=64 blks, lazy-count=1

realtime =none extsz=1835008 blocks=0, rtextents=0

 

從輸出的結果來看, agcount 沒啥問題, sunit 結果是 64 個 block,因為每個 block 為 4K,所以算出來容量就是 256K 也沒錯! 那個 swidth 也相同!使用 448 * 4K 得到 1792K!那個extsz 則是算成 Bytes 的單位,換算結果也沒錯啦!上面是個方式,那如果使用 sunit 與swidth 直接套用在 mkfs.xfs 當中呢?那你得小心了!因為指令中的這兩個引數用的是“幾個512Bytes 的 sector 數量”的意思! 是“數量”單位而不是“容量”單位!因此先計算為:

sunit = 256K/512Byte*1024(Bytes/K) = 512 個 sector

swidth = 7 個磁碟 sunit = 7 512 = 3584 個 sector

 

所以指令就得要變成如下模樣:

[[email protected] ~]# mkfs.xfs -f -d agcount=2,sunit=512,swidth=3584 -r extsize=1792k /dev/vda4

再說一次,這邊你大概先有個概念即可,看不懂也沒關係!等到 14 章看完後,未來回到這裡,應該就能夠看得懂了! 多看幾次!多做幾次~作業系統的練習就是這樣才能學的會!看得懂! ^_^

 

EXT4 檔案系統 mkfs.ext4

 

如果想要格式化為 ext4 的傳統 Linux 檔案系統的話,可以使用 mkfs.ext4 這個指令即可!這個指令的引數快速的介紹一下!

[[email protected] ~]# mkfs.ext4 [-b size] [-L label] 裝置名稱

選項與引數:

-b :設定 block 的大小,有 1K, 2K, 4K 的容量,

-L :後面接這個裝置的標頭名稱。

範例:將 /dev/vda5 格式化為 ext4 檔案系統

[[email protected] ~]# mkfs.ext4 /dev/vda5

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label= # 顯示 Label name

OS type: Linux

Block size=4096 (log=2) # 每一個 block 的大小

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks # 跟 RAID 相關性較高

65536 inodes, 262144 blocks # 總計 inode/block 的數量

13107 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=268435456

8 block groups # 共有 8 個 block groups 喔!

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376

Allocating group tables: done

Writing inode tables: done

Creating journal (8192 blocks): done

Writing superblocks and filesystem accounting information: done

[[email protected] ~]# dumpe2fs -h /dev/vda5

dumpe2fs 1.42.9 (28-Dec-2013)

Filesystem volume name: <none>

Last mounted on: <not available>

Filesystem UUID: 3fd5cc6f-a47d-46c0-98c0-d43b072e0e12

....(中間省略)....

Inode count: 65536

Block count: 262144

Block size: 4096

Blocks per group: 32768

Inode size: 256

Journal size: 32M

由於資料量較大,因此鳥哥僅列出比較重要的專案而已,提供給你參考。另外,本章稍早之前介紹的 dumpe2fs 現在也可以測試練習了!查閱一下相關的資料吧! 因為 ext4 的預設值已經相當適合我們系統使用,大部分的預設值寫入於我們系統的 /etc/mke2fs.conf 這個檔案中,有興趣可以自行前往查閱。 也因此,我們無須額外指定 inode 的容量,系統都幫我們做好預設值囉!只需要得到 uuid 這個咚咚即可啦!

 

其他檔案系統 mkfs

 

mkfs 其實是個綜合指令而已,當我們使用 mkfs -t xfs 時,它就會跑去找 mkfs.xfs 相關的引數給我們使用! 如果想要知道系統還支援哪種檔案系統的格式化功能,直接按 [tabl] 就很清楚了!

[[email protected] ~]# mkfs[tab][tab]

mkfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4

mkfs.fat mkfs.minix mkfs.msdos mkfs.vfat mkfs.xfs

所以系統還有支援 ext2/ext3/vfat 等等多種常用的檔案系統喔!那如果要將剛剛的 /dev/vda5重新格式化為 VFAT 檔案系統呢?

[[email protected] ~]# mkfs -t vfat /dev/vda5

[[email protected] ~]# blkid /dev/vda5

/dev/vda5: UUID="7130-6012" TYPE="vfat" PARTLABEL="Microsoft basic data"

[[email protected] ~]# mkfs.ext4 /dev/vda5

[[email protected] ~]# blkid /dev/vda4 /dev/vda5

/dev/vda4: UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" TYPE="xfs"

/dev/vda5: UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" TYPE="ext4"

上面就是我們這個章節最後的結果了! /dev/vda4 是 xfs 檔案系統,而 /dev/vda5 是 ext4 檔案系統喔!都有練習妥當了嘛?

4,檔案系統檢驗

 

 

由於系統在執行時誰也說不準啥時硬體或者是電源會有問題,所以“宕機”可能是難免的情況(不管是硬體還是軟體)。 現在我們知道檔案系統執行時會有磁碟與記憶體資料非同步的狀況發生,因此莫名其妙的宕機非常可能導致檔案系統的錯亂。 問題來啦,如果檔案系統真的發生錯亂的話,那該如何是好?就...挽救啊!不同的檔案系統救援的指令不太一樣,我們主要針對 xfs 及 ext4 這兩個主流來說明而已喔!

xfs_repair 處理 XFS 檔案系統

 

當有 xfs 檔案系統錯亂才需要使用這個指令!所以,這個指令最好是不要用到啦!但有問題發生時,這個指令卻又很重要...

[[email protected] ~]# xfs_repair [-fnd] 裝置名稱

選項與引數:

-f :後面的裝置其實是個檔案而不是實體裝置

-n :單純檢查並不修改檔案系統的任何資料 (檢查而已)

-d :通常用在單人維護模式下面,針對根目錄 (/) 進行檢查與修復的動作!很危險!不要隨便使用

範例:檢查一下剛剛建立的 /dev/vda4 檔案系統

[[email protected] ~]# xfs_repair /dev/vda4

Phase 1 - find and verify superblock...

Phase 2 - using internal log

Phase 3 - for each AG...

Phase 4 - check for duplicate blocks...

Phase 5 - rebuild AG headers and trees...

Phase 6 - check inode connectivity...

Phase 7 - verify and correct link counts...

done

# 共有 7 個重要的檢查流程!詳細的流程介紹可以 man xfs_repair 即可!

範例:檢查一下系統原本就有的 /dev/centos/home 檔案系統

[[email protected] ~]# xfs_repair /dev/centos/home

xfs_repair: /dev/centos/home contains a mounted filesystem

xfs_repair: /dev/centos/home contains a mounted and writable filesystem

fatal error -- couldn't initialize XFS library

xfs_repair 可以檢查/修復檔案系統,不過,因為修復檔案系統是個很龐大的任務!因此,修復時該檔案系統不能被掛載! 所以,檢查與修復 /dev/vda4 沒啥問題,但是修復/dev/centos/home 這個已經掛載的檔案系統時,嘿嘿!就出現上述的問題了! 沒關係,若可以解除安裝,解除安裝後再處理即可。

Linux 系統有個裝置無法被解除安裝,那就是根目錄啊!如果你的根目錄有問題怎辦?這時得要進入單人維護或救援模式,然後通過 -d 這個選項來處理! 加入 -d 這個選項後,系統會強制檢驗該裝置,檢驗完畢後就會自動重新開機囉!不過,鳥哥完全不打算要進行這個指令的實做...永遠都不希望實做這東西...

 

fsck.ext4 處理 EXT4 檔案系統

 

fsck 是個綜合指令,如果是針對 ext4 的話,建議直接使用 fsck.ext4 來檢測比較妥當!那fsck.ext4 的選項有下面幾個常見的專案:

[[email protected] ~]# fsck.ext4 [-pf] [-b superblock] 裝置名稱

選項與引數:

-p :當檔案系統在修復時,若有需要回復 y 的動作時,自動回覆 y 來繼續進行修復動作。

-f :強制檢查!一般來說,如果 fsck 沒有發現任何 unclean 的旗標,不會主動進入

細部檢查的,如果您想要強制 fsck 進入細部檢查,就得加上 -f 旗標囉!

-D :針對檔案系統下的目錄進行最優化配置。

-b :後面接 superblock 的位置!一般來說這個選項用不到。但是如果你的 superblock 因故損毀時,

通過這個引數即可利用檔案系統內備份的 superblock 來嘗試救援。一般來說,superblock 備份在:

1K block 放在 8193, 2K block 放在 16384, 4K block 放在 32768

範例:找出剛剛建立的 /dev/vda5 的另一塊 superblock,並據以檢測系統

[[email protected] ~]# dumpe2fs -h /dev/vda5 | grep 'Blocks per group'

Blocks per group: 32768

# 看起來每個 block 群組會有 32768 個 block,因此第二個 superblock 應該就在 32768 上!

# 因為 block 號碼為 0 號開始編的!

[[email protected] ~]# fsck.ext4 -b 32768 /dev/vda5

e2fsck 1.42.9 (28-Dec-2013)

/dev/vda5 was not cleanly unmounted, check forced.

Pass 1: Checking inodes, blocks, and sizes

Deleted inode 1577 has zero dtime. Fix<y>? yes

Pass 2: Checking directory structure

Pass 3: Checking directory connectivity

Pass 4: Checking reference counts

Pass 5: Checking group summary information

/dev/vda5: ***** FILE SYSTEM WAS MODIFIED ***** # 檔案系統被改過,所以這裡會有警告!

/dev/vda5: 11/65536 files (0.0% non-contiguous), 12955/262144 blocks

# 好巧合!鳥哥使用這個方式來檢驗系統,恰好遇到檔案系統出問題!於是可以有比較多的解釋方向!

# 當檔案系統出問題,它就會要你選擇是否修復~如果修復如上所示,按下 y 即可!

# 最終系統會告訴你,檔案系統已經被更改過,要注意該專案的意思!

範例:已預設設定強制檢查一次 /dev/vda5

[[email protected] ~]# fsck.ext4 /dev/vda5

e2fsck 1.42.9 (28-Dec-2013)

/dev/vda5: clean, 11/65536 files, 12955/262144 blocks

# 檔案系統狀態正常,它並不會進入強制檢查!會告訴你檔案系統沒問題 (clean)

[[email protected] ~]# fsck.ext4 -f /dev/vda5

e2fsck 1.42.9 (28-Dec-2013)

Pass 1: Checking inodes, blocks, and sizes

....(下面省略)....

 

無論是 xfs_repair 或 fsck.ext4,這都是用來檢查與修正檔案系統錯誤的指令。注意:通常只有身為 root 且你的檔案系統有問題的時候才使用這個指令,否則在正常狀況下使用此一指令, 可能會造成對系統的危害!通常使用這個指令的場合都是在系統出現極大的問題,導致你在 Linux 開機的時候得進入單人單機模式下進行維護的行為時,才必須使用此一指令!

另外,如果你懷疑剛剛格式化成功的磁碟有問題的時後,也可以使用 xfs_repair/fsck.ext4 來檢查一磁碟呦!其實就有點像是 Windows 的 scandisk 啦!此外,由於 xfs_repair/fsck.ext4在掃瞄磁碟的時候,可能會造成部分 filesystem 的修訂,所以“執行 xfs_repair/fsck.ext4 時,被檢查的 partition 務必不可掛載到系統上!亦即是需要在解除安裝的狀態喔!”

 

5,檔案系統掛載與解除安裝

 

我們在本章一開始時的掛載點的意義當中提過掛載點是目錄, 而這個目錄是進入磁碟分割槽(其實是檔案系統啦!)的入口就是了。不過要進行掛載前,你最好先確定幾件事:

(1)單一檔案系統不應該被重複掛載在不同的掛載點(目錄)中;

(2)單一目錄不應該重複掛載多個檔案系統;

(3)要作為掛載點的目錄,理論上應該都是空目錄才是。

尤其是上述的後兩點!如果你要用來掛載的目錄裡面並不是空的,那麼掛載了檔案系統之後,原目錄下的東西就會暫時的消失。 舉個例子來說,假設你的 /home 原本與根目錄 (/)在同一個檔案系統中,下面原本就有 /home/test 與 /home/vbird 兩個目錄。然後你想要加入新的磁碟,並且直接掛載 /home 下面,那麼當你掛載上新的分割槽時,則 /home 目錄顯示的是新分割槽內的資料,至於原先的 test 與 vbird 這兩個目錄就會暫時的被隱藏掉了!注意喔!並不是被覆蓋掉, 而是暫時的隱藏了起來,等到新分割槽被解除安裝之後,則 /home 原本的內容就會再次的跑出來啦!

而要將檔案系統掛載到我們的 Linux 系統上,就要使用 mount 這個指令啦! 不過,這個指令真的是博大精深~粉難啦!我們學簡單一點啊~ ^_^

[[email protected] ~]# mount -a

[[email protected] ~]# mount [-l]

[[email protected] ~]# mount [-t 檔案系統] LABEL='' 掛載點

[[email protected] ~]# mount [-t 檔案系統] UUID='' 掛載點 # 鳥哥近期建議用這種方式喔!

[[email protected] ~]# mount [-t 檔案系統] 裝置檔名 掛載點

選項與引數:

-a :依照配置檔案 [/etc/fstab](../Text/index.html#fstab) 的資料將所有未掛載的磁碟都掛載上來

-l :單純的輸入 mount 會顯示目前掛載的資訊。加上 -l 可增列 Label 名稱!

-t :可以加上檔案系統種類來指定欲掛載的型別。常見的 Linux 支援型別有:xfs, ext3, ext4,

reiserfs, vfat, iso9660(光碟格式), nfs, cifs, smbfs (後三種為網路檔案系統型別)

-n :在預設的情況下,系統會將實際掛載的情況實時寫入 /etc/mtab 中,以利其他程式的執行。

但在某些情況下(例如單人維護模式)為了避免問題會刻意不寫入。此時就得要使用 -n 選項。

-o :後面可以接一些掛載時額外加上的引數!比方說帳號、密碼、讀寫許可權等:

async, sync: 此檔案系統是否使用同步寫入 (sync) 或非同步 (async) 的

記憶體機制,請參考[檔案系統執行方式](../Text/index.html#harddisk-filerun)。預設為 async。

atime,noatime: 是否修訂檔案的讀取時間(atime)。為了效能,某些時刻可使用 noatime

ro, rw: 掛載檔案系統成為只讀(ro) 或可讀寫(rw)

auto, noauto: 允許此 filesystem 被以 mount -a 自動掛載(auto)

dev, nodev: 是否允許此 filesystem 上,可建立裝置檔案? dev 為可允許

suid, nosuid: 是否允許此 filesystem 含有 suid/sgid 的檔案格式?

exec, noexec: 是否允許此 filesystem 上擁有可執行 binary 檔案?

user, nouser: 是否允許此 filesystem 讓任何使用者執行 mount ?一般來說,

mount 僅有 root 可以進行,但下達 user 引數,則可讓一般 user 也能夠對此 partition 進行 mount 。

defaults: 預設值為:rw, suid, dev, exec, auto, nouser, and async

remount: 重新掛載,這在系統出錯,或重新更新引數時,很有用!

 

基本上,CentOS 7 已經太聰明瞭,因此你不需要加上 -t 這個選項,系統會自動的分析最恰當的檔案系統來嘗試掛載你需要的裝置! 這也是使用 blkid 就能夠顯示正確的檔案系統的緣故!那 CentOS 是怎麼找出檔案系統型別的呢? 由於檔案系統幾乎都有 superblock ,我們的Linux 可以通過分析 superblock 搭配 Linux 自己的驅動程式去測試掛載, 如果成功的套和了,就立刻自動的使用該型別的檔案系統掛載起來啊!那麼系統有沒有指定哪些型別的filesystem 才需要進行上述的掛載測試呢? 主要是參考下面這兩個檔案:

(1)/etc/filesystems:系統指定的測試掛載檔案系統型別的優先順序;

(2)/proc/filesystems:Linux系統已經載入的檔案系統型別。

 

那我怎麼知道我的 Linux 有沒有相關檔案系統型別的驅動程式呢?我們 Linux 支援的檔案系統之驅動程式都寫在如下的目錄中:

(1)/lib/modules/$(uname -r)/kernel/fs/

例如 ext4 的驅動程式就寫在“/lib/modules/$(uname -r)/kernel/fs/ext4/”這個目錄下啦!

另外,過去我們都習慣使用裝置檔名然後直接用該檔名掛載, 不過近期以來鳥哥比較建議使用 UUID 來識別檔案系統,會比裝置名稱與標頭名稱還要更可靠!因為是獨一無二的啊!

 

掛載 xfs/ext4/vfat 等檔案系統

 

範例:找出 /dev/vda4 的 UUID 後,用該 UUID 來掛載檔案系統到 /data/xfs 內

[[email protected] ~]# blkid /dev/vda4

/dev/vda4: UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" TYPE="xfs"

[[email protected] ~]# mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs

mount: mount point /data/xfs does not exist # 非正規目錄!所以手動建立它!

[[email protected] ~]# mkdir -p /data/xfs

[[email protected] ~]# mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs

[[email protected] ~]# df /data/xfs

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/vda4 1038336 32864 1005472 4% /data/xfs

# 順利掛載,且容量約為 1G 左右沒問題!

範例:使用相同的方式,將 /dev/vda5 掛載於 /data/ext4

[[email protected] ~]# blkid /dev/vda5

/dev/vda5: UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" TYPE="ext4"

[[email protected] ~]# mkdir /data/ext4

[[email protected] ~]# mount UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" /data/ext4

[[email protected] ~]# df /data/ext4

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/vda5 999320 2564 927944 1% /data/ext4

 

掛載 CD 或 DVD 光碟

 

請拿出你的 CentOS 7 原版光碟出來,然後放入到光碟機當中,我們來測試一下這個玩意兒囉!

範例:將你用來安裝 Linux 的 CentOS 原版光碟拿出來掛載到 /data/cdrom!

[[email protected] ~]# blkid

.....(前面省略).....

/dev/sr0: UUID="2015-04-01-00-21-36-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"

[[email protected] ~]# mkdir /data/cdrom

[[email protected] ~]# mount /dev/sr0 /data/cdrom

mount: /dev/sr0 is write-protected, mounting read-only

[[email protected] ~]# df /data/cdrom

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/sr0 7413478 7413478 0 100% /data/cdrom

# 怎麼會使用掉 100% 呢?是啊!因為是 DVD 啊!所以無法再寫入了啊!

 

光碟機一掛載之後就無法退出光碟片了!除非你將他解除安裝才能夠退出! 從上面的資料你也可以發現,因為是光碟嘛!所以磁碟使用率達到 100% ,因為你無法直接寫入任何資料到光碟當中! 此外,如果你使用的是圖形介面,那麼系統會自動的幫你掛載這個光碟到 /media/ 裡面去喔!也可以不解除安裝就直接退出! 但是文字介面沒有這個福利就是了! ^_^

Tips 話說當時年紀小 (其實是剛接觸 Linux 的那一年, 1999 年前後),摸 Linux 到處碰壁!連將 CDROM 掛載後, 光碟機竟然都不讓我退片!那個時候難過的要死!還用迴紋針插入光碟機讓光碟退片耶!不過如此一來光碟就無法被使用了! 若要再次使用光碟機,當時的解決的方法竟然是“重新開機!”囧的可以啊!

 

掛載 vfat 中文U盤 (USB磁碟)

 

請拿出你的U盤並插入 Linux 主機的 USB介面中!注意,你的這個U盤不能夠是 NTFS 的檔案系統喔!接下來讓我們測試測試吧!

範例:找出你的U盤裝置的 UUID,並掛載到 /data/usb 目錄中

[[email protected] ~]# blkid

/dev/sda1: UUID="35BC-6D6B" TYPE="vfat"

[[email protected] ~]# mkdir /data/usb

[[email protected] ~]# mount -o codepage=950,iocharset=utf8 UUID="35BC-6D6B" /data/usb

[[email protected] ~]# # mount -o codepage=950,iocharset=big5 UUID="35BC-6D6B" /data/usb

[[email protected] ~]# df /data/usb

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/sda1 2092344 4 2092340 1% /data/usb

 

如果帶有中文檔名的資料,那麼可以在掛載時指定一下掛載檔案系統所使用的語系資料。在 man mount 找到 vfat 檔案格式當中可以使用 codepage 來處理!中文語系的程式碼為 950喔!另外,如果想要指定中文是萬國碼還是大五碼, 就得要使用 iocharset 為 utf8 還是 big5兩者擇一了!因為鳥哥的U盤使用 utf8 編碼,因此將上述的 big5 前面加上 # 符號, 代表註解該行的意思囉!

萬一你使用的 USB 磁碟被格式化為 NTFS 時,那可能就得要動點手腳,因為預設的 CentOS7 並沒有支援 NTFS 檔案系統格式! 所以你得要安裝 NTFS 檔案系統的驅動程式後,才有辦法處理的!這部份我們留待 22 章講到 yum 伺服器時再來談吧! 因為目前我們也還沒有網路、也沒有講軟體安裝啊! ^_^

 

重新掛載根目錄與掛載不特定目錄

 

整個目錄樹最重要的地方就是根目錄了,所以根目錄根本就不能夠被解除安裝的!問題是,如果你的掛載引數要改變, 或者是根目錄出現“只讀”狀態時,如何重新掛載呢?最可能的處理方式就是重新開機 (reboot)! 不過你也可以這樣做:

範例:將 / 重新掛載,並加入引數為 rw 與 auto

[[email protected] ~]# mount -o remount,rw,auto /

重點是那個“ -o remount,xx ”的選項與引數!請注意,要重新掛載 (remount) 時, 這是個非常重要的機制!尤其是當你進入單人維護模式時,你的根目錄常會被系統掛載為只讀,這個時候這個指令就太重要了!

另外,我們也可以利用 mount 來將某個目錄掛載到另外一個目錄去喔!這並不是掛載檔案系統,而是額外掛載某個目錄的方法! 雖然下面的方法也可以使用 symbolic link 來連結,不過在某些不支援符號連結的程式執行中,還是得要通過這樣的方法才行。

範例:將 /var 這個目錄暫時掛載到 /data/var 下面:

[[email protected] ~]# mkdir /data/var

[[email protected] ~]# mount --bind /var /data/var

[[email protected] ~]# ls -lid /var /data/var

16777346 drwxr-xr-x. 22 root root 4096 Jun 15 23:43 /data/var

16777346 drwxr-xr-x. 22 root root 4096 Jun 15 23:43 /var

# 內容完全一模一樣啊!因為掛載目錄的緣故!

[[email protected] ~]# mount | grep var

/dev/mapper/centos-root on /data/var type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

 

看起來,其實兩者連結到同一個 inode 嘛! ^_^ 沒錯啦!通過這個 mount --bind 的功能, 您可以將某個目錄掛載到其他目錄去喔!而並不是整塊 filesystem 的啦!所以從此進入/data/var 就是進入 /var 的意思喔

 

umount (將裝置檔案解除安裝)

 

[[email protected] ~]# umount [-fn] 裝置檔名或掛載點

選項與引數:

-f :強制解除安裝!可用在類似網路檔案系統 (NFS) 無法讀取到的情況下;

-l :立刻解除安裝檔案系統,比 -f 還強!

-n :不更新 /etc/mtab 情況下解除安裝。

 

就是直接將已掛載的檔案系統給他解除安裝即是!解除安裝之後,可以使用 df 或 mount 看看是否還存在目錄樹中? 解除安裝的方式,可以下達裝置檔名或掛載點,均可接受啦!下面的範例做看看吧!

範例:將本章之前自行掛載的檔案系統全部解除安裝:

[[email protected] ~]# mount

.....(前面省略).....

/dev/vd