FC2ブログ

yaroespage::weblog

自作パソコンとその他もろもろの、ヨモヤマバナシです。

--.--.-- --:-- | スポンサー広告 | トラックバック(-) | コメント(-)
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- --:-- | スポンサー広告 | トラックバック(-) | コメント(-)
FC2 managemented

 いやはや、またもや更新に1か月かかってしまったという体たらくですが、皆さんお忘れではございませんでしたでしょうかのLinuxメモ・セカンドシーズンです。
 何度も同じイイワケで恐縮ですが、この物語の各話は(更新が滞っているだけで)ほぼ時間間隔ゼロの状態で連続しております。
 このままでは、真冬に夏のネタを放送している「スクールランブル」のようになってしまわないかと戦々恐々としているところであります。

 ということで(何が「ということ」なのか分かりませんが)、より一層の暖かい心で、このLinuxメモ・セカンドシーズンをご愛読いただければ幸いに存します。

 前回は、「玄箱」をNASメディアサーバにしたよ、というハナシでした。

 玄箱本体の消費電力はカタログによると17W。
 私が内蔵させたMaxtor製80GB HDD(同型機のデータがmaxtor.co.jpにないので、回転数が同じ5400rpmであるDiamondMax 16最新のデータシート(PDF)からピックアップしました)がスタンバイ時で約1W、シーク時で約10W。

 あわせて、およそ18W~27Wという省電力ですから、PCをサーバにするのに比べたら気分が(サイフの中身も)全然違います。

 でもいいことばかりじゃなくってですね、実は、こいつ、結構うるさいんですよ。

 いや、正確に書きましょう。
 玄箱の中に入れたHDDの動作音が耳につくんですよ。

 玄箱の筐体は、ほとんどの部分がプラスティック製で、防音や防振対策らしきギミックもまったく存在していません。

 なので、HDDの回るキーンというカン高い音や、ゴゴゴまたはガリガリというアクセス音が、ほとんど外部にツツニケ状態なので、うるさいHDDを入れるとうるさいワケです。

 今回内蔵したMaxtor製80GB HDDのアクセス音はくぐもった低い音でなのでそれほどでもないんですが、キーンというカン高い音は結構漏れてきます。

 NASとして使用する分には、他のPCも起動していることもあって、この程度の音はかき消されちゃうんですが、メディアサーバとして運用する時のパートナーはテレビとLinkPlayerだけです。
 人間のほうはテレビの音声に集中したいキモチになっているワケですから、いやおうにも玄箱が発するノイズがクローズアップされてくるわけです。

 とはいえ、玄箱ってのは、基本的に余ってる古いHDDを使ってNASを構築するモノなワケですから、当然のごとく我が家でも1~2代前のHDD(ボールベアリング仕様)を内蔵させているわけでありまして、うるさいのもある意味しょうがないのはしょうがないんです。

 キティ鯖で使っていたときにはSmart Driveに入れてたほどのHDDですからね。

 しょうがないのはしょうないんですが、無策のまま放っておくのもシャクなので(というか夜なんか「キーン」が気になってしょうがないので)、何とかならんものかとイロイロ試行錯誤してみることにしました。

 とはいえ、先にも説明しましたとおりああいう感じの造りですから、ハードウェア的にどうこうしようってのは、シロート的には限界があります。

 Smart Driveに再登場願ったのでは玄箱の筐体に入らなくなっちゃいますしね(笑)。

 マジでSmaerDriveに入れて横に並べちゃえばいいじゃんとかも思ったりしたんですけどね(笑)。

 そこで、今回はソフトウェア的アプローチで静音化を行ってみることにしました。

 「寝るときは消せばいいじゃん」ってのは真理をつく一言ですが、それだとなんら発展がないので、今はナシね。

 Linuxには「hdparm」というHDD周りの設定をいじるコマンドがあります。

 HDDの情報を読み出したり、ATA HDDのDMA転送をONにしたりOFFにしたりできるツールなんですが、

KURO-BOX:# hdparm -S 60 /dev/hda

 というふうに'S'オプションを使うことで、指定した数値×5秒間アクセスがない場合にHDDをとめることができるようになるんです。

 上記の例だと、hdaに対して5分間(60×5秒)アクセスがない場合にhdaを停止します。

 ターミナルエミュレーター(私はTera Termを使ってます)で玄箱にログインし、上記のコマンドを打ち込んでみたところエラーになりましたので、我が玄箱のDebianにはインストールされていないようです。

 ということで、まずは「hdparm」をインターネットを通じてダウンロードしインストールします。

KURO-BOX:# apt-get install hdparm

 あいかわらず、なんとラクチンなんでしょう。

 インストールが済んだら、とりあえずテストです。

 あんまり長い時間に設定したらテスト中でヒマですから、とりあえず60秒でやってみました。

