來自《鳥哥的 Linux 私房菜》,重復只是加深自己的印象。
本篇結構:
- 文件系統(tǒng)的簡單操作
- 磁盤的分區(qū)、格式化、檢驗與掛載
- 設置開機掛載
- 內存交換空間(swap)之創(chuàng)建
- 補充
一、文件系統(tǒng)的簡單操作
1.1、磁盤與目錄的容量
磁盤的整體數據是在 superblock 區(qū)塊中,但是每個各別文件的容量則在 inode
當中記載的。在命令行下面該如何叫出這幾個數據呢?
- df:列出文件系統(tǒng)的整體磁盤使用量;
- du:評估文件系統(tǒng)的磁盤使用量(常用在推估目錄所占容量)
1.1.1、 df
df [-ahikHTm] [目錄或文件名]
選項與參數:
- -a :列出所有的文件系統(tǒng),包括系統(tǒng)特有的 /proc 等文件系統(tǒng);
- -k :以 KBytes 的容量顯示各文件系統(tǒng);
- -m :以 MBytes 的容量顯示各文件系統(tǒng);
- -h :以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示;
- -H :以 M=1000K 取代 M=1024K 的進位方式;
- -T :連同該 partition 的 filesystem 名稱 (例如 xfs) 也列出;
- -i :不用磁盤容量,而以 inode 的數量來顯示

在 Linux 下面如果 df 沒有加任何選項,那么默認會將系統(tǒng)內所有的,(不含特殊內存內的文件系統(tǒng)與 swap) 都以 1 KBytes 的容量來列出來!
所輸出的結果信息:
- Filesystem:代表該文件系統(tǒng)是在哪個 partition ,所以列出設備名稱;
- 1k-blocks:說明下面的數字單位是 1KB!可利用 -h 或 -m 來改變容量;
- Used:顧名思義,就是使用掉的磁盤空間;
- Available:也就是剩下的磁盤空間大?。?/li>
- Use%:就是磁盤的使用率啦!如果使用率高達 90% 以上時, 最好需要注意一下了,免得容量不足造成系統(tǒng)問題;
- Mounted on:就是磁盤掛載的目錄所在。
范例一:將系統(tǒng)內的所有特殊文件格式及名稱都列出來

