------------------------------------------------------------------------------ /proc フ ァ イ ル シ ス テ ム ------------------------------------------------------------------------------ /proc/sys Terrehon Bowden October 7 1999 Bodo Bauer ------------------------------------------------------------------------------ Version 1.2 Kernel version 2.2.12 ------------------------------------------------------------------------------ Table of Contents ----------------- 0 序文 0.1 はじめに/謝辞 0.2 法的事項 1 システム情報の収集 1.1 プロセスごとのサブディレクトリ 1.2 カーネルデータ 1.3 /proc/ide の IDE デバイス情報 1.4 /proc/net のネットワーク情報 1.5 SCSI 情報 1.6 /proc/parport のパラレルポート情報 1.7 /proc/tty の TTY 情報 2 システムパラメータの修正 2.1 /proc/sys/fs - ファイルシステム・データ 2.2 /proc/sys/fs/binfmt_misc - その他のバイナリフォーマット 2.3 /proc/sys/kernel - カーネル全般のパラメータ 2.4 /proc/sys/vm - 仮想メモリ・サブシステム 2.5 /proc/sys/dev - デバイス固有のパラメータ 2.6 /proc/sys/sunrpc - リモート・プロシジャ・コール(RPC) 2.7 /proc/sys/net - ネットワーク関連 2.8 /proc/sys/net/ipv4 - IPV4 設定 2.9 Appletalk 2.10 IPX ------------------------------------------------------------------------------ 序文 ------------------------------------------------------------------------------ 0.1 はじめに/謝辞 ----------------- この文章は IDG Books よりまもなく出版される SuSE Linux distribution の本の一 部です。/proc ファイルシステムについて網羅的に説明した文章がなかっため、私た ちは自由に入手できる多くの文章を元にこの章を記述しました。それでこの成果を Linux コミュニティに還元することが公平だと考えました。この文章は 2.2.* バー ジョンのカーネルに基づいています。まだ完全というにはほど遠いのではないかと考 えていますが、役に立つことを期待しています。 私たちの知る限りこれは /proc ファ イルシステムについて網羅的に扱った最初の文書です。 この文書は Intel x86 ハー ドウェアに焦点を当てています。 PPC、ARM、SPARC、APX 等の特徴について探してい るとしたら、たぶん見つけることができないでしょう。また IPv4 ネットワークにつ いてのみ扱っています。IPv6 や他のプロトコルは扱っていません。ごめんなさい。 しかし追加や修正案は歓迎します。 Bodo 宛てにメールしていただければ、この文章 に追加されるでしょう。 私たちは Alan Cox、Rik van Riel、Alexey Kuznetsov そしてこの文書の編集に協力 してくれた多くの人々に感謝したいと思います。さらにこの文書の作成にあたって Andi Kleen の文書を大いに参考にしました。 追加の情報を提供してくれたことも合 わせ、彼に特別な感謝をしたいと思います。 さらに Linux カーネルにソースやドキュ メントを提供された方々、この偉大なるソフトウェアの作成に助力された全ての方々 に感謝します。 どのようなコメント、修正/追加でもありましたら、ためらわずに Bodo Bauer mail: まで連絡ください。私たちは喜んでこの文書に追加させて 頂きます。 (訳注) Bodo Bauer へのコメントは英語またはドイツ語でお願いします。 この文書の日本語への翻訳は JF プロジェクトのカーネルドキュメント翻訳 の一部として、花高信哉 および 野村淳一 が行いました。 この文書の翻訳に際してアドバイスをし てくれた JF メンバにこの場を借りて感謝をしたいと思います。またこのすばらしい 文書の原著者であり、日本語への翻訳と配布を快諾してくれた Bodo Bauer に感謝をします。 なおこの文書は 2.2.12 カーネルに対応したものですが、実際には 2.3/2.4 系カー ネルに付属しているものです。2.2.12 カーネルに付属している同名の文書よりも 新しいものとなっていますのでご注意ください。 この文書の最新版は http://www.bb-zone.com/Proc/ より HTML 版として入手可能 です。 翻訳版は JF プロジェクトの一部として入手できます。http://www.linux.or.jp/JF/ より探してください。 0.2 法的事項 ------------- 私たちはこの文書の正確さは保証しません。この文章が不正確だったためにあなたの システムが破壊されたと私たちに苦情を言ってきたとしても、私たちは責任を負いま せん。 (訳注) もちろん日本語版の翻訳者や配布者も文書の正確さについて何の保証も行い ません。できるだけ正確に訳すよう努力していますし、読者の役に立つことを期待し て配布を行っていますが、最終的にこの文書は読者の責任にてご利用ください。また linux は常に進化しており、翻訳時点で既に変更されたり無効になった部分が存在し ます。これらの点も含めて、そのまま翻訳したことをあらかじめご承知ください。 また原文にあった誤解を招きうるレイアウトを変更したほかスペルミスを修正してあ ります。これに関してもご了承ください。 ------------------------------------------------------------------------------ 第1章: システム情報の収集 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ この章では ------------------------------------------------------------------------------ * 仮想ファイルシステム /proc の特性とその運用中の Linux システムの情報を提供 する機能について調査する * /proc の構造を調べる * カーネルとシステム内で動いているプロセスについて種々の情報を発見する ------------------------------------------------------------------------------ proc ファイルシステムはカーネル内部のデータ構造体のインターフェースとして働 きます。システムに関する情報を入手したり、動いているカーネルのパラメータを調 整するのに使用できます。 最初に /proc の読み取り専用の部分について見てみましょう。第 2 章では設定を変 更するために /proc/sys をどのように使用するかについて説明します。 1.1 プロセスごとのサブディレクトリ ----------------------------------- /proc ディレクトリにはそのシステムで走っているプロセスそれぞれに対して、プロ セス ID (PID) の名前がついたサブディレクトリを含んでいます。 self というリンクは proc ファイルシステムを読んでいるプロセスを指しています。 各プロセスのサブディレクトリは 表1-1 に挙げた項目を持っています。 表 1-1: /proc におけるプロセスごとの項目 .............................................................................. ファイル 内容 cmdline コマンドライン引き数 environ 環境変数の値 fd 全てのファイルディスクリプタを含んだディレクトリ mem このプロセスが保持しているメモリ stat プロセスの状態 status 人間が読める形式のプロセスの状態 cwd プロセスの現在の作業ディレクトリへのリンク exe このプロセスの実行形式へのリンク maps メモリ・マップ root このプロセスのルート・ディレクトリへのリンク statm プロセスのメモリ状態についての情報 .............................................................................. 例: プロセスの状態についての情報を得るのは /proc/PID/status というファイルを 読むだけで可能です。 > cat /proc/self/status Name: cat State: R (running) Pid: 5452 PPid: 743 Uid: 501 501 501 501 Gid: 100 100 100 100 Groups: 100 14 16 VmSize: 1112 kB VmLck: 0 kB VmRSS: 348 kB VmData: 24 kB VmStk: 12 kB VmExe: 8 kB VmLib: 1044 kB SigPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000000000000 SigCgt: 0000000000000000 CapInh: 00000000fffffeff CapPrm: 0000000000000000 CapEff: 0000000000000000 これは ps コマンドによって見ることができるのとほとんど同じ情報を示しています。 実際 ps はこの情報を proc ファイルシステムから取得しています。statm ファイル にはプロセスの使用しているメモリについてのより詳しい情報があります。その七つ の値の意味は 表1-2 で説明します。 表 1-2: statm ファイルの内容 .............................................................................. ファイル 内容 size プログラムの合計サイズ resident メモリ上にある部分のサイズ shared 共有されているページ数 trs コードのページ数 drs データ/スタックのページ数 lrs ライブラリのページ数 dt 汚れた(dirty)ページ数 .............................................................................. 1.2 カーネルデータ ------------------ プロセスの項目と同様に、走っているカーネルについての情報を与えてくれるファイ ルが存在します。 この情報を得るのに使用するファイルは /proc の直下に存在しま す。これを 表1-3 に示します。 これらのファイル全てがあなたのシステムに存在し ているわけではありません。どのファイルが存在し、どのファイルが存在しないかは カーネルのコンフィギュレーションやロードされているモジュールに依存しています。 表 1-3: /proc のカーネル情報 .............................................................................. ファイル 内容 apm APM (Advanced power management) 情報 bus バス特有の情報を含んでいるディレクトリ cmdline カーネルのコマンドライン cpuinfo CPU についての情報 devices 使用できる(ブロックとキャラクタ)デバイス dma 使用中の DMA チャネル filesystems サポートしているファイルシステム ide IDE サブシステムについての情報を含んでいるディレクトリ interrupts 割り込みの使用状況 ioports I/O ポートの使用状況 kcore カーネルのメモリ(core)上のイメージ(ELF や A.OUT が可能) kmsg カーネルのメッセージ ksyms カーネルのシンボル・テーブル loadavg ロード・アベレージ locks カーネル・ロック meminfo メモリ情報 misc 雑多な情報 modules ロードされているモジュールのリスト mounts マウントされているファイルシステム net ネットワーク情報(説明を見てください) partitions システムが認識しているパーティション rtc リアル・タイム・クロック scsi SCSI 情報(説明を見てください) slabinfo Slab pool の情報 stat カーネル全般の統計情報 swaps スワップ空間の使用状況 sys 第2章を見てください。 uptime システムの使用時間(uptime) version カーネルのバージョン .............................................................................. 例: 現在どの割り込みが使用されているか、またそれが何の目的に使用されているか は /proc/interrupts を調べることでチェックできます。 > cat /proc/interrupts CPU0 0: 8728810 XT-PIC timer 1: 895 XT-PIC keyboard 2: 0 XT-PIC cascade 3: 531695 XT-PIC aha152x 4: 2014133 XT-PIC serial 5: 44401 XT-PIC pcnet_cs 8: 2 XT-PIC rtc 11: 8 XT-PIC i82365 12: 182918 XT-PIC PS/2 Mouse 13: 1 XT-PIC fpu 14: 1232265 XT-PIC ide0 15: 7 XT-PIC ide1 NMI: 0 /proc には特に重要な三つのサブディレクトリ scsi、net、sys が存在します。一般 的なルールとして、これらのディレクトリの内容やディレクトリそのものの存在でさ えカーネルの設定に依存しています。SCSI が有効になっていなければ、scsi ディレ クトリは存在しないでしょう。net についても同様で、そのカーネルがネットワーク をサポートしている場合にのみ存在します。 slabinfo ファイルは slab レベルにおけるメモリ使用状況の情報を与えます。Linux バージョン 2.2 ではページレベル以上のメモリ管理には slab pool を使用します。 一般に使用されるオブジェクト (ネットワークバッファやディレクトリキャッシュな ど) はそれら自身の slab pool を持っています。 1.3 /proc/ide の IDE デバイス情報 --------------------------------- /proc/ide サブディレクトリにはカーネルが認識している全ての IDE デバイスにつ いての情報が含まれています。このディレクトリには各 IDE コントローラのサブディ レクトリ、drivers ファイル、コントローラのサブツリー中のデバイスディレクトリ を指している各 IDE デバイスのリンクがあります。 drivers ファイルは IDE デバイスに使用されているドライバに関する一般的な情報 を含んでいます。 > cat /proc/ide/drivers ide-cdrom version 4.53 ide-disk version 1.08 より詳しい情報はコントローラ特有のサブディクトリにあります。これらは ide0、 ide1 のような名前になります。これらのディレクトリは 表1-4 に示すファイルをそ れぞれ含んでいます。 表 1-4: /proc/ide/ide? の IDE コントローラ情報 .............................................................................. ファイル 内容 channel IDE チャンネル(0 または 1) config 設定(PCI/IDE ブリッジのみ) mate メイトネーム model IDE コントローラの型/チップセット .............................................................................. 各デバイスはそれが接続しているコントローラのディレクトリにそれぞれ別個のサブ ディレクトリを持っています。 これらのディレクトリは 表1-5 に挙げたファイルを 含んでいます。 表 1-5: IDE デバイス情報 .............................................................................. ファイル 内容 cache キャッシュ capacity メディアの容量(512バイトのブロック単位) driver ドライバとバージョン geometry 物理ジオメトリと論理ジオメトリ identify デバイス識別ブロック media メディアの型 model デバイスの識別子 settings デバイスの設定 smart_thresholds IDE ディスク管理閾値 smart_values IDE ディスク管理値 .............................................................................. 最も興味深いファイルは settings です。このファイルを見ればドライブパラメータ を良い具合に一覧できます。 # cat /proc/ide/ide0/hda/settings name value min max mode ---- ----- --- --- ---- bios_cyl 526 0 65535 rw bios_head 255 0 255 rw bios_sect 63 0 63 rw breada_readahead 4 0 127 rw bswap 0 0 1 r file_readahead 72 0 2097151 rw io_32bit 0 0 3 rw keepsettings 0 0 1 rw max_kb_per_request 122 1 127 rw multcount 0 0 8 rw nice1 1 0 1 rw nowerr 0 0 1 rw pio_mode write-only 0 255 w slow 0 0 1 rw unmaskirq 0 0 1 rw using_dma 0 0 1 rw 1.4 /proc/net のネットワーク情報 -------------------------------- /proc/net サブディレクトリは一般的な形式に従います。表1-6 は IP version 6 を サポートする設定のカーネルで得られる追加の値を示しています。表1-7 はその他の ファイルとその意味を示しています。 表 1-6: /proc/net の IPv6 情報 .............................................................................. ファイル 内容 udp6 UDP ソケット (IPv6) tcp6 TCP ソケット (IPv6) raw6 生(raw)デバイスの統計 (IPv6) igmp6 参加している IP マルチキャスト・アドレス(IPv6) if_inet6 IPv6 インターフェース・アドレスのリスト ipv6_route IPv6 のためのカーネル・ルーティング・テーブル rt6_stats グローバル IPv6 ルーティング・テーブル統計 sockstat6 ソケット統計 (IPv6) snmp6 SNMP データ (IPv6) .............................................................................. 表 1-7: /proc/net のネットワーク情報 .............................................................................. ファイル 内容 arp カーネルの ARP テーブル dev ネットワークデバイスとその統計情報 dev_mcast デバイスが listen している Layer2 マルチキャスト・グループ (インターフェース番号、ラベル、参照数、bind しているアドレス の数) dev_stat ネットワークデバイスの状態 ip_fwchains ファイアウォール・チェーンの連鎖 ip_fwnames ファイアウォール・チェーンの名前 ip_masq マスカレードテーブルを含んでいるディレクトリ ip_masquerade 主要なマスカレードテーブル netstat ネットワーク統計 raw 生(raw)のデバイス統計 route カーネル・ルーティング・テーブル rpc RPC 情報を含んだディレクトリ rt_cache ルーティング・キャッシュ snmp SNMP データ sockstat ソケット統計 tcp TCP ソケット tr_rif トークン・リング RIF ルーティング・テーブル udp UDP ソケット unix UNIX ドメインソケット wireless ワイアレス・インターフェースのデータ(Wavelan など) igmp 参加している IP マルチキャスト・アドレス psched グローバル・パケット・スケジューラのパラメータ netlink PF_NETLINK ソケットのリスト ip_mr_vifs マルチキャスト仮想インターフェースのリスト ip_mr_cache マルチキャスト・ルーティング・キャッシュのリスト .............................................................................. この情報を使用して、システムで利用可能なネットワーク・デバイスについての情報 と、そのデバイスにルーティングされたトラフィックの量を知ることができます。 > cat /proc/net/dev Inter-|Receive |[... face |bytes packets errs drop fifo frame compressed multicast|[... lo: 908188 5596 0 0 0 0 0 0 [... ppp0:15475140 20721 410 0 0 410 0 0 [... eth0: 614530 7085 0 0 0 0 0 1 [... ...] Transmit ...] bytes packets errs drop fifo colls carrier compressed ...] 908188 5596 0 0 0 0 0 0 ...] 1375103 17405 0 0 0 0 0 0 ...] 1703981 5535 0 0 0 3 0 0 1.5 SCSI 情報 ------------- もしシステムに SCSI ホスト・アダプタがあれば、このアダプタに対応するドライバ にちなんだ名前のサブディレクトリを /proc/scsi 以下に見つけることができます。 さらに認識している全ての SCSI デバイスのリストを /proc/scsi/scsi に見つける ことができます。 > cat /proc/scsi/scsi Attached devices: Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: IBM Model: DGHS09U Rev: 03E0 Type: Direct-Access ANSI SCSI revision: 03 Host: scsi0 Channel: 00 Id: 06 Lun: 00 Vendor: PIONEER Model: CD-ROM DR-U06S Rev: 1.04 Type: CD-ROM ANSI SCSI revision: 02 ドライバの名前のディレクトリにはそのシステムで見つかったアダプタごとに一つの ファイルがあります。これらのファイルはそのコントローラについての情報、使用し ている IRQ や I/O アドレスの範囲などの情報を含んでいます。示される情報の量は 使用しているアダプタに依存しています。 例では Adaptec AHA-2940 SCSI アダプタ の出力を示しています。 > cat /proc/scsi/aic7xxx/0 Adaptec AIC7xxx driver version: 5.1.19/3.2.4 Compile Options: TCQ Enabled By Default : Disabled AIC7XXX_PROC_STATS : Disabled AIC7XXX_RESET_DELAY : 5 Adapter Configuration: SCSI Adapter: Adaptec AHA-294X Ultra SCSI host adapter Ultra Wide Controller PCI MMAPed I/O Base: 0xeb001000 Adapter SEEPROM Config: SEEPROM found and used. Adaptec SCSI BIOS: Enabled IRQ: 10 SCBs: Active 0, Max Active 2, Allocated 15, HW 16, Page 255 Interrupts: 160328 BIOS Control Word: 0x18b6 Adapter Control Word: 0x005b Extended Translation: Enabled Disconnect Enable Flags: 0xffff Ultra Enable Flags: 0x0001 Tag Queue Enable Flags: 0x0000 Ordered Queue Tag Flags: 0x0000 Default Tag Queue Depth: 8 Tagged Queue By Device array for aic7xxx host instance 0: {255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255} Actual queue depth per device for aic7xxx host instance 0: {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} Statistics: (scsi0:0:0:0) Device using Wide/Sync transfers at 40.0 MByte/sec, offset 8 Transinfo settings: current(12/8/1/0), goal(12/8/1/0), user(12/15/1/0) Total transfers 160151 (74577 reads and 85574 writes) (scsi0:0:6:0) Device using Narrow/Sync transfers at 5.0 MByte/sec, offset 15 Transinfo settings: current(50/15/0/0), goal(50/15/0/0), user(50/15/0/0) Total transfers 0 (0 reads and 0 writes) 1.6 /proc/parport のパラレルポート情報 -------------------------------------- /proc/parport ディレクトリはシステムのパラレルポートについての情報を含んでい ます。ポートごとに一つのサブディレクトリが存在し、ポート番号 (0,1,2, ...) に 基づいた名前がついています。 これらのディレクトリには表1-8 に示す四つのファイルが含まれています。 表 1-8: /proc/parport にあるファイル .............................................................................. ファイル 内容 autoprobe 検出できた IEEE-1284 デバイス ID 情報 devices そのポートを使用しているデバイス・ドライバのリスト。現在そのポー トを使用しているデバイスの名前には + が表示されます。(何も表示さ れないかもしれません。) hardware パラレルポートのベースアドレスと IRQ 番号と DMA チャンネル。 irq その parport のために使用している IRQ。新たな値(IRQ 番号または none) を書き込むことによって変更できます。(そのために独立したファ イルになっています。) .............................................................................. 1.7 /proc/tty の TTY 情報 ------------------------- 使用可能なまたは使用中の tty についての情報は /proc/tty に見つけることができ ます。表1-9 にあるようなドライバと回線規約(line descipline)についてのファイル がこのディレクトリにあるでしょう。 表 1-9: /proc/tty にあるファイル .............................................................................. ファイル 内容 drivers ドライバのリストとその使用状況 ldiscs 登録された回線規約 driver/serial 使用状況の統計と それぞれの tty 回線の状況 .............................................................................. 現在どの tty が使用されているかは単純に /proc/tty/drivers を探すだけで見つけ ることができます。 > cat /proc/tty/drivers pty_slave /dev/pts 136 0-255 pty:slave pty_master /dev/ptm 128 0-255 pty:master pty_slave /dev/ttyp 3 0-255 pty:slave pty_master /dev/pty 2 0-255 pty:master serial /dev/cua 5 64-67 serial:callout serial /dev/ttyS 4 64-67 serial /dev/tty0 /dev/tty0 4 0 system:vtmaster /dev/ptmx /dev/ptmx 5 2 system /dev/console /dev/console 5 1 system:console /dev/tty /dev/tty 5 0 system:/dev/tty unknown /dev/tty 4 1-63 console ------------------------------------------------------------------------------ 要約 ------------------------------------------------------------------------------ /proc ファイルシステムは運用中のシステムの情報を提供します。プロセスのデータ にアクセスできるのみでなく、階層中のファイルを読むことによりカーネルの状態を 要求することができます。 /proc のディレクトリ構造は情報の種類を反映しており、特定のデータを探す場合に その位置が明らかでなくも簡単に探せるようになっています。 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ 第2章: システムパラメータの修正 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ この章では ------------------------------------------------------------------------------ * /proc/sys にあるファイルに書き込むことによってカーネルパラメータを変更する * パラメータを修正するファイルを調査する * /proc/sys のファイルツリーを評価する ------------------------------------------------------------------------------ /proc/sys ディレクトリは /proc の中でも特に興味深い部分です。 これは情報を提 供するだけでなく、カーネル内部のパラメータを変更することを可能にします。試し てみる際には十分に注意してください。これはシステムを最適化することもできます が、同様にクラッシュさせることもできます。サービスを提供しているシステムのカー ネルパラメータで遊んではいけません。開発マシンを準備してテストを行い、やろう としていることが全て機能することを確認すべきです。エラーが発生するとマシンを リブートするしかない場合もあります。 値を変更するには、単に新しい値をファイルに書き込むだけです。後のファイルシス テム・データのセクションに例があります。変更を行うには root になる必要があり ます。自分用のブートスクリプトを作成して、システムを起動するたびに書き込むよ うにすることもできます。 /proc/sys 直下にあるファイルは Linux カーネルの動作において雑多な一般的なこ とがらを監視したり調整したりするのに使用されます。いくつかのファイルの変更は システム破壊のような思わぬ結果を招くことがあるため、実際に変更する前にドキュ メントとカーネルのソースの両方をよく読むことをお勧めします。どのような場合で も、これらのファイルに何か書き込む時には十分に注意深く行ってください。/proc の項目は 2.1.* および 2.2 カーネルの間で少し変更になっているかもしれません。 何か疑問がある場合には /usr/src/linux/Documentation にあるカーネルのドキュメ ントをよく見直してください。 この章は pre 2.2 カーネルに含まれる文章に基づい ている部分がかなりあり、linux version 2.2.1 カーネルの一部になりました。 2.1 /proc/sys/fs - ファイルシステム・データ ------------------------------------------- このサブディレクトリは特定のファイルシステム、ファイルハンドル、inode、dentry、 クォータについての情報を含んでいます。 現在、/proc/sys/fs には以下のファイルがあります。 dentry-state ------------ ディレクトリキャッシュの状態。ディレクトリ・エントリは動的に確保されたり解放 されたりするので、このファイルは現在の状態についての情報を与えます。このファ イルは 6個の値を保持していて、最後の二つは使用されておらず常にゼロです。他の 四つの意味は 表2-1 に挙げます。 表 2-1: ディレクトリキャッシュの状態ファイル .............................................................................. ファイル 内容 nr_dentry 常にゼロに見えます nr_unused 使用されていないキャッシュエントリの数 age_limit メモリが足りない時にエントリが再作成されてからの秒単位の寿命 want_pages 内部データ .............................................................................. dquot-nr と dquot-max --------------------- dquot-max ファイルはキャッシュしているディスククォータ・エントリの最大値を示 しています。 dquot-nr ファイルはディスククォータ・エントリの確保済みの値と空きディスク クォータ・エントリを示しています。 もしキャッシュされているディスククォータの利用可能な容量が非常に少なく、多数 のユーザが同時に使用するような場合は、上限を上げた方が良いでしょう。 file-nr と file-max ------------------- カーネルは動的にファイルハンドルを確保しますが、この時にそれを再び解放するこ とはしません。 file-max の値は Linux カーネルが割り当てることができるファイルハンドルの最大 数を示します。もしファイルハンドルが足りないというエラーメッセージが多く出る 場合には、この上限を上げた方が良いでしょう。この値のデフォルトは 4096 です。 変更するには単にこのファイルに新しい数を書き込むだけです: # cat /proc/sys/fs/file-max 4096 # echo 8192 > /proc/sys/fs/file-max # cat /proc/sys/fs/file-max 8192 この単に新しい値を echo して対応するファイルに書き込むという修正方法は、カー ネルの全ての変更可能なパラメータに対して有効です。 file-nr の三つの値は、割り合て済みのファイルハンドルの数、使用中のファイルハ ンドルの数、ファイルハンドルの最大数を示しています。割り当て済みのファイルハ ンドルの数が最大値近くになっていても実際に使用中の数が十分に小さければ、ファ イルハンドルの使用量のピークの数が示されているだけですから、最大値を増やす必 要はありません。 一方で、これ以外にプロセスごとにオープンできるファイルの最大数が存在します。 残念なことに、これはそう簡単には変更できません。この最大値はデフォルトでは 1024 に設定されており、これを変更するためには /usr/src/linux/include/linux にある limits.h と fs.h を書き変える必要があります。NR_OPEN の定義を変更して カーネルを再コンパイルしてください。 inode-state、inode-nr、inode-max -------------------------------- ファイルハンドルと同様にカーネルは inode 構造体を動的に確保しますがそれを解 放することはできません。 inode-max の値は inode ハンドルの最大数を示しています。 この値は file-max の 三倍から四倍の大きさであるべきです。なぜならば、標準入力、標準出力、ネットワー ク・ソケットなどを扱うためにも同様に inode 構造体が必要になるからです。もし 定常的に inode の値が足りないようならばこの値を増やしてください。 inode-nr ファイルは inode-state の最初の二つの値を含んでいます。ですからこの ファイルの説明は省略します。 inode-state は三つの有効な値と四つのダミーの値を含んでいます。有効な値は順に nr_inodes、nr_free_inodes、preshrink です。 * nr_inodes システムが割り当て済みの inode の数を示します。Linux はページ単位で inode を割り当てるため、この値は inode-max の値より若干大きくなることがあります。 * nr_free_inodes 空いている inode 数を示しています。 nr_inodes が inode-max より大きく、シス テムがそれ以上 inode を割り当てる前に inode リストを整理しなければならない 場合には preshrink がゼロ以外になります。 super-nr と super-max --------------------- 同じく、カーネルに動的に割り当てられるスーパーブロック構造体で、解放されるこ とはありません。super-max ファイルはスーパーブロック・ハンドラの最大数を格納 しています。super-nr は現在割り当てられている数です。 全てのマウントされたファイルシステムはスーパーブロックが必要です。非常に多く ファイルシステムをマウントしようとする場合にはこれらの数値を増やした方が良い でしょう。 2.2 /proc/sys/fs/binfmt_misc - その他のバイナリフォーマット ----------------------------------------------------------- これらのファイルの他に /proc/sys/fs/binfmt_misc サブディレクトリが存在します。 これはカーネルがサポートしているその他のバイナリフォーマットを扱います。 binfmt_misc はモジュールを追加したりカーネルをコンパイルしなおしたりすること なしに新たなバイナリフォーマットを登録することを可能にします。これを行うため には binfmt_misc はバイナリの先頭のマジックナンバーか、バイナリのファイル名 の拡張子を知っている必要があります。 この機能は構造体のリンクド・リストで管理されており、バイナリフォーマットのマ ジックとそのサイズ(またはファイル名の拡張子)、オフセット、マスク、インタプリ タの名前を含んでいます。そのバイナリを起動するように要求された場合は、その元 のプログラム名を引き数として、与えられたインタプリタを起動します。 これは binfmt_java、binfmt_em86、binfmt_mz と同様の動作です。binfmt_misc はデフォル トでは何も登録されていません。自分で追加のバイナリフォーマットを登録する必要 があります。 binfmt_misc には二つの全般的なファイルと、登録されたフォーマットごとに一つの ファイルがあります。二つの全般的なファイルは register と status です。 新しいバイナリフォーマットを登録するには ---------------------------------------- 新しいバイナリフォーマットを登録するには以下のコマンドを実行します。 echo :名前:型:オフセット:マジック:マスク:インタープリタ: \ > /proc/sys/fs/binfmt_misc/register ここで、適切な名前(name: /proc ディレクトリのエントリに使用されます)、オフセッ ト(offset: 省略するとデフォルトは 0)、マジック(magic)とマスク、(mask: これも 省略できデフォルトは全て 0xff)、そして最後に肝心の起動するインタプリタ (interpreter: 例えばテスト用に '/bin/echo')を指定する必要があります。通常のマ ジックによる判別を使用する場合は型(type) に M を、ファイル名の拡張子による判 別を使用する場合には型(type) に E を (拡張子は magic の位置に)指定します。 バイナリフォーマット・ハンドラの状態をチェックまたはセットする -------------------------------------------------------------- /proc/sys/fs/binfmt_misc/status ファイルを cat すれば、binfmt_misc の現在の 状態(有効/無効)を取得できます。状態を変更するためには 0 (無効)または 1 (有効) または -1 (警告: これは既に登録されているものを全てクリアします)を status に echo します。例えば echo 0 > status とすると binfmt_misc を(一時的に) 無効に します。 個々のハンドラの状態 -------------------- それぞれの登録されたハンドラは /proc/sys/fs/binfmt_misc にエントリを持ちます。 これらのファイルは status と同様の機能を持ちますが、その該当するバイナリフォー マットにのみ作用します。 このファイルを cat することによって、binfmt の イン タプリタやマジックについて、関連する情報全てを得ることができます。 binfmt_misc の使用例 (binfmt_java をエミュレート) ------------------------------------------------- cd /proc/sys/fs/binfmt_misc echo ':Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:' > register echo ':HTML:E::html::/usr/local/java/bin/appletviewer:' > register echo ':Applet:M::