坦白说,我不知道该给这个问题/问题起什么标题......
我的基本家庭服务器中有一个特殊的驱动器,这让我头疼。刚刚完成了我的媒体库的重组(排序和重命名照片、删除重复项......)。这是一项大量的工作,而现在,我重组的驱动器出现故障/无法正常工作。
这是一款 2009 年生产的 Seagate Barracuda ST31000528AS、1TB、7200rpm,只有一个 ext4 分区。
该驱动器仍然可以读写,但速度非常慢(见下文)。
您能帮我弄清楚这是硬件故障还是文件系统有问题吗?我将来肯定会更换这个驱动器,因为我对它失去了信心......但它的数据对我来说仍然很重要。那么我是否需要花费 21 天来复制其中的数据,或者该论坛的向导是否有能力使该驱动器恢复正常工作状态?
编辑只是想起来了,也可能是主板,因为它同样很旧。我现在将尝试不同的 SATA 端口...
编辑2根据之前的编辑,我切换到主板上的另一个 SATA 端口,这实际上修复了所有问题。日志中没有错误,没有 IO 错误,吞吐量为 100 MB/s。驱动器健康,主板不健康!
症状:
badblocks
对于前 233k 块没有返回任何内容(占所有块的 0.1%,花费了一个多小时)- 当或任何其他 IO 正在运行时,下面的输出
dmesg
每秒重复一次badblocks
/dev/sdb
是唯一运行 UDMA2 的驱动器- 有时重新启动后一些的目录会引发 I/O 错误,这会影响从重新启动到重新启动之间的更改
高清参数
# hdparm -tT /dev/sdb
/dev/sdb:
Timing cached reads: 2 MB in 28.84 seconds = 71.02 kB/sec
Timing buffered disk reads: 2 MB in 40.20 seconds = 50.94 kB/sec
# hdparm -i /dev/sdb
/dev/sdb:
Model=ST31000528AS, FwRev=CC38, SerialNo=9VP32GR8
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=off
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=1953525168
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 *udma2 udma3 udma4 udma5 udma6
AdvancedPM=no WriteCache=enabled
Drive conforms to: unknown: ATA/ATAPI-4,5,6,7
* signifies the current active mode
消息
# dmesg
[...]
[13892.088412] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[13892.091432] ata2.00: configured for UDMA/33
[13892.091459] sd 3:0:0:0: [sdb] tag#11 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[13892.091465] sd 3:0:0:0: [sdb] tag#11 Sense Key : Illegal Request [current]
[13892.091471] sd 3:0:0:0: [sdb] tag#11 Add. Sense: Unaligned write command
[13892.091477] sd 3:0:0:0: [sdb] tag#11 CDB: Read(10) 28 00 10 1f f9 00 00 01 00 00
[13892.091484] blk_update_request: I/O error, dev sdb, sector 270530816 op 0x0:(READ) flags 0x80700 phys_seg 32 prio class 0
[13892.091527] ata2: EH complete
[13892.148412] ata2.00: exception Emask 0x50 SAct 0x600000 SErr 0x280900 action 0x6 frozen
[13892.148430] ata2.00: irq_stat 0x08000000, interface fatal error
[13892.148441] ata2: SError: { UnrecovData HostInt 10B8B BadCRC }
[13892.148451] ata2.00: failed command: READ FPDMA QUEUED
[13892.148468] ata2.00: cmd 60/00:a8:00:fa:1f/01:00:10:00:00/40 tag 21 ncq dma 131072 in
res 40/00:b0:00:f9:1f/00:00:10:00:00/40 Emask 0x50 (ATA bus error)
[13892.148486] ata2.00: status: { DRDY }
[13892.148494] ata2.00: failed command: READ FPDMA QUEUED
[13892.148510] ata2.00: cmd 60/08:b0:00:f9:1f/00:00:10:00:00/40 tag 22 ncq dma 4096 in
res 40/00:b0:00:f9:1f/00:00:10:00:00/40 Emask 0x50 (ATA bus error)
[13892.148528] ata2.00: status: { DRDY }
[13892.148537] ata2: hard resetting link
[...]
FSCK
# fsck -n /dev/sdb1
fsck from util-linux 2.34
e2fsck 1.45.5 (07-Jan-2020)
Warning! /dev/sdb1 is in use. # yes, it is unmounted
Warning: skipping journal recovery because doing a read-only filesystem check.
1TB_2 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (192424920, counted=192786254).
Fix? no
Free inodes count wrong (61035970, counted=61039035).
Fix? no
1TB_2: 19006/61054976 files (15.0% non-contiguous), 51765470/244190390 blocks
答案1
你的问题实际上是关于硬件相关的问题,而不是Unix。了解如何使用软件与硬件交互固然很好,但拥有使用硬件的经验会让生活变得更轻松。
我从事电脑维修工作已有近十年了,您所描述的所有症状都是硬件故障的迹象。
根据我处理数百台损坏计算机的经验,消费类 HDD 的使用寿命约为 15-20k 通电小时。之后,您可能会遇到大量坏扇区和各种机械问题。另一方面,我有十几个来自 HD(希捷 OEM)的企业级硬盘,它们可以 24/7 运行超过 80k 小时,没有任何问题。您的硬盘只是 2009 年生产的廉价旧消费硬盘。您可能猜到发生了什么。
读/写速度慢意味着您的硬盘有很多坏扇区,因为驱动器磁头需要来回移动到磁盘的保留区域。随机 IO 错误和全扫描期间冻结意味着坏扇区过多。如果发出噪音,也意味着驱动头出现故障。
主板故障不会导致驱动器变慢。我不会浪费时间挖掘系统日志和软件测试,因为问题是显而易见的。如果您需要确定,只需进行快速 SMART 测试即可。我更喜欢使用 Windows 而不是 Linux 进行 SMART 测试,因为它更容易。
PS:是时候和你的数据说再见了。无法从损坏的扇区恢复数据。当一个扇区坏了时,里面存储的数据就会永远消失。