Linux磁盘坏道检测和修复
背景
在Debian 系统中,可以使用 badblocks
命令检测和修复磁盘坏道,检测时需在非挂载的、单用户模式下运行,并且需要root 权限。 对于物理坏道,是永久性损伤,只能通过 badblocks
命令进行屏蔽,避免数据读写。 对于逻辑坏道,通常通过格式化来修复,或使用 fsck
命令检查和修复文件系统错误。** **
识别坏道类型
物理坏道:
由磁盘物理损伤引起,例如磁头划伤,通常是不可修复的。** **
逻辑坏道:
由软件或文件系统错误引起,通常可以通过格式化或修复文件系统来解决
检测磁盘坏道
- 卸载目标分区:在检测前,必须卸载要检测的分区,以确保数据安全,避免检测过程中的读写操作造成进一步损坏。
1 | sudo umount /dev/sdXn # 将 sdXn 替换为你的分区名称,例如 /dev/sda1 |
- 执行
badblocks
命令进行只读检测:: 使用-v
(verbose) 和-n
(non-destructive read-test) 参数,执行只读检测,检查出存在问题的块。
1 | sudo badblocks -v -n /dev/sdXn |
执行
badblocks
命令进行读写检测(谨慎使用):: 如果确定要对整个磁盘进行彻底检测,可以使用-w
参数进行读写测试,但这会擦除磁盘上的数据1
sudo badblocks -w -s -v -o badblocks.txt /dev/sdXn
-w
: 进行写测试,这会擦除磁盘数据。-s
: 显示进度。-v
: 显示详细信息。-o badblocks.txt
: 将检测到的坏块列表保存到badblocks.txt 文件。
修复坏道
如果不介意全部擦除就可以用上述命令
1 | sudo badblocks -w -s -v -o badblocks.txt /dev/sdXn |
否则就先备份数据,再局部修复
- 先用dd命令对坏道数据进行备份
1 | dd if=/dev/vda skip=417334708 of=/tmp/417334708-417334711.dat count=4 |
- 再对坏道读写修复
1 | sudo badblocks -s -w /dev/vda 417334711 417334708 |
- 检测下坏道是否已经修复
1 | sudo badblocks -w -s -v -o badblocks.txt /dev/vda |
- 如果未检测出坏道,可以对备份数据进行回写
1 | dd if=/tmp/417334708-417334711.dat of=/dev/vda seek=417334708 count=4 |
- 如果坏道经过读写修复依然存在,那么只能通过屏蔽,使系统不再使用
1 | sudo mkfs -l badblocks.txt /dev/vda |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 二博!
评论