2008/12/09(Tue)小規模サーバーの静音化

2008/12/09 20:16 Software::Linux
出先から自宅のPCをちょちょっと操作したいときを考えて、自宅にWoL用のSSH/HTTPサーバー*1を走らせているが、HDDを換装してからモーター音が気になるようになった。
実は世代的にはかなり前のもう10年くらい前に作られたHDDだし。

で、気になるレベルであるが、30秒置きくらいに何か書いている感じ。
スピンダウン時間設定が全くの無駄じゃないか!カリカリうるさいし……。

というわけで、静音化にチャレンジしてみました。

続きを読む

2008/09/14(Sun)screenでデタッチできない 解決編

2008/09/14 21:21 Software::Linux
screenでデタッチできないというのを書いたが、解決法発見。
デタッチできないというよりも、むしろアタッチできないという方が正しい表現だったようだ。

これはscreenの問題ではなく、回線が切れたときにsshセッションが切れず、sshdプロセスが生きたままで、その応答待ちでscreenがattachedから変化しない模様。

以下、対処法。
$ ps x | grep pts | grep sshd
13819 ?        S      0:00 sshd: kero@pts/2
13985 ?        S      0:00 sshd: kero@pts/8
14595 pts/2    S+     0:00 grep sshd

grepが走っているpts/2が現在操作中のポートなので、pts/8を落とす。

$ kill -KILL 13985

$ screen -ls
There is a screen on:
        9120.pts-0.spinel       (Multi, detached)
1 Socket in /var/run/screen/S-kero.

$ screen -r
これで自動的にdetatchされ(autodetatchがonの場合)再アタッチ可能になる。


が、いちいちこんな事やるのが面倒なので、自分以外のsshセッションを片っ端から強制終了するスクリプトを書いてみた。
最近Perlの正規表現にハマってたりなので…。/bin/sh+sedかawk…と思いつつも、慣れてる方が書きやすい。
だいたい検証したけど、killのとこだけは検証してない…。たぶん大丈夫。ちゃんと動きました。
screenの内側から実行しないように注意。
#!/usr/bin/perl
use strict;

(my $tty = `echo -n \$SSH_TTY`) =~ s/\/dev\///;
my $dead = `ps x | grep pts | grep sshd | grep -v $tty | grep -v grep`;
foreach(split(/\n/, $dead)){
    $_ =~ s/^\s*(\d+).+$/$1/;
    print qq|Kill pid=$_...\n|;
    `kill -KILL $_`;
}

参考元:http://subtech.g.hatena.ne.jp/cho45/20070517/1179373075

2008/09/12(Fri)LoadAverageが50!?

2008/09/12 19:06 Software::Linux
この間、調子乗ってsftp3本張ってガンガン転送させながらPerlいじってたら、どんどんノロくなって、あれ?おかしいな、と思ったら、サーバーHDDのLEDが点灯
あ、こりゃまずいと思った時には、SSHの操作を受け付けるのが非常に困難に。

しばらく待ってたら、だんだん落ち着いて、topコマンドが入るようになったので、見てたけど、なにやら起動したPerlアプリのメモリが70%食ってるとかありえない表示になってたり。おかしいなぁ、そんなに酷い処理は書いてないんだけど…。

とりあえずkillallで該当Perlにkillをかけてから、sftpが収まるのを待ってようやくスムーズに。
後でサーバーの保守ログから作成したグラフを見て驚いたwこれはすげぇ…、Load Average 50いってたんだ。しかもswapの減り方が……。あぁかわいそう。
そんなに忙しいにもかかわらず頑張ってグラフ描いてくれたんだね、偉い偉い。*1

080904-load-hour.png

080904-swap-hour.png


まあ再起動することなく、おさまってくれてよかったです。
ちなみにおかしな挙動をしたPerlモジュールは変更せずにもう一回実行しても、↑のようなハングは起きませんでした。sftpのせい??

# 余談ですが、Linuxのsftpコマンドだけでレジューム転送ってどうやるんだろう?man調べたけどよく分からなかった。

*1 : まぁ白く抜けてる所は、さすがに処理してる暇がなかったんでしょう…。

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