我的一块硬盘有一些损坏的扇区,处于待处理状态。我想强制重新定位。
从问题重新分配坏扇区[Linux]我知道我可以使用sudo hdparm --yes-i-know-what-i-am-doing --write-sector 215040 /dev/sda
,但如何解释这一行:
# 1 Extended offline Completed: read failure 90% 31807 1362407718
考虑到磁盘有 4 KB 扇区?31807 是使用寿命小时数(包装在 65k...),1362407718 是导致错误的 LBA,并且 SMART“长测试”随之结束。
该磁盘有 512b 个逻辑扇区和 4 KB 个物理扇区。
Sector Sizes: 512 bytes logical, 4096 bytes physical
我按照https://www.smartmontools.org/wiki/BadBlockHowto#Badblockreassignmentsg_verify
中的建议进行了尝试,但它没有提供任何输出:
# sg_verify -v --lba=1362407718 /dev/disk/by-id/ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T1033727
#
我应该如何强制重新映射坏扇区?
我正在运行 Ubuntu 22.04 LTS,并且磁盘使用 ZFS 格式化。
权威来源是ATA/ATAPI 规范,它是 SATA 设备使用的基本命令集。根据
Section 3.1.37 LBA (Logical Block Address)
,LBA 是“用于引用逻辑扇区的值”。逻辑扇区是“作为一个单元访问和引用的字集……包含用户数据并由 LBA 引用(参见 3.1.37)。”
逻辑块大小规定为常规的 512 字节。因此,驱动器的物理扇区大小为 4KB 这一事实应该无关紧要,因为术语的使用方式是一致的。SATA
接口已将 LBA 定义为识别每个逻辑扇区的方法。SATA 主机(例如计算机)只能通过其 LBA 引用逻辑扇区。逻辑块到物理扇区的映射旨在透明(写入性能除外)。
似乎您可以尝试使用驱动器报告的 LBA 找到的命令。
该命令可能会失败,因为驱动器/控制器需要先读取物理扇区,然后才能完成逻辑扇区的“写入”。您可以通过尝试强制dd命令使用多扇区操作来规避先读后写,方法是指定
bs=4096
匹配物理扇区大小,例如:其中,该
seek
值是 LBA 除以bs
/512。这假设控制器可以识别对完整物理扇区的写入,因此应该跳过读取操作。但请注意,此操作将破坏的不仅仅是单个有问题的逻辑扇区。