如何修复 Gparted 消息:读取扇区 xxx 处的块时出错?

Agm*_*nor 6 partitioning gparted

当我试图移动我的一个分区时,我收到了一些错误消息。以下是一些摘录:

Move /dev/sda7 to the left  00:05:09    ( ERROR ) 
Run Code Online (Sandbox Code Playgroud)

(……)

check file system on /dev/sda7 for errors and (if possible) fix them  00:00:10    ( SUCCESS )    
   e2fsck -f -y -v /dev/sda7
Run Code Online (Sandbox Code Playgroud)

(……)

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 
Run Code Online (Sandbox Code Playgroud)

(……)

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 )  
Run Code Online (Sandbox Code Playgroud)

(……)

libparted messages    ( INFO )          
   Input/output error during read on /dev/sda
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能有效地移动我的分区?

psu*_*usi 7

您的硬盘上有坏扇区。立即备份任何重要数据。然后运行磁盘实用程序并单击 SMART 诊断程序。运行长时间的自检,完成后,查看以下属性的值:

Offline_Uncorrectable Current_Pending_Sector Reallocated_Sector_Ct

如果不可纠正计数不为零,或者重新分配或挂起的计数超过几个,则需要更换驱动器。如果只有几个待处理,那么您可以尝试修复它们。首先,您需要确定坏扇区的数量。badblocks 实用程序可用于此目的。然后您可以使用 hdparm --read-sector 尝试从中读取以确保您拥有正确的扇区,然后使用 hdparm --write-sector 尝试用零重写扇区。这将迫使驱动器尝试更正该扇区,或者如果不能,将从备用池中重新分配它,将计数从 pending_sectors 移动到重新分配。对所有坏扇区重复此操作。


Agm*_*nor 4

这实际上让我解决了我的问题。psusi的回复确实很有帮助,但对我来说确实太粗糙了,我花了大约三个小时才得到所有内容,并从他的帖子中提取出我感兴趣的内容。我必须在维基百科、官方 Ubuntu 论坛和 Ask Ubuntu 中进行搜索。因此,我认为他的帖子是一个受欢迎的暗示,但不是正确的答案。

  • 在 Live-CD 上运行 Ubuntu。
  • 使用系统 -> 管理 -> Gparted,禁用最终的交换分区(换句话说,“swapoff”)。此外,记下损坏的驱动器的名称,在我的例子中为“sda”
  • 在终端中,运行命令sudo badblocks -sv -b 512 <device-name>,在我的例子中将被替换为/dev/sda。经过长时间的等待,结果是损坏扇区的数字列表。
  • 运行命令sudo dd if=<device-name> of=/dev/null bs=512 count=1 skip=<sector>,其中我将 和 替换为dev/sda385850816,即上一个命令给出的第一个数字。
  • 对每个数字重复上一点。
  • 要检查救援是否成功,请再次运行命令sudo badblocks -sv -b 512 <device-name>。(过了很长一段时间)它不应该给出任何数字。

就我而言,它解决了我的问题,并且我能够再次移动我的分区。我必须承认我真的不知道为什么,因为这里的命令似乎只是读取和写入命令。但无论如何,我不再遇到任何问题了。