范例二:將 /etc 下面的可用的磁盤容量以易讀的容量格式顯示
root@master:~# df -h /etc
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-root 476G 148G 304G 33% /
范例三:將目前各個 partition 當中可用的 inode 數量列出
root@master:~# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 7.9M 419 7.9M 1% /dev
tmpfs 7.9M 861 7.9M 1% /run
/dev/mapper/ubuntu--vg-root 31M 402K 30M 2% /
tmpfs 7.9M 4 7.9M 1% /dev/shm
tmpfs 7.9M 4 7.9M 1% /run/lock
tmpfs 7.9M 16 7.9M 1% /sys/fs/cgroup
/dev/sda1 122K 310 122K 1% /boot
tmpfs 7.9M 4 7.9M 1% /run/user/0
tmpfs 7.9M 4 7.9M 1% /run/user/1000
由于 df 主要讀取的數據幾乎都是針對一整個文件系統(tǒng),因此讀取的范圍主要是在 Superblock 內的信息, 所以這個指令顯示結果的速度非常的快速!在顯示的結果中需要特別留意的是根目錄的剩余容量! 因為所有的數據都是由根目錄衍生出來的,因此當根目錄的剩余容量剩下 0 時,那 Linux 可能就問題很大了。
需要注意的是,如果使用 -a 這個參數時,系統(tǒng)會出現 /proc 這個掛載點,但是里面的東西都是 0 ,不要緊張! /proc 的東西都是 Linux 系統(tǒng)所需要載入的系統(tǒng)數據,而且是掛載在“內存當中”的, 所以當然沒有占任何的磁盤空間。
/dev/shm/ 目錄,其實是利用內存虛擬出來的磁盤空間,通常是總實體內存的一半!由于是通過內存仿真出來的磁盤,因此你在這個目錄下面創(chuàng)建任何數據文件時,存取速度是非??焖俚模。ㄔ趦却鎯裙ぷ鳎?不過,也由于他是內存仿真出來的,因此這個文件系統(tǒng)的大小在每部主機上都不一樣,而且創(chuàng)建的東西在下次開機時就消失了! 因為是在內存中!
1.1.2、du
du [-ahskm] 文件或目錄名稱
選項與參數:
- -a :列出所有的文件與目錄容量,因為默認僅統(tǒng)計目錄下面的文件量而已;
- -h :以人們較易讀的容量格式 (G/M) 顯示;
- -s :列出總量而已,而不列出每個各別的目錄占用容量;
- -S :不包括子目錄下的總計,與 -s 有點差別。
- -k :以 KBytes 列出容量顯示;
- -m :以 MBytes 列出容量顯示。
直接輸入 du 沒有加任何選項時,則 du 會分析“目前所在目錄”的文件與目錄所占用的磁盤空間。但是,實際顯示時,僅會顯示目錄容量(不含文件),因此 . 目錄有很多文件沒有被列出來,所以全部的目錄相加不會等于 . 的容量。此外,輸出的數值數據為 1K 大小的容量單位。加上參數 -a 則可以將文件容量也顯示出來。
范例一:檢查根目錄下面每個目錄所占用的容量
du -sm /*
16 /bin
108 /boot
... 省略 ...
du: cannot access '/proc/104399/fd/4': No such file or directory
du: cannot access '/proc/104399/fdinfo/4': No such file or directory
... 省略 ...
1692 /tmp
9607 /usr
41054 /var
這是個很常被使用的功能,利用萬用字符 * 來代表每個目錄,如果想要檢查某個目錄下,哪個次目錄占用最大的容量,可以用這個方法找出來。至于 /proc 里頭會列出一堆“No such file or directory” 的錯誤,因為是內存內的程序,程序執(zhí)行結束就會消失,因此會有些目錄找不到,是正確的!
與 df 不一樣的是,du 這個指令其實會直接到文件系統(tǒng)內去搜尋所有的文件數據,所以指令的運行會執(zhí)行一小段時間。此外,在默認的情況下,容量的輸出是以 KB 來設計的, 如果想要知道目錄占了多少 MB ,那么就使用 -m 這個參數即可,如果只想要知道該目錄占了多少容量的話,使用 -s 就可以。
至于 -S 這個選項部分,由于 du 默認會將所有文件的大小均列出,因此假設在 /etc 下面使用 du 時, 所有的文件大小,包括 /etc 下面的次目錄容量也會被計算一次。然后最終的容量(/etc) 也會加總一次, 因此很多朋友都會誤會 du 分析的結果不太對勁。如果想要列出某目錄下的全部數據, 或許也可以加上 -S 的選項,減少次目錄的加總。
1.2、實體鏈接與符號鏈接: ln
1.2.1、Hard Link (實體鏈接, 硬式鏈接或實際鏈接)
- 每個文件都會占用一個 inode ,文件內容由 inode 的記錄來指向;
- 想要讀取該文件,必須要經過目錄記錄的文件名來指向到正確的 inode 號碼才能讀取。
也就是說,其實文件名只與目錄有關,但是文件內容則與 inode 有關。那么想一想, 有沒有可能有多個文件名對應到同一個 inode 號碼呢?有的!那就是 hard link 的由來。
簡單說:hard link 只是在某個目錄下新增一筆文件名鏈接到某 inode 號碼的關連記錄而已。
如圖,有個 /root/crontab 是 /etc/crontab 的實體鏈接,這兩個文件名鏈接到同一個 inode :

使用 hard link 設置鏈接文件時,磁盤的空間與 inode 的數目都不會改變, hard link 只是在某個目錄下的 block 多寫入一個關連數據而已,既不會增加 inode 也不會耗用 block 數量(其實還是可能會改變系統(tǒng)的 block 的,那就是當新增這筆數據卻剛好將目錄的 block 填滿時,就可能會新加一個 block 來記錄文件名關連性,而導致磁盤空間的變化)。
由圖也可知,事實上 hard link 應該僅能在單一文件系統(tǒng)中進行的,應該是不能夠跨文件系統(tǒng),所以 hard link 是有限制的:
- 不能跨 Filesystem;
- 不能 link 目錄。
因為如果使用 hard link 鏈接到目錄時, 鏈接的數據需要連同被鏈接目錄下面的所有數據都創(chuàng)建鏈接。
1.2.2、Symbolic Link (符號鏈接,亦即是捷徑)
相對于 hard link , Symbolic link 可就好理解多了,基本上, Symbolic link 就是在創(chuàng)建一個獨立的文件,而這個文件會讓數據的讀取指向他 link 的那個文件的文件名!由于只是利用文件來做為指向的動作, 所以,當來源文件被刪除之后,symbolic link 的文件會“開不了”, 會一直說“無法打開某文件!”。實際上就是找不到原始“文件名”而已。

如圖:
由 1 號 inode 讀取到鏈接文件的內容僅有文件名,根據文件名鏈接到正確的目錄去取得目標文件的 inode , 最終就能夠讀取到正確的數據了??梢园l(fā)現的是,如果目標文件(/etc/crontab)被刪除了,那么整個環(huán)節(jié)就會無法繼續(xù)進行下去, 所以就會發(fā)生無法通過鏈接文件讀取的問題了!
這個 Symbolic Link 與 Windows 的捷徑可以給他劃上等號,由 Symbolic link 所創(chuàng)建的文件為一個獨立的新的文件,所以會占用掉 inode 與 block 。
1.2.3、指令
ln [-sf] 來源文件 目標文件
選項與參數:
- -s :如果不加任何參數就進行鏈接,那就是hard link,至于 -s 就是symbolic link;
- -f :如果 目標文件 存在時,就主動的將目標文件直接移除后再創(chuàng)建!
關于目錄的 link 數量:
一個“空目錄”里面至少會存在 . 與 .. 這兩個目錄。那么,當創(chuàng)建一個新目錄名稱為 /tmp/testing 時,基本上會有三個東西,那就是:
- /tmp/testing
- /tmp/testing/.
- /tmp/testing/..
而其中 /tmp/testing 與 /tmp/testing/. 其實是一樣的!都代表該目錄,而 /tmp/testing/.. 則代表 /tmp 這個目錄。所以說,當創(chuàng)建一個新的目錄時, “新的目錄的 link 數為 2 ,而上層目錄的 link 數則會增加 1。
二、磁盤的分區(qū)、格式化、檢驗與掛載
想要在系統(tǒng)里面新增一顆磁盤時,應該有如下動作需要做:
- 對磁盤進行分區(qū),以創(chuàng)建可用的 partition ;
- 對該 partition 進行格式化 (format),以創(chuàng)建系統(tǒng)可用的 filesystem;
- 若想要仔細一點,則可對剛剛創(chuàng)建好的 filesystem 進行檢驗;
- 在 Linux 系統(tǒng)上,需要創(chuàng)建掛載點 (亦即是目錄),并將他掛載上來。
2.1、觀察磁盤分區(qū)狀態(tài)
目前磁盤分區(qū)主要有 MBR 以及 GPT 兩種格式,這兩種格式所使用的分區(qū)工具不太一樣,因此分區(qū)前要去找一下目前系統(tǒng)有的磁盤有哪些, 這些磁盤是 MBR 還是 GPT 等等。
2.1.1、lsblk 列出系統(tǒng)上的所有磁盤列表
lsblk 可以看成“ list block device ”的縮寫,就是列出所有儲存設備的意思。
lsblk [-dfimpt] [device]
選項與參數:
- -d :僅列出磁盤本身,并不會列出該磁盤的分區(qū)數據
- -f :同時列出該磁盤內的文件系統(tǒng)名稱
- -i :使用 ASCII 的線段輸出,不要使用復雜的編碼 (再某些環(huán)境下很有用)
- -m :同時輸出該設備在 /dev 下面的權限數據 (rwx 的數據)
- -p :列出該設備的完整文件名!而不是僅列出最后的名字而已
- -t :列出該磁盤設備的詳細數據,包括磁盤佇列機制、預讀寫的數據量大小等
范例一:列出本系統(tǒng)下的所有磁盤與磁盤內的分區(qū)信息
root@master:/dev# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 487M 0 part /boot
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 499.5G 0 part
├─ubuntu--vg-root 252:0 0 483.5G 0 lvm /
└─ubuntu--vg-swap_1 252:1 0 16G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
系統(tǒng)主要有個 sr0 以及一個 sda 的設備,而 sda 的設備下面又有三個分區(qū), 其中 sda5 甚至還有因為 LVM 產生的文件系統(tǒng)。
- NAME:就是設備的文件名!會省略 /dev 等前導目錄;
- MAJ:MIN:其實核心認識的設備都是通過這兩個代碼來熟悉的!分別是主要:次要設備代碼;
- RM:是否為可卸載設備 (removable device),如光盤、USB 磁盤等等;
- SIZE:當然就是容量;
- RO:是否為只讀設備的意思;
- TYPE:是磁盤 (disk)、分區(qū) (partition) 還是只讀存儲器 (rom) 等輸出;
- MOUTPOINT:掛載點!
范例二:僅列出 /dev/sda 設備內的所有數據的完整文件名
root@master:/dev# lsblk -ip /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
/dev/sda 8:0 0 500G 0 disk
|-/dev/sda1 8:1 0 487M 0 part /boot
|-/dev/sda2 8:2 0 1K 0 part
`-/dev/sda5 8:5 0 499.5G 0 part
|-/dev/mapper/ubuntu--vg-root 252:0 0 483.5G 0 lvm /
`-/dev/mapper/ubuntu--vg-swap_1 252:1 0 16G 0 lvm [SWAP]
2.1.2、blkid 列出設備的 UUID 等參數
lsblk 可以使用 -f 也可以來列出文件系統(tǒng)與設備的 UUID 數據。
UUID 是全域單一識別碼 (universally unique identifier),Linux 會將系統(tǒng)內所有的設備都給予一個獨一無二的識別碼, 這個識別碼就可以拿來作為掛載或者是使用這個設備/文件系統(tǒng)之用。
root@master:/dev# blkid
/dev/sda1: UUID="4ed77cbc-f446-4918-90ca-4e6b6fc7d97c" TYPE="ext2" PARTUUID="863f83f3-01"
/dev/sda5: UUID="lYIIQX-XyCX-1hpS-bLSR-yXX7-SdqL-6Swqvq" TYPE="LVM2_member" PARTUUID="863f83f3-05"
/dev/mapper/ubuntu--vg-root: UUID="4eb8d680-6565-494a-bf6e-3c15e48eda1b" TYPE="ext4"
/dev/mapper/ubuntu--vg-swap_1: UUID="b2d65ad5-9053-4315-83ae-ddba10e59f57" TYPE="swap"
每一行代表一個文件系統(tǒng),主要列出設備名稱、UUID 名稱以及文件系統(tǒng)的類型。
2.1.3、parted 列出磁盤的分區(qū)表類型與分區(qū)信息
parted device_name print
范例一:列出 /dev/sda 磁盤的相關數據
root@master:/dev# parted /dev/sda print
Model: VMware Virtual disk (scsi) # 磁盤的模塊名稱(廠商)
Disk /dev/sda: 537GB # 磁盤的總容量
Sector size (logical/physical): 512B/512B # 磁盤的每個邏輯/物理扇區(qū)容量
Partition Table: msdos # 分區(qū)表的格式 (MBR/GPT)
Disk Flags:
# 下面才是分區(qū)數據
Number Start End Size Type File system Flags
1 1049kB 512MB 511MB primary ext2 boot
2 513MB 537GB 536GB extended
5 513MB 537GB 536GB logical lvm
2.2、磁盤分區(qū): gdisk/fdisk
MBR 分區(qū)表請使用 fdisk 分區(qū), GPT 分區(qū)表請使用 gdisk 分區(qū),否則會分區(qū)失敗。
所以先通過 lsblk 或 blkid 先找到磁盤,再用 parted /dev/xxx print 來找出內部的分區(qū)表類型,之后才用 gdisk 或 fdisk 來操作系統(tǒng)。
2.2.1、gdisk
先看看 gdisk。
gdisk 設備名稱
范例:觀察該磁盤的分區(qū)與相關數據(鳥哥書上的代碼,我的設備是 MBR 分區(qū)表)
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 的分區(qū)表!
Command (? for help)# 這里可以讓你輸入指令動作,可以按問號 (?) 來查看可用指令
Command (? for help): ?
b back up GPT data to a file
c change a partition's name
d delete a partition # 刪除一個分區(qū)
i show detailed information on a partition
l list known partition types
n add a new partition # 增加一個分區(qū)
o create a new empty GUID partition table (GPT)
p print the partition table # 印出分區(qū)表 (常用)
q quit without saving changes # 不儲存分區(qū)就直接離開 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 # 儲存分區(qū)操作后離開 gdisk
x extra functionality (experts only)
? print this menu
Command (? for help):
先來看看分區(qū)表信息。
Command (? for help): p # 這里可以輸出目前磁盤的狀態(tài)
Disk /dev/vda: 83886080 sectors, 40.0 GiB # 磁盤文件名/扇區(qū)數與總容量
Logical sector size: 512 Bytes # 單一扇區(qū)大小為 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 # 下面為完整的分區(qū)信息了!
1 2048 6143 2.0 MiB EF02 # 第一個分區(qū)數據
2 6144 2103295 1024.0 MiB 0700
3 2103296 65026047 30.0 GiB 8E00
# 分區(qū)編號 開始扇區(qū)號碼 結束扇區(qū)號碼 容量大小
Command (? for help): q
# 想要不儲存離開嗎?按下 q 就對了!不要隨便按 w 啊!
使用“ p ”可以列出目前這顆磁盤的分區(qū)表信息,這個信息的上半部在顯示整體磁盤的狀態(tài)。下半部的分區(qū)表信息主要在列出每個分區(qū)的個別信息項目。每個項目的意義為:
- Number:分區(qū)編號,1 號指的是 /dev/vda1 這樣計算;
- Start (sector):每一個分區(qū)的開始扇區(qū)號碼位置;
- End (sector):每一個分區(qū)的結束扇區(qū)號碼位置,與 start 之間可以算出分區(qū)的總容量;
- Size:就是分區(qū)的容量了;
- Code:在分區(qū)內的可能的文件系統(tǒng)類型。Linux 為 8300,swap 為 8200。不過這個項目只是一個提示而已,不見得真的代表此分區(qū)內的文件系統(tǒng);
- Name:文件系統(tǒng)的名稱等等。
具體新增分區(qū)的操作見《鳥哥的 Linux 私房菜》378 頁。
2.2.2、partprobe 更新 Linux 核心的分區(qū)表信息
partprobe [-s] # 可以不要加 -s !那么屏幕不會出現信息!
partprobe -s # 不過還是建議加上 -s 比較清晰!
2.2.3、fdisk
雖然 MBR 分區(qū)表在未來應該會慢慢的被淘汰,畢竟現在磁盤容量隨便都大于 2T 以上了,不過依舊有些舊的系統(tǒng),以及虛擬機的使用上面,還是有小磁盤存在的空間!這時處理 MBR 分區(qū)表, 就得要使用 fdisk。
fdisk 跟 gdisk 使用的方式幾乎一樣,只是一個使用 ? 作為指令提示數據,一個使用 m 作為提示這樣而已。此外,fdisk 有時會使用柱面 (cylinder) 作為分區(qū)的最小單位,與 gdisk 默認使用 sector 不太一樣。
2.3、磁盤格式化(創(chuàng)建文件系統(tǒng))
格式化的指令非常的簡單,那就是“make filesystem, mkfs” 這個指令!這個指令其實是個綜合的指令,他會去調用正確的文件系統(tǒng)格式化工具軟件!
我們常聽到的“格式化”其實應該稱為“創(chuàng)建文件系統(tǒng) (make filesystem)”才對,使用的指令是 mkfs 。
2.3.1、EXT4 文件系統(tǒng) mkfs.ext4
想要格式化為 ext4 的傳統(tǒng) Linux 文件系統(tǒng)的話,可以使用 mkfs.ext4 這個指令。
mkfs.ext4 [-b size] [-L label] 設備名稱
選項與參數:
- -b :設置 block 的大小,有 1K, 2K, 4K 的容量
- -L :后面接這個設備的標頭名稱。
范例:將 /dev/vda5 格式化為 ext4 文件系統(tǒng)
mkfs.ext4 /dev/vda5
2.3.2、XFS 文件系統(tǒng) mkfs.xfs
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 :指的是“格式化的設備是個文件而不是個設備”的意思?。ɡ缣摂M磁盤);
- size=數值 :data section 的容量,亦即你可以不將全部的設備容量用完的意思;
- su=數值 :當有 RAID 時,那個 stripe 數值的意思,與下面的 sw 搭配使用;
- sw=數值 :當有 RAID 時,用于儲存數據的磁盤數量(須扣除備份碟與備用碟);
- sunit=數值 :與 su 相當,不過單位使用的是“幾個 sector(512Bytes大?。钡囊馑?;
- swidth=數值 :就是 su*sw 的數值,但是以“幾個 sector(512Bytes大?。眮碓O置
- -f :如果設備內已經有文件系統(tǒng),則需要使用這個 -f 來強制格式化才行;
- -i :與 inode 有較相關的設置,主要的設置值有:
- size=數值 :最小是 256Bytes 最大是 2k,一般保留 256 就足夠使用了;
- internal=[0|1]:log 設備是否為內置?默認為 1 內置,如果要用外部設備,使用下面設置;
- logdev=device :log 設備為后面接的那個設備上頭的意思,需設置 internal=0 才可;
- size=數值 :指定這塊登錄區(qū)的容量,通常最小得要有 512 個 block,大約 2M 以上才行!
- -L :后面接這個文件系統(tǒng)的標頭名稱 Label name 的意思;
- -r :指定 realtime section 的相關設置值,常見的有:
- extsize=數值 :就是那個重要的 extent 數值,一般不須設置,但有 RAID 時,最好設置與 swidth 的數值相同較佳!最小為 4K 最大為 1G 。
2.3.3、其他文件系統(tǒng) mkfs
mkfs 其實是個綜合指令而已,當使用 mkfs -t xfs 時,它就會跑去找 mkfs.xfs 相關的參數,如果想要知道系統(tǒng)還支持哪種文件系統(tǒng)的格式化功能,直接按 [tabl] 就很清楚。
mkfs[tab][tab]
mkfs mkfs.bfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.ext4dev mkfs.fat mkfs.minix mkfs.msdos mkfs.ntfs mkfs.vfat mkfs.xfs
2.4、文件系統(tǒng)檢驗
文件系統(tǒng)運行時會有磁盤與內存數據非同步的狀況發(fā)生,因此莫名其妙的死機非常可能導致文件系統(tǒng)的錯亂。
2.4.1、xfs_repair 處理 XFS 文件系統(tǒng)
xfs_repair [-fnd] 設備名稱
選項與參數:
- -f :后面的設備其實是個文件而不是實體設備
- -n :單純檢查并不修改文件系統(tǒng)的任何數據 (檢查而已)
- -d :通常用在單人維護模式下面,針對根目錄 (/) 進行檢查與修復的動作!很危險!不要隨便使用
范例一:檢查一下剛剛創(chuàng)建的 /dev/vda4 文件系統(tǒng)
[root@study ~]# 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 即可!
范例二:檢查一下系統(tǒng)原本就有的 /dev/centos/home 文件系統(tǒng)
[root@study ~]# 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 可以檢查/修復文件系統(tǒng),不過,因為修復文件系統(tǒng)是個很龐大的任務!因此,修復時該文件系統(tǒng)不能被掛載! 所以,檢查與修復 /dev/vda4 沒啥問題,但是修復/dev/centos/home 這個已經掛載的文件系統(tǒng)時,就出現上述的問題了! 沒關系,若可以卸載,卸載后再處理即可。
Linux 系統(tǒng)有個設備無法被卸載,那就是根目錄!如果你的根目錄有問題怎辦?這時得要進入單人維護或救援模式,然后通過 -d 這個選項來處理! 加入 -d 這個選項后,系統(tǒng)會強制檢驗該設備,檢驗完畢后就會自動重新開機!
2.4.2、fsck.ext4 處理 EXT4 文件系統(tǒng)
fsck 是個綜合指令,如果是針對 ext4 的話,建議直接使用 fsck.ext4 來檢測比較妥當。
fsck.ext4 [-pf] [-b superblock] 設備名稱
選項與參數:
- -p :當文件系統(tǒng)在修復時,若有需要回復 y 的動作時,自動回復 y 來繼續(xù)進行修復動作;
- -f :強制檢查!一般來說,如果 fsck 沒有發(fā)現任何 unclean 的旗標,不會主動進入細部檢查的,如果您想要強制 fsck 進入細部檢查,就得加上 -f 旗標;
- -D :針對文件系統(tǒng)下的目錄進行最優(yōu)化配置;
- -b :后面接 superblock 的位置!一般來說這個選項用不到。但是如果 superblock 因故損毀時,通過這個參數即可利用文件系統(tǒng)內備份的 superblock 來嘗試救援。一般來說,superblock 備份在:1K block 放在 8193, 2K block 放在 16384, 4K block 放在 32768。
2.5、文件系統(tǒng)掛載與卸載
進行掛載前,最好先確定幾件事:
- 單一文件系統(tǒng)不應該被重復掛載在不同的掛載點(目錄)中;
- 單一目錄不應該重復掛載多個文件系統(tǒng);
- 要作為掛載點的目錄,理論上應該都是空目錄才是。
[root@study ~]# mount -a
[root@study ~]# mount [-l]
[root@study ~]# mount [-t 文件系統(tǒng)] LABEL='' 掛載點
[root@study ~]# mount [-t 文件系統(tǒng)] UUID='' 掛載點 # 鳥哥近期建議用這種方式!
[root@study ~]# mount [-t 文件系統(tǒng)] 設備文件名 掛載點
選項與參數:
-a :依照配置文件 /etc/fstab 的數據將所有未掛載的磁盤都掛載上來;
-l :單純的輸入 mount 會顯示目前掛載的信息。加上 -l 可增列 Label 名稱;
-t :可以加上文件系統(tǒng)種類來指定欲掛載的類型。常見的 Linux 支持類型有:xfs, ext3, ext4,reiserfs, vfat, iso9660(光盤格式), nfs, cifs, smbfs (后三種為網絡文件系統(tǒng)類型);
-n :在默認的情況下,系統(tǒng)會將實際掛載的情況實時寫入 /etc/mtab 中,以利其他程序的運行,但在某些情況下(例如單人維護模式)為了避免問題會刻意不寫入。此時就得要使用 -n 選項;
-
-o :后面可以接一些掛載時額外加上的參數!比方說帳號、密碼、讀寫權限等:
- async, sync: 此文件系統(tǒng)是否使用同步寫入 (sync) 或非同步 (async) 的內存機制默認為 async;
- atime,noatime: 是否修訂文件的讀取時間(atime)。為了性能,某些時刻可使用 noatime;
- ro, rw: 掛載文件系統(tǒng)成為只讀(ro) 或可讀寫(rw)
- auto, noauto: 允許此 filesystem 被以 mount -a 自動掛載(auto);
- dev, nodev: 是否允許此 filesystem 上,可創(chuàng)建設備文件? dev 為可允許;
- suid, nosuid: 是否允許此 filesystem 含有 suid/sgid 的文件格式?
- exec, noexec: 是否允許此 filesystem 上擁有可執(zhí)行 binary 文件?
- user, nouser: 是否允許此 filesystem 讓任何使用者執(zhí)行 mount ?一般來說,mount 僅有 root 可以進行,但下達 user 參數,則可讓一般 user 也能夠對此 partition 進行 mount ;
- defaults: 默認值為:rw, suid, dev, exec, auto, nouser, and async;
- remount: 重新掛載,這在系統(tǒng)出錯,或重新更新參數時,很有用!
2.5.1、掛載 xfs/ext4/vfat 等文件系統(tǒng)
范例一:找出 /dev/vda4 的 UUID 后,用該 UUID 來掛載文件系統(tǒng)到 /data/xfs 內
[root@study ~]# blkid /dev/vda4
/dev/vda4: UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" TYPE="xfs"
[root@study ~]# mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs
mount: mount point /data/xfs does not exist # 非正規(guī)目錄!所以手動創(chuàng)建它!
[root@study ~]# mkdir -p /data/xfs
[root@study ~]# mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs
[root@study ~]# df /data/xfs
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda4 1038336 32864 1005472 4% /data/xfs
范例二:使用相同的方式,將 /dev/vda5 掛載于 /data/ext4
[root@study ~]# blkid /dev/vda5
/dev/vda5: UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" TYPE="ext4"
[root@study ~]# mkdir /data/ext4
[root@study ~]# mount UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" /data/ext4
[root@study ~]# df /data/ext4
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda5 999320 2564 927944 1% /data/ext4
2.5.2、重新掛載根目錄與掛載不特定目錄
整個目錄樹最重要的地方就是根目錄了,所以根目錄根本就不能夠被卸載的。如果掛載參數要改變, 或者是根目錄出現“只讀”狀態(tài)時,如何重新掛載呢?最可能的處理方式就是重新開機 (reboot)!
不過也可以這樣做:
范例:將 / 重新掛載,并加入參數為 rw 與 auto
[root@study ~]# mount -o remount,rw,auto /
另外,也可以利用 mount 來將某個目錄掛載到另外一個目錄去!這并不是掛載文件系統(tǒng),而是額外掛載某個目錄的方法! 雖然下面的方法也可以使用 symbolic link 來鏈接,不過在某些不支持符號鏈接的程序運行中,還是得要通過這樣的方法才行。
范例:將 /var 這個目錄暫時掛載到 /data/var 下面
[root@study ~]# mkdir /data/var
[root@study ~]# mount --bind /var /data/var
[root@study ~]# 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
# 內容完全一模一樣?。∫驗閽燧d目錄的緣故!
2.6、umount (將設備文件卸載)
umount [-fn] 設備文件名或掛載點
選項與參數:
- -f :強制卸載!可用在類似網絡文件系統(tǒng) (NFS) 無法讀取到的情況下;
- -l :立刻卸載文件系統(tǒng),比 -f 還強;
- -n :不更新 /etc/mtab 情況下卸載。
三、設置開機掛載
但是掛載是臨時的,系統(tǒng)重啟后需要重新掛載,如果希望下次啟動時,自動掛載,需要按照下述操作。
3.1、開機掛載 /etc/fstab 及 /etc/mtab
先查閱一下 /etc/fstab 這個文件的內容。
[root@study ~]# cat /etc/fstab
Device Mount point filesystem parameters dump fsck
/dev/mapper/centos-root / xfs defaults 0 0
UUID=94ac5f77-cb8a-495e-a65b-2ef7442b837c /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/etc/fstab (filesystem table) 就是將利用 mount 指令進行掛載時, 將所有的選項與參數寫入到這個文件中。除此之外, /etc/fstab 還加入了 dump 這個備份用指令的支持! 與開機時是否進行文件系統(tǒng)檢驗 fsck 等指令有關。
這個文件的內容共有六個字段,各個字段的總結數據與詳細數據如下:
[設備/UUID等] [掛載點] [文件系統(tǒng)] [文件系統(tǒng)參數] [dump] [fsck]
第一欄:磁盤設備文件名/UUID/LABEL name:
這個字段可以填寫的數據主要有三個項目:
- 文件系統(tǒng)或磁盤的設備文件名,如 /dev/vda2 等
- 文件系統(tǒng)的 UUID 名稱,如 UUID=xxx
- 文件系統(tǒng)的 LABEL 名稱,例如 LABEL=xxx
第二欄:掛載點 (mount point):
就是掛載的目錄。
第三欄:磁盤分區(qū)的文件系統(tǒng):
在手動掛載時可以讓系統(tǒng)自動測試掛載,但在這個文件當中我們必須要手動寫入文件系統(tǒng)才行! 包括 xfs, ext4, vfat, reiserfs, nfs 等等。
第四欄:文件系統(tǒng)參數:
| 參數 | 內容意義 |
|---|---|
| async/sync | 設置磁盤是否以非同步方式運行!默認為 async(性能較佳) |
| auto/noauto | 當下達 mount -a 時,此文件系統(tǒng)是否會被主動測試掛載。默認為 auto。 |
| rw/ro | 讓該分區(qū)以可讀寫或者是只讀的型態(tài)掛載上來,如果你想要分享的數據 是不給使用者隨意變更的, 這里也能夠設置為只讀。則不論在此文件系 統(tǒng)的文件是否設置 w 權限,都無法寫入! |
| exec/noexec | 限制在此文件系統(tǒng)內是否可以進行“執(zhí)行”的工作?如果是純粹用來儲存數 據的目錄, 那么可以設置為 noexec 會比較安全。不過,這個參數也不 能隨便使用,因為你不知道該目錄下是否默認會有可執(zhí)行文件。舉例來 說,如果你將 noexec 設置在 /var ,當某些軟件將一些可執(zhí)行文件放置 于 /var 下時,那就會產生很大的問題! 因此,建議這個 noexec 最多 僅設置于你自訂或分享的一般數據目錄。 |
| user/nouser | 是否允許使用者使用 mount指令來掛載呢?一般而言,我們當然不希望 一般身份的 user 能使用 mount 啰,因為太不安全了,因此這里應該要設 置為 nouser! |
| suid/nosuid | 該文件系統(tǒng)是否允許 SUID 的存在?如果不是可執(zhí)行文件放置目錄,也 可以設置為 nosuid 來取消這個功能! |
| defaults | 同時具有 rw, suid, dev, exec, auto, nouser, async 等參數。 基本上, 默認情況使用 defaults 設置即可! |
第五欄:能否被 dump 備份指令作用:
dump 是一個用來做為備份的指令,不過現在有太多的備份方案了,所以這個項目可以不要理會!直接輸入 0 就好了!
第六欄:是否以 fsck 檢驗扇區(qū):
早期開機的流程中,會有一段時間去檢驗本機的文件系統(tǒng),看看文件系統(tǒng)是否完整
(clean)。 不過這個方式使用的主要是通過 fsck 去做的,我們現在用的 xfs 文件系統(tǒng)就沒有辦法適用,因為 xfs 會自己進行檢驗,不需要額外進行這個動作!所以直接填 0 就好了。
例題:假設我們要將 /dev/vda4 每次開機都自動掛載到 /data/xfs ,該如何進行?
# 首先,請用 nano 將下面這一行寫入 /etc/fstab 最后面中;
[root@study ~]# nano /etc/fstab
UUID="e0fa7252-b374-4a06-987a-3cb14f415488" /data/xfs xfs defaults 0 0
# 再來看看 /dev/vda4 是否已經掛載,如果掛載了,請務必卸載再說!
[root@study ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda4 1038336 32864 1005472 4% /data/xfs
# 竟然不知道何時被掛載了?趕緊給他卸載先!
# **因為,如果要被掛載的文件系統(tǒng)已經被掛載了(無論掛載在哪個目錄),那測試就不會進行喔!**
[root@study ~]# umount /dev/vda4
# 最后測試一下剛剛我們寫入 /etc/fstab 的語法有沒有錯誤!這點很重要!因為這個文件如果寫錯了, 則你的 Linux 很可能將無法順利開機完成!所以請務必要測試測試!
[root@study ~]# mount -a
[root@study ~]# df /data/xfs
最終有看到 /dev/vda4 被掛載起來的信息才是成功的掛載了!而且以后每次開機都會順利的將此文件系統(tǒng)掛載起來的!
3.2、特殊設備 loop 掛載
如果有光盤鏡像文件,或者是使用文件作為磁盤的方式時,那就得要使用特別的方法來將他掛載起來,不需要燒錄!
3.2.1、掛載光盤/DVD鏡像文件
如果下載了 Linux 或者是其他所需光盤/DVD的鏡像文件后, 難道一定需要燒錄成為光盤才能夠使用該文件里面的數據嗎?當然不是!我們可以通過 loop 設備來掛
載的!
ll -h /tmp/CentOS-7.0-1406-x86_64-DVD.iso
-rw-r--r--. 1 root root 3.9G Jul 7 2014 /tmp/CentOS-7.0-1406-x86_64-DVD.iso
# 看到上面的結果吧!這個文件就是鏡像文件,文件非常的大吧!
[root@study ~]# mkdir /data/centos_dvd
[root@study ~]# mount -o loop /tmp/CentOS-7.0-1406-x86_64-DVD.iso /data/centos_dvd
[root@study ~]# df /data/centos_dvd
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/loop0 4050860 4050860 0 100% /data/centos_dvd
# 就是這個項目! .iso 鏡像文件內的所有數據可以在 /data/centos_dvd 看到!
[root@study ~]# ll /data/centos_dvd
total 607
-rw-r--r--. 1 500 502 14 Jul 5 2014 CentOS_BuildTag <==瞧!就是DVD的內容??!
drwxr-xr-x. 3 500 502 2048 Jul 4 2014 EFI
-rw-r--r--. 1 500 502 611 Jul 5 2014 EULA
-rw-r--r--. 1 500 502 18009 Jul 5 2014 GPL
drwxr-xr-x. 3 500 502 2048 Jul 4 2014 images
.....(下面省略).....
[root@study ~]# umount /data/centos_dvd/
# 測試完成!記得將數據給他卸載!同時這個鏡像文件也被鳥哥刪除了...測試機容量不夠大!
四、內存交換空間(swap)之創(chuàng)建
以前的年代因為內存不足,因此那個可以暫時將內存的程序拿到硬盤中暫放的內存交換空間(swap) 就顯的非常的重要! 否則,如果突然間某支程序用掉你大部分的內存,那你的系統(tǒng)恐怕有損毀的情況發(fā)生。
一般來說,如果硬件的配備資源足夠的話,那么 swap 應該不會被系統(tǒng)所使用到,swap 會被利用到的時刻通常就是實體內存不足的情況了。 CPU 所讀取的數據都來自于內存, 那當內存不足的時候,為了讓后續(xù)的程序可以順利的運行,因此在內存中暫不使用的程序與數據就會被挪到 swap 中了。 此時內存就會空出來給需要執(zhí)行的程序載入。由于 swap 是用磁盤來暫時放置內存中的信息,所以用到 swap 時,主機磁盤燈就會開始閃個不停!
4.1、使用實體分區(qū)創(chuàng)建swap
創(chuàng)建 swap 分區(qū)的方式也是非常的簡單的!通過下面幾個步驟就搞定:
- 分區(qū):先使用 gdisk 在磁盤中分區(qū)出一個分區(qū)給系統(tǒng)作為 swap 。由于 Linux 的 gdisk 默認會將分區(qū)的 ID 設置為 Linux 的文件系統(tǒng),所以可能還得要設置一下 system ID。
- 格式化:利用創(chuàng)建 swap 格式的“mkswap 設備文件名”就能夠格式化該分區(qū)成為 swap 格式。
- 使用:最后將該 swap 設備啟動,方法為:“swapon 設備文件名”。
- 觀察:最終通過 free 與 swapon -s 這個指令來觀察一下內存的用量吧!
具體操作:
- 先進行分區(qū)的行為
[root@study ~]# gdisk /dev/vda
Command (? for help): n
Partition number (6-128, default 6):
First sector (34-83886046, default = 69220352) or {+-}size{KMGTP}:
Last sector (69220352-83886046, default = 83886046) or {+-}size{KMGTP}: +512M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'
Command (? for help): p
Number Start (sector) End (sector) Size Code Name
6 69220352 70268927 512.0 MiB 8200 Linux swap # 重點就是產生這東西!
Command (? for help): w
Do you want to proceed? (Y/N): y
[root@study ~]# partprobe
[root@study ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 40G 0 disk
.....(中間省略).....
`-vda6 252:6 0 512M 0 part # 確定這里是存在的才行!
# 鳥哥有簡化輸出喔!結果可以看到我們多了一個 /dev/vda6 可以使用于 swap 喔!
- 開始創(chuàng)建 swap 格式
[root@study ~]# mkswap /dev/vda6
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=6b17e4ab-9bf9-43d6-88a0-73ab47855f9d
[root@study ~]# blkid /dev/vda6
/dev/vda6: UUID="6b17e4ab-9bf9-43d6-88a0-73ab47855f9d" TYPE="swap"
# 確定格式化成功!且使用 blkid 確實可以抓到這個設備了喔
- 開始觀察與載入看看
[root@study ~]# free
total used free shared buff/cache available
Mem: 1275140 227244 330124 7804 717772 875536 # 實體內存
Swap: 1048572 101340 947232 # swap 相關
# 我有 1275140K 的實體內存,使用 227244K 剩余 330124K ,使用掉的內存有 717772K 用在緩沖/高速緩存的用途中。至于 swap 已經有 1048572K !這樣會看了吧?!
[root@study ~]# swapon /dev/vda6
[root@study ~]# free
total used free shared buff/cache available
Mem: 1275140 227940 329256 7804 717944 874752
Swap: 1572856 101260 1471596 <==有看到增加了沒?
[root@study ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 1048572 101260 -1
/dev/vda6 partition 524284 0 -2
# 上面列出目前使用的 swap 設備有哪些的意思!
[root@study ~]# nano /etc/fstab
UUID="6b17e4ab-9bf9-43d6-88a0-73ab47855f9d" swap swap defaults 0 0
# 當然要寫入配置文件,只不過不是文件系統(tǒng),所以沒有掛載點!第二個字段寫入 swap 即可。
4.2、使用文件創(chuàng)建swap
如果是在實體分區(qū)無法支持的環(huán)境下,此時前一小節(jié)提到的 loop 設備創(chuàng)建方法就派的上用場,與實體分區(qū)不一樣的,這個方法只是利用 dd 去創(chuàng)建一個大文件而已。
- 使用 dd 這個指令來新增一個 128MB 的文件在 /tmp 下面:
[root@study ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128
128+0 records in
128+0 records out
134217728 Bytes (134 MB) copied, 1.7066 seconds, 78.6 MB/s
[root@study ~]# ll -h /tmp/swap
-rw-r--r--. 1 root root 128M Jun 26 17:47 /tmp/swap
# 這個指令的簡單意義如下:
# if 是 input file ,輸入文件。那個 /dev/zero 是會一直輸出 0 的設備!
# of 是 output file ,將一堆零寫入到后面接的文件中。
# bs 是每個 block 大小,就像文件系統(tǒng)那樣的 block 意義;
# count 則是總共幾個 bs 的意思。所以 bs*count 就是這個文件的容量了!
- 使用 mkswap 將 /tmp/swap 這個文件格式化為 swap 的文件格式:
[root@study ~]# mkswap /tmp/swap
Setting up swapspace version 1, size = 131068 KiB
no label, UUID=4746c8ce-3f73-4f83-b883-33b12fa7337c
# 這個指令下達時請“特別小心”,因為下錯字符控制,將可能使您的文件系統(tǒng)掛掉!
- 使用 swapon 來將 /tmp/swap 啟動:
[root@study ~]# swapon /tmp/swap
[root@study ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 1048572 100380 -1
/dev/vda6 partition 524284 0 -2
/tmp/swap file 131068 0 -3
- 使用 swapoff 關掉 swap file,并設置自動啟用:
[root@study ~]# nano /etc/fstab
/tmp/swap swap swap defaults 0 0
# 為何這里不要使用 UUID 呢?這是因為系統(tǒng)僅會查詢區(qū)塊設備 (block device) 不會查詢文件!
# 所以,這里千萬不要使用 UUID,不然系統(tǒng)會查不到喔!
[root@study ~]# swapoff /tmp/swap /dev/vda6
[root@study ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 1048572 100380 -1
# 確定已經回復到原本的狀態(tài)了!然后準備來測試?。?
[root@study ~]# swapon -a
[root@study ~]# swapon -s
# 最終你又會看正確的三個 swap 出現啰!這也才確定你的 /etc/fstab 設置無誤!
swap 在目前的桌面電腦來講,存在的意義已經不大了!這是因為目前的 x86 主機所含的內存實在都太大了 (一般入門級至少也都有 4GB 了),所以, Linux 系統(tǒng)大概都用不到 swap 這個玩意兒的。不過, 如果是針對服務器或者是工作站這些常年上線的系統(tǒng)來說的話,那么,無論如何,swap 還是需要創(chuàng)建的。
五、補充
5.1、利用 GNU 的 parted 進行分區(qū)行為(Optional)
gdisk/fdisk 很快速的將分區(qū)切割妥當,不過 gdisk 主要針對 GPT 而 fdisk 主要支持 MBR ,對 GPT 的支持還不夠! 所以使用不同的分區(qū)時,得要先查詢到正確的分區(qū)表才能用適合的指令,好麻煩!有沒有同時支持的指令呢?有的!那就是 parted。
parted 可以直接在一行命令行就完成分區(qū),是一個非常好用的指令!它常用的語法如下:
parted [設備] [指令 [參數]]
選項與參數:
指令功能:
- 新增分區(qū):mkpart [primary|logical|extended] [ext4|vfat|xfs] 開始 結束
- 顯示分區(qū):print
- 刪除分區(qū):rm [partition]
范例一:以 parted 列出目前本機的分區(qū)表數據
[root@study ~]# parted /dev/vda print
Model: Virtio Block Device (virtblk) <==磁盤接口與型號
Disk /dev/vda: 42.9GB <==磁盤文件名與容量
Sector size (logical/physical): 512B/512B <==每個扇區(qū)的大小
Partition Table: gpt <==是 GPT 還是 MBR 分區(qū)
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
4 33.3GB 34.4GB 1074MB xfs Linux filesystem
5 34.4GB 35.4GB 1074MB ext4 Microsoft basic data
6 35.4GB 36.0GB 537MB linux-swap(v1) Linux swap
[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ]
- Number:這個就是分區(qū)的號碼!舉例來說,1號代表的是 /dev/vda1 的意思;
- Start:分區(qū)的起始位置在這顆磁盤的多少 MB 處,他以容量作為單位;
- End:此分區(qū)的結束位置在這顆磁盤的多少 MB 處;
- Size:由上述兩者的分析,得到這個分區(qū)有多少容量;
- File system:分析可能的文件系統(tǒng)類型為何的意思;
- Name:就如同 gdisk 的 System ID 之意。
范例二:將 /dev/sda 這個原本的 MBR 分區(qū)表變成 GPT 分區(qū)表?。ㄎkU!危險!勿亂搞!無法復原?。?/p>
[root@study ~]# parted /dev/sda print
Model: ATA QEMU HARDDISK (scsi)
Disk /dev/sda: 2148MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos # 確實顯示的是 MBR 的 msdos 格式喔!
[root@study ~]# parted /dev/sda mklabel gpt
Warning: The existing disk label on /dev/sda will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? y
[root@study ~]# parted /dev/sda print
# 你應該就會看到變成 gpt 的模樣!只是...后續(xù)的分區(qū)就全部都死掉了!
范例三:創(chuàng)建一個約為 512MB 容量的分區(qū)
[root@study ~]# parted /dev/vda print
.....(前面省略).....
Number Start End Size File system Name Flags
.....(中間省略).....
6 35.4GB 36.0GB 537MB linux-swap(v1) Linux swap # 要先找出來下一個分區(qū)的起始點!
[root@study ~]# parted /dev/vda mkpart primary fat32 36.0GB 36.5GB
# 由于新的分區(qū)的起始點在前一個分區(qū)的后面,所以當然要先找出前面那個分區(qū)的 End 位置!
# 然后再請參考 mkpart 的指令功能,就能夠處理好相關的動作!
[root@study ~]# parted /dev/vda print
.....(前面省略).....
Number Start End Size File system Name Flags
7 36.0GB 36.5GB 522MB primary
[root@study ~]# partprobe
[root@study ~]# lsblk /dev/vda7
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda7 252:7 0 498M 0 part # 要確定它是真的存在才行!
[root@study ~]# mkfs -t vfat /dev/vda7
[root@study ~]# blkid /dev/vda7
/dev/vda7: SEC_TYPE="msdos" UUID="6032-BF38" TYPE="vfat"
[root@study ~]# nano /etc/fstab
UUID="6032-BF38" /data/win vfat defaults 0 0
[root@study ~]# mkdir /data/win
[root@study ~]# mount -a
[root@study ~]# df /data/win
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda7 509672 0 509672 0% /data/win
事實上,應該使用 gdisk 來處理 GPT 分區(qū)就好了!不過,某些特殊時刻,例如要自己寫一只腳本,讓分區(qū)全部一口氣創(chuàng)建, 不需要 gdisk 一條一條指令去進行時,那么 parted就非常有效果了!因為他可以直接進行 partition 而不需要跟用戶互動!這就是它的最大好處!