HDDクラッシュ

投稿者: | 2006年2月7日

悲しいことに、私の可愛いLinuxマシンのハードディスクドライブが死にかけています。先日、動作中に突然HDD辺りから異音が発生して数秒間フリーズしました。すぐに復帰したのですが、明らかにヤバイ兆候です。こういう時は、曲がりなりにもディスクにアクセスできるうちに大切なデータのバックアップを取るというのが基本です。まずはメール。昨年のクリスマスカードで折角数年ぶりにコンタクトが取れたヨーロッパ方面の友達の連絡先など、無くなると非常に困るし、このマシン以外どこにも存在しない貴重なデータなので真っ先にバックアップします。それから、えーと、後はいいや。ホームディレクトリにあるデータのほとんどはLinuxのシステムを快適に使うためのもので、システム自体が壊れてしまえばあまり存在意義がありません。もちろん、同じ環境を復活するためには必要なのですが、ノートパソコンで常時稼働しているサーバーにもほぼ同じ環境が構築してあるので、そっちから持って来れば問題ありません。あと、太郎関係の巨大なビデオデータがありますがこちらは複数のコピーが色んなところに分散しているので大丈夫です。メールのデータが無事にバックアップされたことを確認して、システムをシャットダウンします。シャットダウンのプロセスは問題なし。このまま何も起こらなければいいのですが。

次の日、正常に起動することを祈りつつシステムをブートします。やはりHDDから異音が。ダメだったようです。大量のエラーメッセージを吐いていますが、それでも起動しました。既存のデータの読み出しは問題ないのかも知れません。このマシンにはHDDが2台あり、20GBのディスクを3つのパーティションに分けてルートの他スワップ、/usrにマウントしています。もう一つ、以前の職場でゲットした60GBのディスクを単一パーティションで/homeにマウントしています。復旧の手間を考えると、ルートのあるディスクが無事なのが何よりです。/homeなんて、ぶっちゃけて言えばなくても多くのサービスは動きます。がしかし、代替ディスクの調達性の点では別の問題があります。今時、20GB程度の容量の3.5インチIDEインターフェイスのHDDなんてそこらへんに転がっています。家でも探せば1つくらい出てきそうです。買っても、中古で(新品は売ってないでしょう)2000円も出せば送料を払ってもおつりが来るでしょう。一方、60GBの方は現在家にある中で最大容量のディスクです。リプレースするには、新規にディスクを買ってこなければなりません。これは痛いです(財布が)。
エラーメッセージを確認します。修復不能のファイルシステムエラー、不良セグメントのリストが延々と吐き出されています。デバイスはhdb1、つまりIDEの2台目、プライマリのスレーブに繋がっているディスクです。どれどれ。あちゃー、60GBの方です。不良セグメントの番号は連続していたから、うまく不良部分だけ切り分ければ使えるかもしれませんが、それにしても一度はアンマウントしてパーティションを切り直し、フォーマットする必要があります。一時的に数10GBのデータをどこかに退避しなければいけません。手持ちのHDDにそんなに大容量のものは無いし、IDEのインターフェイスは既に全部埋まっています。

さし当たって出来ることは何も無い、とあきらめつつ、ジャンクパーツのダンボール箱をあさってみると比較的きれいに梱包されたHDDが見つかりました。どこでどうやって手に入れたものか全く記憶がありませんが、ラベルを見ると40GBの容量があるようです。これが生きていれば十分に使えます。早速試してみることにしました。IDEを空ける為、一度も使ったことの無いMOドライブを取り外します。3.5インチ用のドライブを5インチベイに付けてあったので、そのままHDDの固定用に流用できそうです。ジャンパをケーブルセレクトにして起動、BIOSの設定で確認…しようとしたら、設定画面が開きません。メモリチェックで止まっているようです。何でBIOSがフリーズするんでしょうか。試しにプライマリマスターのHDDを外してそちらに繋いでみても、やはりメモリチェックの後動かなくなります。残念ながら、このディスクは使い物にならないようです。問題のディスクを外して起動すると、ちゃんとBIOS設定画面も開けます。が、良く見るとHDDは2台とも認識していません。そう言えば以前にも経験があります。BIOSでは見えていないのに、OSを起動するとちゃんと使えるんです。いや、あの時はシステムディスクは見えていたかも。そもそも、HDDが一つも見つからないのならこのBIOSはどうやってMBRを引っ張ってくるのでしょう。分かりません。富●通の仕様でしょうか

