2008年10月20日月曜日

使用していないハードディスクを積極的にスピンダウンするには

24時間稼働させるサーバでは、ハードディスクは原則24時間稼働させなければいけません。しかし、ハードディスクは内部にモータやヘッドなどのメカを持っており、動かしておくということは電力の消費、発熱、騒音を発するということになります。

LinuxのATAドライバでは、 hdparm コマンドを利用すると、ディスクアクセスが少ないときに積極的にスピンダウンさせることができます。

/sbin/hdparm -S 60 /dev/sdb

制御対象のディスクは/dev/sdb, -S オプションのパラメータとして、スピンダウンまでのアイドル時間(5秒単位)を指定します。60を指定した場合、60秒*5=300秒、つまり5分間アイドルの状態になったらディスクをスピンダウンさせます。

実際には、ファイルやディレクトリの読み書き、アクセス時間(atime)の更新などさまざまな操作がI/O発生の要因になります。特にライト要求は、Linuxでは原則5秒ごとにコミットされるため、I/Oが発生してから5秒以内にスピンアップしてしまいます。スピンアップしてしまう要因をきちんと取り除かなければ、スピンダウンとスピンアップを繰り返しディスクを痛めることにもなり得ますので注意が必要です。また、経験上ハードディスクは回しっぱなしの状態が一番安定すると言えます。スピンダウンを積極的に行うこと自体がライフタイムに影響すると考えられます。このため、メリットとデメリットは意識した上で検討しなければなりません。


積極的なスピンダウンを行うためには、以下のような点を検討するとよいでしょう。


  • ファイルシステムのオートマウントを有効化し、普段はアンマウント状態としておく

  • アクセス時間(atime)の更新を抑制するために noatime オプションをつけてファイルシステムをマウントする

  • ディスクの利用目的を明確化し、I/Oをコントロールする
    例1)バックアップ用ディスクは毎晩4:00にマウントし、バックアップ終了後アンマウントする
    例2)MP3プールをシステムディスクと分離しておき、オートマウントする構成にしておく

    例3)参照メインであれば、ライト操作を防止するため、普段は可能であればroマウントにしておく
    などなど...


2008年10月15日水曜日

Firefox 3 で、検索バーの結果は新しいタブに表示したい

Sleipnir をしばらく使っていた身としては、 Firefox 3 に乗り換えると気になるのが『検索バーでの検索結果が、今見ているタブに開かれてしまう』ことです。Slepinirでは新しいタブとして検索結果を開いてくれるのですが....

この挙動を変えるには、 about:config を開き、 browser.search.openintab を true に設定するとよいようです。

ただし、 Tab Mix Plus を有効化している場合は、アドオンの「タブを開く」タブページの中に、検索バーを新しいタブで開くためのチェックボックスがあります。


その他、デフォルトの検索バーの機能を置き換えるタイプのプラグインを導入している場合は、プラグイン側に設定がないか探してみるといいかもしれません。


2008年10月14日火曜日

邪魔なソフトウェアRAIDのシグネチャを消去する

ML110 G5 の Serial ATA ソフトウェア RAID など、 Linux dmraid で認識できる RAID を設定すると、たとえ BIOS レベルで RAID を削除しても dmraid がシグネチャを検出してしまい、 OS インストール時に支障が出ることがあります。

いちばんてっとりばやいのはディスクを /dev/zero で埋めてシグネチャを消してしまうことですが、これには時間がかかります。 シグネチャがディスクの終端にあることがわかっていれば、以下の方法でほぼピンポイントで dd をかければ解決です。

まず、ディスクの正確なサイズを調べておきます。

# fdisk /dev/sda

このディスクのシリンダ数は 19457 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): p

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

...

ディスクのセクタサイズは 512 バイトですので、160041885696÷512=31251808セクタ存在することがわかります。このディスクの終わりの部分だけを削除するには、以下のとおりコマンドを入力すると

dd if=/dev/zero of=/dev/sda bs=512 seek=31258100
dd if=/dev/zero of=/dev/sdb bs=512 seek=31258100

とすれば、3125100~31258107セクタの8セクタが/dev/zeroで塗りつぶされ、dmraidが勘違いするシグネチャを葬り去ることができます。

この操作は Anaconda をインストーラとして利用する Red Hat 系のディストリビューションであれば、インストール作業中の仮想コンソールから行えます。ただし、 dmraid の認識を解除するためには、作業後に一度インストーラをリブートする必要があります。





2008年10月10日金曜日

とりあえずLinuxをクラッシュさせる方法

Linuxで構築したシステムの動作検証などを行っている場合にシステムをクラッシュさせる方法としては、電源をブッチ切りするという単純な手もありますが、電源オフは稼働中のハードディスクが突然スピンダウンし障害の原因となります。代替となる方法としては、ほかにシステムをリセットするなどの手もありますが、最近のハードウェアでは必ずしもリセットボタンが付いていないため確実な手ではありません。

