<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Rest Valley &#187; Hardware</title> <atom:link href="http://lihdd.net/tag/hardware/feed/" rel="self" type="application/rss+xml" /><link>http://lihdd.net</link> <description>The scratchpad of quark</description> <lastBuildDate>Sat, 09 Oct 2010 13:56:19 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=</generator> <item><title>坏道惊魂</title><link>http://lihdd.net/seagate-bad-blocks/</link> <comments>http://lihdd.net/seagate-bad-blocks/#comments</comments> <pubDate>Mon, 10 May 2010 13:35:52 +0000</pubDate> <dc:creator>quark</dc:creator> <category><![CDATA[Config]]></category> <category><![CDATA[badblocks]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[seagate]]></category> <category><![CDATA[smartctl]]></category><guid
isPermaLink="false">http://lihdd.net/?p=417</guid> <description><![CDATA[天气渐渐热了起来，听着本本风扇狂转的声音，右手感觉到硬盘滚烫的温度，我觉得现有数据很是需要备份一下。 我以前一直觉得坏道什么的太难遇到了，直到去年十二月的一天，类似这样的消息在屏幕出现： kernel: sd 4:0:0:0: [sda] Unhandled sense code kernel: sd 4:0:0:0: [sda] Result: hostbyte=0x00 driverbyte=0x08 kernel: sd 4:0:0:0: [sda] Sense Key : 0x3 [current] kernel: sd 4:0:0:0: [sda] ASC=0x14 ASCQ=0x0 kernel: sd 4:0:0:0: [sda] CDB: cdb[0]=0x28: 28 00 25 42 ea af 00 00 01 00 kernel: end_request: I/O error, dev sda, sector 625142447 [...]]]></description> <content:encoded><![CDATA[<p><img
class="alignright size-full wp-image-418" title="drive-harddisk" src="http://lihdd.net/wp-content/uploads/2010/05/drive-harddisk.png" alt="" width="128" height="128" align="right" />天气渐渐热了起来，听着本本风扇狂转的声音，右手感觉到硬盘滚烫的温度，我觉得现有数据很是需要备份一下。</p><p>我以前一直觉得坏道什么的太难遇到了，直到去年十二月的一天，类似这样的消息在屏幕出现：</p><div
class="wp_syntax"><div
class="code"><pre class="text" style="font-family:monospace;">kernel: sd 4:0:0:0: [sda] Unhandled sense code
kernel: sd 4:0:0:0: [sda] Result: hostbyte=0x00 driverbyte=0x08
kernel: sd 4:0:0:0: [sda] Sense Key : 0x3 [current]
kernel: sd 4:0:0:0: [sda] ASC=0x14 ASCQ=0x0
kernel: sd 4:0:0:0: [sda] CDB: cdb[0]=0x28: 28 00 25 42 ea af 00 00 01 00
kernel: end_request: I/O error, dev sda, sector 625142447
kernel: Buffer I/O error on device sda, logical block 78142805</pre></div></div><p>这些消息会反复地出现，持续三分钟左右，在此期间做不得其他事情。这些消息出现在对磁盘执行 mount 或 fsck 之前，也就是说系统刚发现这个硬盘还没有开始挂载的时候，就会僵持三分钟。当然，等到 mount 的时候，又是一个三分钟。换句话说，光是进入 Linux 系统就需要六分多钟。神奇的是 Windows 并不会僵持住 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_eek.gif' alt='8-O' class='wp-smiley' /></p><p>查阅一些资料之后，排除了是内核 Bug 或者是参数设置不正确，了解到那些稀奇古怪的十六进制数字背后还有一些标准，我终于相信坏道就在眼前。实在忍受不了需要六分钟才能进入 Linux 系统，同时我也担心坏道会扩散，就在第二天去换了一个一样容量的硬盘。</p><p>最近，出于备份的需要有把这块硬盘拿出来了，那么怎么处理坏道呢？</p><p><span
id="more-417"></span>传统的方法可能是用 <code>badblocks</code> 这个程序去检测一下坏道在哪里了。<code>badblocks</code> 有两种检查方式，一种是只读的，一种是读写的。一般想要彻底查出来坏道就要选择读写的方法，而 <code>badblocks</code> 在这时会依次填上 0xaa, 0&#215;55, 0xff, 0&#215;00，并分别读一次来确认是否有坏道。 <code>badblocks</code> 没有特别的优化，倘若填写 0xaa 之后检查的时候就发现需要检查的所有区域都已经坏掉了， <code>badblocks</code> 并不会终止检查，而是会傻傻地执行完剩下的所有检查。对于一块 320G 笔记本硬盘来说，全盘的读写检查大概需要 24 个小时。</p><p>在 <code>badblocks</code> 全盘读写检查的第 18 个小时，我不小心一个操作把它终止掉了 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_neutral.gif' alt=':-|' class='wp-smiley' /> 。这么漫长的操作肯定不愿意再来一次了，于是我用了一次 <code>badblocks</code> 全盘只读检查，结果 <code>badblocks</code> 说没有发现坏道 &#8230;</p><p>查阅相关资料后发现，从一开始就用不到 <code>badblocks</code>。现代硬盘具有自我检查机制，在一个“坏道”彻底坏掉之前的很长时间，它先是在读取的时候变得困难，而不是完全无法读取（希捷官方所言）。这时候，支持 <a
href="http://en.wikipedia.org/wiki/S.M.A.R.T.">SMART</a> 标准的硬盘（许多年前的有硬盘就都普遍支持了）会防患于未然，把这个 sector 记录成 &#8220;Pending&#8221;，用 <code>smartctl</code> 命令就可以查看到 Current Pending Sector：</p><div
class="wp_syntax"><div
class="code"><pre class="text" style="font-family:monospace;"># smartctl -A /dev/sdb
....
... Current_Pending_Sector ... 1
....</pre></div></div><p>这就表明硬盘自己发现了一个不稳定的 sector 了，这时候，如果读写这个 sector 变得正常的话，这个 sector 会被硬盘记录成正常，Current Pending Sector 会减少。如果依然发生了读取困难或者是不能读取的情况，硬盘不会做任何事情。当写入失败的时候，硬盘会自动将这个 sector 映射到它的保留区的一个好的 sector，并把这个 sector 标记成 &#8220;remapped&#8221;，由于一般坏道在真正坏掉之前还是可以读出内容的，硬盘会自动将读出来的内容复制到保留区，remap 完成之后，Current Pending Sector 也会减少，这一切都是在硬件层面上完成的，如果正常的话，普通软件（比如 <code>badblocks</code>）是根本没法发现这个 sector 是坏掉的，即便它去写那个 sector。</p><p>那么问题是不是就变得简单了呢，向标记为 Pending 的 sector 写一点东西就可以让硬件搞定这些问题了？看起来是的。在写之前需要知道有问题的 sector 在哪里，这个在 kernel log 里面已经看到了。现代的硬盘自己也会记录错误的 log，通过 <code>smartctl /dev/sdb -l error</code> 命令就能查看，虽然数量有限（我这里只有最后的 5 条），不一定会看到想要看的错误信息。</p><p>通过 fdisk 可以看到一个 sector 的大小：</p><div
class="wp_syntax"><div
class="code"><pre class="text" style="font-family:monospace;"># fdisk -lu /dev/sdb
&nbsp;
Disk /dev/sdb: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
....</pre></div></div><p>按照文章开头处 kernel log 中提到的 625142447，向这个地方写一点东西，让硬盘立即 remap 这个 Pending Sector：</p><div
class="wp_syntax"><div
class="code"><pre class="text" style="font-family:monospace;"># dd if=/dev/zero of=/dev/sdb bs=512 count=1 seek=625142447
dd: writing `/dev/sdb': Input/output error
1+0 records in
0+0 records out
0 bytes (0 B) copied, 7.26951 s, 0.0 kB/s</pre></div></div><p>有的朋友可能读到这里就发现我悲剧了，因为如果硬件正常的话，它会进行 remap，然后就能写成功了，但显然事与愿违，硬盘没有进行 remap，这时用 <code>badblocks</code> 也能发现这个坏道：</p><div
class="wp_syntax"><div
class="code"><pre class="text" style="font-family:monospace;"># badblocks -svw -b 512 /dev/sdb 625142447 625142447
Checking for bad blocks in read-write mode
From block 625142447 to 625142447
Testing with pattern 0xaa: done
625142447
Reading and comparing: done
Testing with pattern 0x55: done
Reading and comparing: done
Testing with pattern 0xff: done
Reading and comparing: done
Testing with pattern 0x00: done
Reading and comparing: done
Pass completed, 1 bad blocks found.</pre></div></div><p>用 <code>smartctl</code> 可以验证 Current Pending Sector 还是 1，并没有变成 0。一切都没有改变，所有的硬盘 SMART 自检都会失败，kernel 还是会产生那样的 log，并持续几十秒挡住你，不让用这块硬盘。</p><p>这时候我突然想到了这块希捷硬盘可能还在保修期 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_eek.gif' alt='8-O' class='wp-smiley' /></p><div
class="wp_syntax"><div
class="code"><pre class="text" style="font-family:monospace;">厂商保修信息：
    * 该商品保修期为36个月。
    * 3 年有限责任质保(第一年免费包换，第二，三年保修)</pre></div></div><p>看起来只能换不能修了，早知道在刚出问题的时候就去换一个了 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> 想到 Windows 下使用没有问题，说清楚问题所在还是挺麻烦的。并且邮寄费用并不便宜，寄来寄去说不定还会导致彻底坏掉了，还是不要修了 &#8230;.</p><p>绝望中突然看到了希望，那就是希捷硬盘可以使用的 <a
href="http://www.seagate.com/www/en-us/support/downloads/seatools">SeaTools</a> 。它有两个版本，Windows 版能做的事情比 <code>smartctl</code> 命令还要少，真的没啥用，而且把希捷自家的硬盘放到外面的盒子里就认不出来是希捷的了。不过官方说 DOS 版本能修复坏道，这应该是最后的希望了。</p><p>于是赶紧下载，刻录成光盘，由于 SeaTools for DOS 不支持移动硬盘，就把现在用的硬盘换下来，用光盘启动，见到了久违的 FreeDOS 。SeaTools for DOS 的坏道修复功能不依靠 SMART 信息，需要执行一次全盘扫描，扫描用了两个小时，接着果然提供了一个 Repair 选项，果断使用，成功了 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> 在此之后这快硬盘用起来完全正常，即便查看 SMART 信息也看不出来有一个坏道被映射了。SeaTools for DOS 还提供了设置硬盘容量的功能，实际上这次有问题的 sector 就是整个硬盘有效 sector 的倒数第二个，修改硬盘容量，减少 1 MB，也应该是解决问题的不错办法。</p><p>总结起来，这次这个事情之后有一些经验：</p><ol><li>对于硬盘健康情况的检测，<code>badblocks</code> 这种东西太旧了，而且对现代硬盘也不一定有效。<code>smartctl</code> 可以多快好省地完成许多相关事情。</li><li>虽然 SMART 是存在好多年的标准，但硬件不一定完全遵守它。厂商自己提供的工具才是最靠谱的！更广泛一点，软件和标准也是这样。</li><li><code>palimpsest</code> 用来查看 SMART 信息和做硬盘自检很不错，如果不喜欢命令行的 <code>smartctl</code> 就可以用它。而 <code>gparted</code> 则侧重于做编辑分区的工作。<div
id="attachment_419" class="wp-caption aligncenter" style="width: 310px"><a
href="http://lihdd.net/wp-content/uploads/2010/05/palimpsest_smart_info.png"><img
class="size-medium wp-image-419 " title="palimpsest_smart_info" src="http://lihdd.net/wp-content/uploads/2010/05/palimpsest_smart_info-300x251.png" alt="" width="300" height="251" /></a><p
class="wp-caption-text">用 Palimpsest 查看硬盘的 SMART 信息</p></div></li><li>Linux 可以早于 Windows 发现磁盘可疑坏道，可疑坏道出现后的很长一段时间内还是可以读取的，只是硬盘要多用一点力气。</li><li>发现硬盘问题时应该立即换下可疑硬盘，备份数据到可靠的硬盘里，再考虑修复。除非很了解正在使用的 FS，掌握 <code>debugfs</code> 等的用法，否则不要直接尝试在线修复坏道。</li><li>定期使用如 <code>rsync</code> 的软件备份数据到别的地方，硬盘数据，正如国歌中的中华民族，到了最危险的时候。</li><li>有时候见到把硬盘的最后 8 MB 空出来，不分到任何分区去，也许是有一定道理的。</li></ol> ]]></content:encoded> <wfw:commentRss>http://lihdd.net/seagate-bad-blocks/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Upgrade complete</title><link>http://lihdd.net/upgrade-completed/</link> <comments>http://lihdd.net/upgrade-completed/#comments</comments> <pubDate>Tue, 24 Feb 2009 12:38:23 +0000</pubDate> <dc:creator>quark</dc:creator> <category><![CDATA[Life]]></category> <category><![CDATA[Hardware]]></category><guid
isPermaLink="false">http://lihdd.net/?p=22</guid> <description><![CDATA[之前在网上订购了一块希捷320GB的硬盘，终于在昨天送到了， 最近Archlinux官方也推出了2009版本的系统镜像，支持ext4文件系统，正好可以在新硬盘上用 Linux系统由于没有注册表等设计，重装起来比Windows轻松多了： 分区，用光盘安装基本系统 添加一个用户，像这样：adduser quark 使用包管理器安装需要的软件，Archlinux下用pacman -S xxx 从旧系统复制文件，主要是/etc下的一些配置和/home下的大部分文件，用cp -a可以保留源文件的所有者和修改时间等 做完这些后，就基本上找不到新系统的感觉了 这次没有给系统留交换分区，全部采用了ext4，感觉启动时间要短一些。 新的希捷硬盘也令人满意，工作时噪音比旧的日立硬盘小很多。 Archlinux简单，轻巧，但软件仓库却只有各软件的最新版本。软件并不越新越好，这样的设计很难让用户稳定在一个时代又兼有装卸软件的需要。这次用新硬盘，我就在本地做了一个不更新的镜像，同时在pacman的配置文件中用了这样一行： Server = file:///home/quark/mirror/archlinux/$repo/os/i686 官方文档只提到了ftp和http，没想到这样也是可以的 但是我很快遇到一个恼人的问题，就是经常遇到 Xlib: extension "Generic Event Extension" missing on display ":0.0" 这样的警告，甚至一下子连续很多行都是这个。 从Google的结果看，这个问题最近才发生，在很多发行版都有。虽然这是“无害”的警告，但将stderr重定向到null也不能消灭它就令人烦恼。 Xorg Team没把这个问题当做是Bug（Link）。也许，只是输出令人烦恼的信息，没有导致实质的错误就不算Bug吧。 这个问题也反映了开源社区的一些问题，比如各软件尽管联系紧密开发却相对独立，开发者不注重用户真实体验等。 代码风格各异、文档残缺不全、到处没有担保的开源世界，也许只在能折腾的人眼里，才是一道靓丽的风景线吧 :&#124;]]></description> <content:encoded><![CDATA[<p>之前在网上订购了一块希捷320GB的硬盘，终于在昨天送到了，</p><p>最近<a
title="Archlinux Homepage" href="http://www.archlinux.org/">Archlinux</a>官方也推出了2009版本的系统镜像，支持ext4文件系统，正好可以在新硬盘上用 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <span
id="more-22"></span></p><p>Linux系统由于没有注册表等设计，重装起来比Windows轻松多了：</p><ul><li>分区，用光盘安装基本系统</li><li>添加一个用户，像这样：adduser quark</li><li>使用包管理器安装需要的软件，Archlinux下用pacman -S xxx</li><li>从旧系统复制文件，主要是/etc下的一些配置和/home下的大部分文件，用cp -a可以保留源文件的所有者和修改时间等</li></ul><p>做完这些后，就基本上找不到新系统的感觉了 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /></p><p>这次没有给系统留交换分区，全部采用了ext4，感觉启动时间要短一些。<br
/> 新的希捷硬盘也令人满意，工作时噪音比旧的日立硬盘小很多。</p><p>Archlinux简单，轻巧，但软件仓库却只有各软件的最新版本。软件并不越新越好，这样的设计很难让用户稳定在一个时代又兼有装卸软件的需要。这次用新硬盘，我就在本地做了一个不更新的镜像，同时在pacman的配置文件中用了这样一行：</p><pre>Server = <strong>file://</strong>/home/quark/mirror/archlinux/$repo/os/i686</pre><p>官方文档只提到了ftp和http，没想到这样也是可以的 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p>但是我很快遇到一个恼人的问题，就是经常遇到</p><pre>Xlib: extension "Generic Event Extension" missing on display ":0.0"</pre><p>这样的警告，甚至一下子连续很多行都是这个。</p><p>从Google的结果看，这个问题最近才发生，在很多发行版都有。虽然这是“无害”的警告，但将stderr重定向到null也不能消灭它就令人烦恼。</p><div
id="attachment_27" class="wp-caption alignnone" style="width: 353px"><img
class="size-full wp-image-27" title="google_timeline_xlib_problem" src="http://lihdd.net/wp-content/uploads/2009/02/google_timeline_xlib_problem1.png" alt="Google timeline view" width="343" height="64" /><p
class="wp-caption-text">Google timeline view</p></div><p>Xorg Team没把这个问题当做是Bug（<a
title="Bug 16134 - Xlib seems to miss XGE" href="http://bugs.freedesktop.org/show_bug.cgi?id=16134">Link</a>）。也许，只是输出令人烦恼的信息，没有导致实质的错误就不算Bug吧。</p><p>这个问题也反映了开源社区的一些问题，比如各软件尽管联系紧密开发却相对独立，开发者不注重用户真实体验等。</p><p>代码风格各异、文档残缺不全、到处没有担保的开源世界，也许只在能折腾的人眼里，才是一道靓丽的风景线吧 :|</p> ]]></content:encoded> <wfw:commentRss>http://lihdd.net/upgrade-completed/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: lihdd.net @ 2012-05-19 14:38:03 -->
