【Linux】fdisk实战:从零开始规划与创建主分区、扩展分区及逻辑分区
1. 认识fdisk:你的Linux磁盘分区瑞士军刀
刚接触Linux系统管理时,我第一次给服务器添加新硬盘就遇到了分区难题。当时前辈只说了一句"用fdisk就行",留下我在命令行前手足无措。现在回想起来,fdisk确实是每个Linux管理员必须掌握的利器,就像瑞士军刀一样能解决各种磁盘分区问题。
fdisk是Linux系统自带的经典分区工具,从早期的Unix系统延续至今。它采用命令行交互方式,支持MBR(主引导记录)分区方案,能创建主分区、扩展分区和逻辑分区。与图形化工具相比,fdisk的优势在于:
- 无需图形界面,通过SSH就能远程操作服务器磁盘
- 支持脚本化操作,适合批量部署环境
- 功能全面且稳定,历经数十年考验
实际工作中,这些场景特别适合使用fdisk:
- 为新硬盘创建分区表
- 调整现有分区大小(需先删除后重建)
- 转换分区类型(如将普通分区改为交换分区)
- 修复损坏的分区表
提示:操作分区前务必确认目标磁盘,误操作可能导致数据丢失。建议先执行
lsblk命令确认磁盘标识符。
2. 实战前的准备工作
上周给公司NAS扩容时,我特意记录下了完整的操作流程。首先需要确认几个关键信息:
查看磁盘列表 :
sudo fdisk -l
这个命令会列出所有磁盘及其分区信息。比如我们新加的2TB硬盘可能显示为 /dev/sdb ,而原有系统盘是 /dev/sda 。输出示例:
Disk /dev/sdb: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x00000000
重点关注:
- 磁盘容量(确保是我们操作的设备)
- 分区表类型(dos表示MBR,gpt表示GPT)
- 现有分区情况(避免误操作已有分区)
理解MBR分区限制 : MBR方案中,一个磁盘最多只能有:
- 4个主分区,或
- 3个主分区 + 1个扩展分区(扩展分区内可建多个逻辑分区)
这是我曾经踩过的坑:给系统盘分区时,已经创建了3个主分区(boot、root、swap),想再建一个数据分区时才发现这个限制,最后不得不重建分区表。
3. 主分区创建实战:系统盘的黄金分割
以常见的500GB系统盘分区为例,我通常这样规划:
/boot分区:1GB(存放内核)swap分区:内存的1.5倍(16GB内存配24GB swap)/分区:100GB(系统文件)/home分区:剩余空间(用户数据)
具体操作步骤 :
sudo fdisk /dev/sdb
进入交互界面后:
- 输入
n创建新分区 - 选择
p创建主分区 - 分区号按顺序输入1-4
- 起始扇区直接回车用默认值
- 设置分区大小:
+1G表示1GB+24G表示24GB- 不指定大小则用完剩余空间
完整操作记录:
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-976773167, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-976773167, default 976773167): +1G
Created a new partition 1 of type 'Linux' and of size 1 GiB.
创建swap分区时需要额外步骤:
- 先用上述方法创建分区
- 输入
t修改分区类型 - 输入
82设置为Linux swap类型
注意:修改分区类型不会影响已有数据,但修改后需要执行
mkswap命令初始化swap分区。
4. 扩展分区与逻辑分区的艺术
当需要超过4个分区时,就必须使用扩展分区。去年我们部署MySQL服务器时,就遇到了这个典型场景:需要为不同数据库创建独立分区。
创建扩展分区 :
- 前三个分区按常规主分区创建
- 第四个分区选择
e创建扩展分区 - 扩展分区会占用所有剩余空间
在扩展分区内创建逻辑分区 :
Command (m for help): n
All primary partitions are in use.
Adding logical partition 5
First sector (205826048-976773167, default 205826048):
Last sector, +sectors or +size{K,M,G,T,P} (205826048-976773167, default 976773167): +100G
逻辑分区会从5开始编号(sdb5、sdb6等),这是MBR分区的特性。
实际案例 : 为数据库服务器规划分区:
- sdb1:系统分区(主分区)
- sdb2:日志分区(主分区)
- sdb3:备份分区(主分区)
- sdb4:扩展分区
- sdb5:用户数据库(逻辑分区)
- sdb6:订单数据库(逻辑分区)
- sdb7:日志数据库(逻辑分区)
5. 分区方案设计与优化技巧
经过多次实战,我总结出这些分区原则:
分区策略 :
- 系统盘:单独分区存放/boot、/、/var、/home
- 数据盘:按业务功能划分(如数据库、日志、备份)
- 临时盘:整个作为单个分区
性能优化 :
- 将频繁读写的分区(如数据库)放在磁盘外圈(分区时先创建)
- SSD不需要考虑此问题
- 使用
cfdisk可以直观查看分区物理位置
容量规划经验 :
- /boot:1GB足够
- swap:物理内存<8GB时设为2倍,>8GB时与内存相同
- /:50-100GB
- /var:日志服务需要20GB+
- /home:根据用户数量决定
一个生产环境案例 : 某Web服务器配置:
/dev/sda1 /boot 1GB
/dev/sda2 / 50GB
/dev/sda3 /var 20GB
/dev/sda4 [扩展分区]
/dev/sda5 /home 100GB
/dev/sda6 /data 剩余空间
6. 保存与后续操作
完成分区后,需要执行 w 命令写入分区表。但此时系统可能还未识别新分区,可以通过这些方法解决:
刷新分区表 :
partprobe /dev/sdb
或重启系统
格式化新分区 :
mkfs.ext4 /dev/sdb1 # 创建ext4文件系统
mkfs.xfs /dev/sdb5 # 创建xfs文件系统
mkswap /dev/sdb2 # 初始化swap分区
挂载使用 :
mkdir /data
mount /dev/sdb5 /data
要永久挂载需要编辑 /etc/fstab 文件,添加类似配置:
/dev/sdb5 /data ext4 defaults 0 2
记得第一次操作时,我创建完分区就直接尝试挂载,结果报错"找不到文件系统",后来才明白需要先格式化。这种细节在实际操作中很容易被忽略。
7. 常见问题排查
分区未生效 :
- 确认执行了
w命令保存 - 检查
dmesg | grep sdb看内核是否识别到新分区 - 尝试重新插拔磁盘(USB设备常见)
空间不足 :
- 使用
df -h查看各分区使用情况 - 用
du -sh *定位大文件目录 - 逻辑分区不能超过扩展分区大小
误删分区 :
- 立即卸载该分区
- 使用
testdisk等工具尝试恢复 - 重要数据建议提前备份
有次我误删了包含数据库的分区,幸亏有定期备份,只损失了少量数据。这次教训让我养成了操作前备份分区表的习惯:
sfdisk -d /dev/sdb > sdb_backup.sfdisk
需要恢复时执行:
sfdisk /dev/sdb < sdb_backup.sfdisk
8. 进阶技巧与替代方案
非交互式分区 : 对于自动化部署,可以用管道传递命令:
echo -e "n\np\n1\n\n+20G\nw" | fdisk /dev/sdb
GPT分区 : 对于大于2TB的磁盘,需要使用 gdisk 或 parted 工具:
gdisk /dev/sdb
GPT分区没有4个主分区的限制,但引导可能需要UEFI支持。
parted命令 : 更适合脚本化操作,支持调整分区大小:
parted /dev/sdb resizepart 2 100%
记得初次接触这些工具时,我被各种分区方案搞得晕头转向。后来在虚拟机里反复练习,才逐渐掌握它们的区别和适用场景。建议新手也先在测试环境练习,毕竟分区操作直接影响数据安全。
更多推荐

所有评论(0)