2008/08/30(Sat)SeaTools

2008/08/30 20:15 Software::Linux
Seagate製のハードディスクの情報を見るSeaToolsというソフトがあるが、
そのLinux版の扱い方メモ。

ここからダウンロード可能。ページ下部の"Linux コマンドライン版"を選択。
seatools_cli.tarがダウンロードされる。
# tar xvf seatools_cli.tar
# ./st -l

Drive information:

/dev/sg0 ATA      ST380021A        3.05 156301487 blocks

# ./st -i /dev/sg0
        /dev/sg0
        Vendor = ATA
        Product = ST380021A
        Version = 3.05
        Serial Number =
        Copyright =
        SCSI Firmware = t
        Servo RAM Release = 9
        Servo ROM Release = !5v
        Servo RAM Date = �
        Servo ROM Date = E

        Blocksize = 512, Highblock = 156301487, Capacity = 78151 MB
        -this is a Seagate drive
        -this drive does not support DST
        -Mode Page Settings [current value (default)]:
                -WCE bit = 1 (0)
                -RCD bit = 0 (0)
                -AWRE bit = 1 (0)
                -ARRE bit = 0 (0)
                -DExcpt bit = 0 (0)
                -Number of cache segments = 0 (0)
システムからは/dev/sdaとして見えているが、SeaToolsに渡す引数は/dev/sg0のようなデバイスなのでそこを注意。

ちなみにこのツールは以下のようなオプションがあるらしい。
サーバーとして動作中なのでファーム書き換え等は出来ないが、トラブルが起こった時には試してみようかな。
Usage: SeaTools Enterprise [-option][variable][device]
        Allowed options are:
        -l  list all attached SCSI disks
        -i  display drive Inquiry information
        -I  display drive Inquiry information for all SCSI devices
        -t ###  execute ###% (10% - 100%) short Drive Self Test (DST)
                ex: st -t 10 /dev/sga   execute 10 % of the short Drive Self Test (DST)
        -T ###  execute ###% (10% - 100%) long Drive Self Test (DST)
                ex: st -T 20 /dev/sga   execute 20 % of the long Drive Self Test (DST)
        -s  stop Drive Self Test (DST)
        -g ### execute ###% (1-% - 100%) generic short test for legacy & non-Seagate drives
                ex: st -g 10 /dev/sga    execute 10 % of the short legacy test
        -G  generic long test (sequential verify test of entire drive)
        -r  generate Seagate RMA form
        -v  show Seatools version and licence agreement


example: ./st -i /dev/sga  displays inquiry for /dev/sga

Advanced options (some cause data loss):

        -Marg Drive Preferences (mode page) change
         Note: Use -i INQUIRY option to display the supported & current settings.

                Performance Mode (PM)
                        -Mpmon/off desktop/server PM bit
                Write Cache Enable (WCE)
                        -Mwceon/off  set/clear WCE bit
                Read Cache Disable (RCD)
                        -Mrcdon/off  set/clear RCD bit
                Just In Time (JIT)
                        -Mjitdefault set all JIT bits, factory default
                        -Mjit1on set only JIT bit 1, clears any others
                        -Mjit2on set only JIT bit 2, clears any others
                Automatic Write Rallocation Enable (AWRE)
                        -Mawreon/off  enable/disable AWRE bit
                Automatic Read Rallocation Enable (ARRE)
                        -Marreon/off  enable/disable ARRE bit
                Disable Exception Control (DExcpt, SMART logging)
                        -Mdexon/off  disable/enable DExcpt bit
                Disable Loop Master (DLM, fibre channel only)
                        -Mdlmon/off  disable/enable DLM bit
                Disable Target Oriented Loop Initialization  (DTOLI, fibre channel only)
                        -Mdtolion/off  disable/enable DTOLI bit
                Number of Cache Segments
                        -Mcache#  set # cache segments
                ex: -Mcache8 set # of cache segments to 8
        -F  default low-level scsi format

        Usage: [-option] [variable] [device]
        -d file  firmware download
                ex: st -d fwfile /dev/sga  download firmware file fwfile into /dev/sga
        -C ### capacity change
                ex: -C 1234567890 set high blocks to 1234567890 (zero based)
                ex: -C max change capacity to factory maximum
        -B ### sector size change followed by a format
                ex: -B 1024 change to 1024 bytes/sector
