磁盘管理是Ubuntu系统运维中最基础也最容易出问题的环节之一。无论是给服务器新增一块硬盘,还是根分区空间告急需要扩容,都绕不开分区、格式化、挂载这一整套操作。这篇文章把Ubuntu下磁盘管理的常用方法完整梳理一遍,包括工具怎么选、具体命令怎么做,以及实操中容易踩到的坑,建议收藏后对照练习。

一、磁盘管理前必看:先搞清楚磁盘现状
在动手之前,第一件事永远是看清当前系统的磁盘情况。很多事故都源于还没确认盘符就直接操作,结果把系统盘分区删了。Ubuntu下常用的查看命令有三个,各有分工。
lsblk以树状结构列出所有块设备,能直观看到磁盘和分区的层级关系,比如sda下面挂着sda1、sda2,同时显示挂载点,这是确认新硬盘盘符最可靠的方式。df -hT则从文件系统角度出发,显示每个已挂载分区的总容量、已用空间和文件系统类型。sudo fdisk -l信息最全,包括扇区大小、分区表类型(GPT还是MBR)等细节。
# 查看块设备树状结构,确认新硬盘的盘符 lsblk # 查看已挂载分区的空间使用情况 df -hT # 查看所有磁盘的详细分区信息 sudo fdisk -l # 确认新硬盘是否被系统识别(假设新盘为 /dev/sdb) sudo fdisk -l /dev/sdb
这三个命令都不会修改磁盘数据,可以放心执行。建议每次操作前都先用lsblk确认一遍目标盘符,尤其是云服务器上,系统盘一般是vda或者sda,数据盘才是vdb或sdb,搞混了后果很严重。
二、分区怎么做:fdisk与parted的选择与实操
1. fdisk:小容量磁盘的传统选择
fdisk是老牌分区工具,交互式操作,只支持MBR分区表,最大支持2TB磁盘。如果你的磁盘不超过2TB,且不需要太多分区(MBR最多4个主分区),用fdisk完全够用,操作也简单。
sudo fdisk /dev/sdb # 进入交互界面后: # n 新建分区 # p 选择主分区 # 回车使用默认起始扇区 # 回车使用全部空间(或指定大小如 +50G) # w 写入分区表并退出 # 分区完成后刷新内核分区表 sudo partprobe /dev/sdb
2. parted:大磁盘和GPT的标准方案
超过2TB的磁盘必须用GPT分区表,这时就要用parted或者gdisk。parted支持非交互模式,一条命令就能完成分区,特别适合写脚本自动化。
# 将磁盘初始化为GPT分区表(注意:会清除原有分区信息!) sudo parted /dev/sdb mklabel gpt # 创建一个占用全部空间的分区 sudo parted /dev/sdb mkpart primary ext4 0% 100% # 只用前100G空间的话 sudo parted /dev/sdb mkpart primary ext4 0% 100GB # 查看分区结果 sudo parted /dev/sdb print
关于MBR和GPT怎么选:现在的Ubuntu系统基本都是UEFI启动加GPT分区表,新磁盘一律建议GPT,没有2TB限制,分区数量也多,向下兼容性完全不用担心。只有需要在非常老旧的设备上启动时才考虑MBR。
三、格式化与挂载:让分区真正可用
分好区之后,接下来是格式化文件系统并挂载到目录树上。Ubuntu默认推荐ext4,稳定性和恢复能力都不错;如果是大文件频繁读写的场景,比如数据库、视频存储,可以考虑xfs;需要和Windows交换数据则用ntfs或者exfat。
# 将新分区格式化为ext4 sudo mkfs.ext4 /dev/sdb1 # 或者格式化为xfs sudo mkfs.xfs /dev/sdb1 # 创建挂载点并手动挂载 sudo mkdir -p /data sudo mount /dev/sdb1 /data # 验证挂载结果 df -h /data
手动mount在重启后会失效,要实现开机自动挂载,需要把分区写进/etc/fstab文件。强烈建议用分区的UUID而不是设备名,因为设备名在插拔硬盘后可能变化,UUID则是固定不变的。
# 查看分区UUID sudo blkid /dev/sdb1 # 编辑fstab,追加一行 sudo nano /etc/fstab # 内容格式如下: # UUID=xxxx-xxxx-xxxx /data ext4 defaults 0 2 # 写入后先验证语法,这一步非常重要 sudo mount -a
mount -a这条验证命令是救命稻草:如果fstab写错而没有提前验证,重启后系统可能直接进入紧急模式,连命令行都登不进去。养成写完必验证的习惯,能避免大量麻烦。
四、进阶方案:用LVM实现动态扩容
传统分区最大的痛点是容量定死了,后续不够用很难调整。LVM(逻辑卷管理)把物理磁盘抽象成可灵活分配的卷组,空间不够时在线扩容即可,生产环境强烈推荐。
# 安装lvm2(Ubuntu Server一般自带) sudo apt install lvm2 # 1. 把整块盘或分区做成物理卷 sudo pvcreate /dev/sdb1 # 2. 创建卷组 sudo vgcreate vg_data /dev/sdb1 # 3. 从卷组划分逻辑卷,分配100G sudo lvcreate -L 100G -n lv_data vg_data # 4. 格式化并挂载 sudo mkfs.ext4 /dev/vg_data/lv_data sudo mkdir -p /data sudo mount /dev/vg_data/lv_data /data
LVM的扩容能力才是它的核心价值。比如逻辑卷快满了,往卷组里再加一块新盘,然后在线扩展逻辑卷和文件系统,全程不需要卸载、不需要停业务:
# 新硬盘加入卷组 sudo pvcreate /dev/sdc sudo vgextend vg_data /dev/sdc # 把卷组所有剩余空间分给逻辑卷 sudo lvextend -l +100%FREE /dev/vg_data/lv_data # 在线扩展ext4文件系统 sudo resize2fs /dev/vg_data/lv_data # 如果是xfs文件系统则用 sudo xfs_growfs /data
要注意ext4可以缩容但xfs不能,选文件系统时如果预见到未来可能需要缩减空间,就别用xfs。另外LVM还支持快照功能,做升级或批量修改前给逻辑卷打个快照,出问题可以回滚,这在生产环境非常实用。
五、注意事项与避坑建议
- 操作前先备份数据。分区和格式化都是破坏性操作,没有任何撤销机会。云服务器可以先打磁盘快照,物理机至少把重要数据拷走。
- 反复确认盘符再动手。删分区前用
lsblk核对至少两遍,确认目标不是系统盘。云平台上误删系统盘分区导致的救援模式排查起来非常折腾。 - fstab写错导致无法开机。这是新手最常见的事故。除了写完执行
sudo mount -a验证外,还可以在挂载选项里加nofail,这样即使该磁盘暂时不可用,系统也能正常启动。 - 挂载点权限问题。挂载后目录属主是root,普通用户写入会报权限错误,用
sudo chown -R user:user /data调整属主即可。 - 不要直接挂载到非空目录。挂载会覆盖原目录内容,原有文件并没有丢,只是被遮住了,卸载后又会显现,但排查时容易造成困扰。
- 4K对齐问题。用parted按百分比指定起始位置天然对齐,用fdisk默认值也没问题,唯独手工指定扇区数字时要留意,未对齐会影响性能。
- 缩容操作风险高于扩容。ext4缩容必须先卸载文件系统并执行fsck检查,步骤繁琐且容易出错,能靠LVM扩容解决的尽量别缩。
总结一下方案选择:临时测试盘用fdisk加ext4直接挂载最省事;数据盘和有扩容需求的场景上LVM,后期运维会轻松很多;2TB以上磁盘必须GPT分区表。磁盘管理命令本身不难,难的是养成谨慎的操作习惯,每次执行前多花十秒确认目标,就能避开绝大多数事故。
Ubuntu磁盘管理LVM分区管理fdisk命令修改时间:2026-09-10 16:06:47