linux – 干净ext3分区的输入/输出错误 – 如何检查数据块有什么问题

我在使用HP Raid控制器的CentOS 5服务器(内核版本2.6.18-164.15.1.el5)上的ext3分区上的文件有问题:
hpacucli ctrl all show detail

Smart Array P410 in Slot 1
   Bus Interface: PCI
   ...

HP工具不会报告任何问题.

这是正常的分区ext3,块大小设置为2k,它很好 – fsck输出:

fsck 1.39 (29-May-2006)
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

文件inode也可以:

File: `name.xxx'
Size: 3126962       Blocks: 6124       IO Block: 4096   regular file
Device: 6851h/26705d    Inode: 64579729    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-07-28 09:02:59.000000000 -0400
Modify: 2014-07-28 09:02:59.000000000 -0400
Change: 2014-07-28 09:02:59.000000000 -0400

我无法执行的操作之一是文件复制:

> cp /long_path/name.xxx .
 cp: reading `/long_path.name.xxx': Input/output error

为了找出问题所在,我运行dd来复制文件:

> dd if=/long_path/name.xxx bs=2048 of=test
 dd: reading `/long_path/name.xxx': Input/output error
 222+0 records in
 222+0 records out
 454656 bytes (455 kB) copied,0.042867 seconds,10.6 MB/s

所以我猜这个问题出现在223文件块中.

Debugfs应该有助于在磁盘上找到该块

debugfs  -R "stat name.xxx" /dev/sdf
debugfs 1.39 (29-May-2006)
Inode: 64579729   Type: regular    Mode:  0644   Flags: 0x0   Generation: 2900468317
User:     0   Group:     0   Size: 3126962
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 6124
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x53d64a03 -- Mon Jul 28 09:02:59 2014
atime: 0x53d64a03 -- Mon Jul 28 09:02:59 2014
mtime: 0x53d64a03 -- Mon Jul 28 09:02:59 2014
BLOCKS:
(0):130402311,(1-4):130402844-130402847,(5-6):130484033-130484034,(7):130484036,(8-10):130484049-130484051,(11):130484055,(IND):130761221,(12-13):130761222-130761223,(14):130763791,(15):130763942,(16):130765268,(17-23):130838937-130838943,(24-46):130853946-130853968,(47-48):130855126-130855127,(49):130855215,(50-53):130856428-130856431,(54-104):130856533-130856583,(105-341):130856748-130856984,...
[MORE BLOCKS]     
....
TOTAL: 1531

所以我猜有问题的数据在130856866块.

如何获得有关该块的更多信息?我运行了坏块,并列出了坏块.我的猜测是我必须将块数乘以2(文件系统块大小为2K,而badblocks默认使用1K).另外badblocks检查磁盘,而不是分区,所以也许我应该添加一些偏移(该磁盘上有一个分区,所以可能没有).

> fdisk -l /dev/sdf

Disk /dev/sdf: 2000.3 GB,2000365379584 bytes
255 heads,63 sectors/track,243197 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
       Device Boot      Start         End      Blocks   Id  System
/dev/cciss/c0d5p1   *       1      243197  1953479871   83  Linux

我还想过使用smartd.我应该寻找什么?

Error counter log:
       Errors Corrected by           Total   Correction     Gigabytes    Total
           ECC          rereads/    errors   algorithm      processed    uncorrected
       fast | delayed   rewrites  corrected  invocations   [10^9 bytes]  errors
read:          0     1457         0  2887405961          0      65948.712          18
write:         0        0         0         0          0      15056.493           0
verify:        0        1         0  361901613          0       3591.720           0

Non-medium error count:      226

SMART Self-test log
Num  Test              Status                 segment  LifeTime  LBA_first_err [SK ASC ASQ]
   Description                              number   (hours)
# 1  Background long   Failed in segment -->       -   34479          16845361 [0x3 0x11 0x0]
# 2  Background short  Completed                   -      44                 - [-   -    -]
# 3  Background short  Completed                   -      39                 - [-   -    -]
# 4  Background long   Completed                   -       6                 - [-   -    -]

Long (extended) Self Test duration: 18500 seconds [308.3 minutes]

Background scan results log
Status: scan is active
  Accumulated power on time,hours:minutes 34541:56 [2072516 minutes]
  Number of background scans performed: 1139,scan progress: 38.18%
  Number of background medium scans performed: 1139

 #  when        lba(hex)    [sk,asc,ascq]    reassign_status
 1 19215:06  0000000000014c61  [3,11,0]   Recovered via rewrite in-place
 2 19215:07  0000000000014c66  [3,0]   Recovered via rewrite in-place
 3 19413:28  0000000001010a31  [3,0]   Require Write or Reassign Blocks command
 4 19943:24  000000000001ea99  [3,0]   Recovered via rewrite in-place
 5 20152:23  00000000000232b8  [3,0]   Recovered via rewrite in-place
 6 31229:34  810000004087f984  [3,0]   Require Write or Reassign Blocks command
 7 33021:51  810000004087ba85  [3,0]   Require Write or Reassign Blocks command
 8 33021:51  000000004087ba9f  [3,0]   Require Write or Reassign Blocks command
 9 33021:52  000000004087bad6  [3,0]   Require Write or Reassign Blocks command
10 33029:43  000000004087baa5  [3,0]   Require Write or Reassign Blocks command
11 33055:27  000000004087bac3  [3,0]   Require Write or Reassign Blocks command
12 33244:40  810000004087f9d6  [3,0]   Require Write or Reassign Blocks command
13 33431:58  990000004087f105  [0,0]   Reassignment by disk failed
14 33480:17  00000000463d7713  [3,0]   Require Write or Reassign Blocks command
15 33480:19  00000000463d7723  [3,0]   Require Write or Reassign Blocks command
16 33480:20  00000000463d7725  [3,0]   Require Write or Reassign Blocks command
17 33480:28  81000000463d774e  [3,0]   Require Write or Reassign Blocks command
18 33686:17  8100000044e50edc  [3,0]   Require Write or Reassign Blocks command
19 34154:17  81000000432bef27  [3,0]   Require Write or Reassign Blocks command
20 34463:43  810000001f32decd  [3,0]   Require Write or Reassign Blocks command
21 34463:43  0000000030080000  [3,0]   Require Write or Reassign Blocks command

我应该如何与我的初始问题结合smartctl输出(或智能运行的任何其他输出).

硬盘软件也不应该解决这个问题吗?

BTW.我发现以下链接有助于理解’debugs -R’输出.也许link对其他人有用.

UPDATE

进一步研究我发现与有问题的inode相关的操作(如上面的cp命令)会触发内核日志中的以下行:

kernel: cciss: cmd ffff810037e00000 has CHECK CONDITION sense key = 0x3

‘sense key’是’status’和SCSI标准的一部分(list here和更多描述here).

解决方法

所以,为了解决这个问题,我做了以下工作.

取你的块号,乘以4并加一个

(130856866 * 4) + 1 = 523427465

这表示报告的扇区产生I / O错误.块大小为2k,扇区为512字节.额外的一个额外考虑了分区的起始扇区偏移量.

要与SMART关联,我们需要将现在的值转换为十六进制.

$printf "0x%x\n" 523427465
0x1f32de89

现在,当您将其与SMART显示的内容相关联时,一条线路可疑地接近……

20 34463:43  810000001f32decd  [3,0]   Require Write or Reassign Blocks command

多远了?

$bc -l
bc 1.06.95
Copyright 1991-1994,1997,1998,2000,2004,2006 Free Software Foundation,Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
obase=16
ibase=16
1F32DECD-1F32DE89
44

这只是在34816和32768字节之间,但我们不能说哪个扇区在构成块的四个扇区中受损.

如果我不得不冒险猜测,我会说可能在同一地址周围有大量的块会报告I / O错误(假设raid条带化的大小为32k或者其他).

此外,如果RAID从另一个磁盘获取块块,则读取可能无法解决问题.写入必须传播到RAID1设置中的所有磁盘,这样可能会导致写入失败但读取成功.此外,如果我们假设RAID卡的块大小为32k,我们还可以假设损坏的块加上SMART报告的块都被该盘上发生的任何事情损坏.它只是SMART测试从第一个32k的好磁盘和下一个32k的坏磁盘读取.

现代硬盘保留“储备部门”,用新的部门位置取代这样的受损部门.看到你现在正在看到这个,并且从磁盘重新分配磁盘失败的消息我会说磁盘已经用完了.

在做某事方面;这有点棘手. LBA寻址是对下面真实磁盘的抽象.您需要确定导致此问题的磁盘,在RAID阵列中将其取消并替换它.

在任何情况下,你都有一个坏磁盘,你应该尽快替换它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、信号(signal)、消息队列、共享内存、信号量、套接字(socket)。管道用于具有亲缘关系的进程间通信,有名管道的每个管道具有名字,使没有亲缘关系的进程间也可以通信。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别对整个系统的性能做统计,而进程级别则具体到进程,为每个进程维护统计信息。

按实现原理分,可分为基于计数器和跟踪以及剖析。含义如下:

计数器:内核维护的统计数据,通常为无符号整型,用于对发生的事件计数,比如,网络包接收计数器,磁
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书验证,详细追踪整个交互过程,可用于调用网络后端接口,诊断http和https网络服务故障。
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满、fd泄漏等问题。命令包括ping、fping、tcpdump、lsof、netstat、/proc/$pid/fd、du、grep、traceroute、dig。
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的进程数目,用uptime查看到负载很高,既有可能是CPU利用率高,也可能是大量在等待io的进程导致,用mpstat查看每个CPU的使用情况,查看CPU的使用率或者CPU花在等待io的时间,接着用pidstat定位具体的进程
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线程切换及中断切换,进程切换的开销较大,除了需要保存寄存器和程序计数器中的值还需保存全局变量、栈等到内存中,以便下次运行恢复,而同一进程中的线程切换开销会小很多,只需更新寄存器和线程独有的栈,共享资源如打开的文件、全局变量等无需切换,当硬件中
1.top命令 作用:该命令可以按CPU使用.内存使用和执行时间对任务进行排序,常用来监控系统中占用CPU或内存较高的程序及CPU和内存的负载。 默认视图: 当想看系统负载时,可观察汇总的%CPU中的us用户进程和sy系统进程是否占用CPU很高,相加接近100%就说明占用很高了,有些程序可能得不到及
文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限!!!粘滞位!!!超详解!!!
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Windows、Linux、MacBook_mack book 安装qt
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Linux——了解操作系统的发展历史以及初次体验Linux编程环境
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,个人学习时很认真的记录的,觉得好的麻烦点个赞。
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.5p1(亲测无问题,建议收藏)_openssh_9.5p1
文章浏览阅读3.5k次,点赞93次,收藏78次。初识Linux中的线程,理解线程的各种概念,理解进程地址空间中的页表转换,介绍pthread线程库并理解线程库!
文章浏览阅读863次。出现此问题为Linux文件权限问题,解决方案为回到引擎目录执行命令。输入用户密码后运行./UnrealEditor。_increasing per-process limit of core file size to infinity.
文章浏览阅读2.9k次。使用文本编辑器:打开CSV文件,并使用文本编辑器(如Notepad++、Sublime Text、Visual Studio Code等)来查看文件的字符编码格式。通常在编辑器的底部状态栏或设置中可以找到当前编码的显示。请注意,上述方法并非绝对准确,特别是当文件没有明确的编码标识时。因此,如果你发现CSV文件在不同的工具或方法中显示不同的编码格式,可能需要进行进一步的分析和判断,或者尝试使用不同的编码转换方法。该命令将输出文件的MIME类型和编码信息。使用命令行工具:在命令行中,你可以使用。_shell读取csv文件逐行处理
本文介绍了如何在Linux系统中升级gcc版本,以便更好地支持C++11及以上版本的新特性。通过升级gcc,可以提升编译器的功能和性能,获得更好的开发体验。详细的步骤和方法请参考原文链接。
文章浏览阅读4.4k次,点赞6次,收藏19次。Mosquitto是一个开源的MQTT消息代理服务器。MQTT是一个轻量级的、基于发布/订阅模式的消息传输协议。 mosquitto的安装使用比较简单,可以方便的来进行一些测试。_linux mosquitto
文章浏览阅读7.2k次,点赞2次,收藏12次。Linux中,用于根目录下有一个.ssh目录,保存了ssh相关的key和一些记录文件。_~/.ssh/
文章浏览阅读4.5k次,点赞5次,收藏18次。首先需要安装 snmp ,使用下面的命令进行安装安装完毕之后,使用下面的命令查看是否安装成功当命令行显示如图即为安装成功。_snmp工具