linux如何扫描磁盘
- Linux
- 2025-08-06
- 4
fsck
命令扫描磁盘,若磁盘已挂载,需先
umount
;未挂载则直接执行
fsck /dev/XXX
(XXX 为设备名),加
-y
在Linux系统中,扫描磁盘是日常运维、故障排查及性能优化的重要环节,通过不同工具可实现对磁盘空间、文件分布、健康状态、错误检测等多维度的分析,以下从核心目标出发,系统化梳理各类磁盘扫描方法,并提供实操示例与注意事项。
基础磁盘信息与挂载状态扫描
df
命令:快速查看磁盘分区使用率
功能:显示已挂载文件系统的磁盘空间占用情况(容量/已用/可用/占比/挂载点)。
常用参数:
-h
:以人类可读格式(GB/MB)输出,替代默认的KB单位。-T
:额外显示文件系统类型(如ext4、xfs)。-l
:仅显示本地文件系统(排除网络文件系统)。
示例:
df -hT
输出示例:
| 文件系统 | 类型 | 总大小 | 已用 | 可用 | 已用% | 挂载点 |
|—————-|———|——–|——-|——-|——-|————–|
| /dev/sda1 | ext4 | 466G | 123G | 307G | 28% | / |
| /dev/sdb1 | xfs | 1.8T | 1.2T | 580G | 67% | /data |
| tmpfs | tmpfs | 7.8G | 4.0K | 7.8G | 0% | /run |
解读:关注根分区()和使用率高的分区(如/data
),若某分区接近满载需及时清理或扩容。
lsblk
命令:物理磁盘与分区拓扑结构
功能:列出所有块设备(硬盘、SSD、U盘等)及其分区关系,直观展示设备树。
常用参数:
-f
:同步显示文件系统信息(如UUID、标签)。-o NAME,SIZE,TYPE,MOUNTPOINT
:自定义输出列。
示例:
lsblk -f
输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 466G 0 disk
├─sda1 8:1 0 466G 0 part /
sdb 8:16 0 1.8T 0 disk
└─sdb1 8:17 0 1.8T 0 part /data
nvme0n1 259:0 0 512G 0 disk
└─nvme0n1p1 259:1 0 512G 0 part [SWAP]
价值:快速定位未挂载的分区(无MOUNTPOINTS
列),或识别新插入的设备(如移动硬盘)。
深度扫描:文件级占用分析
du
命令:统计目录/文件磁盘占用
功能:递归计算指定目录或文件的磁盘使用量,用于定位大文件或冗余数据。
常用参数组合:
-sh
:汇总当前目录总大小(单行输出)。-a
:显示所有文件和子目录的细节(含隐藏文件)。--max-depth=N
:限制递归深度(如N=1
仅统计一级子目录)。sort
配合管道:按大小排序结果。
示例1:统计/var/log
目录总大小
du -sh /var/log # 输出:4.2G /var/log
示例2:找出/home
下占用最大的前10个子目录
du -a /home | sort -rh | head -n 10 # 输出类似:1.2G /home/user1/Downloads # 800M /home/user2/Videos
技巧:结合find
命令过滤特定类型文件(如日志):
find /var/log -type f -name ".log" -exec du -h {} + | sort -hr
ncdu
工具:交互式磁盘分析(需安装)
特点:提供彩色界面,支持动态导航至大文件/目录,比du
更直观。
安装:sudo apt install ncdu
(Debian/Ubuntu)或yum install ncdu
(CentOS)。
使用:ncdu /path/to/scan
,键盘方向键浏览,按q
退出。
优势:可视化呈现目录层级,可直接跳转至占用最高的子目录。
磁盘健康与错误检测
fsck
命令:检查并修复文件系统错误
适用场景:怀疑文件系统损坏(如异常断电导致的元数据错误)、开机提示“UNEXPECTED INCONSISTENCY”。
关键规则:必须在未挂载的文件系统上执行(否则会报错“device is busy”)。
操作步骤:
- 卸载目标分区(例:
umount /dev/sdb1
); - 执行检查(自动修复非致命错误):
fsck /dev/sdb1
; - 若需强制修复(谨慎!可能导致数据丢失):
fsck -y /dev/sdb1
。
常见错误码:
Inodes that were part of a corrupted orphan linked list
:孤立节点错误,通常由未正常卸载导致。Superblock last mount time... is in the future
:超级块时间戳异常,可能因硬件故障引起。
注意:生产环境建议先备份重要数据,再执行fsck
;若分区正在使用,可通过Live CD启动后扫描。
smartctl
命令:监控硬盘健康状态(S.M.A.R.T.)
功能:读取硬盘内置的自我监测分析报告(SMART),预测潜在硬件故障。
安装:sudo apt install smartmontools
(主流发行版均支持)。
常用命令:
smartctl -a /dev/sda
:全面检测硬盘健康指标(温度、重映射扇区数、读写错误率等)。smartctl --test=short /dev/sda
:执行快速健康测试(耗时约2分钟)。smartctl --test=long /dev/sda
:执行完整测试(耗时数小时,适合离线场景)。
关键指标解读:
| 指标 | 含义 | 预警阈值 |
|———————–|———————————————————————-|—————-|
| Reallocated Sectors | 已替换的坏扇区数量(原坏扇区数据已被迁移至备用区域) | >10 |
| Seek Error Rate | 寻道错误率(磁头定位失败次数/尝试次数) | >5% |
| Spin Up Time | 硬盘启动时间(正常应<1秒,过长可能电机老化) | >3s |
| Power On Hours | 累计通电时长(新硬盘应远小于旧硬盘) | 根据型号判断 |
示例输出片段:
=== Start Of Information Section ===
Model Family: Western Digital Blue
Serial Number: WD-WCC5Y.......
User Capacity: 4,667,968,000 bytes [4.67TB]
...
=== End Of Information Section ===
SMART Self-test log structure revision number 1
Num Test_Description Status Percent_Completed Lifetime hours Lifetime days
#1 Short offline Completed without error 100% 234 10
#2 Short offline Completed without error 100% 234 10
...
高级场景:特殊需求扫描
扫描未挂载的磁盘/分区
若新增硬盘未自动挂载,需手动识别并挂载后再扫描:
# 步骤1:识别新磁盘(假设为/dev/sdc) lsblk | grep sdc # 步骤2:创建分区(使用fdisk或parted) sudo fdisk /dev/sdc # 步骤3:格式化分区(例:ext4) sudo mkfs.ext4 /dev/sdc1 # 步骤4:挂载到指定目录(如/mnt/newdisk) sudo mount /dev/sdc1 /mnt/newdisk # 步骤5:扫描新分区 df -h /mnt/newdisk
跨服务器扫描远程磁盘(NFS/CIFS)
若需扫描挂载的网络磁盘(如NFS):
# 查看远程挂载点的使用情况 df -h /mnt/nfs_share # 统计远程目录下的文件占用(需权限允许) du -sh /mnt/nfs_share/important_data
常见问题与解决方案对照表
问题现象 | 可能原因 | 解决思路 |
---|---|---|
df 显示某分区“已用100%”但找不到大文件 |
被删除文件仍占空间(未释放inode) | 执行lsof +L1 查找被进程占用的已删除文件;或重启相关服务释放句柄 |
fsck 提示“Device or resource busy” |
分区处于挂载状态 | umount该分区后再执行;或通过Live CD启动进入单用户模式扫描 |
smartctl 报告“RAW_READ_ERROR_RATE”过高 |
硬盘存在物理坏道 | 立即备份数据;更换硬盘;联系厂商保修 |
du 统计的总大小远大于df 显示的可用空间 |
存在大量小文件或隐式存储(如缩略图缓存) | 使用ncdu 定位大目录;清理临时文件(rm -rf /tmp/ );调整存储策略 |
相关问答FAQs
Q1:如何选择最适合的磁盘扫描工具?
答:根据需求优先级选择:①快速概览→df -h
;②定位大文件→du
+排序或ncdu
;③检查文件系统错误→fsck
(需卸载);④监控硬盘健康→smartctl
,若需综合分析,建议组合使用df
+du
+smartctl
。
Q2:执行fsck
时提示“Device is busy”,如何解决?
答:原因是目标分区当前正被系统挂载使用,解决方法有两种:①正常关机后,通过引导介质(如Ubuntu Live CD)启动,此时原分区未挂载,可直接扫描;②若无法关机,尝试临时卸载分区(umount /dev/xxx
),但需确保无重要进程正在访问该分区(否则可能导致