当我试图移动我的一个分区时,我收到了一些错误消息。以下是一些摘录:
Move /dev/sda7 to the left 00:05:09 ( ERROR )
(...)
check file system on /dev/sda7 for errors and (if possible) fix them 00:00:10 ( SUCCESS )
e2fsck -f -y -v /dev/sda7
(...)
move file system to the left 00:04:52 ( ERROR )
perform read-only test 00:04:52 ( ERROR )
using internal algorithm
read 114013242 sectors
finding optimal blocksize
(...)
read 113357882 sectors using a blocksize of 1024 sectors 00:04:36 ( ERROR )
22527034 of 113357882 read
Error while reading block at sector 385849832
23182394 sectors read ( ERROR )
(...)
libparted messages ( INFO )
Input/output error during read on /dev/sda
我应该怎么做才能有效地移动我的分区?
您的硬盘上有坏扇区。立即备份任何重要数据。然后运行磁盘实用程序并单击 SMART 诊断程序。运行长时间的自检,完成后,查看以下属性的值:
Offline_Uncorrectable Current_Pending_Sector Reallocated_Sector_Ct
如果不可纠正的计数不为零,或者重新分配或挂起的计数多于几个,则需要更换驱动器。如果只有几个待处理,那么您可以尝试修复它们。首先,您需要确定坏扇区的数量。badblocks 实用程序可用于此目的。然后你可以使用 hdparm --read-sector 尝试从中读取以确保你有正确的,然后 hdparm --write-sector 尝试用零重写扇区。这将迫使驱动器尝试更正该扇区,或者如果它不能,将从备用池重新分配它,将计数从pending_sectors 移动到重新分配。对所有坏扇区重复此操作。
这实际上使我解决了我的问题。psusi的回复确实有帮助,但对我来说实在是太粗糙了,我花了大约三个小时来了解所有内容,并从他的帖子中提取出我感兴趣的内容。我不得不在 Wikipedia、官方 Ubuntu 论坛和 Ask Ubuntu 中进行搜索。因此,我认为他的帖子是一个受欢迎的提示,但不是正确的答案。
sudo badblocks -sv -b 512 <device-name>
,在我的情况下将替换为/dev/sda
. 经过长时间的等待,结果是一个数字列表,这些数字是损坏的扇区。sudo dd if=<device-name> of=/dev/null bs=512 count=1 skip=<sector>
,其中我替换为dev/sda
和385850816
,前一个命令给出的第一个数字。sudo badblocks -sv -b 512 <device-name>
。它应该(很长一段时间后)没有数字。就我而言,它解决了我的问题,并且我能够再次移动我的分区。我不得不承认我真的不知道为什么,因为这里的命令似乎只是读取和写入命令。但无论如何,我不再遇到任何问题。
您的硬盘似乎存在硬件问题,所以我建议您使用 ddrescue 或 gddrescue 之类的东西在不同的硬盘上制作它的副本。然后尝试修复文件系统(使用 fsck),如果这不起作用,请使用 photorec 或类似的救援工具。
或者只是将备份放回另一个磁盘,如果你有一个,当然......