結局、諦めて新品のHDDを購入することにしました。60GB程度のものは120GB以上のものとほとんど価格差がなく、著しくバイト単価が高いようです。現時点では100GBを超えるようなディスク容量は必要ないのですが、値段が変わらないのなら大容量の方がいいに決まっています。価格.comの最安店で200GBのディスクを買うことにしました。送料込みで10,000円を切っています。60GBでも8,000円程度していたので、バイト単価は4割以下です。私が始めてPCパーツを買った頃は(以下略)

2006/02/10(金)

届きました。200GBのHDDです。早速取り付けることにします。ジャンパ設定はケーブルセレクトのままで、MOドライブが付いていたセカンダリスレーブに接続して起動します。すんなりと認識します。正規の手順としては、元のディスクが残っているので既存のシステムを起動、そこから新しいディスクにパーティションを切り、フォーマットして適当な場所に一時的にマウント、問題のあるディスクからデータをコピーといった作業になります。ですが、たまたま手元にDebian現行バージョン(Sarge)のインストールCD-ROMがあります。このインストーラーで使うパーティショニングツールでは、新規に作成するパーティションに別のパーティションのデータをコピーするという機能があります。使ったことはありませんが、恐らく属性情報もそのままコピーしてくれるのでしょう。これはラクかもしれません。当初、200GBを20GB、40GB、40GB、100GBの4つに分けて/homeに40GBを割り当て、その中の/home/pubには別に100GBを割り当てようと考えていました。現在は/homeに61.5GBを割り当てていて、半分ほど使っています。大半は/home/pubにあるDVD関係が占めているので、これを分離すれば残りの/homeは40GBでも十分過ぎるほどです。
ちなみに、/home/pubに割り当てる100GBはFAT32でフォーマットし、先頭の20GBは空けておこうという計画です。理由は、その、ちょっと日和ってみました。一度は決別したWindowsを入れてみようかな、とか、まぁそんなところです。Windowsのシステム関係はLinuxから読めた方がいいけど編集できる必要はないので、先頭パーティションをNTFSでフォーマットしてWindows2000あたりをインストール、ドキュメント関係はFAT32のパーティションを共有しようというわけです。そのうちLinuxでNTFSへの書き込みも出来るようになるのでしょうが、現時点では共有エリアはFAT32の方が無難でしょう。

さて、インストーラーのパーティションコピーですが、やってみるとRAID1(ミラーリング)と同じような感じで、使用状況に関わらずコピー元の総容量以上の容量がないとコピーできないようです。仕方なく、FAT32のパーティションを削って61.5GBを/home用に確保します。いざ、コピー開始。プログレスバーが表示されますが、ほとんど動きません。恐ろしく時間がかかりそうな雰囲気です。未使用領域も含めて全てのセクタをコピーしているようです。ということは、不良セクタも確実に読みに行くじゃないですか。案の定、しばらくするとエラーが出ます。無視して先に進むこともできるのですが、不良セクタに当たる度にエラーを出して止まるので放置することもできず、このままでは一晩中かかりっきりになりそうです。で、何度目かにエラーで止まった時にキャンセルしちゃいました。

それにしても、最近のHDDってすごい静かなんですね。ちゃんと固定もせず、筐体のカバーを空けたまま作業していたのですがシーク音が全く聞こえません。最初に電源を入れた時、やっぱり認識していないんじゃないかと思ったほどです。私の感覚ではHDDというものは結構派手にカリカリと音をたてるものだと思っていましたが、技術は進歩しているんですね。もしかしたら、私が新品のHDDを使ったことがほとんど無いので勘違いしていただけでしょうか。コピーの最中もファンの音や古いHDDの音に紛れて全く音が聞こえなかったのには驚きました。