ついでにUDMA5(ATA100)で動作中のこいつのベンチマーク。
# hdparm -tT /dev/sda

/dev/sda:
 Timing cached reads:   288 MB in  2.02 seconds = 142.85 MB/sec
 Timing buffered disk reads:  102 MB in  3.02 seconds =  33.76 MB/sec

2008/08/30(Sat)Plagger on Fedora 8

2008/08/30 15:13 Software::Linux
CPANでがんばっていたのだが、全然前に進まないので、yumのリポジトリを探した所、Fedora7までしかなかったのだが、無理やりFedora8にインストールしてみた。

まず、repoファイルをwget……してもいいのだが、rpmがあるのでこれを利用
$ wget http://pub.woremacx.com/worepo/deprecated/worepo-release-7.rpm
# sudo rpm -ivh worepo-release-7.rpm
# ls /etc/yum.repos.d/wo.repo
/etc/yum.repos.d/wo.repo
wo.repo内のアドレスが変わっているようなので、修正。
# vi /etc/yum.repos.d/wo.repo
 - baseurl=http://pub.woremacx.com/worepo/fedora7/i386
 + baseurl=http://pub.woremacx.com/worepo/deprecated/fedora7/i386
で、
# yum install perl-Plagger
....

Transaction Summary
======================================================
Install      314 Package(s)
Update         2 Package(s)
Remove         0 Package(s)

Total download size:  45 M
Is this ok [y/N]: y

...

Complete!
という感じで物凄いインストール。
仮にcpanで同じインストールをするとして、314パッケージもmakeの面倒見るなんて御免だ。パッケージに頼るに限る。


で、無事動いてます。

2008/08/30(Sat)CPANをサクサク動くように

2008/08/30 3:50 Software::Linux
Fedora8をVMにインストールして、ちょっと実験しようと思い、一通りyumをかけ、
さて、PerlModuleを入れるためcpanを…とやってると、どうもトロい。Fetching...とかで数十秒近く待たされた挙句FTPセッションを張るのに失敗。

