ケーススタディ:あるトラブルシュート


usb マウスを有効にしてカーネルを作る。 ただし、 Input Core Support を on にしとかないと usb マウスが出てこねぇので注意。 できたら、再起動。 input.o hid.o mousedev.o を組み込む。 それから mknod だ。 メジャーは 13 マイナーは 63 で好きな名前で作ってよし。 あとは、 xf86config に Section "Xinput" SubSection "Mouse" DeviceName "USB" Protocol "IMPS/2" Device "/dev/input/mice" AlwaysCore Buttons 5 ZAxisMapping 45 EndSubSection EndSection こんな感じかな。 ZAxisMapping は車輪の分ですな。 を追加。デバイスファイル名は適切に読み替えよ。

データ破壊王

データを効率良く徹底的に破壊するにはどうすればよいか。

ソフトウェアレベルでやるには、そのためのユーティリティが 幾つかある。たとえば、 wipe

ハードウェアでやるには、たとえばこういう製品がある。

あるトラブルシュート

FreeBSD でできてるネームサーバ兼メールサーバが、壊れた。 これを復旧した手順のメモ

BIOS画面が出て来ないので、どうも根本的に壊れているらしい。 部品をいろいろとっかえてみたが、どうにも起動しない。 しょうがないので、 ディスクからデータを吸い出して、代打を立てることにした。 できればこれは避けたかったが、 こうするしかない、と結論するまで、俺がハードウェアに詳しくないせいで、 けっこうかかってしまった。

しかし、 FreeBSD のホストはそれ一台きりなので、 Linux で、このサーバのディスクをマウントして、 データを救出することになった。 たしか、 Linux で FreeBSD のファイルシステムをマウントすることができたはず。 無論、デフォルトでついてるカーネルにはそんな機能は無いので、 カーネルをコンパイルしなおさねばならないが。

サポートされているファイルシステムは、 cat /proc/filesystems すると判る。

yuji@nil:~%cat /proc/filesystems
nodev   rootfs
nodev   bdev
nodev   proc
nodev   sockfs
nodev   tmpfs
nodev   shm
nodev   pipefs
        ext3
        ext2
nodev   devfs
nodev   devpts

上は、俺のノートの設定だが、 当然ながら、デフォルトでついてるカーネルには ufs なんてのはサポートされていないのである。 これは、カーネルを入れ換えねばならない。

では、カーネルソースをとってこよう。

apt-get install kernel-source-2.4.20

どうせだから、安定版の最新にしとけ。 モノが /usr/src/ 以下に落ちるので、こいつを好きな場所で展開。

make menuconfig する。 menuconfig には libcurse とか libcurse-dev が必要なので、これもインストールしとこう。

あろうことか、ディスクは scsi である。 前任の管理者がいちびってそういう風に作ったのである。 FreeBSD にしたのも、そういうイチビリの一環であり、彼なりのファッションであり、 特に好みや技術的理由なんか無いのである。 おかげで俺が苦労するわけだ。 あーあ。クソが。

スカジのカードの品番を見ると、ちゃんと普通に Linux で使える奴みたいだ。 scsiサポートのところで、こいつを M にしとく。

さて、他にもいろいろあるぞ。ネットワークの設定も作らなきゃいけないし。

ファイルシステムだ。 どうせだから、いろんなファイルシステムが見られるようにしとけ。 どうせモジュールにしとけばいいんだ。 FreeBSD は UFS というやつだ。こいつを有効にするのを忘れちゃいかん。 これも、しじゅうマウントして使うわけじゃないので、 モジュールでいいだろ。 ext3 をメインで使う予定なので、これはカーネル組み込みにしとこう。

では、カーネルをビルドしよう。

make dep && make-kpg clean && make-kpkg kernel-image

さて、カーネルイメージと、カーネルモジュール、それにいろんな設定ファイルからならる カーネルのパッケージが一つ上のディレクトリにできているので、 これを dpkg -i でインストール。

おお。できてるぞ。スカジのドライバ。 では、 再起動するざます。というか、むしろディスクを繋がなきゃいけないので、 システム終了して電源切断ですな。

腐れサヴァからディスクを抜くために、箱をバラす。 出て来たぜ。 ドライブが二つもありやがる。 めんどくせぇ。 scsi のケーブルごとすっこ抜いちゃえ。 どうせだから、ディスクのベイごとすっこ抜いちゃえ。 ごっそりと。 で、余ってる linux のサーバの蓋をあけ、たまたま最初からそいつに付いてた scsi のカードにディスクを接続。 電源も接続。 しかしながら、この linux サーバは箱が小さくて、 ドライブを置いとく場所がないので、匡体横倒しのまま電線剥き出しで接続だ。

では、電源を投入しましょう。 おお。bios にドライブが二つともちゃんと認識されている模様。 これでOSから見えなきゃ全ては俺の責任ということになるが。

起動したので、 modprobe で scsi のドライバをカーネルに組み込んでみる。 おお! おおおおお! ちゃんとドライブが二つともデバイスファイルに assign されたぞ。 sda1 と sda2 だ。 それでは、 mount してみましょう。

mount  -t ufs /dev/sda1 /mnt

だーめです。 wrong filesystem とかいって、動きません。 何かもっとちゃんと指定する必要があると思われます。 そこで、ドキュメントをば。 $SOURE_ROOT/Documentation/filesystems/ufs.txt から。

