
服务器报警"磁盘空间不足"时,你需要的不是恐慌,是一套清晰的排查命令。
内存和磁盘是系统运行的基础资源。内存不足会导致系统变慢甚至 OOM(Out of Memory)杀死进程,磁盘满了则可能导致服务无法写入日志或数据丢失。
这一篇我们重点介绍内存查看、磁盘分区、挂载管理等核心操作,帮你建立资源管理的基本功。
一、内存查看
1.1 free:查看内存使用情况
free -h # 人类可读格式(最常用)free -m # 以 MB 为单位free -g # 以 GB 为单位(小内存时不够精确)free -h -s 5 # 每5秒刷新一次内存信息
输出示例(free -h):
total used free shared buff/cache availableMem: 7.8G 1.5G 3.4G 123M 2.9G 5.9GSwap: 2.0G 0B 2.0G
关键字段:
| |
|---|
total | |
used | |
free | |
buff/cache | |
available | 实际可用内存 |
Swap total/used/free | |
重要:判断内存是否紧张,应优先看 available 而非 free。Linux 会尽量利用空闲内存做缓存来提升性能,所以 free 较小是正常现象,只要 available 充足就没问题。
1.2 top:动态查看内存
top
在 top 界面中:
- • 进程列表中的
%MEM 列显示单个进程的内存占用率
使用建议:
1.3 内存不足的判断标准
如果 available 接近 0 且 Swap 使用量持续增长,建议排查内存占用高的进程或考虑扩容。
二、交换分区(Swap)管理
Swap 是将部分磁盘空间虚拟为内存使用的机制。速度比物理内存慢很多,但可以防止内存耗尽时系统崩溃。
2.1 查看当前 Swap
free -hswapon -s # 查看所有已启用 swap 分区
2.2 增加 Swap 分区(分区方式)
# 1. 查看当前 swapfree -mfdisk -l # 查看所有硬盘及分区情况# 2. 对新硬盘分区(以 /dev/sdd 为例) o fdisk /dev/sdd 然后输入m会获取帮助信息。 o 新建分区:输⼊n创建新分区,可选择主分区(p)或扩展分区(e)。 o 分区限制:主分区最多4个,若需更多分区需创建扩展分区并在其中建⽴逻辑分区。 o 分区⼤⼩:可指定起始扇区(默认2048)和结束扇区,或直接使⽤+50G格式指定⼤⼩。 o 保存与退出:w保存分区表,q不保存退出。 注意事项:操作前需确认硬盘⽆重要数据,错误操作会导致数据丢失。# 3. 格式化为 swapmkswap /dev/sdd1# 4. 启用swapon /dev/sdd1# 5. 验证free -m
2.3 增加 Swap(文件方式,无需新硬盘)
# 1. 创建 swap 文件(4M 块 × 10240 = 40GB)dd if=/dev/zero of=/swapfile bs=4M count=10240# 2. 设置权限(必须为 600)chmod 600 /swapfile# 3. 格式化为 swapmkswap /swapfile# 4. 启用swapon /swapfile# 5. 验证free -h
注意:文件方式创建的 Swap 在重启后失效,需写入 /etc/fstab 才能永久生效。
2.4 永久生效配置
在 /etc/fstab 中添加对应行:
# 分区方式/dev/sdd1 swap swap defaults 0 0# 文件方式/swapfile swap swap defaults 0 0
警告:/etc/fstab 配置错误可能导致系统无法启动!修改后务必验证,不确定时可先注释掉(行首加 #)。系统启动失败时可通过单用户模式(rd.break)修复。
三、磁盘分区查看
3.1 fdisk -l:查看磁盘及分区信息
fdisk -l
输出:
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectorsDisk model: VBOX HARDDISKUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: gptDisk identifier: 6847B210-2ED8-48BE-94B6-777BD025C183Device Start End Sectors Size Type/dev/sda1 2048 4095 2048 1M BIOS boot/dev/sda2 4096 2101247 2097152 1G Linux filesystem/dev/sda3 2101248 41943006 39841759 19G Linux LVM
设备命名规则:
- •
/dev/sdX:SCSI/SATA 磁盘(sda 第一块,sdb 第二块) - • 分区编号从 1 开始:
sda1 表示第一块磁盘的第一个分区
系统限制:单个磁盘最多 15 个分区(16 开始表示下一块磁盘)。
第一段:磁盘整体信息
这部分描述的是磁盘本身的硬件和逻辑属性。
| 字段 | 值示例 | 含义 |
|---|
| Disk | /dev/sda: 20 GiB | 设备路径和总容量。/dev/sda 是第一块SCSI/SATA硬盘,容量为20 GiB。 |
| Units | 512 bytes | 扇区大小默认512字节(传统磁盘最⼩操作单元),分区大小按扇区计算(End-Start)×512字节,固态硬盘仍沿用该计量方式。 |
| Disk model | VBOX HARDDISK | 硬盘的硬件型号。在虚拟机中常显示为虚拟磁盘型号。 |
| Sector size | 512 bytes / 512 bytes | 逻辑扇区/物理扇区大小。现代硬盘多为4096字节物理扇区,这里显示逻辑与物理一致。 |
| I/O size | 512 bytes / 512 bytes | 系统I/O操作的最小/最优单位,通常是扇区大小的整数倍。 |
| Disklabel type | gpt | 分区表类型。有两个值:gpt(新标准,支持大于2TB硬盘)或 dos(传统MBR分区表)。 |
| Disk identifier | 一段UUID | 磁盘的唯一标识符(GUID),用于系统识别和管理磁盘。 |
小提示:如果看到 Disklabel type: dos,说明是传统的MBR分区表,最多只能有4个主分区。
第二段:分区列表头部
这是每个分区信息的列标题,含义如下:
| 列名 | 含义 |
|---|
| Device | 分区设备文件路径,如 /dev/sda1 表示第一块硬盘的第一个分区。 |
| Start | 该分区的起始扇区号。 |
| End | 该分区的结束扇区号。 |
| Sectors | 该分区包含的扇区总数(End - Start + 1)。 |
| Size | 分区的容量大小(根据Sectors和扇区大小计算)。 |
| Type | 分区类型标识(如Linux filesystem、Linux LVM、EFI System等,带Boot表示系统启动分区)。 |
第三段:具体分区解读
以输出中的三行为例:
/dev/sda1 2048 4095 2048 1M BIOS boot/dev/sda2 4096 2101247 2097152 1G Linux filesystem/dev/sda3 2101248 41943006 39841759 19G Linux LVM
/dev/sda1 — BIOS启动分区
- • Start:
2048→ 对齐到1MiB边界(现代磁盘的标准起始位置) - • Sectors:
2048个扇区 × 512字节 =1MiB - • Type:
BIOS boot→ 用于GRUB引导程序,在GPT分区表上Legacy模式启动时必需
/dev/sda2 — 系统/boot分区
- • Sectors:
2097152个扇区 = 1GiB(2097152 × 512 = 1,073,741,824字节) - • Type:
Linux filesystem→ 通常挂载到/boot,存放内核和initramfs
/dev/sda3 — 数据/LVM分区
- • Sectors:
39841759个扇区 ≈ 19GiB - • Type:
Linux LVM → 这个分区是一个物理卷(PV),供LVM管理
3.2 parted -l:2TB 以上大硬盘分区
对于大于 2TB 的硬盘,需使用 parted 替代 fdisk:
parted -l

parted 支持 GPT 分区表,突破了 MBR 的 2TB 限制。
3.3 df -h:查看分区挂载及使用情况
df -h
这是最常用的磁盘空间检查命令:
Filesystem Size Used Avail Use% Mounted on/dev/vda3 40G 7.7G 30G 21% //dev/vda2 200M 6.2M 194M 4% /boot/efitmpfs 1.6G 0 1.6G 0% /run/user/0
注意:主要关注 /dev/ 开头的设备(真实磁盘),tmpfs 是内存文件系统,不占用磁盘空间。
四、文件大小查看:ls -lh vs du -sh
这两个命令显示的"大小"含义不同:
示例:
ls -lh bfile # 显示 120M(逻辑大小)du -sh bfile # 显示 40M(实际占用磁盘块)
应用场景:
- • 判断磁盘空间为什么满了:
du -sh * | sort -h - • 虚拟机磁盘文件通常使用**稀疏文件(sparse file)**技术,逻辑大小远大于实际占用。
五、磁盘分区与挂载实战
本小节是主要步骤介绍,具体细节可以参考一些云厂商数据盘初始化的官网文档介绍:
阿里云:初始化数据盘(Linux)
天翼云:初始化Linux数据盘(fdisk)-云硬盘 EVS-快速入门-初始化数据盘 - 天翼云
5.1 分区操作(fdisk)
# 1. 查看硬盘fdisk -l# 2. 对 /dev/sdc 进行分区fdisk /dev/sdc# 交互操作:n=新建分区 → p=主分区 → 设置起始扇区(默认) → 设置大小(如 +50G) → w=保存退出
交互命令:
- •
p:创建主分区(最多 4 个),e 为扩展分区
5.2 格式化分区(创建文件系统)
mkfs.ext4 /dev/sdc1 # ext4 文件系统mkfs.xfs /dev/sdc1 # xfs 文件系统(CentOS 7 默认)
警告:格式化会清空分区上的所有数据,操作前务必确认设备名称正确。
5.3 挂载分区
# 1. 创建挂载点mkdir /mnt/sdc1# 2. 挂载(-t 可省略,系统自动识别)mount /dev/sdc1 /mnt/sdc1# 3. 验证df -h | grep sdc1
5.4 永久挂载(写入 /etc/fstab)
配置格式:
设备路径 挂载点 文件系统类型 挂载选项 dump fsck顺序
示例:
/dev/sdc1 /mnt/sdc1 ext4 defaults 0 0# 或用 UUID(更稳定)UUID=xxx-xxx-xxx /mnt/sdc1 ext4 defaults 0 0
获取 UUID:
blkid /dev/sdc1
使配置生效:
mount -a # 重新加载 /etc/fstab
小结
内存和磁盘管理是 Linux 运维的日常高频操作。这一篇我们重点介绍了:
| |
|---|
| free -h |
| fdisk -l |
| df -h |
| du -sh * |
| ls -lh |
| fdisk |
| mkfs.ext4 |
| mount |
| |
| dd |
注意:分区属高危操作,请慎之又慎!操作前需确认硬盘⽆重要数据,错误操作会导致数据丢失!