Linux 磁盘信息相关命令全解析
引言
在 Linux 系统中,磁盘管理和监控是系统管理员日常工作中不可或缺的一部分。了解系统的磁盘使用情况、分区信息、I/O 性能等,有助于优化系统性能、预防存储空间不足的问题,并及时发现潜在的硬件故障。本文将详细介绍常用的 Linux 磁盘信息相关命令及其使用方法,帮助你更好地管理和维护系统。
1. df
命令:查看文件系统磁盘空间使用情况
df
(disk free)命令用于显示文件系统的磁盘空间使用情况。它可以列出所有挂载点的总容量、已用空间、可用空间以及使用百分比。
基本用法:
df
常用选项:
-
-h
:以人类可读的格式显示(如 KB、MB、GB)。 -
-T
:显示文件系统的类型。 -
-i
:显示 inode 信息(文件和目录的数量)。
示例:
# 查看所有文件系统的磁盘使用情况,以人类可读的格式显示
df -h
# 查看所有文件系统的磁盘使用情况,并显示文件系统类型
df -Th
# 查看所有文件系统的 inode 使用情况
df -i
输出示例:
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 796M 2.3M 794M 1% /run
/dev/sda1 50G 20G 28G 42% /
tmpfs 3.9G 128K 3.9G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sdb1 100G 50G 45G 52% /data
2. du
命令:查看目录或文件的磁盘使用情况
du
(disk usage)命令用于显示指定目录或文件的磁盘使用情况。它可以递归地统计目录中的所有文件和子目录的大小。
基本用法:
du [选项] [文件或目录]
常用选项:
-
-h
:以人类可读的格式显示(如 KB、MB、GB)。 -
-s
:只显示总和,不显示每个文件或子目录的详细信息。 -
--max-depth=N
:限制递归深度为 N 层。 -
-a
:显示所有文件和目录的详细信息。
示例:
# 查看当前目录的磁盘使用情况,以人类可读的格式显示
du -sh
# 查看当前目录下所有文件和子目录的磁盘使用情况
du -ah
# 查看当前目录下所有子目录的磁盘使用情况,递归深度为 1
du --max-depth=1
# 查找占用磁盘空间最大的前 10 个文件或目录
du -a | sort -n -r | head -n 10
输出示例:
4.0K ./logs
8.0K ./config
12K ./data
20K .
3. lsblk
命令:列出块设备信息
lsblk
(list block devices)命令用于列出系统中的所有块设备(如硬盘、分区、光驱等),并显示它们的挂载点、大小、类型等信息。
基本用法:
lsblk
常用选项:
-
-f
:显示文件系统类型和 UUID。 -
-o
:指定输出列(如 NAME, SIZE, MOUNTPOINT, FSTYPE 等)。 -
-d
:仅显示设备,不显示分区。 -
-p
:显示完整设备路径。
示例:
# 列出所有块设备及其挂载点
lsblk
# 列出所有块设备及其文件系统类型和 UUID
lsblk -f
# 仅显示设备名称、大小和挂载点
lsblk -o NAME,SIZE,MOUNTPOINT
# 仅显示硬盘设备,不显示分区
lsblk -d
输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part /
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 100G 0 part /data
sr0 11:0 1 1024M 0 rom
4. fdisk
命令:管理磁盘分区
fdisk
是一个交互式的磁盘分区工具,常用于创建、删除、调整分区大小等操作。它支持多种分区表格式,如 MBR 和 GPT。
基本用法:
sudo fdisk [选项] [设备]
常用选项:
-
-l
:列出指定设备的分区表信息。 -
-u
:以扇区单位显示分区大小。 -
-w
:保存更改并退出。 -
-d
:删除分区。 -
-n
:创建新分区。
示例:
# 列出所有磁盘的分区信息
sudo fdisk -l
# 进入交互式模式,管理 /dev/sdb 磁盘
sudo fdisk /dev/sdb
输出示例:
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 12345678-1234-1234-1234-123456789ABC
Device Start End Sectors Size Type
/dev/sda1 2048 2099199 2097152 1G Linux filesystem
/dev/sda2 2099200 104857599 102758400 49G Linux filesystem
5. parted
命令:分区管理工具
parted
是另一个强大的分区管理工具,支持 GPT 和 MBR 分区表。与 fdisk
不同,parted
可以在非交互模式下执行分区操作,适合脚本自动化。
基本用法:
sudo parted [选项] [设备]
常用选项:
-
-l
:列出所有磁盘的分区信息。 -
-s
:以非交互模式运行。 -
mklabel
:创建新的分区表(如 GPT 或 MBR)。 -
mkpart
:创建新分区。 -
resizepart
:调整分区大小。 -
print
:显示分区表信息。
示例:
# 列出所有磁盘的分区信息
sudo parted -l
# 创建新的 GPT 分区表
sudo parted /dev/sdb mklabel gpt
# 创建一个新的 50GB 的 ext4 分区
sudo parted /dev/sdb mkpart primary ext4 0 50GB
输出示例:
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1076MB 1075MB ext4 primary
2 1076MB 53.7GB 52.6GB ext4 primary
6. smartctl
命令:检查磁盘健康状态
smartctl
是 smartmontools
包中的一个工具,用于查询和控制 S.M.A.R.T.(Self-Monitoring, Analysis and Reporting Technology)信息。通过 smartctl
,你可以检查磁盘的健康状态、温度、错误日志等,提前发现潜在的硬件问题。
安装:
sudo apt-get install smartmontools # Ubuntu/Debian
sudo yum install smartmontools # CentOS/RHEL
基本用法:
sudo smartctl [选项] [设备]
常用选项:
-
-a
:显示所有 S.M.A.R.T. 信息。 -
-H
:仅显示健康状态。 -
-A
:显示所有属性值。 -
-x
:显示详细的 S.M.A.R.T. 信息,包括日志。
示例:
# 检查 /dev/sda 的健康状态
sudo smartctl -H /dev/sda
# 显示 /dev/sda 的所有 S.M.A.R.T. 信息
sudo smartctl -a /dev/sda
# 显示 /dev/sda 的所有属性值
sudo smartctl -A /dev/sda
输出示例:
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-42-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
7. iostat
命令:监控磁盘 I/O 性能
iostat
是 sysstat
包中的一个工具,用于监控系统的 CPU 和磁盘 I/O 性能。它可以显示每个磁盘的读写速度、IOPS(每秒输入/输出操作数)、等待时间等信息,帮助你分析磁盘性能瓶颈。
安装:
sudo apt-get install sysstat # Ubuntu/Debian
sudo yum install sysstat # CentOS/RHEL
基本用法:
iostat [选项]
常用选项:
-
-x
:显示扩展统计信息(如 IOPS、平均等待时间等)。 -
-d
:仅显示磁盘 I/O 统计信息。 -
-m
:以 MB/s 为单位显示传输速率。 -
-t
:显示时间戳。 -
-c
:仅显示 CPU 使用率。
示例:
# 显示所有磁盘的 I/O 性能,每隔 2 秒刷新一次
iostat -x 2
# 仅显示磁盘 I/O 统计信息,以 MB/s 为单位
iostat -dm
输出示例:
Linux 5.4.0-42-generic (hostname) 12/13/2024 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.20 0.00 0.50 0.30 0.00 97.90
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 2.00 16.00 32.00 1600 3200
sdb 1.50 12.00 24.00 1200 2400
8. iotop
命令:实时监控进程的 I/O 活动
iotop
是一个类似于 top
的工具,专门用于实时监控进程的 I/O 活动。它可以显示每个进程的读写速度、I/O 时间占比等信息,帮助你快速定位占用大量磁盘 I/O 的进程。
安装:
sudo apt-get install iotop # Ubuntu/Debian
sudo yum install iotop # CentOS/RHEL
基本用法:
sudo iotop
常用选项:
-
-o
:仅显示有 I/O 活动的进程。 -
-b
:批处理模式,适合脚本自动化。 -
-n
:指定刷新次数。 -
-d
:指定刷新间隔(秒)。
示例:
# 实时监控进程的 I/O 活动
sudo iotop
# 仅显示有 I/O 活动的进程,每隔 2 秒刷新一次
sudo iotop -o -d 2
输出示例:
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
1234 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd
5678 be/4 mysql 0.00 B/s 8.00 K/s 0.00 % 0.00 % mysqld
9. ncdu
命令:交互式磁盘使用情况分析
ncdu
(NCurses Disk Usage)是一个基于文本界面的磁盘使用情况分析工具,提供了类似 du
的功能,但具有更友好的交互界面。你可以通过键盘导航来浏览目录结构,查看每个目录的磁盘使用情况,并轻松找到占用空间较大的文件或目录。
安装:
sudo apt-get install ncdu # Ubuntu/Debian
sudo yum install ncdu # CentOS/RHEL
基本用法:
ncdu [目录]
示例:
# 打开当前目录的磁盘使用情况分析
ncdu .
# 打开 /var/log 目录的磁盘使用情况分析
ncdu /var/log
功能:
- 使用方向键导航目录结构。
- 按
d
删除文件或目录。 - 按
g
跳转到占用空间最大的目录。 - 按
q
退出程序。
10. hdparm
命令:测试磁盘读写速度
hdparm
是一个用于配置和测试硬盘参数的工具。它不仅可以设置硬盘的高级参数(如 DMA 模式、缓存大小等),还可以用于测试磁盘的读写速度。
基本用法:
sudo hdparm [选项] [设备]
常用选项:
-
-T
:测试缓存读取速度。 -
-t
:测试实际磁盘读取速度。 -
-c
:设置 IDE 接口的 I/O 模式。 -
-d
:启用或禁用 DMA 模式。
示例:
# 测试 /dev/sda 的缓存读取速度
sudo hdparm -T /dev/sda
# 测试 /dev/sda 的实际磁盘读取速度
sudo hdparm -t /dev/sda
输出示例:
/dev/sda:
Timing cached reads: 18852 MB in 2.00 seconds = 9426.00 MB/sec
Timing buffered disk reads: 936 MB in 3.00 seconds = 312.00 MB/sec
总结
在 Linux 系统中,磁盘管理和监控是确保系统稳定性和性能的关键任务。通过掌握上述命令,你可以轻松查看磁盘使用情况、管理分区、监控 I/O 性能,并及时发现和解决潜在的磁盘问题。无论是日常运维还是故障排查,这些工具都将成为你不可或缺的得力助手。
附录
-
参考资料:
-
相关工具:
如果你有任何问题或建议,欢迎在评论区留言讨论!希望这篇文章能够帮助你在 Linux 系统中更好地管理和监控磁盘信息。