2012年10月30日火曜日

壊れたHDDを、Advanced FormatのHDDに交換。

前ブログ、 HDL-GS500が故障の続きです。

壊れたHDL-GS500のHDDを交換するために、新しいHDDを買いました。そのときの店員さんの話では、今販売しているHDDのほとんどがAdvanced Formatということでした。

今後、修理や交換のために入手できるHDDは、Advanced Formatの選択肢しか残らないようですね。

今回買ったのは、HITACHI HDS721010DLE630 1.0TB Advanced Formatです。


Advanced Format のHDDとは

近年に登場した4096バイト・セクターのHDDには、内部のファームウェアで、4096バイトの物理セクターを、512バイト単位の8個の論理セクターに分割するしくみ (512バイト・セクター・エミュレーション)をもったものがあります。これらのHDDは4kセクターHDDや、Advanced FormatのHDDと呼ばれています。

セクターサイズを512バイトから、4096バイトへ拡大する理由や課題について、以下に簡単に纏めてみました。詳細については後述する参考Webサイトを参照ください。

  • HDDの大容量化に伴って、512バイト・セクターの抱える課題が顕著になってきた。
    • ディスクの総容量に対するセクター・サイズとの比率が大きくなることで、エラー修正が煩雑になり効率が低下してしまう。
    • 面密度の増加に伴って、1セクターあたりの表面積が縮小していくことになり、メディア欠損時のエラー修正がより困難になってきた。
    • セクター・サイズの拡大による利点として、エラー修正機能の改善、フォーマット効率の向上が挙げられている。
  • 512バイト・セクター・エミュレーション。
    • 従来の512バイト・セクターを対象にした機器との互換を保ちながら、4096バイト・セクターへの移行をスムーズに進めるためのしくみ。
    • HDD内部のファームウェアにより、4096バイトの物理セクターを、512バイト単位の8個の論理セクターに分割してデータ処理を行う。
    • このしくみを使うことでPCから見たHDDは、今まで同様に512バイト・セクターのHDDように振る舞う。
  • ユーザー側で回避すべき重要な課題
    • 512バイト・セクター・エミュレーションが、パフォーマンスに与える影響を最小限にするため、HDDへの書き込み時の、読み出し・修正・書き込みプロセスの発生頻度を最小限に抑えることが重要。
    • ファイルシステムのデータ構造と、パーティションのアライメント・マッチングが必須。
    • 適切なブロックサイズの選択が重要。
  • 適切なパーティショニング・ツールの選択。
    • 各パーティションの開始位置を、アライメント0の状態に設定できるツールを使用する。
    • アライメント0の位置とは、セクター位置が8の倍数になる位置のことを言う。
      (4096 バイト/セクター = 512 バイト/セクター ×
    • 従来のパーティショニング・ツールでは、シリンダ境界をパーティション境界に設定するようになっているので、そのまま使用するとアライメントがズレてしまうことになる。
      この場合、デフォルトの操作単位を、シリンダーからセクターに変更する機能があれば、アライメント0のパーティションを作成できる場合がある。
    • HDDの開始セクターの位置は、クロスプラットフォームの観点から見た場合は2048が無難。

Linuxでの、Advanced Formatの使用については、以下のWebサイトが参考になりました。

IBM developerWorks 4KB セクター・ディスクで Linux を使用する: 実用的なアドバイス
Seagate アドバンスド・フォーマット4Kセクター・ハードディスク・ドライブへの移行


HDL-GS500修復用HDDの、パーティショニングの考察

今回の修復作業におけるLinux使用時の注意点は、以下の内容が考えられます。

  • HDDの開始セクター位置を 2048 に設定する。
  • 各パーティションの開始位置を、アライメント0の状態にする。
  • ただし、sda6のアライメントは調整しない。
  • ファイルシステムのブロックサイズを、4096バイトにする。

このあたりを考慮しながら、進めていくことにしました。

先日確認したときの、壊れたHDDのパーティション構成は以下のようになっていました。

~# fdisk -l /dev/sda

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 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
Disk identifier: 0xee4739c6

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1           16065      642599      313267+  83  Linux
/dev/sda2          642600     1461914      409657+  83  Linux
/dev/sda3         1461915     5670944     2104515   82  Linux swap / Solaris
/dev/sda4         5670945   976559219   485444137+   5  Extended
/dev/sda5         5670946     6088634      208844+  83  Linux
/dev/sda6         6088636   976559219   485235292   83  Linux
それぞれのパーティション先頭セクターの値を、8の倍数に調整した結果、各パーティションの開始セクターの位置を以下の値に決めました。
  • sda1の開始セクタ 2048、
  • sda2の開始セクタ 628584、
  • sda3の開始セクタ 1461912、
  • sda5の開始セクタ 5670944、

拡張領域sda4の開始セクターはsda5の開始セクター-1としました。いまのところ、この領域の開始セクター位置も、アライメント0にする必要があるのかは良くわかっていません。入れ子になっている論理領域sda5やsda6の外側の領域なので、あまり影響が無いと考えています。

sda6の開始セクターは、今回のデータの修復のために、パーティション全体をコピーするので、あえて変更しないことにします。ここを変更するとセクター位置がズレてしまい、xfsファイルシステムにアクセスできなくなる心配があります。そのため、この部分のアライメントのズレはやむおえません。 データ修復後に改めて、sda6のアライメント調整をすることにしました。


初期化用シェルスクリプト tar2disk を利用する

先日USBメモリに保存することができた初期化シェルスクリプト、tar2diskの9行目の内容を、こちら のWebサイトの情報を元にして、

sddev=/dev/hdb を sddev=/dev/sda に。
修正してtar2disk実行したところ、この新しいHDDのサイズを正常に1.0GBと認識して、初期化することができました。ただし、この時点では、まだアライメント調整はできていません。

次に、tar2diskで初期化した1.0TB HDDのマスターブートレコード(MBR)と、拡張パーティションブートレコード(Extended Partition Boot Record)を 調べてみました。

オリジナルの、HDDのパーティションと比べたところ、各パーティション開始セクターの位置が、両方とも同じでした。

さらに、初期化用シェルスクリプトtar2diskを調べてみると、各パーティションの先頭位置は、あらかじめ決められた値に固定されており。

cat /sys/block/$disk/size
で、取得したHDDの総セクター数を元にして、拡張領域sda4のサイズと、論理領域sda5,sda6のサイズを計算しているようだ、ということがわかりました。

そこで、このシェルスクリプトを少し修正してみることにしました。修正点はパーティショニングと、ext3のブロックサイズの変更です。

disk2cyl( )を、HDDから取得した総セクター数を元にして、データ保存領域に使用するシリンダ数を計算している部分を、セクター数で返すようにに変更しました。

partition( )は、sfdiskコマンドを使い、一括してパーティショニングを行っています。この部分のシリンダ単位で指定している部分を、セクター単位で指定するように変更しました。

format( )は、 ext3のブロックサイズを4096バイトに修正しました。

現時点では、壊れた500GBのHDD修復が目的なので、sda6の開始セクター位置のアライメントを調整していません。これは、データの修復のためにパーティション全体をコピーする必要があるからです。 また、新しいHDDには1.0TBを使用していますが、修復の都合上HDDサイズを500GBで初期化するようにしています。

シェルスクリプト中の下に示す行は、初期化する環境に合わせて変更が必要です。

sddev=/dev/hdb   # ##### 初期化する環境に合わせて変更してください #####
例えば、初期化するHDDが/dev/sdaなら、sddev=/dev/sdaに変更します。

HDDサイズは500GBに固定、アライメント調整適用済みtar2disk 修復用暫定版、

#!/bin/sh
#
# tar2disk: tar ball をディスクに展開
#
# usage: tar2disk sda
# ##### 2012/10/01 sfdiskをシリンダ指定から、セクタ指定へ変更。#####

mnt=./mnt
sddev=/dev/hdb   # ##### 初期化する環境に合わせて変更してください #####

PATH=$PATH:/sbin

#
# 16進->10進変換
#
hex2dec() {
    expr 1 + `printf "%d" $1`
}

#
# モデルごとの制限セクタ数
#
sector160=`hex2dec 0x12A05FBF`
sector250=`hex2dec 0x1D1A9C7F`
sector300=`hex2dec 0x22ECB57F`
sector320=`hex2dec 0x2540BF7F`
sector400=`hex2dec 0x2E90F73F`
sector500=`hex2dec 0x3A353900`
sector750=`hex2dec 0x574FCD9F`
sector1000=`hex2dec 0x74706DAF`

#cyl_end=379   # sda5 の終了セクタ
cyl_end=6088636   # ##### シリンダ値をセクタ値に変更 #####


#
# ディスク名からモデルで丸められたセクタ数を得る
# ##### 2012/10/01 セクタ数を返すように修正 #####
disk2cyl() {
    local disk=$1
#local sector=`cat /sys/block/$disk/size`
local sector=976566529  # ##### 修復のため、HDDサイズを500GBに固定。 #####
    if [ $sector -lt $sector160 ]; then
 echo -n error
 exit 1
    elif [ $sector -lt $sector250 ]; then
 expr \( \( $sector160 / 255 / 63 \) \* 16065 \) - $cyl_end
    elif [ $sector -lt $sector300 ]; then
 expr \( \( $sector250 / 255 / 63 \) \* 16065 \) - $cyl_end
    elif [ $sector -lt $sector320 ]; then
 expr \( \( $sector300 / 255 / 63 \) \* 16065 \) - $cyl_end
    elif [ $sector -lt $sector400 ]; then
 expr \( \( $sector320 / 255 / 63 \) \* 16065 \) - $cyl_end
    elif [ $sector -lt $sector500 ]; then
 expr \( \( $sector400 / 255 / 63 \) \* 16065 \) - $cyl_end
    elif [ $sector -lt $sector750 ]; then
 expr \( \( $sector500 / 255 / 63 \) \* 16065 \) - $cyl_end
    elif [ $sector -lt $sector1000 ]; then
 expr \( \( $sector750 / 255 / 63 \) \* 16065 \) - $cyl_end
    else
 expr \( \( $sector1000 / 255 / 63 \) \* 16065 \) - $cyl_end
    fi
    return 0
}


#
# パーティションを切る
# ##### 2012/10/01 シリンダ指定からセクタ指定へ変更 sda6の開始セクタは暫定値 #####
partition() {
 local disk=$1
 local c5=417689               # ##### 26*255*63-1 #####
 local cyl=`disk2cyl $disk`
 local ext=`expr $cyl + $c5 + 4`

 dd if=/dev/zero of=/dev/$disk bs=512 count=2 || exit 1
 sfdisk -f -u S /dev/$disk <<EOF || exit 1
2048,626535,L
628584,833327,L
1461912,4209030,S
5670943,$ext,E
5670944,$c5,L
6088636,$cyl,L
EOF
}


#
# format
# ##### 2012/10/01 ブロックサイズを4096バイトに変更。#####
format() {
 local i=$1

 if [ $i -eq 1 ]; then
  [ $flag_reset -eq 1 ] && return 0
  mke2fs -b 4096 -j -m1 $sddev$i || return 1
 elif [ $i -eq 2 ]; then
  mke2fs -b 4096 -j -m1 $sddev$i || return 1
 elif [ $i -eq 5 ]; then
  mke2fs -b 4096 -j -N 100000 \
   -O dir_index,filetype,sparse_super $sddev$i || return 1
 else
  [ ! -f /sbin/mkfs.xfs ] && cp -a ${SCRIPT_PATH}/mkfs.xfs /sbin/
  mkfs.xfs -f $sddev$i || return 1
 fi
 return 0
}


#
# fw_install
#
fw_install() {
 touch verify_on_boot
 cp -a ../sd?.tgz ../tar2disk ./.landisk/
 mkdir ./.landisk/mnt
}


#
# 初期化後updateの為にflag fileをtouchする
#
set_reset_flag() {
 touch ./.landisk/reset_ok
}


#
# ディスクを 0 クリアする
#
sanitize_disk() {
 local i=$1
 echo "--- sanitize disk"
 dd if=/dev/zero of=$sddev$i bs=1M || return 1
}


#
# install_logを 作成する
#
set_install_log() {
 local end_time
 local j
 local mac_addr=`/sbin/ifconfig eth0 | sed -n 's/^.*HWaddr \([0-9A-F:]*\)[ ]*$/\1/p'`
 local log_dir="$mnt/factory_log"
 local install_log="$log_dir/install.log"

 mount ${sddev}5 $mnt || return 1
 if [ ! -d $log_dir ]; then
  mkdir $log_dir || return 1
 fi
 end_time=`date`
 echo "Mac Address: $mac_addr" > $install_log
 echo "Install Start: $START_TIME" >> $install_log
 echo "Install End: $end_time" >> $install_log
 for j in 1 2 3 4 5 6 7 8 9 10; do
  sync
  umount $mnt && break || sleep 1
 done
}

#
# factorylogの退避
#
bk_factory_log() {
 local factory_tgz=$topdir/factory_log.tar.gz
 if [ ! -f $factory_tgz ]; then
  mount ${sddev}5 $mnt || return 1
  tar cpzf $factory_tgz -C $mnt factory_log
  umount $mnt
 fi
}

#
# factorylogの書き戻し
#
restore_factory_log() {
 local factory_tgz=$topdir/factory_log.tar.gz
 if [ -f $factory_tgz ]; then
  tar xpzf $factory_tgz
  echo `LANG=C date`: reset_script: >> factory_log/powerlog
  rm -f $factory_tgz
 fi
}


#
# smartチェックを行う
#
smart_check() {
 local disk=$1
 local RESULT_SMARTCTL=0
 local RESULT_SMARTCTL_BIT0=0
 local RESULT_SMARTCTL_BIT1=0
 local RESULT_SMARTCTL_BIT2=0
 local RESULT_SMARTCTL_BIT3=0
 [ ! -f /usr/sbin/smartctl ] && cp -a ${SCRIPT_PATH}/smartctl /usr/sbin/

 /usr/sbin/smartctl --smart=on --offlineauto=on --saveauto=on \
     /dev/${disk}
 /usr/sbin/smartctl -a /dev/${disk}
 RESULT_SMARTCTL=$?
 RESULT_SMARTCTL_BIT0=$((${RESULT_SMARTCTL} & 1))
 RESULT_SMARTCTL_BIT1=$((${RESULT_SMARTCTL} & 2))
 RESULT_SMARTCTL_BIT2=$((${RESULT_SMARTCTL} & 4))
 RESULT_SMARTCTL_BIT3=$((${RESULT_SMARTCTL} & 8))

 if [ ${RESULT_SMARTCTL_BIT0} -ne 0 ]; then
     echo "*** FAILED TO ENABLE S.M.A.R.T. DISK=${disk} ***"
     echo "*** COMMAND LINE PARSE ERROR ***"
     return 1
 fi
 if [ ${RESULT_SMARTCTL_BIT1} -ne 0 ]; then
     echo "*** FAILED TO ENABLE S.M.A.R.T. DISK=${disk} ***"
     echo "*** DEVICE OPEN FAILED ***"
     return 1
 fi
 if [ ${RESULT_SMARTCTL_BIT2} -ne 0 ]; then
     echo "*** FAILED TO ENABLE S.M.A.R.T. DISK=${disk} ***"
     echo "*** S.M.A.R.T. COMMAND FAILED ***"
     return 1
 fi
 if [ ${RESULT_SMARTCTL_BIT3} -ne 0 ]; then
     echo "*** S.M.A.R.T ERROR DETECTED DISK=${disk} ***"
     echo "*** STATUS: DISK FAILING ***"
     return 1
 fi
 return 0
}


#
# メイン
#
disk=$1
mode=$2
topdir=`pwd`

if [ "$disk" = "" ]; then
 echo usage: tar2disk sda 1>&2
 exit -1
fi

if [ "x$mode" == "xreset" ]; then
 flag_install=0
 flag_reset=1
 flag_reset_full=0
elif [ "x$mode" == "xreset_full" ]; then
 flag_install=0
 flag_reset=1
 flag_reset_full=1
else
 flag_install=1
 flag_reset=0
 flag_reset_full=0
fi

for i in 1 2 5 6; do
 umount $sddev$i
done

if [ $flag_install -eq 1 ]; then
 smart_check $disk || exit 1
 partition $disk
fi

mkswap /dev/${disk}3
swapon /dev/${disk}3
trap "swapoff /dev/${disk}3" 0

for i in 1 2 5 6; do
 cd $topdir
    
 echo --- partitioning $i
 [ $i -eq 6 -a $flag_reset_full -eq 1 ] && sanitize_disk $i
 [ $i -eq 5 -a $flag_reset -eq 1 ] && bk_factory_log
 echo --- format partition
 format $i || exit 1
 mount $sddev$i $mnt || exit 1

 echo --- extracting tar ball
 cd $mnt || exit 1
 tar zxf ../sd$i.tgz || exit 1
 [ $i -eq 1 -a $flag_install -eq 1 ] && fw_install
 [ $i -eq 1 -a $flag_reset -eq 1 ] && set_reset_flag
 [ $i -eq 5 -a $flag_reset -eq 1 ] && restore_factory_log
 cd $topdir || exit 1
    
 echo --- unmounting
 for j in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
  sync
  umount $mnt && break || sleep 1
 done
 [ "$?" -ne 0 ] && exit 1
done

[ $flag_install -eq 1 ] && set_install_log
exit 0

修正したシェルスクリプトを使って初期化した後のパーティション構成です。拡張領域sda4の、開始セクター位置のアライメントがズレているとメッセージが出ています。やっぱりここの位置合わせも行ったほうがいいのでしょうか?

root@Microknoppix:~# fdisk -l /dev/sda

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048      628582      313267+  83  Linux
/dev/sda2          628584     1461910      416663+  83  Linux
/dev/sda3         1461912     5670941     2104515   82  Linux swap / Solaris
/dev/sda4         5670943   976559219   485444138+   5  Extended
Partition 4 does not start on physical sector boundary.
/dev/sda5         5670944     6088632      208844+  83  Linux
/dev/sda6         6088636   976559219   485235292   83  Linux
Partition 6 does not start on physical sector boundary.

さらに念のため、この1.0TB HDDのマスターブートレコード(MBR)と、拡張パーティションブートレコード(Extended Partition Boot Record)を調べてみました。

sda6の開始セクター位置を計算すると 5670943 + 417690 + 3 = 6088636 になるので、たぶんこれで大丈夫そうです。

この後、このHDDでHDL-GS500を組み立てなおし、正常に動作できることが確認できました。さらに一歩前進できました。


この後の計画

いろいろと試行錯誤しながらでしたが、前回計画したstep5まで、なんとか進めることができました。

この後、計画step6から、
GNU ddrescueを使って、壊れたHDDからデーターを救出。
へ続きます。

  1. 新HDDを取出し、旧HDDと共にPCへSATA接続。
  2. 旧HDDのsda6を、新HDDのsda6にコピーする。
  3. 新HDDで再組立て。
  4. HDL-GS500を起動して、保存しているデータのバックアップを取る。

2012年10月25日木曜日

HDL-GS500が故障。

既にひと月も前の事になりますが、ファイル保存に使用しているネットワーク・ハードディスクHDL-GS500が故障してしまいました。その後、復旧まで時間がかかりましたが、試行錯誤の後にデータを救出することができ、HDL-GS500を再セットアップする目処が立ちましたので、忘れないうちに修復の記録を書いていきます。


故障時の症状

9月の中旬ごろのことでした。前日まで普通に使えていたのですが、その日は電源を入れて暫く経っても緑ランプの点滅状態が続き、そのまま待っていても起動完了状態になりませんでした。

マニュアルを読んでみると、緑点滅中はシステム処理中のため、電源を切ったり、リセットしないようにと書かれているので、そのままにして翌日まで様子を見ることに。

しかし翌日になっても緑ランプの点滅状態が続いており、接続できない状態に変化は無く。しかたがないのでリセットボタンを押してみましたが、リセットもできない状態になっており、やむなくコンセントを抜きました。

その後、再び電源を入れてみましたが同じ症状のままで、起動完了できない状態に変化はありませんでした。とうとう壊れてしまったか…と、がっかりしてしまいました。

幸いにも、保存データのうちのほとんどは、別のハードディスクにバックアップを取っていたので助かったのですが、このHDL-GS500の中には、まだバックアップできていないデータが残ってしまいました。

(昨今の電力事情により、ふだん使用しないときには、本体の電源を切るようにしていました。)


HDD修復のための情報収集

壊れてしまったHDL-GS500の修理と、HDDのデータ救出について、どんな方法があるか調べてみました。

わかったことは、

  • HDDの中にHDL-GS500自身のシステム領域があるので、HDDの交換だけでは復旧できない。
  • データ領域のファイルシステムはxfs。しかしx86のLinuxマシンにmountして読みだすことができない。エンディアンの違いらしい。
  • 第1パーティションの中に、初期化用のファイルがある。
  • 内部の基板には、シリアルコンソール用の空パターンがある。
といった内容でした。

現状でHDDのデータを読み出すためには、HDL-GS500のシステムを修復して正常に起動できれば、保存データを読み出すことができるようになる、というのが結論でした。なんだかなぁ…ですが、考えてみれば確かにそのとおりです。

システム修復のためには二つの選択肢が考えられました。一つは、正常動作している同機種を入手して、HDDのシステム領域をまるごとコピーする方法。 もう一つは、壊れたHDDの中から, 修復に必要な初期化用のファイルを取り出方法です。

うまくいくかは、とにかくやってみないと判らない状態でしたが、先ずは後者の方法で進めることにしました。


HDL-GS500のパーティション構成

これまで調べた情報から、HDL-GS500内部HDDのパーティション構成は、6個のパーティションに分割されていることが分かりました。また、内部のシステム上ではHDDドライブをhdbとして認識しています。

それぞれのパーティション構成は、以下のようになっているようです。

 hdb1 bootイメージ            ext3 基本領域
 hdb2 システムファイル        ext3 基本領域
 hdb3 swap                    swap 基本領域
 hdb4 Extended                     拡張領域
 hdb5 アプリケーション用      ext3 論理領域
 hdb6 データ用領域            xfs  論理領域
HDL-GS500に保存したデータは、hdb6の領域に入っています。初期化に必要なファイルは、hdb1.landiskディレクトリの中にある、sd1.tgz, sd2.tgz, sd5.tgz, sd6.tgz, tar2diskのファイルということがわかりました。


シリアルコンソールから接続してみる

はじめに動作状態を見るために、HDL-GS500を分解して、シリアルコンソール接続用のコネクタを取り付けました。まずは、問題が起こっているところの状況確認がしたい、といった目的です。

Webの情報によると、HDL-GS500のシリアル信号レベルが3.3Vらしいので、レベル変換回路を経由してUSB-シリアル変換ケーブルでPCに接続しました。使ったレベル変換回路は数年前のトラ技の付録基板です、レベル変換にADM3202ANを実装しています。トラ技のいろいろな付録基板の中で、この付録基板はとても役に立っています。

シリアルコンソールへの接続はTeraTermProで行いました。

 ボーレート    115200
 データ         8 bit
 パリティ       none
 ストップビット 1 bit
 フロー制御     none
この設定で接続できました。ログインパスワードはログイン名と同じでした。

電源ボタンを押し、起動中の状態をシリアルコンソールから観察してみると、起動途中でエラーが発生しているようでログインすることができませんでした。電源を入れ直し何回か再起動するうちに、ようやくログインまで辿り着いたと思うと、しばらく操作しているうちにエラーが発生し、それ以降は操作不能状態になってしまいました。

end_request: I/O error, dev hdb, sector 871610
等のエラーメッセージが出ているので、やはりディスクに問題があるようでした。

下はシリアルコンソールに出力されたメッセージです。

Storlink CIR Initialization...




SL-Boot Loader for IO-Data HDL-GS [Linux], version 1.0.9.05_sata_bootp
Built by linux, 14:01:37, Oct 31 2007

Processor: SL3516c2
CPU Rate: 300000000
AHB Bus Clock:150MHz    Ratio:2/1
MAC 1 Address: XX:XX:XX:XX:XX:XX
MAC 2 Address: XX:XX:XX:XX:XX:XX
inet addr: 192.168.0.200/255.255.255.0
Kernel RAM Location: 0x01600000  Filename: zImage.gs
Initrd RAM Location: 0x00800000  Filename: rd.gz.gs
Waiting for disk ready & detect ...
Sending Reset...
IDE 0 Detect disk 0
Disk Drive: IDE-0, Device-0, 976773168 Sectors 500 GB 139 MB
Partition 1: Linux 626535 Sectors 320 MB
==> enter ^C to abort booting within 3 seconds ...... 
Load rd.gz.gs size 2049090...OK.
Load zImage.gs size 1828248...OK.
Uncompressing Linux................................................................................................................ done, booting the kernel.
Linux version 2.6.15 (root@devsrv) (gcc version 3.4.4 20041218 (prerelease) (Debian 3.4.3-1)) #2 Thu May 14 13:19:40 JST 2009
CPU: FA526id(wb) [66015261] revision 1 (ARMv4)
Machine: GeminiA
Ignoring unrecognised tag 0x00000000
Memory policy: ECC disabled, Data cache writeback
CPU0: D VIVT write-back cache
CPU0: I cache: 16384 bytes, associativity 2, 16 byte lines, 512 sets
CPU0: D cache: 8192 bytes, associativity 2, 16 byte lines, 256 sets
Built 1 zonelists
Kernel command line: root=/dev/hdb2 ro mem=64M console=ttySL0,115200 initrd=0x00800000,16M
PID hash table entries: 512 (order: 9, 8192 bytes)
Bus: 150MHz(2/1)
Console: colour dummy device 80x30
sl2312 console setup : 
Disable IDE...config to SATA mode
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 64MB = 64MB total
Memory: 44288KB available (2761K code, 1241K data, 100K init)
Mount-cache hash table entries: 512
*** Page_chain_cachep Init!***
CPU: Testing write buffer coherency: ok
checking if image is initramfs...it isn't (no cpio magic); looks like an initrd
Freeing initrd memory: 16384K
NET: Registered protocol family 16
PCI: bus0: Fast back to back transfers disabled
sl2312_pci_map_irq : slot = 0  pin = 1 
SCSI subsystem initialized
usbcore: registered new driver usbfs
usbcore: registered new driver hub
NetWinder Floating Point Emulator V0.97 (double precision)
VFS: Disk quotas dquot_6.5.1
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
NTFS driver 2.1.25 [Flags: R/O].
fuse init (API version 7.3)
SGI XFS with large block numbers, no debug enabled
SGI XFS Quota Management subsystem
Initializing Cryptographic API
io scheduler noop registered
io scheduler cfq registered
Real Time Clock Driver v0.10
Gemini Gpio init
Register Gemini Power control
Power event by Unknow Source 
Watchdog Timer Initialized
Storm crypto Initialization
ttySL0 at MMIO 0x42000000 (irq = 18) is a SL2312
RAMDISK driver initialized: 16 RAM disks of 16384K size 1024 blocksize
loop: loaded (max 8 devices)
ipddp.c:v0.01 8/28/97 Bradford W. Johnson 
ipddp0: Appletalk-IP Encap. mode by Bradford W. Johnson 
VSC-switch not found
Storm Semiconductors,Inc. SL351x Giga Ethernet driver 0.1.7 built at May 14 2009 11:43:02
Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
ide 1: physical = 63400000, virtual = c4800000, irq = 5
ide0: MMIO-DMA , BIOS settings: hda:pio, hdb:pio
MASTER not exist
hdb: ST3500820AS, ATA DISK drive
hdb speed:U6 (66MHz)(0x46)
ide0 at 0xc4800020-0xc4800027,0xc4800036 on irq 5
hdb: max request size: 1024KiB
hdb: 976773168 sectors (500107 MB) w/8192KiB Cache, CHS=60801/255/63
hdb: cache flushes supported
hdb: hdb1 hdb2 hdb3 hdb4 < hdb5 hdb6 >
SL2312 MTD Driver Init.......
sl2312flash_init: value=0x82c22035
sl2312flash_init: value=0x82c22025 after mask
SL2312 CFI Flash: Found 1 x16 devices at 0x0 in 16-bit bank
Amd/Fujitsu Extended Query Table at 0x0040
SL2312 CFI Flash: CFI does not contain boot bank location. Assuming top.
number of CFI chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
Creating 2 MTD partitions on "SL2312 CFI Flash":
0x00000000-0x00070000 : "SL boot"
0x00070000-0x00080000 : "VCTL"
SL2312 MTD Driver Init Success ......
FTC_FOTG2XX_1 : Init FOTG2XX Driver
Init FOTG2xx driver 
FTC_FOTG2XX_1 : >>> Found FOTG2XX ...
pFTC_OTG_1 c16212a0
hcd->self.controller c16b3c00
hcd end
hcd_buffer_create
ehci-hcd-FOTG2XX-1 ehci-hcd-FOTG2XX-1: new USB bus registered, assigned bus number 1
usb_register_bus
ghcd_FOTG2XX_1 hcd c16b3c00
hcd_irq_For_OTG_1
ehci->caps->length 10, hcd->regs f6900000 , ehci->regs f6900010 
udev->state 1 
drivers/usb/host/ehci-hcd-FOTG2XX-1.c: USB support enabled, EHCI rev 101. 0
Timing on EOF1(0xf6900040) = 0xd
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
FTC_FOTG2XX_1 : >>> +FOTG2XX_get_otg_transceiver_1
FTC_FOTG2XX_1 : registered host c16b3c00
OTG2XX act as HOST only (don't need to wait gadget driver)
+(OTGC_Init_1)
pFTC_OTG_1->otg.default_a=1 
+(OTGC_Init_1)
pFTC_OTG_1->otg.default_a=1 
OTG_enable_VBUS 
FTC_FOTG2XX_1 : >>> Drive VBUS ok...
+OTGP_Close_1()
OTG2XX act as HOST only (remove gadget function)
+OTGH_Open_1()(0x30=0x0)
OTG_enable_VBUS 
mdwOTGC_Control_A_VBUS_VLD_Rd 80000
+OTGP_Close_1()
OTG2XX act as HOST only (remove gadget function)
+OTGH_Open_1()(0x30=0x0)
ehci otg_set_host status 0 
connect_change 1 
clear_bit 
return set_bit
usbcore: registered new driver usblp
drivers/usb/class/usblp.c: v0.13: USB Printer Device Class driver
Initializing USB Mass Storage driver...
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
FTC_FOTG200_udc : Init USB device Lower driver
FOTG200_BASE_ADDRESS = 0xf6800000
******reg_val = a2822025 
FTC_FOTG200_udc : ***** FOTG200 Peripheral 2.0 Test program *****
FTC_FOTG200_udc : L0: System initial, Please wait...
FTC_FOTG200_udc : L1: System is ready(dev->EPUseDMA=0xff)...
FTC_usb_probe end
mice: PS/2 mouse device common for all mice
ipsec_init : cryptographic accelerator 
ipsec tx_desc = ffc10000
ipsec rx_desc = ffc11000
ipsec tx_desc_dma = 016d9000
ipsec rx_desc_dma = 016da000
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 2, 16384 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
TCP bic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
NET: Registered protocol family 5
RAMDISK: Compressed image found at block 0
EXT2-fs warning: checktime reached, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem).
/initrd/linuxrc
=====
SoC arch is FA526id
root device is /dev/hdb2
=====
kjournald starting.  Commit interval 5 seconds
EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
EXT3 FS on hdb5, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
modprobe: cannot parse modules.dep
mount: mounting /dev/sdz1 on /mnt/usb1 failed
mount: mounting /dev/sdz on /mnt/usb1 failed
mount: mounting /dev/scd0 on /mnt/usb1 failed
kjournald starting.  Commit interval 5 seconds
EXT3-fs: mounted filesystem with ordered data mode.
kjournald starting.  Commit interval 5 seconds
EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
EXT3 FS on hdb5, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
mke2fs 1.40-WIP (14-Nov-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1280 inodes, 10240 blocks
512 blocks (5.00%) reserved for the super user
First data block=1
2 block groups
8192 blocks per group, 8192 fragments per group
640 inodes per group
Superblock backups stored on blocks: 
 8193

Writing inode tables: 0/21/2done                            
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Model Number : ST3500820AS                             
Firmware Rev.: SD3A    
Serial No.   :             XXXXXXXX
This is not Target(S.M.A.R.T. Error)
*** This is not Target ***
*** sghddchk_check : Not Target HDD ***
*** hdb5: hddupstart is not found ***
rmmod: sr_mod: No such file or directory
rmmod: cdrom: No such file or directory
=== linuxrc end
kjournald starting.  Commit interval 5 seconds
EXT3-fs: mounted filesystem with ordered data mode.
VFS: Mounted root (ext3 filesystem) readonly.
Trying to move old root to /initrd ... okay
Freeing init memory: 100K
INIT: version 2.86 booting
Setting parameters of disc: (none).
Activating swap...Adding 2104504k swap on /dev/hdb3.  Priority:-1 extents:1 across:2104504k
done.
Checking root file system...fsck 1.40-WIP (14-Nov-2006)
e2fsck 1.40-WIP (14-Nov-2006)
/dev/hdb2 has been mounted 71 times without being checked, check forced.
Pass 1: Checking inodes, blocks, and sizes
/dev/hdb2: |=                                                       |  1.4%   
/dev/hdb2: |==                                                      /  4.2%   
/dev/hdb2: |=====                                                   -  9.8%   
/dev/hdb2: |=======                                                 \ 12.6%   
/dev/hdb2: |=========                                               | 16.8%   
/dev/hdb2: |=============                                           / 22.4%   
/dev/hdb2: |================                                        - 28.0%   
/dev/hdb2: |================                                        \ 29.4%   
/dev/hdb2: |===================                                     | 33.6%   
/dev/hdb2: |====================                                    / 36.4%   
/dev/hdb2: |======================                                  - 39.2%   
/dev/hdb2: |=======================                                 \ 40.6%   
/dev/hdb2: |========================                                | 43.4%   
/dev/hdb2: |=========================                               / 44.8%   
/dev/hdb2: |==========================                              - 46.2%   
/dev/hdb2: |===========================                             \ 47.6%   
/dev/hdb2: |===========================                             | 49.0%   
/dev/hdb2: |============================                            / 50.4%   
/dev/hdb2: |==============================                          - 53.2%   
/dev/hdb2: |===============================                         \ 54.6%   
/dev/hdb2: |===============================                         | 56.0%   
/dev/hdb2: |================================                        / 57.4%   
/dev/hdb2: |=================================                       - 58.8%   
/dev/hdb2: |===================================                     \ 63.0%   
/dev/hdb2: |=====================================                   | 65.8%   
/dev/hdb2: |======================================                  / 67.2%   
Pass 2: Checking directory structure
/dev/hdb2: |=======================================                 - 70.4%   
/dev/hdb2: |========================================                \ 71.1%   
/dev/hdb2: |========================================                | 71.7%   
/dev/hdb2: |=========================================               / 73.2%   
/dev/hdb2: |=========================================               - 74.1%   
/dev/hdb2: |==========================================              \ 75.3%   
/dev/hdb2: |===========================================             | 76.5%   
/dev/hdb2: |============================================            / 77.8%   
/dev/hdb2: |============================================            - 78.0%   
/dev/hdb2: |============================================            \ 78.1%   
/dev/hdb2: |============================================            | 79.3%   
/dev/hdb2: |=============================================           / 79.7%   
/dev/hdb2: |=============================================           - 79.8%   
/dev/hdb2: |=============================================           \ 80.5%   
/dev/hdb2: |=============================================           | 80.6%   
/dev/hdb2: |=============================================           / 80.8%   
/dev/hdb2: |=============================================           - 80.9%   
/dev/hdb2: |=============================================           \ 81.0%   
/dev/hdb2: |=============================================           | 81.1%   
/dev/hdb2: |==============================================          / 81.3%   
/dev/hdb2: |==============================================          - 82.1%   
/dev/hdb2: |==============================================          \ 82.8%   
/dev/hdb2: |===============================================         | 83.1%   
/dev/hdb2: |===============================================         / 83.3%   
/dev/hdb2: |===============================================         - 83.6%   
/dev/hdb2: |===============================================         \ 83.9%   
/dev/hdb2: |===============================================         | 84.0%   
/dev/hdb2: |===============================================         / 84.2%   
/dev/hdb2: |===============================================         - 84.4%   
/dev/hdb2: |===============================================         \ 84.5%   
/dev/hdb2: |===============================================         | 84.8%   
/dev/hdb2: |================================================        / 85.0%   
/dev/hdb2: |================================================        - 85.1%   
/dev/hdb2: |================================================        \ 85.2%   
/dev/hdb2: |================================================        | 85.3%   
/dev/hdb2: |================================================        / 86.1%   
/dev/hdb2: |================================================        - 86.6%   
/dev/hdb2: |=================================================       \ 86.8%   
/dev/hdb2: |=================================================       | 87.5%   
/dev/hdb2: |=================================================       / 88.4%   
/dev/hdb2: |==================================================       -89.5%   
Pass 3: Checking directory connectivity
/dev/hdb2: |===================================================\92.0%   
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/hdb2: |======================================================   | 97.1%   
/dev/hdb2: |======================================================== | 99.9%   
/dev/hdb2: 10912/51600 files (1.5% non-contiguous), 219403/409601 blocks
done.
EXT3 FS on hdb2, internal journal
Setting the system clock..
Cleaning up ifupdown....
Loading kernel modules...done.
Loading device-mapper support.
Checking file systems...fsck 1.40-WIP (14-Nov-2006)
done.
Setting kernel variables...done.
Mounting local filesystems...kjournald starting.  Commit interval 5 seconds
EXT3-fs: mounted filesystem with ordered data mode.
kjournald starting.  Commit interval 5 seconds
EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
EXT3 FS on hdb5, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
XFS mounting filesystem hdb6
Starting XFS recovery on filesystem: hdb6 (logdev: internal)
Ending XFS recovery on filesystem: hdb6 (logdev: internal)
Using fallback suid method
done.
Activating swapfile swap...done.
Setting up networking....
Starting hotplug subsystem:
pci     
pci      [success]
usb     
usb      [success]
isapnp  
isapnp   [success]
ide     
ide      [success]
input   
input    [success]
scsi    
scsi     [success]
done.
Configuring network interfaces...GMAC-0 Addr 1 Vendor ID: XXXXXXXXXX
mii_write: phy_addr=0x1 reg_addr=0x4 value=0x5e1 
mii_write: phy_addr=0x1 reg_addr=0x9 value=0x300 
mii_write: phy_addr=0x1 reg_addr=0x18 value=0x41 
mii_write: phy_addr=0x1 reg_addr=0x0 value=0x9200 
mii_write: phy_addr=0x1 reg_addr=0x0 value=0x1200 
Link Up (0x796d) MII REG 10 = 0x2800
1000M/Full 
Flow Control Enable.
Storlink eth0 address = XXXXXXXXXXXX
Enable MAC Flow Control...
Using fallback suid method
info, udhcpc (v0.9.9-pre+autoip) started
SIOCSIFFLAGS: Cannot assign requested address
SIOCSIFADDR: File exists
SIOCSIFFLAGS: Cannot assign requested address
SIOCSIFFLAGS: Cannot assign requested address
debug, Sending discover...
debug, Sending select for 192.168.XXX.XXX..
info, Lease of 192.168.XXX.XXX obtained, lease time 3600
SIOCSIFFLAGS: Cannot assign requested address
deleting routers
SIOCDELRT: No such process
adding dns 192.168.XXX.XXX
done.
hdb: dma_timer_expiry: dma status == 0x41
hdb: dma_intr: status=0x71 { DriveReady DeviceFault SeekComplete Error }
hdb: dma_intr: error=0x04 { DriveStatusError }
ide: failed opcode was: unknown
hda: DMA disabled
hdb: DMA disabled
ide0: reset timed-out, status=0xb0
hdb: status timeout: status=0xb0 { Busy }
ide: failed opcode was: unknown
hdb: drive not ready for command
ide0: reset timed-out, status=0xb0
end_request: I/O error, dev hdb, sector 871610
end_request: I/O error, dev hdb, sector 5671944
Buffer I/O error on device hdb5, logical block 499
lost page write due to I/O error on hdb5
end_request: I/O error, dev hdb, sector 643436
end_request: I/O error, dev hdb, sector 5671946
end_request: I/O error, dev hdb, sector 5671948
end_request: I/O error, dev hdb, sector 5671950
journal_bmap: journal block not found at offset 268 on hdb2
Aborting journal on device hdb2.
end_request: I/O error, dev hdb, sector 642896
Buffer I/O error on device hdb2, logical block 148
lost page write due to I/O error on hdb2
end_request: I/O error, dev hdb, sector 5671952
Buffer I/O error on device hdb5, logical block 503
lost page write due to I/O error on hdb5
end_request: I/O error, dev hdb, sector 643426
end_request: I/O error, dev hdb, sector 643428
end_request: I/O error, dev hdb, sector 643430
end_request: I/O error, dev hdb, sector 643432
Aborting journal on device hdb5.
end_request: I/O error, dev hdb, sector 871610
do_generic_mapping_read page not uptodate twice, error=--EIO!!!
ext3_abort called.
EXT3-fs error (device hdb2): ext3_journal_start_sb: Detected aborted journal
Remounting filesystem read-only
journal commit I/O error
/etc/rcS.d/S46mountnfs-bootclean.sh: /etc/rcS.d/S46mountnfs-bootclean.sh: Input/output error
end_request: I/O error, dev hdb, sector 1314360
Buffer I/O error on device hdb2, logical block 335880
lost page write due to I/O error on hdb2
end_request: I/O error, dev hdb, sector 822832
Buffer I/O error on device hdb2, logical block 90116
lost page write due to I/O error on hdb2
end_request: I/O error, dev hdb, sector 839256
Buffer I/O error on device hdb2, logical block 98328
lost page write due to I/O error on hdb2
end_request: I/O error, dev hdb, sector 839306
Buffer I/O error on device hdb2, logical block 98353
lost page write due to I/O error on hdb2
end_request: I/O error, dev hdb, sector 1314398
Buffer I/O error on device hdb2, logical block 335899
lost page write due to I/O error on hdb2
ext3_abort called.
EXT3-fs error (device hdb2): ext3_remount: Abort forced by user
ext3_abort called.
EXT3-fs error (device hdb2): ext3_remount: Abort forced by user
end_request: I/O error, dev hdb, sector 1200314
end_request: I/O error, dev hdb, sector 1200314
do_generic_mapping_read page not uptodate twice, error=--EIO!!!
end_request: I/O error, dev hdb, sector 871414
end_request: I/O error, dev hdb, sector 871414
do_generic_mapping_read page not uptodate twice, error=--EIO!!!
/etc/rcS.d/S55bootmisc.sh: /etc/rcS.d/S55bootmisc.sh: Input/output error
end_request: I/O error, dev hdb, sector 871398
end_request: I/O error, dev hdb, sector 871398
do_generic_mapping_read page not uptodate twice, error=--EIO!!!
end_request: I/O error, dev hdb, sector 871398
do_generic_mapping_read page not uptodate twice, error=--EIO!!!
/etc/init.d/rc: line 78: /etc/rcS.d/S55urandom: Input/output error
end_request: I/O error, dev hdb, sector 5972010
EXT3-fs error (device hdb5): ext3_find_entry: reading directory #69268 offset 0
end_request: I/O error, dev hdb, sector 5670948
Buffer I/O error on device hdb5, logical block 1
lost page write due to I/O error on hdb5
ext3_abort called.

結果としては、システムの動作が非常に不安定な状態のため、シリアルコンソールからのアクセスも困難な状態でした。ここは諦めて別の方法を検討することにしました。


デスクトップPCを使って、ファイルを取り出す

knoppix DVDを使って必要なファイルを取り出すために、HDL-GS500からHDDを取り出して、デスクトップPCのSATAに接続しました。このときHDDの間違いを避けるために、デスクトップPCに搭載しているHDDの接続は取り外しておきました

knoppixを起動したら端末を立ち上げて、あらかじめsu -rootになっておきます。またファイルの保存先としてUSBメモリを接続しておきます。

最初の状態としては

/dev/sda にHDL-GS500のHDD
/dev/sdb にUSBメモリ 
が接続されている状態です。

USBメモリのマウントポイントを作成して、マウントします。

# mkdir /media/usb
# mount /dev/sdb1 /media/usb

HDDをマウントします。マウントポイントは既にあったものを使いました。

# mount /dev/sda1 /media/sda1
# mount /dev/sda2 /media/sda2
# mount /dev/sda5 /media/sda5

HDDのパーティションの状態を調べます。

~# fdisk -l /dev/sda

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 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
Disk identifier: 0xee4739c6

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1           16065      642599      313267+  83  Linux
/dev/sda2          642600     1461914      409657+  83  Linux
/dev/sda3         1461915     5670944     2104515   82  Linux swap / Solaris
/dev/sda4         5670945   976559219   485444137+   5  Extended
/dev/sda5         5670946     6088634      208844+  83  Linux
/dev/sda6         6088636   976559219   485235292   83  Linux
パーティション情報はうまく読み出すことができました。

続いて、マスターブートレコード(MBR)と、拡張パーティションブートレコード(Extended Partition Boot Record)をUSBメモリに保存しておきます。ddコマンドを使います。

# dd if=/dev/sda of=/media/usb/mbr1.bin bs=512 count=1
# dd if=/dev/sda of=/media/usb/mbr2.bin bs=512 count=1 skip=5670945
# dd if=/dev/sda of=/media/usb/mbr3.bin bs=512 count=1 skip=6088635
  • mbr1.bin には sda1,sda2,sda3,sda4
  • mbr2.bin には sda5
  • mbr3.bin には sda6
のパーティション情報が保存されます。

引き続き、各パーティションの内容を保存します。ここでうまくいけば、新しいHDDをパーティショニング後にファイルシステムを作成して、このファイルを展開すれば、システムを復元することができそうです。

# cd /media/sda1
# tar cvf /media/usb/hdd1.tar ./
 
# cd /media/sda2
# tar cvf /media/usb/hdd2.tar ./
 
# cd /media/sda5
# tar cvf /media/usb/hdd5.tar ./
結果は、sda1の保存には成功しましたが、sda2、sda5は途中でエラーが出てしまい、読み出すことができませんでした。

だんだん選択肢が消えていきます。この後は、保存に成功したsda1の初期化用のファイルを使ってシステムの修復を進めることにしました。

USBメモリに保存できたhdd1.tarを展開してみたところ、.landiskディレクトリの中に、再セットアップに必要な初期化用のファイル、sd1.tgz, sd2.tgz, sd5.tgz, sd6.tgz, tar2diskがありました。更にsd1.tgz, sd2.tgz, sd5.tgz, sd6.tgzの中身も無事に展開できました。

以降の修復作業には、この初期化用ファイルを使って進めることができるようになりました。これで一歩前進となりました。


この後の計画

ここまでの結果から、今後の計画を考えました。

  1. 新しいHDDを買ってくる。
  2. 新しいHDDをパーティショニング。
  3. 新しいHDDにファイルシステムを作成、フォーマット。
  4. 初期化ファイルを使い、新しいHDDにsda1, sda2, sda5, sda6を再構築。
  5. 新HDDで組立て。HDL-GS500が起動できることを確認する。
  6. 新HDDを取出し、旧HDDと共にPCへSATA接続。
  7. 旧HDDのsda6を、新HDDのsda6にコピーする。
  8. 新HDDで再組立て。
  9. HDL-GS500を起動して、保存しているデータのバックアップを取る。
これでうまくいけばいいのですが…

この後は、その2へ続きます。

その2
壊れたHDDを、Advanced FormatのHDDに交換。
その3
GNU ddrescueを使って、壊れたHDDからデーターを救出。
その4
HDL-GS500を、1.0TBに換装して再初期化する。



ここまでに参考にさせていただいたWebサイトです。とても参考になりました,ありがとうございます。

洗脳電波発信装置 換装なの☆です
digital西行庵 wiki HDL-GS petit hack