次のページ 前のページ 目次へ

9. ハードウェアの寿命を延ばす

9.1 ハードウェアのリサイクル

商用目的であるコンピュータの市場は、 いかに新しいハードウェアとソフトウェアを売るかを探求し続けている ベンダにより大きく動かされています。 再利用を奨めることに、商業的、マーケット的な利益はありません。

Linux は大きなハードウェアを必要としないので、 古くて小さいハードウェアを使うのが好きだとか、 あるいはそうしないといけない場合、極めて便利です。

サポートされている CPU ファミリ

Linux は Intel の 386 や 486, Pentium, Pentium Pro, Pentium II, そして AMD, Cyrix, その他による互換プロセッサといった、 Intel 互換のプロセッサで動きます。

Linux は 286 CPU ファミリをまだサポートしていません。 しかし、ELKS ( http://www.linux.org.uk/ELKS-Home/index.html http://www.elks.ecs.soton.ac.uk/) に関して若干の動きがあります。

お好みなら、Linux の先祖の一つである Minix を使うこともできます。 Minix は 8088 から 286 までの CPU をサポートし、 640K といった小さなメモリでも動きます。

もちろん、Alpha や PowerPC といった他のシステムへの移植もあります。 Linux Kernel でサポートされているシステムについては、詳しくは Linux FAQ をご覧ください。

(訳注: Linux-FAQ 和訳)

別の選択肢として、高速かつ低電力消費である ARM があります。 例えば、Corel/Rebel の Netwinder は ARM プロセッサをベースとしています。 RebelStrong-ARM を参照ください。

古いコンピュータ向けの Linux 活用法

ISDN ルータ

ISDN Router を使えば、お持ちの古いハードウェアが、 キャッシング・ネームサーバ、IP ポート・フォワーディング、 オンデマンドのチャネル・バインディング付きの 安全なマスカレード機能付き ISDN ルータに変身します。 システムは一枚のディスクに収まっており、 設定変更はコンソールまたは telnet 経由で シンプルなメニューから行なえ、ディスクに記録されます。

PingOO ISDN ルータ

The PingOO ISDN Router は、 486/DX でメモリ 8MB RAM でハードディスク 100 MB といったような、 古くて使い物にならなくなったコンピュータを信頼性の高い ISDN ルータ に変身させるよう設計された、 Debian ベースの Linux ディストリビューションです。 (1 本から 2 本の ISDN チャネルを用いた) オンデマンドの帯域幅対応、保守用のダイヤルイン機能、 ipchains による IP フィルタリング、 LZS 圧縮、LAN2LAN またはシングルホストとマスカレードの接続。 PingOO ISDN ルータは、 PingOO Communication Server と同じ設計思想をもちいています。

FreeS/WAN

Linux FreeS/WAN には、IPSEC (IP セキュリティ、暗号化と認証の両方から成ります) を 提供するカーネル拡張、 IKE (インターネット鍵交換 (Internet Key Exchange), キーリングと 暗号化ルーティング・デーモン)、いろんな起動用 rc スクリプトと文書 が入っています。 古い 586 や 486 PC クローンのマシンでさえも、 システム管理者お手製のすてきな VPN ゲートウェイにしてしまいます。 バージョン 1.00 の時点で、 OpenBSD のように、他のベンダによってすでに実用されている 他の IPSEC, IKE システムとうまく協調動作することが知られています。

プリンタ・サーバ

プリンタ・サーバを動かしておく、 これが古いコンピュータの一般的な使い方というものでしょう。

限られたリソースでしのぐ、システムをチューニングする

この章は私の Laptop-HOWTO から取ってきたものです。

関連する HOWTO 文書

  1. LBX-HOWTO (訳注: LBX-HOWTO 和訳)
  2. Small-Memory-HOWTO (訳注: Small-Memory-HOWTO 和訳)

はじめに

限られたディスクスペース、メモリ、CPU 速度、 バッテリ駆動といった条件でやっていくためにこの章を書きました。

狭いディスクスペース

はじめに

ディスク・スペースを稼ぐには、 冗長スペースや未使用スペースの解放、 ファイルシステムのチューニングや圧縮といった いろいろなタイプのテクニックがあります。

注意: 以下に述べるテクニックには、 ディスク・スペースの代りにメモリを使ってしまうものもあります。 お分かりの通り、 スペースを空けるには小さな段階を数多く踏まないとなりません。

テクニック

  1. ストリップする: 今日、多くのディストリビューションは ストリップされたバイナリで提供されていますが、 チェックしてみることも意味があります。 詳しくは man strip を見てください。 ストリップされていないファイルをすべて見つけるには、 file コマンドか、もっと便利なツール findstrip があります。 注意: ライブラリをストリップしてはいけません。 悪いプログラミング技術のせいで、 間違ったシンボルが除去されてしまうことがあります。

    Russell Marks <rus@beeb.net> からのお奨め:

    最近 -g 付きでコンパイルする人がとても多くて、 個人的にはちょっとうんざりします (私の知る限り、実際にはディスクを食うだけみたいですが)。

    strip には、シンボルは strip しないが デバッグ用データは取り除いてくれる --strip-debug オプション があります。 たいていの場合はほぼうまくいきますし、ライブラリにやっても大丈夫です。 最近たまたま SuSE 6.3 を手に入れたので、 生の実行例をお目にかけることができます:


    bash-2.03# cd /lib
    bash-2.03# ls -l libc.so.6
    -rwxr-xr-x   1 root     root      4223971 Nov  6 16:22 libc.so.6
    bash-2.03# strip --strip-debug libc.so.6
    bash-2.03# ls -l libc.so.6
    -rwxr-xr-x   1 root     root      1200355 Dec  8 00:13 libc.so.6
    

  2. パーフォレーション (perforation): zum(1) は標準入力からファイルのリストを読んで、これらのファイルを 「穴あけ」(perforate) しようとします。 ヌル・バイト (0 になっているバイト) の連続部分を、 lseek で置き換え、 これらの「空き」バイトに対して実際のディスク・スペースを割り当てないで 済むようにしてくれます。 例: find . -type f | xargs zum

    (訳注: lseek(3) とは, ファイルを読み書きするファイル・ポインタを任意の場所に動かす UNIX のシステム・コールです。 一般に UNIX では、存在しない(実際に物理的にファイルが存在しない) 位置に対しても lseek できてしまいます。これを活用(悪用?)すると、 「不要な」部分には物理的なディスク空間を割り当てていない、 ディスク上の物理的なサイズよりも 論理的なサイズが大きいファイルを作れてしまいます。 こういったものを sparse なファイルといいます)

  3. 不要、重複したファイルの除去: core ファイルや emacs のリカバリ・ファイル <#ファイル名#>、 vi のリカバリ・ファイル <ファイル名>.swp RPM のリカバリ・ファイル <ファイル名>.rpmorig、 patch のリカバリ・ファイルがないかシステムをチェックしてみましょう。 重複を見つけるには finddup を試してみましょう。 バックアップやテンポラリ、テストに使うファイルを名付けるときの規則を 考えておきましょう。 例えば、ファイル名の終りに一定の名称をつけるなど。
  4. テンポラリ・ファイルの消去: 例えば /tmp が対象なら、 tmpwatch というツールがあったりもします。
  5. ログ・ファイルを縮める: ログ・ファイルは通常、/var/log にあります。 このあたりの手助けには、savelog などの良いツールがあります。
  6. ファイルの消去: あらゆる状況において「不必要」なファイル、 マニュアル・ページや /usr/doc にあるドキュメント、 /usr/src などにあるソースを消しましょう。
  7. 不要なライブラリ: 使われていないライブラリを探すには binstats パッケージが使えます (Tom Ed White に感謝)。
  8. ファイルシステム: 例えば rsfs (Reiser Filesystem とも呼ばれる) といった、 ディスク空間を経済的に扱うファイル・システムを選びましょう。 ファイルシステムを tune2fs などでチューンしましょう。 適切なパーティション・サイズ、ブロック・サイズを使いましょう。
  9. カーネル・サイズを小さくする: カーネルには必要な機能だけを入れるか、 圧縮カーネル・イメージ bzImage を作る。両方やっても構いません。
  10. 圧縮: 自分ではチェックしていませんが、私の知る限り、 ファイル・システムを gzip で圧縮して、 必要に応じてその場で展開できるはずです。 いくつかのファイルだけを圧縮する手もあります。 zexec を使えば、圧縮されたファイルを実行することすらできます。 (訳注: gzexe も同様のツールで、gzip と一緒に配布されています)
  11. 圧縮ファイルシステム:

    e2fs ファイルシステムの場合、圧縮バージョン e2compr も利用可能です。 http://debs.fuller.edu/e2compr/ を参照。

    DMSDOS で、Windows95 の圧縮ドライブ (drivespace, doublestacker) にアクセスできるようになります。 DOS/Windows95 との互換性が必要ない場合、言い換えれば Linux でのみ使う場合は、 本当にガッカリな代物だとプログラムの作者自身言っています。 http://fb9nt-ln.uni-duisburg.de/mitarbeiter/gockel/software/dmsdos/ 参照。

  12. パーティションの共有: 別の OS とスワップ・スペースを共有 (Swap-Space-HOWTO 参照) したり、 (訳注: Swap-Space-HOWTO 和訳) データ・ファイルの入っているパーティションを共有もできます (mount 参照). MS-DOS や Windows95 の圧縮ドライブ (doublespace, drivespace) をマウントするには dmsdos http://metalab.unc.edu/pub/Linux/system/filesystems/dosfs/ を使えます。
  13. ライブラリ: 他の (古い) ライブラリ、例えば libc5 を使ってみます。 このライブラリは libc6、またの名を glibc2 よりも小さいようです。
  14. カーネル: 古いカーネルで要求が満たせるなら、そうすればちょっとディスクを節約できます。
  15. GUI: できる限りグラフィカル・ユーザ・インタフェース (GUI) を使わないようにします。
  16. 小さなディストリビューション: 3.5" フロッピー一枚に収まるものから、 10MB のディスク・スペース、少ないメモリに合うディストリビューションもあります。 Laptop-HOWTO をご覧ください。
  17. Tailmerging for Ext2: Tailmerging は ブロックサイズが大きく、かつ小さなファイルが多数あるような ファイルシステムにおいて領域を節約するテクニックです。 Tailmerging for Ext2 は、 ファイル群の最後のブロックを共有ブロックにするという、 ext2 に対する実験的な拡張です。

ハードディスクの速度

hdparm というツールを使えば、 ハードディスクの性能が向上するよう設定できます。 ストライピングを有効に設定してある ラップトップのディスクを見たことがありますが、 私にはそうする理由がわかりませんでした。 私見では、RAID0 とも呼ばれるストライピングというものは、 性能向上のために少なくとも別のディスクを必要とするからです。

少ないメモリ

関連する HOWTO 文書

  1. Todd Burgess <tburgess@uoguelph.ca> による Small-Memory-mini-HOWTO http://eddie.cis.uoguelph.ca/~tburgess (訳注: Small-Memory-HOWTO 和訳)
  2. Bruce Richardson による 4MB Laptop-HOWTO.
  3. Modules-mini-HOWTO (訳注: Modules-HOWTO 和訳)
  4. Kerneld-mini-HOWTO (訳注: Kerneld-mini-HOWTO 和訳)

テクニック

メモリ消費量を freetop で調べましょう。

Mergemem Project. オペレーティング・システムに検出されないままの 中身が一緒のメモリ・エリアを含んでいるプログラムは多くあります。 プログラムの起動の際に生成され、長い期間変更されないまま残っている データを含んでいるというのがよくある例です。 mergemem を使えば、こういったエリアを検出し、共有できます。 共有はオペレーティング・システムのレベルで実行され、 ユーザ・レベルのプログラムには見えません。 mergemem は、 その実行コードをプライベートなデータ・エリアにしまっておく インタプリタやエミュレータ (Java とか Prolog など) の インスタンスをいっぱい実行する時に特に便利です。 とはいえ、他のプログラムでも、程度こそ少ないものの、 その恩恵にあずかることはできます。

あなたの要求に必要ない機能をすべて除去し、 カーネルをできる限りモジュラー化すれば、カーネル・サイズ を小さくできます。

要らないサービスやデーモンを止める、例えば lpd, mountd, nfsd を止めたり、 仮想コンソール を何個か閉じてしまう、といったこともできます。 詳しくは Small-Memory-mini-HOWTO (訳注: Small-Memory-HOWTO 和訳) をご覧ください。

もちろん、使えるならスワップ領域を使いましょう。

他のマシンのリソースだって使えます。 例えば X や VNC, telnet だってそうです。 Virtual Network Computing (VNC) に関しては http://http://www.uk.research.att.com/vnc/ を見てください。

遅い CPU スピード

あなたは CPU をクロック・アップしたいのかもしれませんが、 ハードウェアにダメージを与えるかもしれませんし、 私はそのへんの経験がありません。 例えば Adorable Toshiba Libretto - Overclocking http://www.cerfnet.com/~adorable/libretto.html を見てみてください。

小粒なアプリケーション、ディストリビューション

まだちょっとしか集まっていません。もっと情報を探しています.

  1. BOA - 「ライトウェイトで高性能な Web サーバ。 boa はシングル・タスクの HTTP サーバです。 伝統的な Web サーバとは異なり、 やってくるコネクションごとに fork したりしませんし、 複数のコネクションを扱うために自分自身を多数 fork したりもしません。 内部的には、進行中の HTTP コネクションを多重化して扱っており、 CGI プログラム (別プロセスに成らざるを得ない) に関してだけ fork します。 予備試験の結果は、 100MHz Pentium マシンで毎秒何百ものヒットをハンドリングできることが わかった、というものでした」
  2. MGR - X よりはるかに小さなリソースで動く、グラフィカルなウインドウ・システム
  3. Low Bandwidth X - Alan Cox は LINUX REDUX 誌 1998 年 2 月号で書いています: 「.. 普通のアプリケーションを非常にうまくさばけているものが二つある。 LBX (Low Bandwidth X) は X Consortium (現在は OpenGroup、 www.opengroup.org) による正式なアプリケーション。 dxpc http://ccwf.cc.utexas.edu/~zvonler/dxpc のほうは また別の選択肢で、ほとんどの人はこっちを選ぶだろう。 これらは X11 のプロキシ・サーバとしてふるまい、データストリームを圧縮する。 圧縮率は通常の描画リクエストで元の帯域幅の使用量の 50 パーセントに、 そしてしばしば 25 パーセントにまで達する。 dxpc を使えば、28.8 モデムでの接続や、インターネットを介した場合でも X のアプリケーションを極めて実用的に使える」
  4. blackbox - 「これは X のウインドウ・マネージャです。 WindowMaker や Enlightenment, FVWM2 といったポピュラーなパッケージと いろんな点で似ています。 ただ、お使いのシステムのリソースをがっぽり食うような ウインドウ・マネージャには飽きがきている、 でも格好よくて今風なインタフェースもやっぱり欲しい、 そんなあなたなら、blackbox に興味を惹かれるかもしれません」
  5. linux-lite - 2MB メモリに 10MB ハードディスクしか積んでいないようなシステム向けの、 1.x.x カーネルをベースとしたディストリビューションです。 上記 URL を見てください。
  6. smallLinux - http://smalllinux.netpedia.net/ フロッピー三枚組の、Linux およびユーティリティから成る ミニミニ・ディストリビューションです。 カーネル 1.2.11 がベース。 ルート・ディスクは ext2 でフォーマットされており、 fdiskmkfs.ext2 が入っているので、 ハードディスクへのインストールが可能です。 4MB 以下しかメモリを積んでいないような古いマシンで立ち上げるのに便利です。
  7. cLIeNUX - クライアント・ユースに特化した Linux ディストリビューションです。
  8. minix - Linux ではありませんが、 286 CPU に 640K RAM といった極めて小さいシステムに便利な UNIX です。 http://www.cs.vu.nl/~ast/minix.html David I. Bell による、mini-x ftp://ftp.linux.org.uk/pub/linux/alan/ という X のサポートさえあります。
  9. screen - 小さくてもパワフルなコンソール・マネージャです。 John M. Fisk <fiskjm@ctrvax.vanderbilt.edu> は LINUX GAZETTE 1996 年 7 月 1 日号に書いています: 「あぁ、世はなべて GUI, GUI, GUI, GUI ばっかり! メジャーな OS 製造業者たちもそう信じさせようとしている。 その傾向は確かにますます増えている。けれども、 コトを片付けるのにはコマンド・ライン・インタフェース (CLI) のほうが実にいい、 ということもまだまだある、これが真実なのだ。 早いし、一般に効率的だし、 メモリや CPU が限られているマシンにはいいチョイスだ。 そして、実に多くの気の効いたことが コンソールで済ませられる、ってことも忘れちゃいけない」 「screen は、複数のプロセス、典型的には対話的なシェル間で 物理的な端末を多重化してくれる、フル・スクリーンのウインドウ・マネージャです。 それぞれの仮想端末は DEC VT100 ターミナルの機能、 加えて ANSI X3.64 (ISO 6429) と ISO 2022 スタンダード (例えば行挿入/削除、複数キャラクタ・セットのサポート) からの若干の制御機能を提供してくれます。 他にも本当のマルチユーザのサポート、 スクリーン分割、ハード・ステータス・エミュレーション、 設定可能なウインドウ・セパレータとハードステータス文字列、 常駐ウインドウ・セパレータ、多数の新しいエスケープ・シーケンス、 ログ・ファイルのタイムスタンプとフラッシュ・タイムアウト、 内蔵 telnet (オプション)、Braille 点字端末サポート (オプション)、 ヒストリ圧縮などがサポートされています」
  10. tinyirc - 「小さくて、贅肉を削ぎ落した IRC クライアントです。 同じ IRC クライアントでも、ircII ファミリーが持っているような より進んだコマンドは持ち合わせていませんし、色も出ません。 でも使えるものですし、なによりも小さいんです」
  11. tinyproxy - 「tinyproxy は、最小限のシステム・リソースのみで働くよう 設計された軽い HTTP プロキシです。 squid のような大きな HTTP プロキシでは大げさだとか、 セキュリティ・リスクになってしまうような小さなネットワークに 向いています。tinyproxy のこの単純さは、 思いのままにカスタマイズしたい場合の候補にもなります。 tinyproxy のソースは読んで理解するのに時間はほんの少しで済みますし、 欲しい機能を追加しはじめるのもさくっとできます」

9.2 その他の技

ニッカド電池は、メモリ効果を防ぎ、寿命を延ばすためには 定期的に放電する必要があります。

ニッカド、アルカリ、NiMH といった種類の電池には 有毒な化学物質が含まれています。 技を使ってなるべく寿命を延ばして使うべきですし、 廃棄する際はリサイクルすべきです。ゴミ箱に放り投げてはいけません。

N.N. で触れられている「Iron」バッテリは チェックすべき技術といえましょう。 使用済み電池に係わる有毒廃棄物の問題を 減らすことができるかもしれないのですが、 こういった電池はおそらく数年前のものでしょう。

ラップトップ・マシンのバックライト、モニタ (スクリーン・セーバ)、 ハード・ディスク (hdparm) などについても所感を書かないといけません。

9.3 Linux BadRAM Patch

BadRAM Patch の目的は、 壊れた RAM モジュールでも Linux カーネルを動くようにすることにあります。 壊れた RAM には、ある(既知の)メモリアドレスにおいて、誤ったビットが発生します。 普通は、そういった RAM は使い物にならないので、捨てられます。 おおきな RAM ほど、エラーになるアドレスの確率も大きいものです。 壊れたメモリチップに対して、捨てる以外の別の手があるというのは、 大きいサイズのメモリほど、楽しいものです。

9.4 他のオペレーティング・システム

George White <gwhite@bodnext.bio.dfo.ca> のご好意で転載します:

UNIX が付属していて、幅広いオープン・ソース・ソフトウェアを走らせられる 古いコンピュータ (SGI, Sun, NeXT など) を買うのもいいでしょう。 今でも現行の OS のバージョンを動かせるもの (SGI Indigo2) もありますが、 さもなくば、Linux のようなオープン・ソースな OS でいったほうがいいでしょう。 どっちの場合でも、自分自身のソフトを書くための 良いソフトウェアやツール群に手が届くわけです。

古いコンピュータでの消費電力の低減には、 UPS が作動した際のバッテリ駆動時間が長くなるとか、 「メイン」電源につなげない場合でも、もっと別の小さな電源供給源を使える といった意味があります。


次のページ 前のページ 目次へ