当前位置:首页>Linux>Linux 系统管理篇(六):内存与磁盘管理——free、df 与 fdisk

Linux 系统管理篇(六):内存与磁盘管理——free、df 与 fdisk

  • 2026-09-10 13:25:00
Linux 系统管理篇(六):内存与磁盘管理——free、df 与 fdisk

服务器报警"磁盘空间不足"时,你需要的不是恐慌,是一套清晰的排查命令。

内存和磁盘是系统运行的基础资源。内存不足会导致系统变慢甚至 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
已使用的内存(含 cache,不代表实际不可用)
free
完全空闲的内存
buff/cache
缓冲区/页面缓存(可被释放)
available实际可用内存
(free + 可回收缓存,推荐关注此指标)
Swap total/used/free
交换分区使用情况

重要:判断内存是否紧张,应优先看 available 而非 free。Linux 会尽量利用空闲内存做缓存来提升性能,所以 free 较小是正常现象,只要 available 充足就没问题。

1.2 top:动态查看内存

top

在 top 界面中:

  • • 顶部显示系统整体内存使用情况
  • • 进程列表中的 %MEM 列显示单个进程的内存占用率
  • • 按 M 键可按内存占用排序

使用建议:

  • • 快速查看整体内存:free -h
  • • 实时监控内存变化:top
  • • 定位内存占用高的进程:top 按 M 排序

1.3 内存不足的判断标准

现象
判断
available
 接近 0
内存紧张
Swap used 持续增长
内存不足,正在使用磁盘做交换(性能下降)
free
 很少但 available 充足
正常,内存正被用作缓存
%iowait
 高 + Swap 使用增长
内存不足导致频繁换页,磁盘 IO 成为瓶颈

如果 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 第二块)
  • • /dev/vdX:虚拟化磁盘(KVM 环境)
  • • 分区编号从 1 开始:sda1 表示第一块磁盘的第一个分区

系统限制:单个磁盘最多 15 个分区(16 开始表示下一块磁盘)。

第一段:磁盘整体信息

这部分描述的是磁盘本身的硬件和逻辑属性。

字段值示例含义
Disk/dev/sda: 20 GiB设备路径和总容量。/dev/sda 是第一块SCSI/SATA硬盘,容量为20 GiB。
Units512 bytes扇区大小默认512字节(传统磁盘最⼩操作单元),分区大小按扇区计算(End-Start)×512字节,固态硬盘仍沿用该计量方式。
Disk modelVBOX HARDDISK硬盘的硬件型号。在虚拟机中常显示为虚拟磁盘型号。
Sector size512 bytes / 512 bytes逻辑扇区/物理扇区大小。现代硬盘多为4096字节物理扇区,这里显示逻辑与物理一致。
I/O size512 bytes / 512 bytes系统I/O操作的最小/最优单位,通常是扇区大小的整数倍。
Disklabel typegpt分区表类型。有两个值: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边界(现代磁盘的标准起始位置)
  • • End:4095→ 结束在第一个MiB的末尾
  • • Sectors:2048个扇区 × 512字节 =1MiB
  • • Type:BIOS boot→ 用于GRUB引导程序,在GPT分区表上Legacy模式启动时必需

/dev/sda2 — 系统/boot分区

  • • Start:4096→ 紧接上一个分区
  • • End:2101247
  • • Sectors:2097152个扇区 = 1GiB(2097152 × 512 = 1,073,741,824字节)
  • • Type:Linux filesystem→ 通常挂载到/boot,存放内核和initramfs

/dev/sda3 — 数据/LVM分区

  • • Start:2101248
  • • End:41943006
  • • 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逻辑大小
文件记录的长度,包含空洞(稀疏文件)
du -sh实际磁盘占用
按块计算的实际存储空间

示例:

ls -lh bfile    # 显示 120M(逻辑大小)du -sh bfile    # 显示 40M(实际占用磁盘块)

应用场景:

  • • 查看文件内容大小:ls -lh
  • • 判断磁盘空间为什么满了: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=保存退出

交互命令:

  • • n:新建分区
  • • p:创建主分区(最多 4 个),e 为扩展分区
  • • d:删除分区
  • • w:保存并退出
  • • q:不保存退出

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
 或 parted -l
查看分区挂载及使用率
df -h
查看目录实际占用
du -sh *
查看文件逻辑大小
ls -lh
分区操作
fdisk
格式化分区
mkfs.ext4
 / mkfs.xfs
挂载分区
mount
永久挂载
编辑 /etc/fstab
增加 Swap
dd
 + mkswap + swapon

注意:分区属高危操作,请慎之又慎!操作前需确认硬盘⽆重要数据,错误操作会导致数据丢失!

最新文章

随机文章