缶のラガー呑んだの久しぶり。だが、なんだか金属っぽい味と変に抜けた後味。 モルツや一番絞りのほうがいいなあ。
...
grass の HDD は現在 IBM DTLA-307030 (7200rpm 30GB) なのだが、ごく稀に「キュキュキュキュキュ」と音を発して帰って来なくなったり(Ctrl + C で復帰できるけど)、Maildir 形式のメールボックスを開いてると「キュウッ」と心臓に悪い音を立てることがあったり、 なんだか不安。なので、クラッシュする前に HDD を丸ごと乗せかえ作戦発動。
HDD は Maxtor の 34098H4 (5,400rpm 40GB)。以前とても音が静かだった記憶があるので。
Hard Disk Upgrade Mini How-To を見ながら、そのとおりに作業。
- 新しい HDD をセカンダリのマスタとして接続
- fdisk で領域確保。分割は、
Device Boot Start End Blocks Id System /dev/hdc1 1 5 40131 83 Linux /dev/hdc2 6 4982 39977752+ 5 Extended /dev/hdc5 6 643 5124703+ 88 Unknown /dev/hdc6 644 898 2048256 88 Unknown /dev/hdc7 899 931 265041 82 Linux swap /dev/hdc8 932 1059 1028159+ 88 Unknown /dev/hdc9 1060 4982 31511497 88 Unknown
こんな感じで。Id 88 は ReiserFS ね。 - mkfs (mkreiserfs) でフォーマット
- hda に /new-disk/{boot,usr,var,home} というマウントポイントを作って、新 HDD の各パーティションをマウント。 /new-disk/proc はディレクトリだけ作っておく。
- シングルユーザモードに移行して、旧 HDD の内容を丸ごとコピー。
# telinit 1 # cp -a /bin /boot /dev /etc /home /lib /misc /mnt /opt /root /sbin /tmp /usr /var /new-disk
システムとデータ合計10GB程あるので、1時間以上掛かる。
コピー完了後、/new-disk/etc/fstab を新環境にあわせて書き換え。 ブートは取り敢えず Grub のブートフロッピーでやることにして、lilo.conf はいじらず。 電源を落として、元の HDD をセカンダリに。新しい HDD をプライマリに (要するに入れ換えた)
で、起動。普通に起動していって・・・ログイン画面に(一安心)。 しかしここで、root はログインできるが一般ユーザでログインできず。懸案の /lib/libc-2.1.3.so を見てみると、 パーミッションが -rw------- になってて、サイズも本来なら 5M あるハズなのに 1M ちょっとしかない。 ・・・つまり壊れてるわけだ。うひー。
もとの HDD (今は hdc になってる) を /mnt にマウントして、
# cat /mnt/lib/libc-2.1.3.so > /dev/null等とやってみると、あの忌まわしい「キュキュキュキュキュ」の音が! これだったのか・・・しかし、libc が壊れかけてても普通に使えてたってのは何というか、恐ろしい。
さて、まず libc をどうにかしなくちゃと、aqua からファイルを FTP で持ってきて、迂闊にも
# cp /tmp/libc-2.1.3.so /lib/libc-2.1.3.so等としてしまい、直後に固まる。Linux は /bin /sbin にあるような基本的なコマンド類もことごとくダイナミックリンクなので、 libc を上書きしようとした瞬間ににっちもさっちも行かなくなったのだな。
# どうしてこういうことって、Enter キーを押した直後に思い出すんだろうかね。
仕方ないので、また電源切って HDD を入れ換えて、旧 HDD で起動。新 HDD を /new-disk
にマウントして、aqua から持ってきた libc-2.1.3.so を /new-disk/lib/libc-2.1.3.so
に上書きして解決。・・・こう書くとあっさりしてるけど、実際はビール2リットルのんで明け方に作業してるわけで、これがまた。長かった・・・
# こういう危険な作業を酔ってる時にやってしまうのも、大変に迂闊だといえましょう。
...
コピーしたファイルのチェックを
# find /lib -type f -exec cmp {} /new-disk{} \;のようにしてやってみる。どうやら本当にピンポイントで libc だけが壊れてたらしい・・・マーフィーの法則って奴ですか。