主要介紹Linux磁盤管理
- 了解分區的概念
- 對硬盤進行分區
- 常見的分區
- swap分區的管理
1.了解分區的概念
1)新的硬盤首先需要對其進行分區和格式化,下面來了解以下硬盤的結構,如圖。
2)硬盤的磁盤上有一個個圈,每兩個圈組成一個磁道。從中間往外發射線,把每個磁道分成 一個個扇區,每個扇區的大小是512B。為了更好地理解,我們把所有磁盤拼接起來,如圖
????????假設磁盤有10000個扇區,第一個分區從2048到6000,第二個分區從6001到 8000,第三個分區從8001到10000。
????????每個扇區只能屬于一個分區,不能同時屬于多個分區。
????????第一個扇區比較特殊,叫作 MBR(主引導記錄)。
????????分區類型包括主分區、擴展分區和邏輯分區,如圖。

????????一套房子出租,李四和王五從房東手中直接各租一間自住,這個屬于主分區。
????????趙六從房東手中租過來一個大間,但自己不住做起了二房東(擴展分區),然后隔成很多隔間。趙六租的那一個大間就是擴展分區,大間里隔開的一些隔間就是邏輯分區。
- 主分區:直接從硬盤上劃分,并可以直接格式化使用的分區。
- 擴展分區:直接從硬盤上劃分,但是不直接使用的分區。
- 邏輯分區:在擴展分區上劃分的分區。
????????分區表記錄主分區和擴展分區的信息,如同房東從李四、王五、趙六手中收房租一樣,但是收不到tom、bob等的房租,tom、bob等的房租由趙六來收,因為趙六是二房東。
????????每記錄一個分區(主分區或擴展分區)要消耗16B,所以分區表最多只能記錄4個分區,硬盤最多只能劃分出來4個分區,且最多只能有一個擴展分區。
?????? ??請關閉虛擬機并自行為虛擬機添加一塊SCSI格式的硬盤,然后開機進入系統。
2.對磁盤進行分區
1)使用fdisk -l 命令查看所有分區信息,命令如下。
[root@aaa ~]# fdisk -l磁盤 /dev/sda:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x000b8ab1設備 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM磁盤 /dev/sdb:42.9 GB, 42949672960 字節,83886080 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節磁盤 /dev/mapper/centos_aaa-root:18.2 GB, 18249416704 字節,35643392 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節磁盤 /dev/mapper/centos_aaa-swap:2147 MB, 2147483648 字節,4194304 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節[root@aaa ~]#
????????此命令可以查看系統所有硬盤的信息,這里可以看到/dev/sda有兩個分區 /dev/sda1和/dev/sda2,/dev/sdb沒有任何分區。
2)如果想單獨查看某硬盤的分區信息,可以使 用“fdisk -l/dev/硬盤”命令。例如,想單獨查看/dev/sda的信息,則用fdisk -l /dev/sda命令,命令如下。
[root@aaa ~]# fdisk -l /dev/sda磁盤 /dev/sda:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x000b8ab1設備 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM
[root@aaa ~]#
????????這里可以獲取到很多信息,例如,整個sda有多少個扇區,每個分區從哪個扇區開始到個扇區結束等。
下面開始練習分區,自行添加一個類型為SCSI、大小為40G的分區
3)分區的語法為“fdisk /devl/硬盤”,這里是對硬盤進行分區,而不是對分區再進行分區。
[root@aaa ~]# fdisk -l /dev/sdb磁盤 /dev/sdb:42.9 GB, 42949672960 字節,83886080 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節[root@aaa ~]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。Device does not contain a recognized partition table
使用磁盤標識符 0x12a28aec 創建新的 DOS 磁盤標簽。命令(輸入 m 獲取幫助):
此處進入分區的界面,按提示輸入 “m” 可以獲取幫助命令,常用的命令如下。
- p:打印分區表
- n:添加一個分區
- d:刪除一個分區
- l:列出分區類型
- t:轉換分區類型
- q:不保存退出
- w:保存退出
4)查看現有分區信息,此處輸入 “p” 命令如下
命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:42.9 GB, 42949672960 字節,83886080 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x12a28aec設備 Boot Start End Blocks Id System命令(輸入 m 獲取幫助):
5)此處并沒有看到/dev/sdb1、/dev/sdb2等內容,說明并不存在任何分區。 按【n】鍵創建一個分區,命令如下
命令(輸入 m 獲取幫助):n
Partition type:p primary (0 primary, 0 extended, 4 free)e extended
Select (default p):
????????直接在硬盤上劃分的分區有主分區(標記為p)和擴展分區(標記為e),邏輯分區(標記為 1)只能在擴展分區上創建,且擴展分區最多只能創建一個擴展分區。
????????所以,在硬盤中沒有擴展分區時,選擇分區類型時只能選擇p和e這兩種。如果已經存在了擴展分區,就不能再創建第二個擴展分區了,但可以在擴展分區上創建邏輯分區,所以可選擇的分區類型有p和e。
6)先創建主分區或擴展分區都可以,這里先創建主分區,輸入“p”,按【Enter】鍵。主分區加擴展分區最多只能創建出來4個,所以分配的編號只能是1~4,這里選擇默認的1,然后按【Enter】鍵。
命令(輸入 m 獲取幫助):n
Partition type:p primary (0 primary, 0 extended, 4 free)e extended
Select (default p): p
分區號 (1-4,默認 1):
7)硬盤總共有41943039個扇區,第一個分區從哪個扇區開始呢?默認為2048,直接按【Enter】鍵,我們就從2048扇區開始。
起始 扇區 (2048-83886079,默認為 2048):
將使用默認值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-83886079,默認為 83886079):
????????這里N的位置得寫一個結束點,假設要創建2G的分區,從2048扇區開始算,到哪個扇區結束能使得分區大小是2G呢?如圖所示。
8)現在計算一下:2G=2×1024M=2×1024× 1024K=2×1024×1024×2扇區(1扇區 =0.5K),所以一共需要2×1024×1024×2=4194304個扇區。從2048扇區開始算,最后一個 扇區應該落在2048+4194304-1=4196351的位置,這樣創建出來的分區就是2G,所以圖中琪與4196351。
起始 扇區 (2048-83886079,默認為 2048):
將使用默認值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-83886079,默認為 83886079):+2G
分區 1 已設置為 Linux 類型,大小設為 2 GiB命令(輸入 m 獲取幫助):
9)創建2G分區后,輸入 “p” 查看分區信息,命令如下。
命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:42.9 GB, 42949672960 字節,83886080 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x12a28aec設備 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux命令(輸入 m 獲取幫助):
10)可以看出,從2048開始,共4194304個扇區,在4196351這個位置結束,大小為2G。但是這種創建分區的方法比較麻煩,可以先輸人“d”,按【Fnter】鍵,刪除此分區,命令如下。
命令(輸入 m 獲取幫助):d //此處輸入d表示刪除分區
已選擇分區 1
分區 1 已刪除命令(輸入 m 獲取幫助):
11)因為sdb1是唯一的分區,所以刪除的就是sdb1,然后重復上面的方法重新創建分區,命令如下。
命令(輸入 m 獲取幫助):n
Partition type: //分區類型p primary (0 primary, 0 extended, 4 free) //主分區e extended //擴展分區
Select (default p): p //默認選擇p
分區號 (1-4,默認 1):
12)因為并不需要關心分區到哪個扇區結束,只關心分區大小,所以這里可以寫+2G,意思是從2048扇區開始劃分一個2G大小的分區,命令如下。
起始 扇區 (2048-83886079,默認為 2048):
將使用默認值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-83886079,默認為 83886079):+2G
分區 1 已設置為 Linux 類型,大小設為 2 GiB命令(輸入 m 獲取幫助):
13)然后輸人“p”查看分區信息、命令如下。
命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:42.9 GB, 42949672960 字節,83886080 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x12a28aec設備 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux命令(輸入 m 獲取幫助):
可以看到,手動計算出來的一樣,通過這種方式劃分分區就容易多了。
14)再創建一個主分區/dev/sda2,大小為4G,命令如下。
命令(輸入 m 獲取幫助):n
Partition type:p primary (1 primary, 0 extended, 3 free)e extended
Select (default p): p
分區號 (2-4,默認 2):
起始 扇區 (4196352-83886079,默認為 4196352):
將使用默認值 4196352
Last 扇區, +扇區 or +size{K,M,G} (4196352-83886079,默認為 83886079):+4G
分區 2 已設置為 Linux 類型,大小設為 4 GiB命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:42.9 GB, 42949672960 字節,83886080 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x12a28aec設備 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 12584959 4194304 83 Linux命令(輸入 m 獲取幫助):
15)創建一個擴展分區/dev/sda4,把剩余所有空間全部給它(這里故意沒有創建/dev/sda3),命令如下。
命令(輸入 m 獲取幫助):n
Partition type:p primary (2 primary, 0 extended, 2 free)e extended
Select (default p): e
分區號 (3,4,默認 3):4
起始 扇區 (12584960-83886079,默認為 12584960):
將使用默認值 12584960
Last 扇區, +扇區 or +size{K,M,G} (12584960-83886079,默認為 83886079):
將使用默認值 83886079
分區 4 已設置為 Extended 類型,大小設為 34 GiB命令(輸入 m 獲取幫助)
16)輸入 “p” 查看分區信息,命令如下。
命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:42.9 GB, 42949672960 字節,83886080 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x12a28aec設備 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 12584959 4194304 83 Linux
/dev/sdb4 12584960 83886079 35650560 5 Extended命令(輸入 m 獲取幫助):
17)創建擴展分區后,就可以創建邏輯分區了,我們看到了編號3并未使用,所以現在還可以 創建一個主分區,但是硬盤已經沒有多余的空間,所以不能再創建主分區只能創建邏輯分區, 邏輯分區的編號是從5開始,命令如下。
命令(輸入 m 獲取幫助):n
Partition type:p primary (2 primary, 1 extended, 1 free)l logical (numbered from 5)
Select (default p): l
添加邏輯分區 5
起始 扇區 (12587008-83886079,默認為 12587008):
將使用默認值 12587008
Last 扇區, +扇區 or +size{K,M,G} (12587008-83886079,默認為 83886079):+4G
分區 5 已設置為 Linux 類型,大小設為 4 GiB命令(輸入 m 獲取幫助):
18)按照此方法再創建幾個分區
設備 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 12584959 4194304 83 Linux
/dev/sdb4 12584960 83886079 35650560 5 Extended
/dev/sdb5 12587008 20975615 4194304 83 Linux
/dev/sdb6 20977664 29366271 4194304 83 Linux
/dev/sdb7 29368320 37756927 4194304 83 Linux
19)看上面最右側的兩列:Id和類型,這兩列是對應的。因為分區的作用不一樣,所以有的可以直 接格式化使用,有的用于創建swap,有的用于創建邏輯卷等。這些類型是可以轉換的,輸 入字母l可以看到所有類型,如圖所示。
3.常見的分區
1)常見分區類型如下。
- Linux:對應的id為83,直接格式化使用的分區。
- Linux swap:對應的id為82,用于創建swap。
- Linux LVM:對應的id為8e,用于創建LV
- Linux raid:對應的id為fd,用于創建fd
2)使用相同的方法,把/dev/sdb6、/dev/sdb7的分區類型也轉變為Linux LVM. 為13.2節做準備,把/dev/sdb2的分區類型改為 Linux swap,輸入“t”,命令如下。
命令(輸入 m 獲取幫助):t
分區號 (1,2,4-7,默認 7):2
Hex 代碼(輸入 L 列出所有代碼):82
已將分區“Linux”的類型更改為“Linux swap / Solaris”命令(輸入 m 獲取幫助):
3)然后輸入 “p” 查看分區信息。
命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:42.9 GB, 42949672960 字節,83886080 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x12a28aec設備 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 12584959 4194304 82 Linux swap / Solaris
/dev/sdb4 12584960 83886079 35650560 5 Extended
/dev/sdb5 12587008 20975615 4194304 83 Linux
/dev/sdb6 20977664 29366271 4194304 83 Linux
/dev/sdb7 29368320 37756927 4194304 83 Linux命令(輸入 m 獲取幫助):
4)現在所做的一切并沒有真的保存,如果不想保存直接退出,可以輸人“q”并按【Enter】鍵;如果想保存并退出,可以輸入“w”并按【Enter】鍵,命令如下。
命令(輸入 m 獲取幫助):w
The partition table has been altered!Calling ioctl() to re-read partition table.
正在同步磁盤。
[root@aaa ~]#
5)有時需要執行partprobe /dev/sdb命令來刷新一下分區表,然后使用fdisk命令進行查看,命令如下
4.交換分區
????????在物理內存不夠用的情況下,系統會把物理內存中那些長時間沒有操作的數據釋放出來, 保存在交換分區(swap)中,這樣物理內存中就有多余的空間,用于存放新的數據。
????????如果物理內存不夠了可以使用swap分區,那么如果swap分區也不夠了呢?我們就可以添加swap分區。下面就來講講如何管理swap分區。
1.查看當前系統中所有的swap分區,命令如下。
[root@aaa ~]# swapon -s
文件名 類型 大小 已用 權限
/dev/dm-1 partition 2097148 0 -2
[root@aaa ~]#
????????可以看到,當前/dev/sda2是交換分區,大小是4G。這里的權限是,如果有多個swap分區,優先使用哪個,數值越大越優先。查看swap分區也可以使用cat /proc/swaps命令。下面開始創建swap分區,步驟如下。
1)把/dev/sdb2創建為swap分區,命令如下。
[root@aaa ~]# mkswap /dev/sdb2
正在設置交換空間版本 1,大小 = 4194300 KiB
無標簽,UUID=2b8f0521-b2d9-4fda-9161-8718138ab8af
[root@aaa ~]#
2)激活新創建的swap 分區,命令如下。
[root@aaa ~]# swapon /dev/sdb2
[root@aaa ~]# swapon -s
文件名 類型 大小 已用 權限
/dev/dm-1 partition 2097148 0 -2
/dev/sdb2 partition 4194300 0 -3
[root@aaa ~]#
????????可以看到,此時已經有兩個交換分區了。其中/dev/sdb2的權限為-3,說明/devIsda2優先使用。如果想設置讓/dev/sdb2優先使用,可以調整/dev/sdb2的優先級。
3)關閉新創建的swap分區,命令如下。
[root@aaa ~]# swapoff /dev/sdb2
4)激活swap分區,并指定優先級,命令如下。
[root@aaa ~]# swapon -p 2 /dev/sdb2
[root@aaa ~]# swapon -s
文件名 類型 大小 已用 權限
/dev/dm-1 partition 2097148 0 -2
/dev/sdb2 partition 4194300 0 2
[root@aaa ~]#
????????可以看到,/dev/sdb2的權限是2,所以這個交換分區會優先使用
????????上面設置的這個交換分區也只是臨時生效,如果要讓其重啟系統之后仍然生效,就需要寫
入/etc/fstab中。
5)編輯/etc/fstab,在最后一行添加,命令如下。
[root@aaa ~]# tail -1 /etc/fstab
/dev/sdb1 none swap defaults,pri=2 0 0
????????上面每個字段用空格或【Tab】鍵隔開均可,第四列defaults后面的逗號兩邊沒有空格。如果不需要指定優先級,第四列直接寫 defaults 即可。
????????如果/dev/sdb2當前沒有激活,則在寫入/etc/fstab之后,執行swapon -a命令即可。