2008-04-22

東芝DynaBook SS S5のHDD換装

これまた長く使いまくっている私用のS5でも、かなり前から、R100の時と同じく、内蔵のMK2003GAHのキュルキュル音が出始めていた。交換そのものはどうということはないが、HDD上のリカバリ領域をうまくコピーするのに多大な労力が想像できて、躊躇していた。ところがついにCRCエラーが出始め、MK8007GAHに換装することを決意。

以前から、ノートPCの壊れたハードディスクを交換する(上)(下)(浅田知広の温泉放牧中)やiPodのHDDをDynaBook SS に換装する(紅玉日記(2004-07-29))により、S5でリカバリ領域を残してHDDを換装する方法が存在することは認識していたが、このためだけにTrue ImageやNorton Ghostを買うのもなんだかもったいないし、GPartedでなんとかやってみることにした。用意したのは、新しいHDDのほかに、100GBのUSB外付けドライブ、USBの純正CD-ROMドライブ、前に焼いたGParted LiveCD 0.3.4-11。

GPartedで起動して元のHDDを確認したところ、

/dev/hda1  ntfs  16.63GiB  boot
/dev/hda3 fat32 1.99GiB hidden, lba
となっていた。そこで、とりあえずUSBドライブの後半を作業用に半分ほど空け、いろいろ試行錯誤する。以下はその抜粋。

まず、hda3だけUSBドライブの空き領域にコピー&ペーストし、HDDを交換して、新しいHDDの末尾に再度コピー&ペーストしてみたが、0を押して電源を入れても _ が出たままうんともすんとも言わなかった。

次に、hda1とhda3をそれぞれUSBドライブにコピー&ペーストして、それぞれ新しいHDDに同じサイズのままコピー&ペーストしたところ、Windowsは起動するが、0を押して電源を入れても無視してWindowsが起動してしまった。

次に、USBドライブの後半をext2でフォーマットして/dev/sda2をマウントしておき、hda全体をddでコピーしておいて(CRCエラーがあるのでconv=noerrorが必要)、新しいHDDにddで戻したところ、hda3のフォーマットがUnknownになってしまい(いったいなぜ?)、起動したところWindowsは起動途中でブルースクリーン、0押しリカバリはOSがみつからない風のメッセージが出た。(最初、このコピーをbzip2で圧縮して作成したが、bzcatが死ぬほど遅くて、圧縮などせずにddしてしまう方がはるかに速いことがわかった)

そして、MBRとかのパーティション外部のデータが重要そうだと気付き、最後にたどりついたのが、
  1. USBドライブにext2パーティションを作りマウントしておく。
  2. hda全体とhda3をddしてコピーをUSBドライブに保存しておく。
  3. 新しいHDDに交換し、hda全体をddで戻す。
  4. /dev/hda3をfat32でフォーマットし直す(たぶん不要。未検証)。
  5. hda3をddで戻す。
  6. パーティションエディタでhda3をHDD末尾に移動させ、hda1を後ろにいっぱいまで広げる。
  7. 0を押して電源を入れ、リカバリ。
という手順。もっと簡便な手順もあるかもしれないが、とりあえずうまくいったので、手間をかけて探すのはやめる。力尽きた。

リカバリせずに元の環境を移したいなら、新しい方のhda1を一旦削除してGPartedの機能でコピー&ペーストした後、広げればいいのではないかと思う(けど当然未確認)。

2008-04-10

ezjailで遊ぶための自分用メモ

jailを使ってサーバ群を構成し直そうと、ezjailで遊んでみた。グリーンITも簡単(か)。

  1. FreeBSD 7.0 を入れる。/etc/rc.confでインタフェースのalias(例えば192.168.0.3としておく)を登録。
  2. ホスト側のプロセスがjailのアドレスでlistenしないようにする。
    • sshdのListenAddressをいじってアドレスを限定する。
    • syslogdに-bをつけてアドレスを限定する。
    • ntpdはそのまま。jailのアドレスでListenしても問題ない(はず)。
  3. sysutils/ezjail を入れる。ezjail_enableを設定。
  4. /usr/local/etc/ezjail.conf で、ezjail_jaildir をjail群用のでかいディスクに割り当てる(例えばTOPとしておく)。
    • ちょっとしたWEBサーバやメールサーバなら1個あたり何百MBで十分。
  5. ezjail-admin update -p
    • ソースツリーをビルドし直し、portsnap fetchしてjail用のportsツリーもportsnap updateしてくれる。
    • -Pならportsツリーのみ。jailが走っていても実行できる。
    • -iをつけるとbuildworldせずにinstallworldのみ。
    • 実行後はportsツリーも含めてTOP/basejailにインストールされる。basejailはjail内のbasejailにnullfsマウントされて、リンクされる。
    • TOP/newjailもbasejailへのリンク+αとして作成される。これをコピーしてちょっとフレーバーを加えてjailになる。
  6. フレーバーを作成。
    • TOP/flavours/defaultを適当な名前(例えばwebとしておく)でコピー。
    • web/etc/{master.passwd, resolv.conf, localtime, newsyslog.conf, ssh/sshd_config, ...} とか、web/root/.ssh/authorized_keyを用意しておく。
    • web/etc/rc.confやらweb/usr/local/etc/sudoersやらを必要ならいじっておく。
    • web/pkg/を作成し、pkg_addしてほしいパッケージを入れておく。
    • create時に走らせたいスクリプトがあればweb/ezjail.flavourをいじる。(デフォルトの処理内容はpkgがあればその中をインストールすることだけ)
  7. ezjail-admin create -i -s 1g -c eli -f web -r hoge hoge.example.com 192.168.0.3
    • TOP/hoge.example.comだと長すぎてdfが見づらいのでrootを短い名前で設定。
    • しばらく待ってgeliのパスフレーズを入力。暗号化しないなら-i -s 1g -c eliとかいらない。
    • ntpdが*:123で待ってると文句を言われるが、たぶん影響ないので無視。
  8. jailが動いてないときにjailのイメージをいじりたいときは、ezjail-admin config -i attach hoge.examle.comでできるが、attachがへたくそでdetachできないバグがある。すぐ直せる。
  9. /usr/local/etc/rc.d/ezjail.sh start hoge.example.com か startcrypto で、パスフレーズを入力するとjail開始。
  10. sshが設定できてるならそのままsshするとか、jlsして目的のJIDにjexec JID /bin/shするとか、あとは好きなように。
  • 電源が落ちたりして正常に終了できなかったときは、startcryptoする前に ezjail-admin config -i fsck hoge.example.com するべきかも。
ezjailは関係ないけど、当面気になるjailの制約まとめ:
  • domainnameが設定できない。ただし、ホストのdomainnameを参照することはできるので、同一ドメインでならjailでNIS(rpcbind, ypbind)を使うことは可能。ypservは不明。hostnameはjailごとにあるのに、NISなんてレガシーな技術はあんまりサポートしないという方向性か。
  • マウントができないのでNFSクライアントは無理。NFSサーバは試す気なし。
  • BPFがない。でも、net/isc-dhcp3-serverはsocket()あたりを使って動かせるっぽい。
  • localhostにbindできないので、setgidなsendmailを叩いてlocalhostで待ってるMTA(msp)を経由してメールを出すことができない。外部の指定したMTAに直接つなぎに行くか、rootにsetuidする必要がある。/etc/mail/README参照。
ともかく、
Happy jail life!