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中的交换分区 | 使新配置生效 |