ディスク貧乏は苦労する
GTを3発にして、抜いたカートリッジ250G1本でDebian版の開発を行っている。
手持ちソフトで一応単体での試験がほぼ見えてきたので、結合試験に入るために完全なGTが必要だ。
GTの再構築を行うにはドライブが4発なんだけど、手元にあるのは3発だけ。
250GBくらい、どっかに転がっているんだろうとタカをくくって聞いてみたけど、どこも余ってない。
予備というかjunk箱から発掘を試みるも、発見されるのはPATAばかり...
しかたないので、300GBSATAベアドライブを発掘してきて、とりあえず今のDebian開発環境はそっちに引っ越すことにした。
うーん、紺屋の白袴だ。
UBCDでチェックできるSATAなPC環境を持っていないので、ダンプして読んでみる。
書くとさらに時間かかりそうだし、今回は読むだけ。
300GBだとさすがに時間がかかるな...
ddだと簡単だけど進捗がわかんないのがイヤね。
フォーマットして、badblocksのほうがよかったかな。
# dd if=/dev/sdb of=/dev/null
ddしながら暇なので、smartmontoolsを入れてみる。
状態がわかんないとイヤだもんね。
依存パッケージは特になさそうだ。不要ならさくっと消せる。
# apt-get install smartmontools
使ってみる。
# smartctl -a /dev/sdb smartctl version 5.32 Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ Device: Maxtor 6B300S0 Version: BANC Device type: disk Local Time is: Mon May 28 17:52:23 2007 JST Device does not support SMART Device does not support Error Counter logging Device does not support Self Test logging
あれ? 対応してない? そんなわけないよな。
あ、そっか、MarvellのSATAドライバの作りが妙なんだった。
このままだと使えないじゃん... orz
# smartctl -a -d marvell /dev/sda smartctl version 5.32 Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ =======> INVALID ARGUMENT TO -d: marvell =======> VALID ARGUMENTS ARE: ata, scsi, 3ware,N <======= Use smartctl -h to get a usage summary
バージョン古いから対応してないってわけかい。
最新は5.36だそうだ。ただ、このオプションはlibata向けなので、Marvellオリジナルのドライバで動作するかどうかがわからない。
しかたないので、バイナリをGTから持ってくる。
# ldd /usr/sbin/smartctl libc.so.6 => /lib/libc.so.6 (0x4001d000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
単体でも動きそう。
# ./smartctl -l error -d marvell /dev/sdb smartctl version 5.34 [armv5tejl-unknown-linux-gnu] Copyright (C) 2002-5 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF READ SMART DATA SECTION === SMART Error Log Version: 1 No Errors Logged
問題なさそうね。
SMART Self-test log structure revision number 1 No self-tests have been logged. [To run self-tests, use: smartctl -t]
と出てくるので、セルフテストを仕込む。
# ./smartctl -t long -d marvell /dev/sdb smartctl version 5.34 [armv5tejl-unknown-linux-gnu] Copyright (C) 2002-5 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION === Sending command: "Execute SMART Extended self-test routine immediately in off-line mode". Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful. Testing has begun. Please wait 118 minutes for test to complete. Test will complete after Mon May 28 20:09:41 2007
longだと、4時間ほどかかるらしい。
裏でddしているから遅いのかな?
しばらく放置。
といって中一日あいてしまった。
586114704+0 records in 586114704+0 records out 300090728448 bytes transferred in 14355.003568 seconds (20904957 bytes/sec)
ddは終わっている。
エラーは特に出ていないようだ。
smartctl -a したら、たったいまセルフテストが動き始めたようだ。
ディスクがジーーーーと言ったり、カッカッカッと言ったりしはじめた。
アクセスがあるときは指示しても待ちに入ってしまうようだ。
これから4時間かよ...
あー、ブレーカー落ちました。
だめじゃん。
もう一度開始。
ようやく終わった。
SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Extended offline Completed without error 00% 985 -
問題なさそう。
shortをやるとどうなるんだろう。
# ./smartctl -t short -d marvell /dev/sdb
所要時間は2分だって。
SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Short offline Completed without error 00% 985 - # 2 Extended offline Completed without error 00% 985 -
表示項目が増えた。
このテストの間、以下のようなメッセージが残る。
program smartctl is using a deprecated SCSI ioctl, please convert it to SG_IO
最近は、SCSI iocltじゃなくて、SG_IOを使えってことなのね。
ドライブは大丈夫そうなので、フォーマットして移行を開始。
テンポラリに使う容量がないので、別マシンにつないでバッサリコピーというわけにはいかない。
動作しているシステムの引越しを単体でやるのは結構めんどくさい。
Disk /dev/sdb: 300.0 GB, 300090728448 bytes 255 heads, 63 sectors/track, 36483 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 125 1004031 83 Linux /dev/sdb2 126 250 1004062+ 82 Linux swap / Solaris /dev/sdb3 251 375 1004062+ 83 Linux /dev/sdb4 376 36483 290037510 83 Linux # mkswap /dev/sdb2 # mkfs.ext3 /dev/sdb1 # mkfs.ext3 /dev/sdb3 # mkfs.ext3 /dev/sdb4 # mount /dev/sdb1 /media/ # cp -a /boot/* /media/ # umount /media/ # mount /dev/sda4 /mnt/ # mount /dev/sdb3 /media/ # cp /mnt/public/source/userland/OLPbasesystem01_20070426a.tgz /media/ # cd /media/ # tar zxvfp OLPbasesystem01_20070426a.tgz # cd / # umount /media/ # mount /dev/sdb4 /media/ # cp -a /mnt/* /media/ # umount /media/ # shutdown -h now
停止してドライブ入れ替え。
コピー環境で起動する。
当たり前だけど、ちゃんと起動してきた。
動作中のrootfs環境の引越しをする。
まず、テンポラリ環境にオリジナルのrootfsを移す。
# mount /dev/sda4 /media/ # mkdir /media/250Gsda3cp20070530 # mount /dev/sdb3 /mnt/ # cp -a /mnt/* /media/250Gsda3cp20070530/
一応保険も打っておく。
# dd if=/dev/sdb3 of=/media/250Gsda3dd20070530.image 2008125+0 records in 2008125+0 records out 1028160000 bytes transferred in 200.263656 seconds (5134032 bytes/sec) # shutdown -h now
停止してオリジナル環境で起動する。
# mount /dev/sdb4 /media/ # mount /dev/sdb3 /mnt/ # rm -r /mnt/* # cp -a /media/250Gsda3cp20070530/* /mnt/ # shutdown -h now
コピー環境で起動する。
一応、データをアーカイブしておく。
# mount /dev/sda4 /media/ # cd /media/250Gsda3cp20070530/ # tar zcvfp ../250Gsda3cp20070530.tgz ./
あー、めんどくさかった!