我注意到,在我的 Ubuntu 服务器上,一个驱动器出于某种原因处于只读状态。经过深入研究,我发现当硬盘驱动器出现错误时,就会发生这种情况。我使用 badblocks 检查错误,确实有一些损坏的扇区。
在大多数情况下,唯一合理的做法是尝试备份数据,移除硬盘并购买新的。但是,这台服务器没有任何我已在多个地方备份的内容,我想一直使用它直到它报废。我用它来播放流媒体音乐和运行一些简单的脚本。无论如何,重新安装所有内容都会很麻烦。
有没有办法不格式化硬盘就标记这些坏块?
答案1
我假设您谈论的是磁盘上的物理坏块,而不是损坏的文件系统。
要检查磁盘的物理状况,最好安装smartmontools
sudo apt-get install smartmontools
这是因为所有现代磁盘都使用名为聪明的
使用smartctrl
命令读取此状态。例如,从第一个磁盘调用读取所有属性
sudo smartctl --all /dev/sda
注意讨论整体健康状态的一行。一旦这指示错误,磁盘很可能很快就会出现故障。
SMART overall-health self-assessment test result: PASSED
您要检查的其他行是待处理扇区数和重新分配扇区。
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 48
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 2
重新分配通常在原始字段中列出磁盘用可用的备用扇区替换的坏扇区数量。待处理扇区是下次写入失败时可能会重新分配的扇区。
当您的型号支持时,您甚至可以触发磁盘的自检
sudo smartctl -t long /dev/sda
要强制检查所有扇区,请使用badblocks
写入数据的模式。请注意,尽管一般情况下运行它是安全的,但它会给磁盘带来额外负载,这可能会导致磁盘故障。始终备份您的数据。
sudo badblocks -svvn -c 262144 /dev/sda
命令的输出badblocks
将显示许多行
hh:mm:ss elapased. (x/y/z errors)
在哪里
x = num_read_errors
y = num_write_errors
z = num_corruption_errors
如果您已通过这种方式完全处理了磁盘,则磁盘控制器应该已经将所有坏块替换为正常的块,并且 SMART 日志中的重新分配计数将增加。
答案2
虽然这是一个老问题,但我还是发布它,因为它badblocks
不应该用于对磁盘进行坏块处理。请参阅man badblocks
以了解更多信息。
“强烈建议用户不要直接运行 badblocks,而是使用 e2fsck 和 mke2fs 程序的 -c 选项”。
笔记
- 不要中止坏块扫描!
- 切勿对 SSD 造成坏块
- 首先备份您的重要文件!
- 这将需要很多小时
- 您可能面临硬盘故障
在“尝试 Ubuntu”模式下启动 Ubuntu Live DVD/USB。
在终端:
sudo fdisk -l # identify all "Linux Filesystem" partitions
sudo e2fsck -fccky /dev/sdXX # non-destructive read/write test **(recommended)**
或sudo e2fsck -fcky /dev/sdXX
# 只读测试
很-k
重要,因为它保存了之前的坏块表,并将任何新的坏块添加到该表中。如果没有-k
,您将丢失所有之前的坏块信息。
参数-fccky
:
-f Force checking even if the file system seems clean.
-c This option causes e2fsck to use badblocks(8) program to do
a read-only scan of the device in order to find any bad blocks.
If any bad blocks are found, they are added to the bad block
inode to prevent them from being allocated to a file or direc‐
tory. If this option is specified twice, then the bad block scan
will be done using a non-destructive read-write test.
-k When combined with the -c option, any existing bad blocks in the
bad blocks list are preserved, and any new bad blocks found by
running badblocks(8) will be added to the existing bad blocks
list.
-y Assume an answer of `yes' to all questions; allows e2fsck to be
used non-interactively. This option may not be specified at the
same time as the -n or -p options.