上記の代替として Linux では SysRq キーにより OS をクラッシュさせたりコアダンプを取得するための機能がありますので、これを使ってコマンドだけでクラッシュさせることができます。

# echo o > /proc/sysrq-trigger; halt -f
※echo する文字は オー(小文字)

この方法であればカーネルが即時クラッシュし停止するため(しくみについてはLinux日記2004: LKCD 診断(Mon Sep 27 2004)などを参照)、シングル構成のサーバだけでなく、SCSIなどで共有バスをもつようなシステムでも、予期せぬシステムダウンを再現できるなど有用です。




2008年9月20日土曜日

Linuxの起動後画面をオリジナルに置き換える

Linuxの起動完了後、たとえば Debian GNU/Linux 4.0の場合なら以下のような画面が表示されます。

Debian GNU/Linux 4.0 debian tty0

debian login:

しかし、サーバとして利用する場合、自分のクライアントPC内にサーバ用途の仮想PCを起動しておく場合など、IPアドレスの設定値やディスクの使用量などが常に表示されていたら便利ではないでしょうか?

Linux の場合、このログインコンソールは /etc/inittab の以下の設定値に基づいて出力されています。

1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

上記は、tty1(最初の仮想コンソール)ではランレベル1~5においてgettyにログイン待ち受けをするよう、またtty2~6(Alt-F2~F6で切り替え可能な仮想コンソール)ではランレベル2, 3においてgettyにログイン待ち受けをするように指示しています。そして先に示したログインプロンプトは、このgettyが実際に実行され表示しているものです。

この画面を自分のお気に入りステータス画面に置き換えてみましょう。ためしに/root/console.shとして以下のスクリプトを作成します。chmodコマンドで+xしておくことを忘れずに。

#!/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

while true; do
        date
        uptime
        echo
        ifconfig eth0
        echo
        df -h | egrep  '^/'
        echo

        sleep 3
        clear
done

そして、tty2(Alt-F2で表示可能な仮想コンソール)にこのスクリプトを割り当てます。/etc/inittab 2: ではじまる行に -n (ログインユーザ名を尋ねない), -l (ログインプログラム)を追加します。

2:23:respawn:/sbin/getty -n -l /root/console.sh 38400 tty2

設定を終えたら、システムを再起動するか、 init 1 でシングルユーザに落ちた後いに init 2 を実行しマルチユーザで起動しなおしてください。その後コンソール Alt-F2 を押下すると、先に作成したスクリプトが動作していることがわかります。

今回は tty2 に設定を行ったため、起動後に裏側の仮想コンソールでスクリプトの結果が表示されていますが、tty1 に設定を行えば起動直後に結果が表示されます。

 

これにより、ログインせずとも、仮想コンソール上に常時システムの状態が表示されるようになりました。個人利用であればこの方法は便利ですが、しかし、本来であれば認証を受けた者のみが確認出来る内容が、物理的アクセス可能な全ての者に許されることになりますので、IPアドレスやディスクの利用率情報などを表示させるような場合はそのリスクを勘案した上で行ってください。逆にとらえれば、この方法であれば、ログイン権限を与えずに、注視すべきステータス情報をモニタさせることができる、というメリットがあります。



2008年9月10日水曜日

Thunderbirdで全てのIMAPフォルダを常に表示する

Thunderbird 2.0 で IMAP を利用する場合、全てのIMAPフォルダは表示しない設定がデフォルトのようです。しかし、私の場合、サーバ側の procmail や自作スクリプトにより、メーリングリストごとに自動的にフォルダを作成し仕分けする仕組みを作っていますので、購読されていないフォルダもどんどん表示されていないと困ります。


そこで、 Thunderbird 2.0 で常にすべての IMAP フォルダを表示する設定について探したところ、以下の場所にありました。


アカウント設定 ≫ サーバ設定 ≫ 詳細 ≫ 購読しているフォルダのみ表示する


随分悩んだ…。


2008年9月1日月曜日

リモートのrsyncをsudoと組み合わせてrootで動かす

rsync は2ホスト間のファイル同期に便利なソフトウェアですが、伝送路として SSH のコネクションを使用する場合、リモート側で読み書きできるファイルはリモートのログインに使用したアカウントの権限に依存します。このため、ファイルのパーミッションなどを全て保持したまま全てのファイルをコピーしようとするとリモートに root でログインしなければなりませんが、 /etc/ssh/sshd_config に以下の設定がされていると、素直には目的を実現できません。


PermitRootLogin no


このような場合の回避策として、SSHログイン可能なアカウントでリモートにログイン後、sudoを使うことでrsyncを昇格させる手が使えます。


具体的な手順については mhagroot 権限の必要なディレクトリに対してrsync するにまとめてくれました。