仕方ないので、ほぼ正規の手順を踏むことにします。パーティション計画は当初計画に戻したらいいのでしょうが、面倒なのでそのまま続行しました。既存システムを起動すると、相変わらず大量のエラーメッセージを吐いています。ファイルシステムチェックが途中で止まってしまいますが、無視して続行するとまだちゃんと起動します。新しいディスクはセカンダリスレーブに接続しているのでデバイスは/dev/hddになります。/dev/hdd2をext3で、/dev/hdd3をmsdosでそれぞれ一時的なポイントにマウントします。dfコマンドで確認すると、ちゃんと利用可能になっています。そこで、/homeのデータをcpコマンドでコピーします。この時、属性によっていちいち確認されるのがウザったいのでroot権限でコピーします。それなりに時間もかかり、多少のI/Oエラーはあったものの動作に必要なファイルのコピーは無事に完了しました。ls -lコマンドで属性を確認すると、読み書き実行の権限はちゃんと引き継がれているようです。ただし、所有者、グループが全てrootになってしまっています。このままでは自分のホームディレクトリの中身が実行できない等、悲しい事態が起こります。所有者、グループの変更はそれぞれchown、chgrpコマンドです。manで調べてみると、-Rオプションでサブディレクトリまで一気に変更できるようです。ここでドットファイルの存在を忘れていたため後で苦労することになります。

後は、マウントポイントを変更すればいいはずです。ところが、現在の接続方法はあくまで一時的なものです。電源を切ってから、問題のあるHDDを取り外し、そこに新しいHDDを接続するつもりです。つまり、今/dev/hddにあるものは再起動時には/dev/hdbにあることになります。/etc/fstabを編集して、現在は存在しない/dev/hdb2を/homeにマウントするよう記述してそのまま電源を切ればいいかな、と思ったのですが、実際に編集してみると最後の上書き保存でエラーを出してしまします。仕方が無いので、一旦そのままで電源を切り、ディスクの物理的な接続を変更した後でもう一度インストーラから起動してマウントポイントを再指定することにしました。既存のシステムを保持したままうまくできるのかどうか分かりませんが、できなければベースシステムだけ上書きインストールしてもいい、と割り切ることにしました。そこで、そのままシャットダウンします。ここで2つ目のミスをしました。

最初にインストールした時、グラフィカルログインに散々悩まされたのに喉元過ぎれば何とやら、いつの間にかgdmでログインするようになり、更に面倒がって今ではユーザー固定の自動ログインにしています。これを、そのままにしていました。先のミスが無ければ結果的には問題なかったのですが、正しくマウントできるか分からない状態で起動するのに自動ログインは非常に危険です。しかもグラフィカルログイン。システムに何らかの変更を加える時は、rootでのコンソールログインの手段は絶対に確保しておかなければなりません。

インストーラでマウントポイントを再指定した後、再起動しました。多少問題を孕みながらも、ブートプロセスは順調に進んでいるように見えます。コンソール画面が消え、Xが起動しました。ログイン画面で止まることなく、ktermが起動します。ということは、自動ログインが有効で、自分のホームディレクトリがちゃんと読めているということです。マウントポイントの問題は解決できたようです。ところが、そこでエラーを出して止まります。メッセージを見ると、ログインスクリプトの実行でエラーが出ています。実行権限が無い、と。そうです。先にホームディレクトリの属性を変更した時、ドットファイルを忘れていたというのがここで効いてきます。シェルのログインスクリプトも、X関係の起動スクリプトもドットファイルです。これらの所有者がrootのままだったので、実行できないのです。
一度rootで入り、ホームディレクトリのドットファイルの所有者を変更する必要があります。ここで2つ目のミスに起因するトラブルが発生しました。gdmのグラフィカルログインは、rootのログインを認めていないのです。どうしようもありません。シングルユーザーモードで再起動するしかないのですが、ランレベルを変更するにはrootでログインしている必要があります。通常はこういう場合のメンテナンス用にシングルユーザーモードでブートできるbootフロッピーなどを作っておくのですが、これも作っていません。こうなると、ベースシステムを再インストールするか、KNOPPIXなどのCDからブートできるインストール不要のシステムでファイルの属性を変更するしかありません。

諦めかけていた時、ふとブートローダーにメニューが出ていたのを思い出しました。再起動して見てみると、デフォルトのカーネルイメージの他に、同じカーネルでmaintenance onlyというメニューがあります。このブートローダーはGRUBというもので、昔からあるLILOより随分高機能だとは聞いていましたがよく知りませんでした。これで何とかなりそうです。このメニューで起動すると、果たしてrootでコンソールログインすることができました。/etc/fstabを確認してみると、インストーラーで指定したマウントポイントがちゃんと反映されています。後は自分のホームディレクトリでドットファイルの所有者とグループを変更し、再起動します。うまくいきました。実質的に何もファイルを失うことなく、ディスクの換装と環境の復旧をすることができました。作業が終わった時、既に午前3時を回っていました。苦労はしたけど、まずは成功と言ってよいでしょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です