Linux 磁盘信息相关命令全解析

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 命令:检查磁盘健康状态

smartctlsmartmontools 包中的一个工具,用于查询和控制 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 性能

iostatsysstat 包中的一个工具,用于监控系统的 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 系统中更好地管理和监控磁盘信息。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容