Skip to content

Instantly share code, notes, and snippets.

@bokutin
Last active August 29, 2015 14:00
Show Gist options
  • Save bokutin/be7eac13477eadc57ecc to your computer and use it in GitHub Desktop.
Save bokutin/be7eac13477eadc57ecc to your computer and use it in GitHub Desktop.
FreeBSD リードエラーでgmirror片肺から戻せない
gmirrorで片肺なったのに新調したHDDを足してsyncしても次のエラーで落ちる。
May 4 22:46:35 lian kernel: GEOM_MIRROR: Request failed (error=5). ada2p3[READ(offset=1869273890816, length=131072)]
% bc -le "1869273890816 / 512"
3650925568.00000000000000000000
% bc -le "131072 / 512"
256.00000000000000000000
% dd if=/dev/ada2p3 of=/dev/null iseek=3650925568 count=256
(コンソールにエラー CAM status: ATA Status Error )
確かに読めないっぽい。
次を参考に、読めない場所のファイル名を探してみる。
https://github.com/mwisnicki/freebsd-block2file/blob/master/block2file.rb
% fsdb /dev/ada2p3
fsdb (inum: 2)> findblk 3650925568
見つからないようだ。空き領域だと思われる。
USBブートする。
下で0を書き込む。
% dd if=/dev/zero of=/dev/ada2p3 oseek=3650925568 count=256
確かに予備セクタから割り当てられた。(dd書き込み前は RAW_VALUE は 0 だった)
% sudo smartctl -a /dev/ada2 | grep Reallocated_Sector_Ct
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 8
今度は読める。
% dd if=/dev/ada2p3 of=/dev/null iseek=3650925568 count=256
でも dd でピンポイントに埋めずに ddrescue /dev/zero /chunk とかして空き領域を埋めつくすほうが安全だと思う。。。
(空きのデータ領域の場合にはなるけど)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment