Linux : 磁盤管理
一、磁盤設備命名規則
磁盤類型 | 設備命名模式 | 示例 | 特點 |
---|---|---|---|
SATA/SCSI/SAS | /dev/sdX | sda(第一塊硬盤) sda1(第一塊硬盤第一分區) | 機械硬盤/通用接口 |
NVMe | /dev/nvmeXnYpZ | nvme0n1(第一通道第一塊盤) nvme0n1p1(第一通道第一塊盤第一分區) | SSD高性能接口 |
Virtio-block | /dev/vdX | vda(第一塊虛擬盤) | 虛擬化環境專用 |
查看磁盤信息:
fdisk -l # 查看分區詳情
lsblk # 樹形顯示塊設備
parted -l # 查看分區表詳情
二、分區方案對比:MBR vs GPT
特性 | MBR (msdos) | GPT (gpt) |
---|---|---|
最大磁盤容量 | 2TB | 8ZB(理論極限) |
分區數量 | 4個主分區(或3主+1擴展+多個邏輯) | 128個主分區 |
引導記錄 | 單份(位于磁盤開頭,易損壞) | 雙份(首尾備份,更安全) |
分區表大小 | 64字節(固定) | 16,384字節(更靈活) |
適用系統 | 舊版BIOS | UEFI固件 |
關鍵區別:
- MBR磁盤標簽:
msdos
- GPT磁盤標簽:
gpt
- 轉換分區表會清除所有數據
fdisk與parted對比
在Linux系統中,fdisk
和parted
都是常用的磁盤分區工具,但它們在功能和使用場景上有顯著區別:
特性 | fdisk | parted |
---|---|---|
分區表支持 | 僅支持MBR(msdos)分區表 | 支持MBR和GPT分區表 |
磁盤容量限制 | 最大2TB磁盤 | 支持>2TB的大容量磁盤(理論8ZB) |
交互模式 | 命令行交互界面(類似vi) | 支持交互模式和單行命令模式 |
分區數量 | 最多4個主分區(或3主+1擴展+邏輯分區) | GPT支持最多128個主分區 |
操作方式 | 操作后需執行w 命令才生效 | 命令實時生效(無撤銷功能) |
文件系統支持 | 只創建分區,需單獨格式化 | 可同時指定文件系統類型(僅標記) |
單位系統 | 默認柱面(cylinder) | 支持靈活單位(MB/GB/TB/%等) |
調整分區大小 | 不支持 | 支持resizepart 調整分區大小 |
主要發行版 | 所有Linux發行版預裝 | 大多數發行版預裝 |
典型應用場景 | 傳統MBR分區的小容量磁盤 | 大容量磁盤/GPT分區/UEFI系統 |
fdisk -l
輸出字段詳解
術語 | 含義 | 示例值 |
---|---|---|
Disk | 磁盤設備路徑 | /dev/sda |
GiB/bytes | 磁盤總容量(二進制GB/字節) | 20 GiB, 21474836480 bytes |
sectors | 總扇區數量 | 41943040 |
Units | 扇區計算單位(1扇區=512字節) | sectors of 1 * 512 |
Sector size | 邏輯/物理扇區大小(高級格式磁盤可能不同) | 512B/512B |
Disklabel type | 分區表類型(dos=MBR, gpt=GPT) | dos |
Disk identifier | MBR磁盤隨機標識碼 | 0xac318c9a |
Device | 分區設備路徑 | /dev/sda1 |
Boot | 引導標志(* 表示可引導分區) | * |
Start/End | 分區起始/結束扇區號 | 2048, 2099199 |
Sectors | 分區占用的扇區總數 | 2097152 |
Size | 分區容量(自動換算) | 1G |
Id | 分區類型十六進制代碼 | 83 |
Type | 分區類型描述(基于Id) | Linux |
常見分區類型ID:
-
82
: Linux swap -
83
: Linux filesystem -
8e
: Linux LVM -
ef
: EFI系統分區 -
基礎語法
fdisk [選項] <磁盤設備>
選項 說明 -l
列出分區表(不進入交互模式) -s <分區>
顯示分區大小(塊數) -u
顯示扇區數而非柱面數 -b <大小>
指定扇區大小(512/1024/2048/4096) -c
關閉 DOS 兼容模式 -C <柱面>
指定柱面數(舊磁盤兼容)
交互模式核心命令
進入交互模式:
sudo fdisk /dev/sdb
命令 功能 使用示例 p 打印分區表 p
n 創建新分區 n → p → 1 → [起始] → +10G
d 刪除分區 d → 2
(刪除分區2)t 更改分區類型 t → 3 → 82
(設為swap)a 切換引導標志 a → 1
(設sdb1為可引導)m 顯示幫助菜單 m
w 保存并退出 w
(立即生效)q 不保存退出 q
v 驗證分區表 v
L 列出所有分區類型 L
(查看ID代碼)
Parted 命令全面詳解
基礎語法
parted [選項] [設備] [命令 [參數]]
選項 | 說明 |
---|---|
-l | 列出所有磁盤分區表 |
-s | 腳本模式(無交互) |
-a | 對齊類型(min/opt,用于SSD優化) |
-f | 強制執行(跳過警告) |
常用操作命令
命令 | 語法 | 功能 | 示例 |
---|---|---|---|
mklabel | mklabel 標簽類型 | 創建分區表 | mklabel gpt |
mkpart | mkpart [類型] [文件系統] 起點 終點 | 創建分區 | mkpart primary ext4 1MiB 10GiB |
rm | rm 分區號 | 刪除分區 | rm 2 |
resizepart | resizepart 分區號 新終點 | 調整分區大小 | resizepart 3 50GiB |
print [free/all] | 顯示分區信息 | print free | |
set | set 分區號 標志 狀態 | 設置分區標志 | set 1 esp on |
unit | unit 單位 | 設置顯示單位 | unit GB |
select | select 設備 | 切換磁盤 | select /dev/sdb |
關鍵功能詳解
1. 創建分區表
# 創建GPT分區表
parted /dev/sdb mklabel gpt# 創建MBR分區表(傳統BIOS)
parted /dev/sdc mklabel msdos
2. 創建分區
# 創建主分區(文件系統僅作標記,需單獨格式化)
parted /dev/sdb mkpart primary xfs 1MiB# 創建邏輯分區(需先建擴展分區)
parted /dev/sdc mkpart extended 1024MiB
parted /dev/sdc mkpart logical ext4 1025MiB 2048MiB
3. 設置分區標志
# 設置啟動標志(MBR)
parted /dev/sdb set 1 boot on
4. 調整分區大小
# 先卸載分區
umount /dev/sdb1# 調整分區終點(需文件系統支持)
parted /dev/sdb resizepart 1 30GiB# 調整文件系統(XFS示例)
xfs_growfs /mount/point
5. 查看分區信息
parted /dev/sda print
# 輸出示例:
Model: ATA ST2000DM008-2FR1 (scsi)
Disk /dev/sda: 2000GB
Partition Table: gpt
Disk Flags: Number Start End Size File system Name Flags1 1049kB 538MB 537MB fat32 EFI boot, esp2 538MB 50.0GB 49.5GB xfs root3 50.0GB 2000GB 1950GB data lvm
單位系統說明
parted 支持智能單位換算:
unit GB # 以GB為單位(1GB=1000^3字節)
unit MiB # 以MiB為單位(1MiB=1024^2字節)
unit % # 按百分比分配空間
unit s # 扇區模式(默認512字節/扇區)# 示例:使用百分比創建分區
parted /dev/sdb mkpart primary 0% 50%
交互模式 與 非交互模式
1. 交互模式(推薦初學者)
parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary 1MiB 10GiB
(parted) set 1 esp on
(parted) print
(parted) quit
2. 非交互模式(適合腳本)
# 單行命令完成分區
parted -s /dev/nvme0n1 mklabel gpt \mkpart "EFI" fat32 1MiB 512MiB \set 1 esp on \mkpart "root" xfs 513MiB 100%
注意事項與故障處理
-
數據安全警告:
- parted 操作實時生效,無撤銷功能
- 操作前務必備份:
dd if=/dev/sda of=sda_backup.img bs=1M
-
常見錯誤處理:
# 錯誤: 分區未刷新 Error: Partition(s) on /dev/sdb are being used. # 解決: 卸載分區或重啟系統# 錯誤: 無效起點 Error: The location 0MiB is outside the device # 解決: 使用1MiB代替0MiB(保留引導間隙)
-
分區后必要操作:
# 刷新內核分區表 partprobe /dev/sdb# 等待設備文件生成 udevadm settle# 格式化新分區 mkfs.xfs /dev/sdb1
-
與文件系統的關系:
- parted 只管理分區邊界
- 格式化必須單獨進行:
mkfs
,mkswap
- 調整分區大小后需調整文件系統
普通分區掛載流程
# 1. 等待設備初始化完成
udevadm settle# 2. 格式化分區為XFS文件系統
mkfs.xfs /dev/sdc1# 3. 查詢分區UUID
blkid /dev/sdc1# 4. 創建掛載點
mkdir /test# 5. 配置永久掛載(編輯fstab文件)
vim /etc/fstab
# 添加以下內容:
UUID=uuid /test xfs defaults 0 0# 6. 掛載所有fstab配置的分區
mount -a# 7. 驗證掛載
df -hT /test
二、交換分區配置流程
# 1. 創建交換分區(501MB)
統一單位unit MiB
(parted) mkpart
Partition name? []?
File system type? [ext2]?
Start? 10MiB
End? 510MiB
(parted) quit
udevadm settle
# 2. 格式化交換分區
mkswap /dev/sdb1
#Setting up swapspace version 1, size = 511996 KiB
#no label, UUID=ec6781fa-8dd3-4aa6-b6ad-8b52d5ea93bf
# 3. 查詢交換分區UUID
blkid /dev/sdc1# 4. 配置永久交換(編輯fstab文件)
vim /etc/fstab
# 添加以下內容:
UUID=uuid swap swap defaults 0 0# 5. 刷新交換空間配置
swapoff -a # 關閉所有交換分區
swapon -a # 按fstab啟用交換分區# 6. 驗證交換空間
free -m
swapon --show
命令 | 作用 | 注意事項 |
---|---|---|
udevadm settle | 等待系統創建設備文件 | 必須執行,否則可能找不到設備 |
mkfs.xfs | 創建XFS文件系統 | 替代方案:mkfs.ext4 |
blkid | 查看設備UUID | 推薦使用UUID 避免設備名變化 |
mount -a | 掛載/etc/fstab所有配置 | 測試配置是否正確 |
parted mkpart | 創建分區 | linux-swap 指定為交換分區 |
mkswap | 初始化交換空間 | 必須步驟,否則無法使用 |
swapoff -a | 停用所有交換分區 | 刷新前必要操作 |
swapon -a | 啟用/etc/fstab中的交換分區 | 使新配置生效 |