KURO-BOX:# hdparm -S 12 /dev/hda

 じっと待つこと60秒。

 かこ~ん!

 HDDが止まりました。

 試しにWindowsで共有ファイルをダブルクリックしてみました。

 うい~ん。ぎり。ぎり。ぎり。ぎり。

 HDDが起動しました。

 んで、ややあって共有ファイルが開きました。

 成功です。

 パチ。パチ。パチ。

 ・・・て、喜んでいたら、特に何もしていないのに、うい~ん。ぎり。ぎり。ぎり。ぎり。

 なに?なに?

 どゆこと?どゆこと?

 そのまま待っていると1分後にかこ~んと停止しました。

 で、そのまま放置していると、10分もしないうちにうい~ん。ぎり。ぎり。ぎり。ぎり。

 いやあ、アレですよ、意外に簡単に静音化ができちゃったのでキモチ悪いな、と思っていたら、案の定、コレですよ。

 ホント、自作PCなんぞやってたら性根が曲がりますすね(笑)。

 この症状から推察するに、何らかの理由で定期的にディスクアクセスが発生しているってことですね。
 う~む。

 とりあえずググってみました。

 すると、noflushdおよびbdflushあたりがこの問題のキーワードのようです。

 noflushdは、Debian.orgの記事によれば、「アイドル状態にあるハードディスクの回転数を落とす」デーモンとのことですので、hdparmにSオプションを指定するのと同等のように思えます。
 ということで、今回の問題を直接解決する手段にはなり得なさそうなのでスルーしておきます。

 bdflushは、Debian.org本家にコレ!といった記事がないので、いろんなWebページを読んでみた結果を総合しますと、ディスクキャッシュのフラッシュを行うデーモンのようです。
 /proc/sys/vm/bdflushに適切な数値を保存することで、キャッシュフラッシュのタイミングを制御することができ、結果として無駄なディスクアクセスを減らすことができるようです。

 bdflushはいいですね。
 ディスクキャッシュのフラッシュを行う条件をギリギリまで延長すれば、hdparm -Sで停止しているHDDの停止時間をより長くすることができそうな匂いがプンプンします。

☆ さて、方法は決まりましたので、次はどの辺がギリギリになるのかを考えてみます。  bdflushには9つのパラメータがあり、第1パラメータと第7パラメータが、ディスクキャッシュにどれだけの変更が加えられたらキャッシュのフラッシュを行うかを%で指定るすようになっているようです。  玄箱のDebianのbdflushをcatコマンドで表示させてみると、次のように設定されていました。

KURO-BOX:# cat /proc/sys/vm/bdflush
40  0  0  0  500  3000  60  0  0

 bdflushには9つのパラメータがあり、第1パラメータと第7パラメータが、ディスクキャッシュにどれだけの変更が加えられたらキャッシュのフラッシュを行うかを%で指定るすようになっているようです。
 ここの数字を大きくすれば、ディスクキャッシュが少々汚れたくらいではフラッシュしなくなります。

 キャッシュが汚れるといってもゴミが入るんじゃないですよん。
 キャッシュ内のデータだけが更新されることで、ディスクの内容と整合性が失われた状態を「ダーティ・キャッシュ」と呼ぶんです。
 なのでキャッシュをフラッシュする(水を流して洗う)わけですね。

 しかし、この方法は、『データの一貫性が重要なアプリケーションやメモリ量を大きく超えるような大量のデータを扱うアプリケーションの場合にはあまり意味がないばかりか、かえって性能劣化の原因ともなる』(@IT Linux Squareの記事より引用)そうです。

 NASである玄箱で上記のパラメータをイジるのは、なんだかマズそうです。

 では、視点を第5パラメータに移しましょう。http://www.itmedia.co.jp/help/tips/linux/l0174.html
 第6パラメータはキャッシュの更新間隔(単位は10ミリ秒)です。

 「キャッシュの更新間隔がある」ということは、「何もしていなくても、一定の時間が経過するだけでディスクキャッシュを更新しちゃう」ということです。
 hdparm -SでHDDの回転を止めてもまもなく元に戻っちゃうのは、コレが原因であると言い切っても良いのではないでしょうか!

 ということで、このパラメータだけを大きくしちゃえば、普通にディスクアクセスがある間は普通と変わらない条件でキャッシュフラッシュを行い、何もしないでいるときに限ってはキャッシュフラッシュの間隔を引き伸ばすことができるって寸法になるじゃないですか!

 第6パラメータに指定できる最大値は1,000,000ということですから、最大10,000秒(=2時間46分40秒)に1回の更新にすることができるわけです。

 ウダクダ考える前にやってみましょう、ということでやってみました。

 1分・・・2分・・・いい感じです。

 5分・・・6分・・・うい~ん。ぎり。ぎり。ぎり。ぎり。

 _| ̄|○

☆ いや、いや、まだ斃れるわけにはいきません。  別のサイトの情報では同じLAN内のPCを使っていると特に玄箱にアクセスしなくてもHDDが回ることがあるそうです。
 今まさに私の目の前で起こっていることがコレなのかも知れません。  かといって俺PCの電源を切っちゃうとヒマなので、玄箱のLANケーブルを抜いてみましょう。  1分・・・2分・・・いい感じです。  5分・・・6分・・・ドキ。ドキ。ドキ。  10分・・・11分・・・ウホッ! やっぱ、Windowsが原因だったのかも!。  15分・・・16分・・・うい~ん。ぎり。ぎり。ぎり。ぎり。

 _| ̄| ...○ コロコロ...

 もうやだ!!

 hdparmを止めました(hdparm -S 0 /dev/hda)。

 bdflushを元に戻しました。

 そこらに転がっていた通販の段ボール箱(玄箱が余裕で入る、30cm×20cm×12cmくらいの箱)を拾い上げ、カッターナイフでおむろに電源ケーブルとLANケーブル、そしてクーラーファンの排気口が当たるであろう部分をくりぬきました。

 何でも出てくる魔法の箱(その実は、元は押入れ衣装ケースだったものに、いろんな作業で余ったりしたものをゴチャゴチャと収めているもの)をゴソゴソをさぐると、5mm厚の発砲ウレタンゴムの切れ端がいくつか出てきましたので、それを段ボール箱の内側にペタペタと貼り付けました。

 そして、その段ボール箱に玄箱を収め、配線し、プリンタの横に置き、何もかも忘れ、ぐっすりと寝ることにしました。

 は~あ。

初出:2005/01/24

スポンサーサイト
FC2 managemented
| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。