どうやらftp.perl.orgが忙しいようなので、ミラーサーバーに切り替えてみる。
/usr/lib/perl5/5.8.8/CPAN/Config.pmに対して、以下のようなURLListを設定。
$CPAN::Config = {
  'urllist' => [q[ftp://ftp.kddilabs.jp/CPAN/]],
};
うむ。速くなった。

cpan中 2008/08/30

やっぱCPANだめだ、コケすぎ。
依存関係の解消ということで、ひたすらEnter連打待ちなのも如何なものか。
そしてmakeに失敗するんですよね、わかります。
→結局3万2千行も標準出力に吐いといて、最終的に失敗。

あーもう、yumが便利すぎる。
でも、ニッチな物は標準のリポジトリに追加されてないんだよなぁ……。
リポジトリを追加する方向で考えよう。

2008/07/30(Wed)screenでデタッチできん

2008/07/30 16:02 Software::Linux
今日は雷のせいで、よくサーバーへのアクセスが切れる。
というのも、サーバー側のFTTHモデムが瞬停に耐えられず再起動し、IPアドレスが変わってしまうからだ。まぁこれはしょうがない。

上位DNSまでのDNS浸透は速いものの、やっぱり末端に広がるには時間がかかるようなので、とりあえずhostsファイルに書いてやったり*1で対応するのはいいとして、GNUのscreenがattached状態になったままで再アタッチできない事がたまにある。
いつも、気がついたらdetachedになってるんだが。

ちなみに、autodetachはonである。
[kero@spinel](2)$ screen -ls
There is a screen on:
        26323.pts-0.spinel      (Multi, attached)
1 Socket in /var/run/screen/S-kero.
となったので、しょうがない、リモートデタッチするかと。
[kero@spinel](3)$ screen -d
[26323.pts-0.spinel detached.]
が。
[kero@spinel](4)$ screen -ls
There is a screen on:
        26323.pts-0.spinel      (Multi, attached)
1 Socket in /var/run/screen/S-kero.
何度やってもscreen -dはdetachedと出るばかりで直らん。
[kero@spinel](9)$ screen -r
There is a screen on:
        26323.pts-0.spinel      (Multi, attached)
There is no screen to be resumed.
resumeもできん。
[kero@spinel](10)$ screen -D

[kero@spinel](11)$ screen -D
  • Dにしたら今度は反応が返ってこない。Ctrl+Cが効くだけマシかもしれんが……。

と、この記事を書いている間に
[kero@spinel](12)$ screen -ls
There is a screen on:
        26323.pts-0.spinel      (Multi, detached)
1 Socket in /var/run/screen/S-kero.
となっていた。

あれか、焦って再アタッチせずに、ゆっくりしてきてね!!!ってことですね、きっと。
解決編をご覧ください。

*1 : C:\Windows\System32\Drivers\etc\hosts

追記: 最後に打ったコマンドをウィンドウタイトルに 2008/07/30

検索してたらこちらで見つけた。
.screenrcに
shelltitle "$ |bash"
と付け足して、.bashrcを
OLD_PS1=...(元の設定)...
SCREEN_TITLE='\[\033k\033\\\]';
PS1="${SCREEN_TITLE}${OLD_PS1}"
てな具合。OLD_PS1の部分は無論、埋め込みでも構わない。
zsh使いの場合は、↑サイトを参考に。

2008/07/11(Fri)便利コマンド on Linux

2008/07/11 18:19 Software::Linux
Linuxのシェルは拡張性がヤバいですね。
Linuxを使い始めたときからbash一筋な私ですが、.bashrcに色々と拡張関数を作って便利に使っているので、少し紹介してみます。

コンパイラ系 省略コマンド

コンパイルしたら自動的にそのプログラム名で出力して欲しい!ってことで、N先生に作り方を教わったコマンド。
a.outのままだと、後からみてどのプログラムのコンパイル結果なのか分からないし、既存のと被る可能性があるからなぁ。
  • Usage: $ gcc prog.c
    # gcc
    alias gcc='mygcc'
    function mygcc(){
        pn=`echo $1 | sed -e 's/\.cp\?p\?//'`
        command gcc -Wall -lm -o $pn $*
    }
    # g++
    alias g++='mygpp'
    function mygpp(){
        pn=`echo $1 | sed -e 's/\.cpp//'`
        command g++ -Wall -lm -o $pn $*
    }
    # cc
    alias g++='mycc'
    function mycc(){
        pn=`echo $1 | sed -e 's/\.c//'`
        command cc -Wall -lm -o $pn $*
    }
    

プログラムコンパイルから出力をファイルに書くまで一発なコマンド

まぁごくたまに使いますかねぇ。大量のinputをプログラムに流し込んだ結果をとりたいときとか。
  • Usage: $ start prog.c input.dat
    function start(){
        pn=`echo $1 | sed -e 's/\.c//'`
        command cc -Wall -lm -o $pn $1; ./$pn $2 &> $pn.result; cat $pn.result
    }
    

ファイルの中をぐるぐる検索してくれるコマンド

でも、最近は$ grep -r HOGE ./ で事足りるじゃん…と思って使ってない。
  • Usage: $ exgrep HOGE
    # File grep
    function exgrep(){
        command find ./ -type f -exec grep -l "$1" {} \;
    }
    

ディレクトリ内のtarballを一気に解凍するコマンド

さっき必要だったので作ってみた。
$ tar zxvf *.tar.gzでディレクトリ内の全ての.tar.gzを解凍してほしかったんだけど(apacheログの日ごとにtarballしていたものを解凍したかった)、いちいちforとか打つの面倒だなと思って。
  • Usage: $ extar *.tar.gz
    # Expand decompress .tar.gz
    function extar(){
        for TGZ in $@
        do
            tar zxvf ${TGZ}
        done
    }
    

どーでもいいけど、シェルスクリプトってifの対がfiだったり、caseの対がesacなのに、doの対はodじゃないんだね^^;

追記: bashの関数名に+とか書くと怒られる 2012/04/30

今まで何ともなかったfunction g++() ...という書き方だが、Fedora 16を新規インストールした辺りのbashからどうもsyntax errorになる。仕方がないんで、aliasを噛ませて修正。

Before)
$ function g++(){ echo "hogehoge"; }
-bash: syntax error near unexpected token `echo'
After)
$ alias g++='mygpp'
$ function mygpp(){ echo "hogehoge"; }