Linux磁盘检测、修复与备份恢复的详细指南
一、磁盘检测
磁盘出现坏道、文件系统错误等问题时,需要及时检测定位故障,Linux系统提供了多款原生工具支持不同场景的检测需求。
1.1 检测工具介绍
fsck:文件系统检查与修复工具,支持ext4、xfs(需配合xfs_repair)、btrfs等常见文件系统,需要在磁盘未挂载或只读挂载时使用。
smartctl:基于S.M.A.R.T技术的磁盘硬件检测工具,可读取磁盘自身的健康状态、坏道记录、温度等信息,支持机械硬盘和固态硬盘。
badblocks:专门检测磁盘坏道的工具,可扫描磁盘坏道,支持非破坏性读写测试和破坏性读写测试。
1.2 检测操作步骤
1.2.1 使用fsck检测文件系统
首先查看磁盘挂载状态,避免对挂载中的磁盘执行检测:
df -h # 输出示例: # Filesystem Size Used Avail Use% Mounted on # /dev/sda1 20G 15G 4.2G 79% / # /dev/sdb1 50G 30G 18G 63% /data
若需要检测/dev/sdb1,先卸载该分区:
umount /dev/sdb1 # 若提示设备忙,可查看占用进程: fuser -m /dev/sdb1 # 结束对应进程后再执行卸载
执行检测命令,-y参数表示自动修复所有可修复的错误:
fsck -y /dev/sdb1
1.2.2 使用smartctl检测硬件健康
首先安装smartmontools工具(以CentOS为例):
yum install smartmontools -y
查看磁盘是否支持S.M.A.R.T:
smartctl -i /dev/sda # 输出中若显示SMART support is: Enabled则表示支持
执行全面健康检测:
smartctl -a /dev/sda
重点关注输出中的SMART overall-health self-assessment test result,若显示PASSED则硬件状态正常,显示FAILED则需要及时备份数据更换磁盘。
1.2.3 使用badblocks检测坏道
执行非破坏性读写检测,-n表示非破坏性读写,-v显示详细过程:
badblocks -n -v /dev/sdb1 > badblocks.txt
若需要执行破坏性检测(会清空磁盘数据),使用-w参数:
badblocks -w -v /dev/sdb1
二、磁盘修复
根据检测结果的不同,修复方式分为文件系统修复和坏道屏蔽两类。
2.1 文件系统修复
对于ext4文件系统,fsck可直接完成修复,若fsck无法修复,可尝试使用备份超级块恢复:
首先查看ext4文件系统的超级块备份位置:
mke2fs -n /dev/sdb1 # 输出中会显示Superblock backups stored on blocks: 后面的数字,例如32768、98304等
使用备份超级块执行修复:
fsck -b 32768 /dev/sdb1
对于xfs文件系统,需使用xfs_repair工具,同样需要先卸载分区:
umount /dev/sdb1 xfs_repair /dev/sdb1
2.2 坏道屏蔽
若badblocks检测到坏道,可通过文件系统屏蔽坏道区域,避免数据写入到坏道位置:
对于ext4文件系统,使用e2fsck结合badblocks的检测结果屏蔽坏道:
e2fsck -l badblocks.txt /dev/sdb1
对于xfs文件系统,可通过xfs_admin标记坏道区域,操作前请先备份数据。
注意:坏道屏蔽只是临时规避问题,若磁盘坏道持续增加,说明磁盘硬件已经损坏,需尽快更换磁盘并迁移数据。
三、备份恢复
磁盘故障前做好备份是降低数据损失的核心手段,Linux下常用的备份工具包括dd、rsync、tar等,可根据需求选择全量备份或增量备份。
3.1 备份方案选择
| 工具名称 | 适用场景 | 特点 |
|---|---|---|
| dd | 整盘/分区镜像备份 | 按扇区复制,备份完整包含空闲空间,速度较慢,适合磁盘克隆 |
| rsync | 文件级增量备份 | 只同步变化的文件,支持远程备份,效率高,适合定期备份 |
| tar | 文件归档压缩备份 | 可将多个文件打包为单个归档文件,支持gzip、bzip2压缩,适合数据归档 |
3.2 备份操作示例
3.2.1 使用dd做整盘镜像备份
将/dev/sdb整盘备份到镜像文件,备份前确保目标存储有足够空间:
dd if=/dev/sdb of=/backup/sdb.img bs=4M status=progress
若只需要备份分区,将输入设备改为对应分区即可:
dd if=/dev/sdb1 of=/backup/sdb1.img bs=4M status=progress
3.2.2 使用rsync做增量备份
首次执行全量备份,将/data目录备份到/backup/data:
rsync -av /data/ /backup/data/
后续执行增量备份,rsync会自动同步修改过的文件:
rsync -av --delete /data/ /backup/data/
参数说明:-a保留文件权限、时间戳等属性,-v显示详细过程,--delete删除目标端源端已经不存在的文件,保持两端一致。
3.2.3 使用tar做压缩归档备份
将/data目录打包为gzip压缩的归档文件:
tar -czvf /backup/data_$(date +%Y%m%d).tar.gz /data
参数说明:-c创建归档,-z使用gzip压缩,-v显示过程,-f指定归档文件名。
3.3 恢复操作示例
若使用dd备份的整盘镜像恢复,执行以下命令(注意of为目标磁盘,操作前确认目标磁盘无重要数据):
dd if=/backup/sdb.img of=/dev/sdb bs=4M status=progress
若使用rsync备份的文件恢复,将源目录和目标目录互换即可:
rsync -av /backup/data/ /data/
若使用tar归档恢复,执行解压命令:
tar -xzvf /backup/data_20240520.tar.gz -C /
四、注意事项
所有磁盘检测、修复操作前,尽量先备份重要数据,避免操作失误导致数据丢失。
fsck、xfs_repair等文件系统修复工具不能在磁盘正常挂载读写的状态下执行,否则可能造成文件系统损坏。
定期对重要磁盘执行健康检测,建议每周执行一次smartctl检测,每月执行一次文件系统检测。
备份文件建议存储在与源磁盘不同的物理设备上,避免源磁盘损坏同时导致备份文件丢失。