ufstype=type_of_ufs
        UFS is a file system widely used in different operating systems.
        The problem are differences among implementations. Features of
        some implementations are undocumented, so its hard to recognize
        type of ufs automatically. That's why user must specify type of
        ufs manually by mount option ufstype. Possible values are:

        old     old format of ufs
                default value, supported os read-only

        44bsd   used in FreeBSD, NetBSD, OpenBSD
                supported os read-write

今日は機嫌がいいので、和訳してやろう。 「UFS は様々なOSで採用されているファイルシステムである。 しかしながら、それらの実装の間には相違点があり、これが問題となる。 ある実装の仕様にはドキュメントされていないものもあり、そのため、 UFS の種類を自動的に識別するのは困難である。 このため、ユーザはファイルシステムの種類をmount時に指定せねばならない。」

このように、 ufs といっても、一種類じゃないらしい。 紛らわしいのう。糞ボケが。 つまり、 -o ufstype=44bsd というのが付けるべきオプションというわけだ。 では、マウントしてみよう。

ぐはー。ダメです。あいかわらずマウントしやがりません。 たしかコンパイルするとき、 ufs 書き込みってのは Experimental じゃなくて、 Dangerous って書いてあって、笑いながらそのオプションは やめたはずなので、 read only を指定してマウントしてみよう。

mount -t ufs -o ro,ufstype=44bsd /dev/sda1 /mnt

おお!エラー無くコマンドが終了しました。 なんかディスクのアクセス音も聞こえますぜ。 では、ちょっと中身を見てみましょう。 キタ----(゜∀゜)------! ばっちり見れます。 やったね。これでデータを吸い出せるぜ。 どうもlsの出力を見る限りでは、こいつは root partition のようだ。 とりあえず /etc を全部吸い出す。

/dev/sdb1 もマウントしてみた。 こいつは何か良く判らない内容物である。 前任管理者のゴミファイルばっかりである。クソが。

おいおい。 /home とか、 /var とかどこいっちゃたんだよ!ゴラ!

たしか、パーティションが幾つか切ってあった気がするな。 fdisk で見てみよう。

fdisk /dev/sda1

p してみると、たしかに幾つかパーティションが存在しているのが判る。 しかし、通常の 1, 2, 3 … ではなく、 a, b, c … と表示されているのは 一体どういうことだ?

ま、幾つかパーティションが存在し、それが見えている事は事実のようだから、 ためしに /dev/sda2 をナニしてみよう。

invalid block device と言われてしまった。 そんなディスクはありません、てか? そういや scsi のドライバをロードしたときも、 sda1 と sdb1 しか出て来なかったな。 ひょっとして、パーティションは存在してるんだけど、 どうも OS からは見えてない?

こうなったら、もう、偉い人に訊くしか無い! 教えて!偉いしと!!!!

すかさず答えが!

Filesystems -> Partition Types -> Advanced partition selection

上は、カーネルコンパイル時のメニューである。 こいつを有効にすると、その下にズラーリと! つまり、下は make menuconfig の画面である。

[*] Advanced partition selection                                   
    [ ]   Acorn partition support (NEW)                                
    [ ]   Alpha OSF partition support (NEW)                            
    [ ]   Amiga partition table support (NEW)                          
    [ ]   Atari partition table support (NEW)                          
    [ ]   Macintosh partition map support (NEW)                        
    [*]   PC BIOS (MSDOS partition tables) support                     
    [ ]     BSD disklabel (FreeBSD partition tables) support (NEW)

最後のがソレだ! ヘルプをみると、

   FreeBSD uses its own hard disk partition scheme on your PC. It          
   requires only one entry in the primary partition table of your disk     
   and manages it similarly to DOS extended partitions, putting in its     
   first sector a new partition table in BSD disklabel format. Saying Y    
   here allows you to read these disklabels and further mount FreeBSD      
   partitions from within Linux if you have also said Y to "UFS            
   file system support", above. If you don't know what all this is         
   about, say N.

またしても和訳してやろう。 「FreeBSD では独自の partitions 分割方式を採用している。 プライマリパーティションのテーブルには一つのエントリしかなく (訳注: primary partition は一個しかないってことだ)、 最初のセクタを BSD ディスクラベル フォーマットによるパーティションテーブルとして 使うことで、 プライマリパーティションを DOS の拡張パーティションと似たやり方で分割しているのである。 ここで Y と答えれば、ディスクラベルを読み取ることができるようになり、 UFS ファイルシステムを有効にしておけば、 Linux から FreeBSD のパーティションを mount することができるようになる。 必要無ければ N と答えよ。」

たしかにコイツを有効にせねば、 Linux からパーティションは見えそうもない様子である。 では、なぜ root partition だけみえたのであろうか? それは、たまたまである。 最初のパーティションだけは二つのシステムで切り方が同じということらしい。

では、これを有効にしたカーネルをインストールし、再起動してみよう。 よし、起動した。さて、 modprobe aic7xxx してみよう。 今度こそキタ----(゜∀゜)------! パーティションが sda5, 6, 7, 8 としてデバイスファイルに割り当てられますた!

ネームサーバのゾーンファイルやらメールの queue やら俺のログインディレクトリやら その中にあった各種メーリングリストやらを救出。

これらのデータと、 apt-get install いろいろして、代打サーバを作成しました。 ガツガツ

床にへたってほげってたら、腰がおかしくなっちまったよ。


記事リストへ