本章主要介紹Linux磁盤管理
- 了解分區的概念
- 對硬盤進行分區
- swap分區的管理
新的硬盤首先需要對其進行分區和格式化,下面來了解一下硬盤的結構,如圖
硬盤的磁盤上有一個個圈,每兩個圈組成一個磁道。從中間往外發射線,把每個磁道分成 一個個扇區,每個扇區的大小是512B。為了更好地理解,我們把所有磁盤拼接起來,如圖
假設磁盤有10000個扇區,第一個分區從2048到6000,第二個分區從6001到 8000,第 三個分區從8001到10000
每個扇區只能屬于一個分區,不能同時屬于多個分區
第一個扇區比較特殊,叫作 MBR(主引導記錄)
分區類型包括主分區、擴展分區和邏輯分區
(1)主分區:直接從硬盤上劃分,并可以直接格式化使用的分區
(2)擴展分區:直接從硬盤上劃分,但是不是直接使用的分區
(3)邏輯分區:在擴展分區上劃分的分區
分區表記錄主分區和擴展分區的信息
每記錄一個分區(主分區或擴展分區)要消耗16B,所以分區表最多只能記錄4個分區, 硬盤最多只能劃分出來4個分區,且最多只能有一個擴展分區
請關閉虛擬機server并自行為虛擬機添加一塊SCSI格式的硬盤,然后開機進入系統
1.1 對磁盤進行分區
使用fidisk -l命令查看所有分區的信息
[root@node1 ~]# fdisk -l磁盤 /dev/sda:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x000b8f49設備 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM磁盤 /dev/sdb:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節磁盤 /dev/mapper/centos-root:19.3 GB, 19323158528 字節,37740544 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節磁盤 /dev/mapper/centos-swap:1073 MB, 1073741824 字節,2097152 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節[root@node1 ~]#
此命令可以查看系統所有硬盤的信息,這里可以看到/dev/sda有兩個分區 /dev/sda1 和/dev/sda2,/dev/sdb沒有任何分區。如果想單獨查看某硬盤的分區信息,可以使 用“fdisk -l/dev/硬盤”命令。例如單獨查看/dev/sda的信息
[root@node1 ~]# fdisk -l /dev/sda磁盤 /dev/sda:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x000b8f49設備 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM
[root@node1 ~]#
這里可以獲取到很多信息,例如,整個sda有多少個扇區,每個分區從哪個扇區開始到個 扇區結束等
下面開始練習分區,自行添加一個類型為SCSI、大小為20G的分區
分區的語法為“fdisk /devl/硬盤”,這里是對硬盤進行分區,而不是對分區再進行分區
[root@node1 ~]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。Device does not contain a recognized partition table
使用磁盤標識符 0x01aa58a7 創建新的 DOS 磁盤標簽。命令(輸入 m 獲取幫助):
此處進入分區的界面,按提示輸入“m”可以獲取幫助,常見的命令如下:
(1)p:打印分區表
(2)n:添加一個分區
(3)d:刪除一個分區
(4)l:列出分區類型
(5)t:轉換分區類型
(6)q:不保存直接退出
(7)w:保存并退出
查看現有分區信息,此處輸入“p”
命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x01aa58a7設備 Boot Start End Blocks Id System命令(輸入 m 獲取幫助):
此處并沒有看到/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和1
先創建主分區或擴展分區都可以,這里先創建主分區,輸入“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): //初次直接用回車,使用默認的編號1
硬盤總共有41943039個扇區,第一個分區從哪個扇區開始呢?默認為2048,直接按 【Enter】鍵,我們就從2048扇區開始
起始 扇區 (2048-41943039,默認為 2048):
將使用默認值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-41943039,默認為 41943039):
這里N的位置得寫一個結束點,假設要創建2G的分區,從2048扇區開始算,到哪個扇區 結束能使得分區大小是2G呢
現在計算一下:2G=2×1024M=2×1024× 1024K=2×1024×1024×2扇區(1扇區 =0.5K),所以一共需要2×1024×1024×2=4194304個扇區。從2048扇區開始算,最后一個 扇區應該落在2048+4194304-1=4196351的位置,這樣創建出來的分區就是2G
Last 扇區, +扇區 or +size{K,M,G} (2048-41943039,默認為 41943039):+2G
分區 1 已設置為 Linux 類型,大小設為 2 GiB命令(輸入 m 獲取幫助):
創建2G分區后,輸入“p”查看分區信息
命令(輸入 m 獲取幫助):p 磁盤 /dev/sdb:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x01aa58a7設備 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux命令(輸入 m 獲取幫助)
再創建一個主分區/dev/sda2,大小為2G
命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x01aa58a7設備 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 8390655 2097152 83 Linux命令(輸入 m 獲取幫助):
創建一個擴展分區/dev/sda4,把剩余所有空間全部給它(這里故意沒有創 建/dev/sda3)
命令(輸入 m 獲取幫助):n
Partition type:p primary (2 primary, 0 extended, 2 free)e extended
Select (default p): e //這里輸入e表示創建擴展分區
分區號 (3,4,默認 3):4
起始 扇區 (8390656-41943039,默認為 8390656): //按回車鍵
將使用默認值 8390656
Last 扇區, +扇區 or +size{K,M,G} (8390656-41943039,默認為 41943039): //按回車鍵
將使用默認值 41943039
分區 4 已設置為 Extended 類型,大小設為 16 GiB命令(輸入 m 獲取幫助):
輸入“p”查看分區信息
命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x01aa58a7設備 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 8390655 2097152 83 Linux
/dev/sdb4 8390656 41943039 16776192 5 Extended命令(輸入 m 獲取幫助):
創建擴展分區后,就可以創建邏輯分區了,我們看到了編號3并未使用,所以現在還可以 創建一個主分區,但是硬盤已經沒有多余的空間,所以不能再創建主分區只能創建邏輯分區, 邏輯分區的編號是從5開始
命令(輸入 m 獲取幫助):n
Partition type:p primary (2 primary, 1 extended, 1 free)l logical (numbered from 5)
Select (default p): l //創建邏輯分區
添加邏輯分區 5
起始 扇區 (8392704-41943039,默認為 8392704): //按回車鍵
將使用默認值 8392704
Last 扇區, +扇區 or +size{K,M,G} (8392704-41943039,默認為 41943039):+2G
分區 5 已設置為 Linux 類型,大小設為 2 GiB命令(輸入 m 獲取幫助):
依照此方法再創建幾個分區
命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x01aa58a7設備 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 8390655 2097152 83 Linux
/dev/sdb4 8390656 41943039 16776192 5 Extended
/dev/sdb5 8392704 12587007 2097152 83 Linux
/dev/sdb6 12589056 16783359 2097152 83 Linux
/dev/sdb7 16785408 20979711 2097152 83 Linux命令(輸入 m 獲取幫助):
看上面最右側的兩列:Id和類型,這兩列是對應的。因為分區的作用不一樣,所以有的可以直接格式化使用,有的用于創建swap,有的用于創建邏輯卷等。這些類型是可以轉換的,輸入字母l可以看到所有類型,如圖
常見分區類型如下:
(1)Linux:對應id為83,直接格式化使用的分區
(2)Linux swap:對應的id為82,用于創建swap
(3)Linux LVM:對應id為8e,用于創建LV
(4)Linux raid:對應id為fd,用于創建fd
例如,準備把/devIlsdb5配置成邏輯卷,先把/dev/sdb5的分區類型改為Linux LVM,操作如下
先按【t】鍵開始進行轉換
命令(輸入 m 獲取幫助):t
分區號 (1,2,4-7,默認 7):
然后輸入要轉換的分區號,這里輸人“5”,按【Enter】鍵后輸人要轉換的分區Id(8e)
命令(輸入 m 獲取幫助):t
分區號 (1,2,4-7,默認 7):5
Hex 代碼(輸入 L 列出所有代碼):8e
已將分區“Linux”的類型更改為“Linux LVM”命令(輸入 m 獲取幫助):
輸入“p”查看信息
把/dev/sdb2的分區類型改為 Linux swap,輸入“t”
命令(輸入 m 獲取幫助):t
分區號 (1,2,4-7,默認 7):2
Hex 代碼(輸入 L 列出所有代碼):82
已將分區“Linux”的類型更改為“Linux swap / Solaris”命令(輸入 m 獲取幫助):
輸入“p”查看分區信息
命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x01aa58a7設備 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 8390655 2097152 82 Linux swap / Solaris
/dev/sdb4 8390656 41943039 16776192 5 Extended
/dev/sdb5 8392704 12587007 2097152 8e Linux LVM
/dev/sdb6 12589056 16783359 2097152 83 Linux
/dev/sdb7 16785408 20979711 2097152 83 Linux命令(輸入 m 獲取幫助):
現在所做的一切并沒有真的保存,如果不想保存直接退出,可以輸人“q”并按 【Enter】鍵;如果想保存并退出,可以輸入“w”并按【Enter】鍵
命令(輸入 m 獲取幫助):w
The partition table has been altered!Calling ioctl() to re-read partition table.
正在同步磁盤。
[root@node1 ~]#
有時需要執行partprobe /dev/sdb命令來刷新一下分區表,然后使用fdisk命令進行查看
[root@node1 ~]# fdisk -l /dev/sdb磁盤 /dev/sdb:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x01aa58a7設備 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 8390655 2097152 82 Linux swap / Solaris
/dev/sdb4 8390656 41943039 16776192 5 Extended
/dev/sdb5 8392704 12587007 2097152 8e Linux LVM
/dev/sdb6 12589056 16783359 2097152 83 Linux
/dev/sdb7 16785408 20979711 2097152 83 Linux
[root@node1 ~]#
1.2 交換分區
在物理內存不夠用的情況下,系統會把物理內存中那些長時間沒有操作的數據釋放出來, 保存在交換分區(swap)中,這樣物理內存中就有多余的空間,用于存放新的數據
如果物理內存不夠了可以使用swap分區,那么如果swap分區也不夠了呢?我們就可以添 加swap分區。下面就來講講如何管理swap分區
查看當前系統中所有的swap分區
[root@node1 ~]# swapon -s
文件名 類型 大小 已用 權限
/dev/dm-1 partition 1048572 0 -2
[root@node1 ~]#
可以看到,當前/dev/dm-1是交換分區,大小是1G。這里的權限是,如果有多個swap分 區,優先使用哪個,數值越大越優先。查看swap分區也可以使用cat /proc/swaps命令
下面開始創建swap分區
(1)把/dev/sdb2創建為swap分區
[root@node1 ~]# mkswap /dev/sdb2
正在設置交換空間版本 1,大小 = 2097148 KiB
無標簽,UUID=1d8bfb35-d673-4ea0-97d9-6612a2304f15
[root@node1 ~]#
(2)激活新創建的swap分區
[root@node1 ~]# swapon /dev/sdb2
[root@node1 ~]# swapon -s
文件名 類型 大小 已用 權限
/dev/dm-1 partition 1048572 0 -2
/dev/sdb2 partition 2097148 0 -3
[root@node1 ~]#
可以看到,此時已經有兩個交換分區了。其中/dev/sdb2的權限為-3,說明/dev/dm-l優 先使用。如果想設置讓/dev/sdb2優先使用,可以調整/dev/sdb2的優先級
(3)關閉新創建的swap分區
[root@node1 ~]# swapoff /dev/sdb2
[root@node1 ~]#
(4)激活swap分區,并指定優先級
[root@node1 ~]# swapon -p 2 /dev/sdb2
[root@node1 ~]# swapon -s
文件名 類型 大小 已用 權限
/dev/dm-1 partition 1048572 0 -2
/dev/sdb2 partition 2097148 0 2
[root@node1 ~]#
可以看到,/dev/sdb2的權限是2,所以這個交換分區會優先使用
上面設置的這個交換分區也只是臨時生效,如果要讓其重啟系統之后仍然生效,就需要寫 入/etc/fstab中
(5)編輯/etc/fstab,在最后一行添加
[root@node1 ~]# tail ‐1 /etc/fstab
/dev/sdb1 none swap defaults,pri=2 0 0
[root@node1 ~]#
上面每個字段用空格或【Tab】鍵隔開均可,第四列defaults后面的逗號兩邊沒有空格。 如果不需要指定優先級,第四列直接寫 defaults 即可
?如果/dev/sdb2當前沒有激活,則在寫入/etc/fstab之后,執行swapon -a命令即可