このパートでは、Solaris 環境でファイルシステムを管理する手順について説明します。次の章が含まれます。
ファイルシステムの種類、一般に使用する管理コマンド、ファイルシステムをマウントし、マウント解除する基本的な作業など、ファイルシステム全般について説明します。 |
|
UFS ファイルシステムの作成、一時ファイルシステム (TMPFS) の作成と管理、ループバックファイルシステム (LOFS) の作成を行う手順について説明します。 |
|
どのファイルシステムがマウントされているかを判断する手順、/etc/vfstab に列挙されているファイルをマウントする方法、UFS、NFS、PCFS (DOS) ファイルシステムをマウントする方法について説明します。 |
|
キャッシュファイルシステム (CacheFSTM) の概要と使用手順について説明します。 |
|
スワップ空間を追加する場合の構成、スワップ資源の監視、スワップファイルの作成と使用可能にする方法、余分なスワップ空間を削除する手順などについて説明します。 |
|
ファイルシステムの状態を記録する方法、fsck プログラムでチェックされる内容、自動ブートチェック機能を変更する方法、fsck プログラムの使用方法について説明します。 |
|
ルート(/)と /usr のファイルシステムのデフォルトディレクトリ、/kernel ディレクトリにあり、mkfs コマンドと newfs コマンドに固有のディレクトリなど、ファイルシステムの参照情報について説明します。 |
この章の内容は次のとおりです
ファイルシステムは、ファイルを編成して格納するためのディレクトリ構造です。「ファイルシステム」という用語には、さまざまな使用方法があります。
ディスクベース、ネットワークベース、または仮想ファイルシステムなど、特定のタイプのファイルシステムを指す場合
ルートディレクトリから下位へのファイルツリー全体を指す場合
ディスクスライスや他の媒体記憶デバイスのデータ構造を指す場合
ファイル構造のうち、アクセスできるようにメインファイルツリー上のマウントポイントに接続されている部分を指す場合
通常、その意味は状況に応じて判断できます。
Solaris システムソフトウェアは、各種ファイルシステムへの標準インタフェースを提供する「仮想ファイルシステム」 (VFS) アーキテクチャを使用します。VFS アーキテクチャによって、ユーザーやプログラムが基礎となるファイルシステムのタイプを知らなくても、カーネルはファイルの読み取り、書き込み、一覧表示などの基本操作を処理できます。
ファイルシステムの管理コマンドは、各種のファイルシステムを管理できるように共通インタフェースを提供します。これらのコマンドには 2 種類あります。1 つは汎用コマンドで、もう 1 つはファイルシステム専用のコマンドです。汎用コマンドはほとんどのタイプのファイルシステムに適用されますが、専用コマンドは特定のタイプのファイルシステムにのみ適用されます。
ファイルシステムの管理は、最も重要なシステム管理作業の 1 つです。この章を読んで概念と計画方法について理解してください。次の作業については、Part VIII の他の章と他の Part を参照してください。
新しい UFS と仮想ファイルシステムを設定する - 詳細は、第 27 章「ファイルシステムの作成手順」と第 29 章「キャッシュファイルシステムの手順」を参照してください。各種の仮想ファイルシステムについては、後で説明します。
ローカルファイルとリモートファイルをユーザーが利用できるようにする - 詳細は第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。
新しい記憶デバイスを接続して構成する - 詳細は 第 21 章「ディスク管理の概要」を参照してください。
バックアップスケジュールを計画して、導入し、必要に応じてファイルとファイルシステムを復元する - バックアップの作成、およびファイルとファイルシステムの復元については、第 33 章「ファイルシステムのバックアップと復元の概要」を参照してください。
ファイルシステムの損傷をチェックして訂正する - 自動 (ブート時) チェックに失敗した場合の処理については、第 31 章「ファイルシステムの完全性チェック」を参照してください。
Solaris 2.6 リリースにおけるファイルシステムの新しい機能のいくつかを次に説明します。
mount コマンドの新しいオプション -largefiles は、Solaris 2.6 環境のデフォルトのマウントオプションです。このオプションを使用すると、2G バイト以上の大規模ファイルを持つファイルシステムを作成できます。-largefiles オプションは、このオプションでマウントしたファイルシステムに 2G バイト以上の大規模ファイルが存在する可能性があることを意味し、必ずしもそのようなファイルが存在している必要はありません。大規模ファイルを持つファイルシステムをマウントする方法の詳細は、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。
NFS クライアントフェイルオーバーは、選択した最初のホストに到達できなかった場合に、ファイルシステムをマウントする追加のホストを指定する機能です。/etc/vfstab ファイルに設定することも、コマンド行からホストのリストを指定することもできます。
WebNFSTM 機能 (「パブリック NFS」とも言う) によって、Solaris 2.6 リリースでは、share コマンドに 2 つのオプションが追加されます。
-index 「filename」を指定すると、NFS URL で参照されるディレクトリ内に 「filename」に一致する名前のファイルが見つかった場合に、そのファイルが自動的にロードされます。
-public を指定すると、公開ファイルハンドルをそのディレクトリに再設定します。これによって、通常の方法ではマウントできないファイルシステムでも、NFS URL 経由でアクセスできるようになります。
Solaris システムソフトウェアでは、次の 3 種類のファイルシステムがサポートされます。
ディスクベース
ネットワークベース
仮想
ファイルシステムのタイプを確認するには、「ファイルシステムのタイプを調べる」を参照してください。
ディスクベースのファイルシステムは、ハードディスク、CD-ROM、フロッピーディスクなどの物理媒体に格納されます。ディスクベースのファイルシステムは、さまざまな形式で作成できます。利用できる形式は次のとおりです。
UFS - UNIX ファイルシステム (4.3 Tahoe リリースに組み込まれていた BSD Fat Fast File システム)。UFS は、Solaris システムソフトウェアのデフォルトのディスクベースファイルシステムです。
HSFS - High Sierra と ISO 9660 のファイルシステム。High Sierra は、初めての CD-ROM ファイルシステムです。ISO 9660 は、High Sierra ファイルシステムの公式の標準バージョンです。HSFS ファイルシステムは CD-ROM 上で使用される読み取り専用ファイルシステムです。Solaris HSFS では、ISO 9660 への Rock Ridge 拡張がサポートされるので、CD-ROM 上にあるときは、すべての UFS ファイルシステムのセマンティクスとファイルタイプを提供します。ただし、書き込み可能ではなく、ハードリンクも提供しません。
ディスクベースの各種ファイルシステムは、次のように特定の媒体のタイプに対応しています。
UFS とハードディスク
HSFS と CD-ROM
PCFS とフロッピーディスク
ただし、上記以外の対応も可能です。たとえば、CD-ROM とフロッピーディスクにも、UFS ファイルシステムを作成できます。
ネットワークベースのファイルシステムは、ネットワーク上でアクセスされるファイルシステムです。一般に、ネットワークベースのファイルシステムは 1 つのシステム上にあり、他のシステムからネットワーク経由でアクセスされます。NFS は、ネットワークベースで利用できる唯一のファイルシステムです。
NFS は、Solaris のデフォルトの分散ファイルシステムです。分散ファイルシステムを管理するには、サーバーからエクスポートして個々のシステムにマウントします。詳細は、「マウントとマウント解除」を参照してください。
仮想ファイルシステムは、特殊なカーネル情報と機能へのアクセスを提供するメモリーベースのファイルシステムです。ほとんどの仮想ファイルシステムは、ディスク領域を使用しません。ただし、キャッシュファイルシステムは、ディスク上のファイルシステムを使用してキャッシュに入れ、一時ファイルシステムなどの仮想ファイルシステムは、ディスク上のスワップ空間を使用します。
キャッシュファイルシステム (CacheFS) を使用すると、リモートファイルシステムや、CD-ROM ドライブのような低速デバイスの性能を改善できます。ファイルシステムをキャッシュすると、リモートファイルシステムや CD-ROM から読み込まれたデータは、ローカルシステム上のキャッシュに格納されます。キャッシュファイルシステムの設定と管理については、第 29 章「キャッシュファイルシステムの手順」を参照してください。
一時ファイルシステム (TMPFS) は、ファイルシステムの読み取りと書き込みにローカルメモリーを使用します。一般に、UFS ファイルシステム内のファイルよりも、TMPFS ファイルシステム内のファイルにアクセスする方が高速です。ファイルシステムのマウントが解除されるときと、システムがシャットダウンまたはリブートされるときに、一時ファイルシステムが削除されます。
TMPFS は、Solaris システムソフトウェア内の /tmp ディレクトリのデフォルトのファイルシステムです。UFS /tmp ファイルシステムの場合と同様に、/tmp ディレクトリとの間でファイルをコピーまたは移動できます。
TMPFS ファイルシステムを使用すると、一時ファイルをローカルディスクに読み書きしたり、ネットワーク上で読み書きしたりする際のコストを節約でき、システム性能を改善できます。たとえば、プログラムをコンパイルすると一時ファイルが作成されます。オペレーティングシステムは、これらのファイルを処理する間に大量のディスク処理やネットワーク処理を行います。TMPFS を使用してこれらの一時ファイルを格納すると、その作成、処理、または削除が大幅に高速になります。
TMPFS ファイルシステムは、一時的な格納場所としてスワップ空間を使用します。TMPFS ファイルシステムがマウントされたシステムのスワップ空間が足りないと、次の 2 つの問題が発生する可能性があります。
TMPFS ファイルシステムは、通常のファイルシステムがいっぱいになった場合と同様に容量不足になる可能性がある。
TMPFS はスワップ空間を割り当ててファイルのデータを保存するので (必要な場合)、一部のプログラムはスワップ空間不足のために実行できなくなる。
TMPFS ファイルシステムの作成方法については、第 27 章「ファイルシステムの作成手順」を参照してください。スワップ空間を拡張する方法については、第 30 章「スワップ空間の追加構成の手順」を参照してください。
ループバックファイルシステム (LOFS) を使用すると、代替パス名を使用してファイルにアクセスできるように、新しい仮想ファイルシステムを作成できます。たとえば、/ のループバックマウントを /tmp/newroot 上で作成できます。ファイルシステム階層全体が、NFS サーバーからマウントされるファイルシステムを含め、/tmp/newroot 上に複写されたように見えます。どのファイルにも、/ で始まるパス名または /tmp/newroot で始まるパス名を使用してアクセスできます。
LOFS ファイルシステムの作成方法については、第 27 章「ファイルシステムの作成手順」を参照してください。
プロセスファイルシステム (PROCFS) はメモリー内にあります。PROCFS の /proc ディレクトリには、有効なプロセスのプロセス番号別リストが入っています。/proc ディレクトリ内の内容は、ps などのコマンドに使用されます。デバッガや他の開発ツールも、ファイルシステムコールを使用して、プロセスのアドレス空間にアクセスできます。次の例は、/proc ディレクトリの内容の一部を表示したものです。
$ ls -l /proc total 144944 -rw------- 1 root root 0 Dec 19 15:45 00000 -rw------- 1 root root 196608 Dec 19 15:45 00001 -rw------- 1 root root 0 Dec 19 15:45 00002 -rw------- 1 root root 1028096 Dec 19 15:46 00073 -rw------- 1 root root 1445888 Dec 19 15:46 00091 -rw------- 1 root root 1142784 Dec 19 15:46 00093 -rw------- 1 root root 1142784 Dec 19 15:46 00095 -rw------- 1 ignatz staff 1576960 Dec 19 15:50 00226 -rw------- 1 ignatz staff 192512 Dec 19 15:51 00236 -rw------- 1 ignatz staff 1269760 Dec 19 15:52 00240 -rw------- 1 ignatz staff 6090752 Dec 19 15:52 00241 -rw------- 1 ignatz staff 188416 Dec 19 15:52 00247 -rw------- 1 ignatz staff 2744320 Dec 19 15:52 00256
/proc ディレクトリ内のファイルは削除しないでください。/proc ディレクトリからプロセスを削除するのは、最善の方法ではありません。/proc ファイルはディスク容量を消費しないため、このディレクトリからファイルを削除してもあまり意味がないので注意してください。
/proc ディレクトリには、システム管理は不要です。
次のタイプの仮想ファイルシステムは、参考のために掲載してあります。管理は不要です。
ほとんどのファイルシステム管理コマンドには、汎用コマンドとファイルシステム専用の 2 種類があります。ファイルシステム専用のコマンドを呼び出す汎用コマンドを使用してください。表 26-1 は、汎用ファイルシステム管理コマンドを示しています。この種のコマンドは、/usr/sbin ディレクトリに入っています。
表 26-1 汎用ファイルシステム管理コマンド
コマンド |
機能 |
---|---|
i ノードをクリアする。 |
|
空きディスクブロック数とファイル数を出力する。 |
|
ファイルシステムのファイル名と統計情報を表示する。 |
|
ファイルシステムの完全性をチェックし、検出された損傷を修復する。 |
|
ファイルシステムをデバッグする。 |
|
ファイルシステムのタイプを調べる。 |
|
テープにコピーするときに、ファイルシステムのラベルを表示または作成する (volcopy コマンド専用)。 |
|
新しいファイルシステムを作成する。 |
|
ファイルシステムとリモート資源をマウントする。 |
|
ファイルシステムテーブルで指定されたすべてのファイルシステムをマウントする。 |
|
パス名とその i 番号のリストを生成する。 |
|
ファイルシステムとリモート資源のマウントを解除する。 |
|
ファイルシステムテーブルで指定されたすべてのファイルシステムをマウント解除する。 |
|
ファイルシステムのイメージコピーを作成する。 |
上記のほとんどのコマンドには、それに相当するファイルシステム固有のコマンドがあります。
ファイルシステム上でサポートされない操作を指定すると、汎用コマンドから次のエラーメッセージが表示されます。
コマンド名 : ファイルシステムのタイプ type に操作が適用されません。
ほとんどの汎用コマンドには、次の構文を使用します。
コマンド [-F type] [-V] [generic-options] [-o specific-options] [special|mount-point] [operands]表 26-2 汎用コマンドのオプションと引数
汎用ファイルシステムコマンドは、次の順序でファイルシステムのタイプを判断します。
-F オプションで指定されているファイルシステムのタイプ
特殊デバイスを /etc/vfstab 内のエントリと突き合わせて判断します (special が指定されている場合)。たとえば fsck は、まず fsck device フィールドと突き合わせて一致するエントリを検索します。一致するエントリが見つからなければ、特殊デバイスフィールドと突き合わせてチェックします。
ローカルファイルシステムの場合は /etc/default/fs 内で指定されたデフォルトを使用し、リモートファイルシステムの場合は /etc/dfs/fstypes 内で指定されたデフォルトを使用して判断します。
汎用コマンドと専用コマンドについては、『SunOS Reference Manual』の Section 1M「Maintenance Commands」を参照してください。専用コマンドのマニュアルページは、汎用コマンドのマニュアルページに続いて入っています。特定のマニュアルページを見つけるには、汎用コマンド名の末尾にアンダースコアとファイルシステムタイプの略称を追加してください。たとえば、HSFS ファイルシステムのマウントに関して専用コマンドのマニュアルページを調べるには、man mount_hsfs(1M) と入力します。
Solaris ファイルシステムは階層形式で、ルートディレクトリ (/) から始まり、下位に多数のディレクトリが入っています。システムソフトウェアは、デフォルトのディレクトリセットをインストールし、一連の規約を使用して類似するタイプのファイルをグループ化します。表 26-3 は、デフォルトの Solaris ファイルシステムの概要と、各ファイルシステムのタイプを示しています。ルートと /usr のファイルシステムのデフォルトディレクトリの詳細は、第 32 章「ファイルシステムの参照情報」を参照してください。
表 26-3 デフォルトの Solaris ファイルシステム
ファイルシステムまたはディレクトリ |
ファイルシステムのタイプ |
説明 |
---|---|---|
UFS |
階層ファイルツリーの最上位。ルートディレクトリには、カーネル、デバイスドライバ、システムのブートに使用されるプログラムなど、システム処理に欠かせないディレクトリとファイルが入っている。また、ローカルとリモートのファイルシステムをファイルツリーに接続できるマウントポイントディレクトリも入っている。 |
|
UFS |
他のユーザーと共有できるシステムファイルとディレクトリ。特定のタイプのシステム上でのみ実行できるファイルは、/usr ディレクトリに入っている (SPARC 実行可能ファイルなど)。どのタイプのシステム上でも使用できるファイル (マニュアルページなど) は、/usr/share に入っている。 |
|
NFS、UFS |
ユーザーのホームディレクトリのマウントポイント。ホームディレクトリには、そのユーザーの作業ファイルが格納される。デフォルトでは、/home は自動マウントされるファイルシステムである。スタンドアロンシステム上では、/home はローカルディスクスライス上の UFS ファイルシステムの場合がある。 |
|
UFS |
ローカルシステムの使用中に変化または拡大する可能性のあるシステムファイルとディレクトリ。これには、システムログ、vi と ex のバックアップファイル、および uucp ファイルが含まれる。 |
|
NFS、UFS |
オプションの Sun 以外のソフトウェア製品のマウントポイント。システムによっては、/opt がローカルディスクスライス上の UFS ファイルシステムの場合がある。 |
|
TMPFS |
システムがブートまたはマウント解除されるたびに消去される一時ファイル |
|
PROCFS |
アクティブなプロセスの番号別リスト |
システムを実行するには、ルート (/) と /usr のファイルシステムが必要です。/usr ファイルシステムからの最も基本的なコマンドの一部 (mount など) は、システムのブート時やシングルユーザーモードで /usr がマウントされていないときに使用できるように、ルート (/) ファイルシステムに組み込まれています。デフォルトディレクトリのリストについては、第 32 章「ファイルシステムの参照情報」を参照してください。
Solaris システムソフトウェアは、一部のディスクスライスをファイルシステムではなく一時記憶域に使用します。これらのスライスを「スワップスライス」と呼びます。スワップスライスは、システムが物理メモリー不足で現在のプロセスを処理できない場合に、仮想メモリー記憶域として使用されます。
Solaris 2.x の仮想メモリーシステムは、ディスク上の物理コピーをメモリー内の仮想アドレスに対応付けます。これらのマッピングに関するデータが入った物理メモリーページのバックアップを、ファイルシステム内の通常ファイルまたはスワップ空間に作成できます。メモリーのバックアップがスワップ空間に作成されると、ユーザーにはメモリーのバックアップファイル名が分からないため、これを「anonymous メモリー」と呼びます。
スワップ空間の詳細な概念、スワップ空間を増やす手順、Solaris 1.x (SunOS 4.x) と Solaris 2.x (SunOS 5.X) のスワップ要件の違いについては、第 30 章「スワップ空間の追加構成の手順」を参照してください。
UFS は、Solaris システムソフトウェア内のデフォルトのディスクベースファイルシステムです。ほとんどの場合、ディスクベースのファイルシステムを管理するときには、UFS を管理していることになります。UFS の機能は次の通りです。
状態フラグ - ファイルシステムの状態として、クリーン、安定、有効、または不明を示します。これらのフラグがあれば、ファイルシステムをチェックする必要がなくなります。ファイルシステムが「クリーン」状態または「安定」状態になっていると、ファイルシステムのチェックは実行されません。
大規模ファイルシステム - UFS ファイルシステムの最大サイズは 1T バイト (テラバイト) 以内で、通常ファイルは 2G バイト (ギガバイト) です。Solaris システムソフトウェアにはストライプ機能がないので、論理スライスを 1T バイトのファイルシステムに合わせて大きくする必要があります。ただし、SunSoft 発売の Solstice DiskSuiteTM ソフトウェアには、この機能が含まれています。
Solaris デバイス名は、スライスという用語 (およびデバイス名に含まれる文字「s」) を使用してスライス番号を指します。SunOS 4.x ではスライスのことを「パーティション」と呼んでいました。
図 26-1 は、ディスクスライスをどのようにフォーマットして UFS ファイルシステムを格納できるかを示しています。
この後の各節では、ディスクがどのようにスライスとシリンダグループに分割され、UFS ファイルシステムとして作成されるかについて説明します。
スライスは、ブロックの集合体です。これは、ディスクの物理的なサブセットです (ただし、スライス 2 は通常はディスク全体を表します)。ディスク上でファイルシステムを作成する前に、まずフォーマットしてスライスに分割しなければなりません。ディスクをインストールしてフォーマットし、ディスクをスライスに分割する方法の詳細は、パート VIIを参照してください。
スライスをスワップ空間用の raw デバイスとして使用するか、1 つの UFS ファイルシステムを格納できます。1 つのディスクを最高で 8 つのスライスに分割できます。一般的なディスクスライス割り当てのリストについては、パート VIIを参照してください。
次の例は、/dev/dsk/c0t3d0 のディスク情報を示しています。format コマンドでは、利用可能なディスクセクションの一部としてスライス情報が表示されないので注意してください。ディスクごとにコントローラ、ターゲット、およびディスクの番号が表示されます。
$ su Password: # format AVAILABLE DISK SELECTIONS: 0. c0t0d0 at scsibus0 slave 24 sd0: <SUN0207 cyl 1254 alt 2 hd 9 sec 36> 1. c0t3d0 at scsibus0 slave 0: veryloud sd3: <SUN0207 cyl 1254 alt 2 hd 9 sec 36> Specify disk (enter its number): 1 FORMAT MENU: disk - select a disk type - select (define) a disk type partition - select (define) a partition table current - describe the current disk format - format and analyze the disk repair - repair a defective sector label - write label to the disk analyze - surface analysis defect - defect list management backup - search for backup labels verify - read and display labels save - save new disk/partition definitions inquiry - show vendor, product and revision volname - set 8-character volume name quit format> partition PARTITION MENU: 0 - change `0' partition 1 - change `1' partition 2 - change `2' partition 3 - change `3' partition 4 - change `4' partition 5 - change `5' partition 6 - change `6' partition 7 - change `7' partition select - select a predefined table modify - modify a predefined partition table name - name the current table print - display the current table label - write partition map and label to the disk quit partition> print Volume: veryloud Current partition table (original sd3): Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 39 14.06MB (40/0/0) 1 swap wu 40 - 199 56.25MB (160/0/0) 2 backup wm 0 - 1150 404.65MB (1151/0/0) 3 unassigned wm 0 0 (0/0/0) 4 unassigned wm 0 0 (0/0/0) 5 - wm 0 10.20MB (29/0/0) 6 usr wm 200 - 228 121.29MB (345/0/0) 7 home wm 574 - 1150 202.85MB (577/0/0 partition> quit format> quit #
ディスク番号とスライス番号がわかっている場合は、prtvtoc (ボリュームの内容一覧を表示) コマンドを使用してディスク情報を表示できます。ディスク上で定義されているゼロ以外のサイズのスライスを指定すると、ボリュームを指定できます (たとえば、ディスク 3 のすべてのスライスの場合は /dev/rdsk/c0t3d0s2、ディスク 3 の 8 番目のスライスの場合は /dev/rdsk/c0t3d0s7)。ディスクのターゲット番号はわかっているが、どのようにスライスに分割されているかがわからない場合は、スライス 2 またはスライス 0 を指定してディスク全体の情報を表示できます。
UFS ファイルシステムを、シリンダグループと呼ばれる 1 つまたは複数の領域に分割されたディスクスライス上で作成します。シリンダグループは、1 つまたは複数の連続するディスクシリンダ (プラッタの中心から同じ半径を持つ、プラッタグループ上のトラックの集合) からなっています。ディスクのジオメトリの詳細は、第 21 章「ディスク管理の概要」を参照してください。
シリンダグループマップは、シリンダグループごとに作成されます。シリンダグループマップには、ブロックの使用状況と使用可能なブロックが記録されます。
シリンダグループは、シリンダグループ内のファイルの構造を制御して編成するブロックに分かれています。各ブロックタイプが、システム内で固有の機能を持っています。UFS ファイルには、4 種類のアドレス可能ブロックと付加的な情報管理ディスク領域があります。4 つのブロックタイプは、次の通りです。
ブートブロック - システムのブート時に使用される情報が格納される。
スーパーブロック - ファイルシステムに関する大部分の情報が格納される。
i ノード - ファイル名を除き、ファイルに関するすべての情報が格納される。
記憶域またはデータブロック - 各ファイルのデータが格納される。
各ブロックタイプの詳細は、第 32 章「ファイルシステムの参照情報」を参照してください。
newfs コマンドの引数または mkfs コマンドを使用してファイルシステムをカスタマイズするには、これらのパラメタの変更方法について第 32 章「ファイルシステムの参照情報」を参照してください。
ファイルシステムの合計サイズの上限は 1T バイトです。UFS ファイルシステムは、それを保持するスライスと同じ大きさにできます。
UFS ファイルシステム内の 1 つのファイルの最大サイズは、そのファイルシステムの構成方法によって異なります。
UFS ファイルシステム 1 つ当たりの最大ファイル数は、そのファイルシステムに割り当てられた i ノード数によって決まります。i ノード数は、各 i ノードに割り当てられたディスク容量とファイルシステムの合計サイズによって決まります。デフォルトでは、2K バイトのデータ容量ごとに 1 つずつ i ノードが割り当てられます。newfs コマンドの -i オプションを使用すると、デフォルトの割り当てを変更できます。
フラグメントは、論理ブロックの未使用部分を減らして容量を節約するために作成される小型の論理ブロックです。論理ブロックとフラグメントの最大サイズは 8192 バイトですが、一般に、フラグメントは論理ブロックと同じか、それより小さいサイズです。
ディスクをフォーマットしてスライスに分割し終わったら、UFS ファイルを入れる各スライス上でファイルシステムを作成する必要があります。ディスクをフォーマットしてスライスに分割する方法の詳細は、 第 22 章「ディスク管理の手順」を参照してください。
ファイルシステムの配置を決めるときには、要求が競合する可能性があることを考えなければなりません。推奨事項は次の通りです。
作業負荷を異なる I/O システムやディスクドライブ間でできるだけ均等に分散します。/export/home を分散させたり、ディレクトリを入れ替えたりして、異なるディスクに負荷を均等に割り当てます。
プロジェクトの個々の部分やグループのメンバーを同じファイルシステム内に入れます。
1 ディスク当たりのファイルシステム数をできるだけ少なくします。通常、システム (またはブート) ディスク上には、/、/usr、スワップ空間の 3 つのスライスがあります。他のディスク上では、1 つまたは通常は 2 つのスライスを作成します。多数の小型スライスに分割しすぎるよりもスライス数を少なくして余地を設ける方が、ファイルがフラグメントに分割される可能性が小さくなります。容量の大きいテープドライブを使用し、ufsdump で複数のボリュームを処理できるようにしておけば、大型ファイルシステムでも簡単にバックアップをとることができます。
絶えずきわめて小さいファイルを作成するユーザーがいる場合は、i ノード数を増やして別のファイルシステムを作成することを検討します。ただし、ほとんどのサイトでは、類似するタイプのファイルを同じファイルシステム内で保管するようにする必要はありません。
デフォルトのファイルシステムパラメタや、新しいファイルシステムを作成するときの前提条件と手順については、第 27 章「ファイルシステムの作成手順」を参照してください。
ファイルシステムを、システム上で利用できるディレクトリ階層に接続できます。このプロセスをマウントと呼びます。マウントしたファイルシステムは、指定したマウントポイント (マウントされたファイルシステムの接続先ディレクトリ) で、システムのディレクトリツリーに接続され、システムに利用できるようになります。他のファイルシステムをルート (/) ファイルシステムに接続したり切り離したりできます。
ファイルシステムについて、次の事柄を決める必要があります。
AutoFS を使用してファイルシステムを適切にマウントするかどうか
ファイルシステムを一時的にのみ使用するかどうか
ファイルシステムをコマンド行からマウントするかどうか
スーパーユーザーであること
ローカルシステム上のマウントポイント
マウントするファイルシステムの資源名 (/usr など)
原則として、ローカルディスクスライスは必ず /etc/vfstab ファイルに入れる必要があります。OpenWindows ソフトウェアやマニュアルページのようなサーバーからのソフトウェアと、サーバーからのホームディレクトリは、サイトの方針に応じて /etc/vfstab ファイルに組み込んでも、automount コマンドを使用して自動的にマウントしてもかまいません。
ファイルシステムをマウントすると、そのファイルシステムがマウントされている間は、マウントポイントのディレクトリにあるファイルやディレクトリは使用できなくなります。これらのファイルはマウント処理の影響を永続的に受けるわけではなく、ファイルシステムをマウント解除すると再び使用できるようになります。ただし、通常は既存のファイルを使用不可にしたくないので、マウントディレクトリを空にしておきます。
図 26-2 に、サブディレクトリ sbin、etc、home を持つルート (/) ファイルシステムを示します。
あるユーザーのホームディレクトリを空の /export/home ディレクトリのマウントポイントに接続するには、まず新規ユーザー用のディレクトリを作成します。ignatz というユーザーであれば、/export/home 内に ignatz というディレクトリを作成し、適切なアクセス権と所有権を与えます。次に、ファイルシステムをマウントします。ignatz ファイルシステムがマウントされると、図 26-3 のように /export/home/ignatz 内のすべてのファイルとディレクトリが使用可能になります。また、/export/home ディレクトリ内で他のユーザーのディレクトリを作成し、そのディレクトリを別のユーザーのファイルシステムのマウントポイントとして使用できます。これらの作業を行う方法については、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。
この例は、マウント処理の概念を示しています。/home はデフォルトでは AutoFS のマウントポイントディレクトリなので、ホームディレクトリファイルは mount コマンドではなく AutoFS によってマウントされます。
ファイルシステムをマウントまたはマウント解除すると、現在マウントされているファイルシステムのリストを使用して、/etc/mnttab (マウントテーブルファイル) が変更されます。マウントテーブルの内容は cat または more コマンドを使用して表示できますが、/etc/vfstab ファイルのように編集できません。次にマウントテーブルファイルの例を示します。
$ more /etc/mnttab /dev/dsk/c0t3d0s0 / ufs rw,suid,dev=800018,largefiles 863804345 /dev/dsk/c0t3d0s6 /usr ufs rw,suid,dev=80001e,largefiles 863804345 /proc /proc proc rw,suid,dev=2900000 863804345 fd /dev/fd fd rw,suid,dev=29c0000 863804345 /dev/dsk/c0t3d0s3 /export ufs suid,rw,largefiles,dev=80001b 863804347 /dev/dsk/c0t3d0s7 /export/home ufs suid,rw,largefiles,dev=80001f 863804348 /dev/dsk/c0t3d0s4 /export/swap ufs suid,rw,largefiles,dev=80001c 863804348 /dev/dsk/c0t3d0s5 /opt ufs suid,rw,largefiles,dev=80001d 863804347 swap /tmp tmpfs dev=2a80000 863804347 $
ファイルシステムをマウント解除すると、そのファイルシステムのマウントポイントから削除され、/etc/mnttab ファイルからエントリが削除されます。一部のファイルシステム管理作業は、マウントされたファイルシステム上では実行できません。次の場合には、ファイルシステムをマウント解除する必要があります。
不要になった場合や、最新ソフトウェアが入っているファイルシステムに交換した場合
fsck コマンドを使用してチェックして修復する場合。fsck コマンドの詳細は、第 31 章「ファイルシステムの完全性チェック」を参照
ファイルシステムの完全バックアップを実行する前に、マウント解除しておくとよいでしょう。バックアップの実行方法については、第 33 章「ファイルシステムのバックアップと復元の概要」を参照してください。
ファイルシステムは、システムのシャットダウン手続きの一部として自動的にマウント解除されます。
デフォルトのファイルシステム構成テーブル (/etc/vfstab ファイル) は、システムソフトウェアのインストール時に選択する内容に応じて異なります。ローカルの UFS ファイルシステム、重要な NFS ファイルシステム、その他の該当するファイルシステムを自動的にマウントするには、システムごとに /etc/vfstab ファイルを編集する必要があります。
次の例は、/etc/vfstab ファイルの内容を示しています。このファイルシステムテーブルは ASCII ファイルです。コメント行は # で始まります。この例は、2 つのディスクと 2 つの NFS ファイルシステムがマウントされたシステムの /etc/vfstab ファイルです。
$ more /etc/vfstab #device device mount FS fsck mount mount #to mount to fsck point type pass at boot options /dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no - /proc - /proc proc - no - /dev/dsk/c0t0d0s1 - - swap - no - swap - /tmp tmpfs - yes - /dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /usr ufs 2 no - /dev/dsk/c0t3d0s7 /dev/rdsk/c0t3d0s7 /files7 ufs 2 no - cheers:/export/svr4/man.ja5 - /usr/man nfs - yes hard cheers:/export/svr4/openwinV3.ja4 - /usr/openwin nfs - yes hard $
ルート (/) と /usr の場合は、「mount at boot」フィールドの値が no として指定されているので注意してください。この 2 つのファイルシステムが、mountall コマンドを実行する前にブートシーケンスの一部としてマウントされるからです。automount フィールドの値を yes として指定すると、mountall プログラムはこれらのすでにマウント済みのファイルシステムを重複して (不要に) マウントしようとします。ブート手順については、第 5 章「システムのシャットダウンとブートの概要」を参照してください。
/etc/vfstab の各フィールド、このファイルの編集方法、使用方法については、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。
自動マウントと呼ばれる方法を使用すると、NFS を通じて共有されるファイルシステムをマウントできます。AutoFS はバックグラウンドで実行され、リモートディレクトリを必要に応じてマウントまたはマウントを解除します。AutoFS を実行中のクライアントシステム上のユーザーが、AutoFS を通じて使用できるリモートファイルやディレクトリにアクセスすると、AutoFS はそのユーザーのシステムにファイルシステムをマウントします。ユーザーがそのディレクトリの中にいてファイルを使用している限り、リモートファイルシステムはマウントされたままになっています。一定の時間内にリモートファイルシステムへのアクセスがなければ、自動的にマウントが解除されます。ユーザー側でディレクトリ変更以外の操作を実行しなくても、AutoFS は必要に応じて、ファイルシステムをマウントしたりマウントを解除したりします。
ファイル階層には、AutoFS を使用してマウントできるものと、/etc/vfstab ファイルと mount コマンドを使用してマウントするものがあります。ディスクレスマシンには、/etc/vfstab ファイル内にルート (/)、/usr、/usr/kvm のエントリがなければなりません。共有ファイルシステムは絶えず使用可能になっているので、AutoFS を使用して /usr/share をマウントしないでください。
AutoFS は、「maps」で指定したファイルシステムと連動します。これらのマップは、NIS、NIS+、またはローカルの /etc 内のファイルにより管理できます。
AutoFS マップでは、特定のファイルに複数のリモート位置を指定できます。これにより、いずれかのサーバーが停止しても、AutoFS は別のマシンからマウントできます。各サーバーに重み係数を割り当てると、マップ内で各資源のための優先サーバーを指定できます。
AutoFS は、システムが実行レベル 3 になると自動的に起動されます。また、コマンド行からも起動できます。AutoFS を設定して管理する方法の詳細は、『NFS の管理』を参照してください。
デフォルトでは、SunOS システムソフトウェアは /home を自動マウントします。
NFS は、さまざまなオペレーティングシステムを実行するコンピュータを「連結」して使用できる分散ファイルシステムです。たとえば、DOS を実行するシステムは、UNIX を実行するシステムとファイルを共有できます。
NFS は、ファイルシステムの実際の物理的な位置についてユーザーが意識しなくてすむようにします。NFS を使用すると、位置に関係なくすべての関連ファイルの位置をユーザーに表示させることができます。共通に使用されるファイルのコピーをシステムごとに配置しなくても、NFS により、あるシステムのディスク上にコピーを 1 つ配置し、他のすべてのシステムをそのコピーにネットワーク経由でアクセスさせることができます。NFS では、リモートファイルシステムは、実際にはローカルシステムと区別がつきません。
システムは、ネットワーク上に共有またはエクスポートするファイルシステムがあると、NFS サーバーになります。サーバーは、現在エクスポートされているファイルシステムとアクセス制限 (読み取り/書き込みや読み取り専用など) のリストを管理します。
あるシステムのファイル、ディレクトリ、またはデバイスなどの資源を、ネットワーク上で他のシステム (通常はサーバー) と共有できます。 たとえば、Sun 以外のアプリケーションやソースファイルを他のシステム上のユーザーと共有できます。
資源を共有する場合は、リモートシステムにマウントできるように、その資源を使用可能にします。
資源を共有するには、次の方法があります。
次のデフォルトの /etc/dfs/dfstab ファイルには、エントリの構文と例が入っています。
$ more /etc/dfs/dfstab # Place share(1M) commands here for automatic execution # on entering init state 3. # # Issue the command '/etc/init.d/nfs.server start' to run the NFS # daemon processes and the share commands, after adding the very # first entry to this file. # # share [-F fstype] [ -o options] [-d ""] [resource] # .e.g, # share -F nfs -o rw=engineering -d "home dirs" /export/home2 share -F nfs /var/mail $
自動的に共有させたい資源ごとに 1 つずつ、エントリを /etc/dfs/dfstab に追加します。各エントリは、次の構文を使用して別の行に入力しなければなりません。
share [-F nfs] [-o specific-options] [-d "description"] pathname
表 26-4 にこれらの変数を示します。
表 26-4 /etc/dfstab エントリの変数
オプション |
説明 |
---|---|
-F nfs |
ファイルシステムのタイプが NFS であることを示す。分散ファイルシステムのパッケージを 1 つしかインストールしていない場合は nfs がデフォルトであり、-F オプションは省略可能 |
-o specific-options |
資源の共有方法を指定する。-o フラグに続けて、次のいずれかのオプションをコンマで区切って指定できる。 rw - ro= で指定したものを除き、すべてのクライアントに pathname で指定する資源の読み取り/書き込み権を共有させる (デフォルト)。 ro - rw= で指定したものを除き、すべてのクライアントに pathname で指定する資源の読み取り専用権を共有させる。 ro=client[:client] - 列挙したクライアントマシンまたはネットグループ名に pathname で指定する資源の読み取り専用権を共有させる (rw を無効にする)。 rw=client[:client] - 列挙したクライアントマシンまたはネットグループ名に pathname で指定する資源の読み取り/書き込み権を共有させる (ro を無効にする)。 anon=uid - pathname で指定する資源にアクセスするときに「anonymous」ユーザー、つまり uid が 0 ( Solaris システム上のルートの UID ) であるユーザー用に別の uid を指定できる。デフォルトでは、anonymous ユーザーは UID_NOBODY を持つユーザー nobody に対応付けられる。ユーザー nobody は、root 特権ではなく通常のユーザー特権を持つ。 root=host[:host] - ホスト host から、uid が 0 のユーザーがルートとして pathname で指定する資源にアクセスできるようにする。他のすべてのホストからのユーザーは anon になる。このオプションを指定しなければ、どのホストからのユーザーにも、pathname で指定する資源への root アクセス権は与えられない。 secure - ユーザー認証を追加要求して資源を共有させる。(詳細は『NFS の管理』を参照) kerberos - Kerberos 認証を使用して資源を共有させる。(詳細は、「Kerberos Version 4 認証の管理」を参照) |
-d description |
共有する資源を説明するコメント。-d オプションを使用すると、説明は sharetab ファイルに格納される。ただし、クライアントが dfshares コマンドを使用して、そのシステム上で共有される資源を表示しても、この説明は表示されない |
pathname |
共有する資源の完全パス名。パス名はルート (/) から始まる |
rw と ro を引数なしで指定できません。また、rw= リストと ro= リストで同じクライアントを指定することもできません。読み取り/書き込みオプションを指定しなければ、デフォルトではすべてのクライアントの読み取り/書き込みとなります。
他のホストに root アクセスを与えると、セキュリティが低下します。root= オプションを指定する際は注意してください。
ファイルとファイルシステムを共有する方法については、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。NFS の詳細は、『NFS の管理』を参照してください。
クライアントまたはホストのリストを指定できる引数 (ro=、rw=、root=) は、UDP 上では確実に機能しますが、他のトランスポートプロトコル上では機能しないことがあります。
NFS 上では、サーバーはそれ自体が所有する資源を共有するので、クライアントはその資源をマウントできます。ただし、クライアント側でスーパーユーザーになったユーザーは、マウントされているリモート資源にスーパーユーザーとしてアクセスしようとしても拒否されます。あるホスト上でスーパーユーザーとしてログインしたユーザーが NFS を通じて共有されるリモートファイルへのアクセスを要求すると、そのユーザー ID は 0 からユーザー名 nobody のユーザー ID に変更されます。ユーザー nobody のアクセス権は、特定のファイルに関して公共に与えられるものと同じです。たとえば、公共がファイルの実行権しか持っていなければ、ユーザー nobody はそのファイルの実行しかできません。
ファイルシステムのタイプは、次のいずれかを使用して判断できます。
grep コマンドを使用して、/etc/vfstab ファイル内でファイルシステムのタイプを検索します。
$ grep /tmp /etc/vfstab swap - /tmp tmpfs - yes - $
マウントポイントに関する情報が表示されます。
vfstab にファイルシステムのエントリが入っていない場合は、次のいずれかの手順を使用してファイルシステムのタイプを判断してください。
mount-point ディレクトリが /etc/mnttab にないかを調べます。
$ grep /home /etc/mnttab mars:(pid129) /home nfs ro,ignore,map=/etc/auto_home,indirect, dev=21c0004 693606637 neptune:/export/home/neptune /tmp_mnt/home/neptune nfs rw, dev=21c0005 695409833
マウントポイントに関する情報が表示されます。
または次の手順を実行します。
devnm コマンドを使用して、マウントされているファイルシステムの raw デバイス名を表示します。
$ devnm /filesystem
/filesystem |
調べたい raw デバイス名の、マウント済みファイルシステム |
スーパーユーザーになります。
fstyp コマンドを使用してファイルシステムのタイプを表示します。
# fstyp dev/rdsk/device-name
/dev/rdsk/device-name |
調べたいファイルシステムのある raw デバイス名 |
次の例では、devnm コマンドを使用して、マウント済みファイルシステム /usr のあるデバイス名を調べます。次に、fstyp コマンドを使用して、ファイルシステム /usr のタイプを調べます。
$ devnm /usr /dev/dsk/cot3d0s6 /usr $ su # fstyp /dev/rdsk/c0t3d0s6 ufs
ディスク番号とスライス番号がわかっている場合は、prtvtoc (ボリューム内容一覧の表示) コマンドを使用してディスク情報を表示できます。ボリュームを指定するには、ディスク上で定義されているサイズが 0 でないスライスを指定します (ディスク 3 のすべてのスライスの場合は /dev/rdsk/c0t3d0s2、ディスク 3 の 8 番目のスライスの場合は /dev/rdsk/c0t3d0s7 など)。ディスクのターゲット番号は分かっているが、どのようにスライスに分割されているかがわからない場合は、スライス 2 またはスライス 0 を指定してディスク全体の情報を表示できます。
次の例では、ディスク 3 のすべてのスライスに関する情報が表示されます。
$ su Password: # prtvtoc /dev/rdsk/c0t3d0s2 * /dev/rdsk/c0t3d0s2 (volume "") partition map * * Dimensions: * 512 bytes/sector * 36 sectors/track * 9 tracks/cylinder * 324 sectors/cylinder * 1272 cylinders * 1254 accessible cylinders * * Flags: * 1: unmountable * 10: read-only * * First Sector Last * Partition Tag Flags Sector Count Sector Mount Directory 2 5 01 0 406296 406295 6 4 00 0 242352 242351 7 0 00 242352 163944 406295 /files7
この章では、UFS ファイルシステム、一時ファイルシステム、ループバックファイルシステムをハードディスク上で作成して管理する方法について説明します。この章で説明する手順は、次のとおりです。
ファイルシステムは、インストールプロセスの一部としてシステムソフトウェアによって自動的に作成されるので、UFS ファイルシステムを作成しなければならないことはほとんどありません。次の場合には、UFS ファイルシステムを作成する (または作成し直す) 必要があります。
ディスクを追加または交換する場合
既存のパーティション構造を変更する場合
ファイルシステム全体を復元する場合
次の手順では、newfs コマンドを使用して UFS ファイルシステムを作成します。newfs コマンドは、新しいファイルシステムを作成する mkfs への便利なフロントエンドです。Solaris 2.x システムの場合、デフォルトでは、1 シリンダ当たりのトラック数や 1 トラック当たりのセクター数のような newfs のパラメタは、新しいファイルシステムを入れるディスクのラベルから読み込まれるので、選択したオプションは mkfs コマンドに渡され、ファイルシステムが作成されます。
ディスクスライス上で新しいファイルシステムを作成するには、ほとんどの場合に newfs コマンドを使用します。表 27-1 は、newfs コマンドで使用するデフォルトのパラメタを示しています。
表 27-1 newfs コマンドで使用するデフォルトのパラメタ
パラメタ |
デフォルト値 |
---|---|
ブロックサイズ |
8K バイト |
フラグメントサイズ |
1K バイト |
最小空き領域 |
10% |
回転遅延 |
デバイスに依存 |
最適化のタイプ |
領域 |
i ノード数 |
2K バイトのディスク領域ごとに 1 個 |
UFS ファイルシステムを作成する前に、ディスクをフォーマットしてスライスに分割しておかなければならない
ファイルシステムを入れるスライスの raw デバイスファイル名を知る必要がある。ディスク番号とディスクスライス番号を調べる方法については、第 22 章「ディスク管理の手順」を参照
既存のファイルシステムを作成し直す場合は、そのマウントを解除する
スーパーユーザーでなければならない
「前提条件」の前提条件を満たしているかどうかを確認します。
ファイルシステムを作成します。
# newfs [-N] [-b size] [-i bytes] /dev/rdsk/device-name
-N |
newfs が mkfs に渡すすべてのパラメタを表示する。ファイルシステムは作成されない |
-b size |
ファイルシステムのブロックサイズを設定する。デフォルトは 8192 ブロック |
-i bytes |
i ノード当たりのバイト数を設定する。デフォルトは 2048 バイト |
device-name |
新しいファイルシステムを入れるデバイス |
次の手順を実行する前に、スライスに合ったデバイス名を指定したか確認してください。間違ったスライスを指定すると、その内容は新しいファイルの作成時に消去されます。
システムから確認を促すプロンプトが表示されます。
UFS ファイルシステムが作成されていることを確認するには、fsck コマンドを使用して新しいファイルシステムをチェックします。
# fsck /dev/rdsk/device-name
device-name |
新しいファイルシステムを入れるデバイス名 |
このユーティリティは、新しいファイルシステムの整合性をチェックして、見つかった問題を出力し、問題を修復する前にプロンプトを表示します。fsck の詳細は、第 31 章「ファイルシステムの完全性チェック」を参照してください。
次の例では、/dev/rdsk/c0t3d0s7 上でファイルシステムを作成します。
# newfs /dev/rdsk/c0t3d0s7 newfs: construct a new file system /dev/rdsk/c0t3d0s7 (y/n)? y /dev/rdsk/c0t3d0s7: 163944 sectors in 506 cylinders of 9 tracks, 36 sectors 83.9MB in 32 cyl groups (16 c/g, 2.65MB/g, 1216 i/g) super-block backups (for fsck -b #) at: 32, 5264, 10496, 15728, 20960, 26192, 31424, 36656, 41888, 47120, 52352, 57584, 62816, 68048, 73280, 78512, 82976, 88208, 93440, 98672, 103904, 109136, 114368, 119600, 124832, 130064, 135296, 140528, 145760, 150992, 156224, 161456,
ファイルシステムを使用可能にするための操作 |
参照先 |
---|---|
mount コマンドを使用してファイルシステムをマウントする | |
/etc/vfstab 内でエントリを作成し、システムのブート時にファイルシステムを自動的にマウントする |
TMPFS が最もよく使用されるのは /tmp ディレクトリです。デフォルトでは、SunOS システムソフトウェアの /tmp ディレクトリは TMPFS であり、そのエントリはデフォルトの /etc/vfstab ファイルに入っています。TMPFS ディレクトリ内のファイルは、リブートまたはマウント解除すると削除されます。
複数の一時ファイルシステムを作成した場合は、そのすべてが同じシステム資源を使用するということに注意してください。mount コマンドの -o オプションを使用して TMPFS のサイズを制限しなければ、ある TMPFS ディレクトリの下で作成されたファイルが、他の TMPFS にとっても使用可能な領域を使い果たします。
スーパーユーザーになります。
必要に応じて、TMPFS をマウントしたいディレクトリを作成し、アクセス権と所有権を設定します。
一時ファイルシステムを作成します。
# mount -F tmpfs swap mount-point
-F tmpfs swap |
TMPFS ファイルシステム |
mount-point |
TMPFS ファイルシステムとしてマウントするディレクトリ |
mount コマンドを使って、/visitors という一時ファイルシステムが作成され、/usr/tmp ディレクトリにマウントされていることを確認します。
$ mount . . . /visitors on /usr/tmp on Wed May 28 15:27:16 1997 $ ls /usr/tmp NTa0006h ps_data visitors
次の例では、新しいディレクトリ /export/reports を作成し、そのディレクトリに一時ファイルシステムをマウントします。
# mkdir /export/reports # chmod 777 /export/reports # mount -F tmpfs swap /export/reports
詳細は、tmpfs(7FS) のマニュアルページを参照してください。
/etc/vfstab ファイルにエントリを追加すると、リブートまたはマウント解除しても TMPFS として保持できます。このファイルを編集し、各フィールドをタブで区切って次のようなエントリを追加します。
swap - mount-point tmpfs - yes -
mount-point |
デフォルトのマウントポイントディレクトリ |
TMPFS として保持されるだけで、そこに作成されたファイルは保持されません。
/etc/vfstab ファイルの編集の詳細は、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。
LOFS は、既存のファイルシステムへの代替パスを提供する仮想ファイルシステムです。他のファイルシステムをループバックファイルシステムにマウントしても、元のファイルシステムは変化しません。
/etc/vfstab ファイルにエントリを追加すると、リブートまたはマウント解除する間も LOFS を保持できます。
ループバックマウントは慎重に作成してください。これらは仮想ファイルシステムなので、ユーザーやアプリケーションを混乱させる可能性があります。
スーパーユーザーになります。
ループバックファイルシステムをマウントしたいディレクトリを作成し、適切なアクセス権と所有権を与えます。
ループバックファイルシステムを作成します。
# mount -F lofs loopback-directory mount-point
loopback-directory |
ループバックマウントポイントにマウントするファイルシステム |
mount-point |
LOFS をマウントするディレクトリ |
次の例は、chroot コマンドといっしょに新しいループバックファイルシステムを使用して、プロセスやプロセスファミリに完全な仮想ファイルシステムをアクセスできる方法を示しています。
# mount -F lofs / /tmp/newroot # chroot /tmp/newroot command
詳細は、lofs(7FS) または mount(1M) のマニュアルページを参照してください。
/etc/vfstab ファイルにエントリを追加すると、リブートまたはマウント解除する間もループバックファイルシステムを保持できます。ファイルを編集し、各フィールドをタブで区切って次のようなフィールドをファイルの終わりに追加します。
/ - mount-point lofs - yes -
mount-point |
デフォルトのマウントポイントディレクトリ (/tmp/newroot など) |
ループバックエントリは、/etc/vfstab ファイル内の最後のエントリでなければなりません。/etc/vfstab ファイル内でループバックファイルシステムのエントリが、そこに組み込まれるファイルシステムよりも前にあると、ループバックファイルシステムを作成できません。
/etc/vfstab ファイルの詳細は、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。
この章では、/etc/vfstab ファイルを通じてファイルシステムを個々にマウントまたはマウント解除方法について説明します。この章で説明する手順は次のとおりです。
ファイルシステムを作成したら、使用可能にする必要があります。ファイルシステムを使用可能にするには、マウントします。マウントしたファイルシステムは、システムディレクトリツリー内の指定したマウントポイントに接続され、システムに使用できるようになります。ルート (/) ファイルシステムは常にマウントされています。他のファイルシステムは、ルート (/) ファイルシステムに接続したり切り離したりできます。
/etc/vfstab (仮想ファイルシステムテーブル) ファイル内でエントリを作成します。/etc/vfstab ファイルには、システムがマルチユーザーモードでブートされると自動的にマウントされるファイルシステムのリストが入っています。
mount コマンドを使用してコマンド行からマウントします。
ファイルシステムをサーバーから共有する場合に、クライアントは次の 3 つの方法のいずれかで NFS ファイルシステムとしてマウントできます。
システムがマルチユーザーモードでブートされるときにファイルシステムが自動的にマウントされるように、/etc/vfstab ファイルにエントリを追加します。
AutoFS を使用して、ユーザーがディレクトリに入るとき (mount) や出るとき (umount) に、ファイルシステムを自動的にマウントまたはマウント解除します。AutoFS については、『NFS の管理』を参照してください。
コマンド行から mount コマンドを使用します。
CD-ROM 上のファイルシステムは、CD-ROM を挿入するとマウントされます。フロッピーディスク上のファイルシステムは、volcheck(1) コマンドを実行してマウントします。
ファイルシステムをマウントする場合の前提条件は次のとおりです。
スーパーユーザーでなければならない。
ローカルシステム上に、ファイルシステムをマウントするマウントポイントがなければならない。マウントポイントは、マウントされたファイルシステムが接続されるディレクトリである。
ファイルシステムや多数のファイルシステムをマウントしたかどうかを検査するには、mount コマンドからの出力を調べます。この手順については、「どのファイルシステムがマウントされているかを調べる方法」を参照してください。
表 28-1 は、ファイルシステムのマウントとマウント解除に使用する /usr/sbin ディレクトリ内のコマンドを示しています。
表 28-1 ファイルシステムのマウントとマウント解除に使用するコマンド
コマンド |
説明 |
---|---|
mount(1M) |
ファイルシステムとリモート資源をマウントする |
mountall(1M) |
/etc/vfstab ファイル内で指定されたすべてのファイルシステムをマウントする。マルチユーザー実行状態に入ると、mountall コマンドが自動的に実行される |
umount(1M) |
ファイルシステムとリモート資源をマウント解除する |
umountall(1M) |
/etc/vfstab ファイル内で指定されたすべてのファイルシステムをマウント解除する |
umount コマンドは、整合性のない読み取りや書き込み用のファイルシステムはマウントされません。mount または mountall コマンドからエラーメッセージが表示される場合は、ファイルシステムをチェックする必要があります。ファイルシステムをチェックする方法については、第 31 章「ファイルシステムの完全性チェック」を参照してください。
umount コマンドでは、使用中のファイルシステムはマウント解除されません。ファイルシステムは、ユーザーがそのディレクトリ内にいる場合や、プログラムがその中のファイルを開いている場合に使用中と見なされます。
表 28-2 は、mount コマンドの -o オプションで指定できる汎用マウントオプションを示しています。複数のオプションを指定する場合は、-o ro,nosuid のように (空白ではなく) コンマで区切ります。
表 28-2 汎用マウントオプション
オプション |
ファイルシステム |
説明 |
---|---|---|
-rw | ro |
CacheFS、NFS、PCFS、UFS、S5FS |
読み取り/書き込みまたは読み取り専用と指定する。このオプションを指定しなければ、デフォルトは読み取り/書き込み |
-nosuid |
HSFS、NFS、UFS |
setuid を実行不可にし、ファイルシステム上のデバイスが開かれないようにする。デフォルトでは、setuid は実行可能であり、デバイスを開くことができる |
-remount |
NFS、UFS、S5FS |
rw とともに、読み取り/書き込み権を持つファイルシステムをマウントし直す |
-f |
UFS、S5FS |
/etc/mnttab 内のエントリを作成するが、実際にはファイルシステムをマウントしない |
-n |
UFS、S5FS |
/etc/mnttab 内でエントリを作成せずにファイルシステムをマウントする |
-bg | fg |
NFS |
最初の試行に失敗すると、バックグラウンド内 (bg) またはフォアグラウンド内 (fg) で再試行する。デフォルトは fg |
-soft | hard |
NFS |
サーバーが応答しない場合の手続きを指定する。soft は、エラーが返されることを示す。hard は、サーバーが応答するまで再試行要求が継続されることを示す。デフォルトは hard |
-intr | nointr |
NFS |
ハードマウントされたファイルシステムに関する応答を待つ間にハングしたプロセスを、キーボード割り込みで消去できるか指定する。デフォルトは intr (割り込み可能) |
-retry=n |
NFS |
マウント操作に失敗した場合に再試行する。n は再試行回数 |
/etc/vfstab ファイル内のエントリには、表 28-3 のように 7 つのフィールドが入っています。
表 28-3 /etc/vfstab ファイルのフィールドの説明
フィールド名 |
説明 |
---|---|
device to mount |
マウントできるデバイスは次のとおり
|
device to fsck |
「device to mount」フィールドで指定したファイルシステムに対応する raw (キャラクタ型) 特殊デバイス (/dev/rdsk/c0t0d0s0 など)。これにより、fsck に使用されるインタフェースが決まる。読み取り専用ファイルシステムやリモートファイルシステムなど、適用できるデバイスがない場合は、ダッシュ (-) を使用する |
mount point |
デフォルトのマウントポイントディレクトリ (/dev/dsk/c0t0d0s6 の場合は /usr など)
|
FS type |
「device to mount」 フィールドで指定したファイルシステムのタイプ |
fsck pass |
fsck がファイルシステムをチェックするか決めるために使用するパス番号。このフィールドでダッシュ (-) を指定すると、ファイルシステムはチェックされない。このフィールドに 0 より大きい値が入っていると、ファイルシステムがチェックされる。fsck pass の値が 0 の UFS 以外のファイルシステムはチェックされる。UFS ファイルシステムのみの場合は、このフィールドに 0 が入っていると、ファイルシステムはチェックされない。fsck pass の値が 1 より大きい複数の UFS ファイルシステム上で fsck を実行する場合に、preen (修復) オプション (-o p) を指定すると、最大効率を発揮するために fsck によって各種ディスク上でファイルシステムが並行して自動的にチェックされる。このフィールドに値 1 が入っていると、ファイルシステムは順番にチェックされる。SunOS システムソフトウェアの場合、「fsck pass」フィールドはシステムがチェックされる順序を明示的に指定しない |
mount at boot |
システムのブート時にファイルシステムが mountall によって自動的にマウントされるかどうかを表す。yes または no に設定。このフィールドは AutoFS とは連動していないので注意してください。 |
mount options |
ファイルシステムのマウントに使用されるオプションを (空白を空けずに) コンマで区切ったリスト。オプションなしを示すにはダッシュ (-) を使用する。オプションについては、mount(1M) のマニュアルページを参照 |
/etc/vfstab ファイル内のフィールドごとに 1 つずつエントリがなければなりません。フィールドで値を指定しない場合は、必ずダッシュ (-) を入力してください。
どのファイルシステムがマウントされているかを調べるには、次のように入力します。
$ mount
$ mount / on /dev/dsk/c0t3d0s0 read/write/setuid/largefiles on ... /usr on /dev/dsk/c0t3d0s6 read/write/setuid/largefiles on ... /proc on /proc read/write/setuid on Fri May 16 11:39:05 1997 /dev/fd on fd read/write/setuid on Fri May 16 11:39:05 1997 /export on /dev/dsk/c0t3d0s3 setuid/read/write/largefiles on ... /export/home on /dev/dsk/c0t3d0s7 setuid/read/write/largefiles on ... /export/swap on /dev/dsk/c0t3d0s4 setuid/read/write/largefiles on ... /opt on /dev/dsk/c0t3d0s5 setuid/read/write/largefiles on ... /tmp on swap read/write on Fri May 16 11:39:07 1997 $
「前提条件」の前提条件を満たしているかどうかを確認します。
/etc/vfstab ファイルを編集してエントリを追加します。
表 28-3 のフィールドエントリの詳細は、/etc/vfstab を参照してください。次のことを確認します。
各フィールドを空白 (空白文字またはタブ) で区切る。
フィールドで値を指定しない場合はダッシュ (-) を入力する。
変更結果を保存します。
#device device mount FS fsck mount mount #to mount to fsck point type pass at boot options # /dev/dsk/c0t3d0s7 /dev/rdsk/c0t3d0s7 /files1 ufs 2 yes - pluto:/export/man - /usr/man nfs - yes ro,soft / - /tmp/newroot lofs - yes -
この例では、デフォルトのマウントオプション (読み取り/書き込み) を使用して、マウントポイントディレクトリ /files1 に接続される UFS ファイルとして、ディスクスライス /dev/dsk/c0t3d0s7 をマウントします。また、「device to fsck」として raw キャラクタ型デバイス /dev/rdsk/c0t3d0s7 を指定します。「fsck pass」の値は 2 なので、ファイルシステムは順不同でチェックされます。
この例では、システム pluto からのディレクトリ /export/man を、NFS ファイルシステムとしてマウントポイント /usr/man にマウントします。NFS ファイルシステムである「device to fsck」や「fsck pass」は指定されていません。この例では、「mount options」は ro (読み取り専用) と soft になっています。信頼性を高めるために、読み取り/書き込み NFS ファイルシステムの場合は hard マウントオプションを指定します。
この例では、ルート (/) ファイルシステムをループバックマウントポイント /tmp/newroot にマウントします。「mount at boot」は yes と指定し、「device to fsck」と「fsck pass」の番号は指定していません。ループバックファイルシステムを構成するファイルシステムを使用したら、必ずループバックファイルシステムをマウントしなければなりません。ループバックエントリは、それが依存するエントリの後に位置するように、/etc/vfstab ファイル内で最後のエントリでなければなりません。
「前提条件」の前提条件を満たしているかどうかを確認します。
/etc/vfstab ファイル内に列挙されたファイルシステムをマウントします。
# mountall [-l | -r] [-F fstype]
オプションを指定しなければ、/etc/vfstab ファイル内で「mount at boot」フィールドに yes を指定したすべてのファイルシステムがマウントされます。
-l |
/etc/vfstab ファイル内で「mount at boot」フィールドに yes を指定したすべてのローカルファイルシステムがマウントされる |
-r |
/etc/vfstab ファイル内で「mount at boot」フィールドに yes を指定したすべてのリモートファイルシステムがマウントされる |
-F fstype |
/etc/vfstab ファイル内で「mount at boot」フィールドに yes を指定した fstype タイプのすべてのファイルシステムがマウントされる |
マウントが実行される前に、「device to fsck」エントリがあるすべてのファイルシステムがチェックされ、必要であれば修正されます。
次の例は、mountall コマンドの使用時に、すでにファイルシステムがマウントされている場合に表示されるメッセージを示しています。
# mountall mount: /tmp already mounted nfs mount: mount: /usr/openwin: Device busy nfs mount: mount: /usr/man: Device busy
次の例では、/etc/vfstab ファイル内に列挙されたすべてのローカルシステムがマウントされます。
# mountall -l # mount / on /dev/dsk/c0t3d0s0 read/write/setuid/largefiles on ... /usr on /dev/dsk/c0t3d0s6 read/write/setuid/largefiles on ... /proc on /proc read/write/setuid on Fri May 16 11:39:05 1997 /dev/fd on fd read/write/setuid on Fri May 16 11:39:05 1997 /tmp on swap read/write on Fri May 16 11:39:07 1997
次の例では、/etc/vfstab ファイル内に列挙されたすべてのリモートファイルシステムがマウントされます。
# mountall -r # mount / on /dev/dsk/c0t3d0s0 read/write/setuid/largefiles on ... /usr on /dev/dsk/c0t3d0s6 read/write/setuid/largefiles on ... /proc on /proc read/write/setuid on Fri May 16 11:39:05 1997 /dev/fd on fd read/write/setuid on Fri May 16 11:39:05 1997 /tmp on swap read/write on Fri May 16 11:39:07 1997 /nfs/mars.dist on mars:/usr/dist intr/remote on ... /nfs/mars.mail on mars:/var/mail intr/noac/remote on ...
「前提条件」の前提条件を満たしているか確認します。
/etc/vfstab ファイル内に列挙されたファイルシステムをマウントします。
# mount mount-point
mount-point |
/etc/vfstab ファイル内の「mount point」または「device to mount」フィールド内のエントリ。通常は、マウントポイントを指定する方が簡単にできます |
次の例では、/etc/vfstab ファイル内に列挙されたファイルシステム /usr/openwin をマウントします。
# mount /usr/openwin
「前提条件」の前提条件を満たしているかどうかを確認します。
UFS ファイルシステムをマウントします。
# mount [-o mount-options] /dev/dsk/device-namemount-point
-o mount-options |
UFS ファイルシステムのマウントに使用できるマウントオプションを指定する。汎用マウントオプションについては、表 28-2 を参照。すべてのオプションについては、mount_ufs(1M) のマニュアルページを参照 |
/dev/dsk/device-name |
ファイルシステムを保持するディスクスライス用の特殊ブロックデバイスファイル (/dev/dsk/c0t3d0s7 など)。ディスクデバイス名を調べる方法については、第 26 章「ファイルシステムの概要」を参照 |
mount-point |
ファイルシステムをマウントするディレクトリ |
次の例では、/dev/dsk/c0t3d0s7 が /files1 ディレクトリにマウントされます。
# mount /dev/dsk/c0t3d0s7 /files1
新しい largefiles マウントオプションは Solaris 2.6 環境のデフォルトの状態で、2G バイトより大きい大規模ファイルを持つファイルシステムをマウントできるようになります。
大規模ファイルを持つファイルシステムをマウントする手順は、「UFS ファイルシステムをマウントする方法」ですでに説明している手順と同じです。
largefiles オプションは、このオプションでマウントしたファイルシステムが 2G バイトより大きい大規模ファイルを 1 つまたは複数持つ可能性があることを意味します。しかし、このオプションでマウントしたファイルシステムが必ずしも 2G バイトより大きい大規模ファイルを持つ必要はありません。このオプションは、このようなファイルがファイルシステム内に存在することを許可します。
この動作を無効にするには、nolargefiles マウントオプションを明示的に使用しなければなりません。nolargefiles オプションは、2G バイトの最大ファイルサイズ制限を課すことによって、以前のファイルシステムの動作との全体的な互換性を提供します。
デフォルトの largefiles マウントオプションでファイルシステムをマウントして、大規模ファイルを作成した後には、大規模ファイルを削除して、fsck を実行して状態を「nolargefiles」にリセットするまで、nolargefiles オプションでファイルシステムを再マウントできません。
スーパーユーザーになります。
ファイルシステム内に大規模ファイルが存在しないことを確認します。
# cd /file-system # find . -xdev -size +2000000 -exec ls -l {} ¥;
file-system |
大規模ファイルをチェックするファイルシステム |
大規模ファイルが当該ファイルシステム内に存在する場合は、そのファイルを削除するか、他のファイルシステムに移動します。
ファイルシステムのマウントを解除します。
# umount /file-system
ファイルシステムの状態をリセットします。
# fsck /dev/rdsk/device-name
nolargefiles オプションでファイルシステムを再マウントします。
# mount -o nolargefiles /dev/rdsk/device-name
この例では、/datab 中に大規模ファイルが存在しないことをチェックして、/dev/dsk/c0t3d0s7 を /datab ディレクトリにマウントしています。
# cd /datab # find . -xdev -size +2000000 -exec ls -l {} ¥; # find . -xdev -size +2000000 -exec ls -l {} ¥; # umount /datab # fsck /dev/rdsk/c0t3d0s7 /files1 # mount -o nolargefiles /dev/dsk/c0t3d0s7 /files1
「前提条件」の前提条件を満たしているかどうかを確認します。
ファイルシステムをサーバーから使用可能かどうかを確認します。
NFS ファイルシステムをマウントするには、サーバーシステムから使用できるようにしなければなりません。サーバーで share(1M) コマンドを使用すると、ネットワーク上で共有できるファイルシステムのリストが表示されます。ファイルシステムの共有方法については、『NFS の管理』を参照してください。
NFS ファイルシステムをマウントします。
# mount -F nfs [-o mount-options] server:/directory mount-point
-o mount-options |
NFS ファイルシステムのマウントに使用できるマウントオプションを指定する。汎用マウントオプションのリストについては、表 28-2 を参照。オプションについては、mount_nfs(1M) のマニュアルページを参照 |
server:/directory |
ファイルシステムをマウントするサーバーのホスト名と、マウントするファイルシステム名 |
mount-point |
ファイルシステムをマウントするディレクトリ |
次の例では、ディレクトリ /export/packages 内のパッケージがサーバー pluto から /mnt にマウントされます。
# mount -F nfs pluto:/export/packages /mnt
「前提条件」の前提条件を満たしているかどうかを確認します。
S5FS ファイルシステムをマウントします。
# mount -F s5fs [-o mount-options] /dev/dsk/device-name mount-point
-o mount-options |
S5FS ファイルシステムのマウントに使用できるマウントオプションを指定する。汎用マウントオプションについては、表 28-2 を参照。オプションについては、mount_s5fs(1M) のマニュアルページを参照 |
/dev/dsk/device-name |
ファイルシステムを保持するディスクスライスのデバイス名 (/dev/dsk/c0t3d0s7 など) 。ディスクデバイス名を調べる方法については、第 20 章「デバイスへのアクセス」を参照 |
mount-point |
ファイルシステムをマウントするディレクトリ |
次の例では、/dev/dsk/c0t3d0s7 が /files1 ディレクトリにマウントされます。
# mount -F s5fs /dev/dsk/c0t3d0s7 /files1
次の手順で、PCFS (DOS) ファイルシステムをハードディスクからマウントします。
「前提条件」の前提条件を満たしているかどうかを確認します。
PCFS ファイルシステムをマウントします。
# mount -F pcfs [-o rw | ro] /dev/dsk/device-name:logical-drive mount-point
-o rw | ro |
PCFS ファイルシステムを読み取り/書き込みまたは読み取り専用にマウントできるように指定する。このオプションを指定しなければ、デフォルトは読み取り/書き込みになる |
/dev/dsk/device-name |
ディスク全体のデバイス名 (/dev/dsk/c0t0d0p0 など) |
logical-drive |
DOS の論理ドライブ名 (c から z まで) または 1 から 24 までのドライブ番号を指定する。ドライブ C はドライブ 1 に相当し、ドライバ上の一次 DOS スライスを表す。他のすべてのドライブ名やドライブ番号は、拡張 DOS スライス内の DOS 論理ドライブを表す |
mount-point |
ファイルシステムをマウントするディレクトリ |
「device-name」と「logical-drive」 は、コロンで区切らなければならないので注意してください。
次の例では、一次 DOS スライス内の論理ドライブが /pcfs/c ディレクトリにマウントされます。
# mount -F pcfs /dev/dsk/c0t0d0p0:c /pcfs/c
次の例では、ディスク上の拡張 DOS スライス内の最初の論理ドライブが、/pcfs/d に読み取り専用としてマウントされます。
# mount -F pcfs -o ro /dev/dsk/c0t0d0p0:2 /pcfs/d
ファイルシステムをマウント解除すると、ファイルシステムのマウントポイントから削除され、そのエントリが /etc/mnttab ファイルから削除されます。マウントされているファイルシステム上では、一部のファイル管理作業を実行できません。次の場合には、ファイルシステムをマウント解除する必要があります。
ファイルシステムが不要になった場合、またはより新しいソフトウェアが入ったファイルシステムに交換された場合
fsck コマンドを使用してファイルシステムをチェックし、修復する場合。fsck コマンドの詳細は、第 31 章「ファイルシステムの完全性チェック」を参照
ファイルシステムの完全バックアップを実行する前に、マウント解除しておくとよいでしょう。バックアップの実行の詳細は、第 34 章「ファイルとファイルシステムのバックアップの手順」を参照してください。
各ファイルシステムは、ファイルシステムのシャットダウン手続きの一部として自動的にマウント解除されます。
ファイルシステムをマウント解除する場合の前提条件は次のとおりです。
スーパーユーザーでなければならない
ファイルシステムをマウント解除に使用できなければならない。使用中のファイルシステムはマウント解除できません。ファイルシステムは、ユーザーがそのディレクトリ内に入っているときや、プログラムがそのファイルシステム内でファイルを開いているときには使用中と見なされます。次の方法でファイルシステムを使用可能にできます。
別のファイルシステム内のディレクトリに変更する
システムからログアウトする
fuser コマンドを使用して、そのファイルシステムにアクセス中のすべてのプロセスを表示し、必要に応じて停止する。詳細は、「あるファイルシステムのすべてのプロセスを停止する方法」を参照
他のユーザーが使用しているファイルシステムをマウント解除する必要があるときは、各ユーザーに通知してください。
ファイルシステムをマウント解除したことを確認するには、mount コマンドからの出力を調べます。この手順については、「どのファイルシステムがマウントされているかを調べる方法」を参照してください。
どのプロセスを停止するかがわかるように、ファイルシステムを使用中のすべてのプロセスを表示します。
# fuser -c [ -u ] mount-point
-c |
ファイルシステムのマウントポイントとなっているファイルと、マウントされているファイルシステム内のファイルが表示される |
-u |
プロセス ID ごとにユーザーのログイン名が表示されます |
mount-point |
プロセスを停止したいファイルシステム名 |
ファイルシステムのすべてのプロセスを停止します。
ユーザーのプロセスを停止するときには、必ず事前に警告してください。
# fuser -c -k mount-point
ファイルシステムを使用中のプロセスに SIGKILL が送信されます。
ファイルシステムを使用中のプロセスがないことを確認します。
# fuser -c mount-point
次の例では、/export/home ファイルシステムを使用中のプロセス 4006c が停止されます。
# fuser -c /export/home /export/home: 4006c # fuser -c -k /export/home /export/home: 4006c # fuser -c /export/home /export/home:
次の手順で、ファイルシステム (/ または /usr を除く) をマウント解除します。
ルート (/) と /usr の UFS ファイルシステムは特殊ケースです。システムが機能するにはルートが必要なので、ルート (/) のファイルシステムはシャットダウン中でなければマウント解除できません。
「前提条件」の前提条件を満たしているかどうかを確認します。
ファイルシステムをマウント解除します。
# umount mount-point
mount-point |
マウント解除したいファイルシステム名。ここでは、ファイルシステムがマウントされているディレクトリ名、ファイルシステムのデバイス名パス、NFS ファイルシステムの資源、LOFS ファイルシステムのループバックディレクトリのいずれかを指定できる |
次の例では、ローカルのホームディレクトリからファイルシステムがマウント解除されます。
# umount /export/home
次の例では、スライス 7 のファイルシステムがマウント解除されます。
# umount /dev/dsk/c0t0d0s7
次の手順で、/、/proc、/var、/usr のファイルシステムを除き、/etc/vfstab ファイルに列挙されているすべてのファイルシステムをマウント解除します。
「前提条件」の前提条件を満たしているかどうかを確認します。
/etc/vfstab ファイルに列挙されているすべてのファイルシステムをマウント解除します。
# umountall
可能なファイルシステムがすべてマウント解除されます。使用中のファイルシステムはマウント解除されません。
使用中だったためにマウント解除されなかったファイルシステムの場合は、「あるファイルシステムのすべてのプロセスを停止する方法」で説明した手順に従って、マウント解除できるようにします。
必要に応じて、すべてのファイルシステムがマウント解除されるまで手順 2 を繰り返します。
キャッシュファイルシステム (CacheFS) は、サーバーとネットワークの負荷を軽減して NFS サーバーの性能とスケーラビリティを改善する汎用ファイルシステムキャッシュ機構です。CacheFS は階層化ファイルシステムとして設計されていて、あるファイルシステムを別のファイルシステムのキャッシュに書き込む機能を持っています。NFS 環境では、CacheFS はサーバーあたりのクライアント比率を高め、サーバーとネットワークの負荷を軽減し、ポイントツーポイントプロトコル (PPP) のような低速リンク上でクライアントの性能を改善します。
この章の内容は次のとおりです。
キャッシュにマウントするように指定したファイルシステムに、ユーザーがネットワークを経由しなくてもローカルにアクセスできるように、cfsadmin(1M) コマンドを使用してキャッシュをクライアント上で作成します。図 29-1 は、CacheFS の使用に関連する構成要素の関係を示しています。バックファイルシステムとは、キャッシュにマウントするように指定するファイルシステムです。通常、これは NFS または HSFS (High Sierra File System) ファイルシステムです。ユーザーがバックファイルシステムの一部であるファイルにアクセスしようとすると、そのファイルはキャッシュに書き込まれます。したがって、ユーザーがファイルにアクセスするまで、キャッシュは空になっています。ユーザーにとって、ファイルに初めてアクセスするときは低速に思われますが、同じファイルを使用するたびに高速になります。
共有されるファイルシステムしかマウントできません。share(1M) コマンドを参照してください。
作業 |
説明 |
手順の説明 |
|||||
---|---|---|---|---|---|---|---|
キャッシュの作成 |
cfsadmin コマンドを使用してキャッシュを作成する | ||||||
| |||||||
ファイルシステムをキャッシュにマウントする |
mount コマンドを使用してファイルシステムをキャッシュにマウントする | ||||||
|
/etc/vfstab ファイルを編集してファイルシステムをキャッシュに書き込む | ||||||
|
|
|
AutoFS を使用してファイルシステムをキャッシュに書き込む |
| |||
スーパーユーザーになります。
cfsadmin(1M) コマンドの -c オプションを使用してキャッシュを作成します。
# cfsadmin -c cache-directory
cache-directory |
キャッシュがあるディレクトリ名。詳細は、cfsadmin(1M) のマニュアルページを参照 |
キャッシュを作成し終わったら、キャッシュディレクトリ内では操作しないでください。何か実行すると、CacheFS ソフトウェア内で矛盾が生じます。
次の例では、デフォルトのキャッシュパラメタ値を使用して、/local/mycache ディレクトリ内でキャッシュを作成します。
# cfsadmin -c /local/mycache #
指定したファイルシステム内のファイルにユーザーがローカルにアクセスできるように、キャッシュにマウントされるファイルシステムを指定します。実際には、各ファイルは、ユーザーがアクセスするまではキャッシュに書き込まれません。
キャッシュにマウントされるファイルシステムを指定するには、次の 3 つの方法があります。
mount(1M) コマンドを使用する方法 - 同じファイルにアクセスするには、システムをリブートするたびに mount コマンドを使用する必要がある。
/etc/vfstab ファイルを編集する方法 - 一度編集するだけですむ。/etc/vfstab ファイルの内容は、システムをリブートした後も変更されずに残る。
AutoFS を使用する方法 - 一度実行するだけですむ。AutoFS のマップは、システムをリブートした後も変更されずに残る。
いずれかの方法を選択してファイルシステムをマウントしてください。
CacheFS では、ルート (/) と /usr のファイルシステムをキャッシュに書き込むことはできません。ルート (/) と /usr のファイルシステムをキャッシュに書き込むには、Solstice AutoClient 製品を購入しなければなりません。AutoClient 製品の詳細は、『Solstice AutoClient 管理ガイド』を参照してください。
スーパーユーザーになります。
マウントポイントを作成します。
マウントポイントを作成すると、ユーザーはそのマウントポイントで指定されたファイルシステムにアクセスできます。マウントポイントはどこからでも作成できます。次の手順のように、マウントコマンドで使用する CacheFS オプションによって、作成するマウントポイントを、指定したキャッシュディレクトリ内のキャッシュに書き込むように決めます。
mount コマンドを使用して、ファイルシステムをキャッシュにマウントします。
# mount -F cachefs -o backfstype=fstype,cachedir=cache-directory[,options] back-filesystem mount-point
fstype | |
cache-directory |
キャッシュがあるディレクトリ名。これは、「キャッシュを作成する方法」でキャッシュを作成するときの指定と同じ |
options |
ファイルシステムをキャッシュにマウントするときに追加できる他のマウントオプションを指定する。CacheFS マウントオプションの詳細は、mount_cachefs(1M) のマニュアルページを参照 |
back-filesystem |
キャッシュにマウントするバックファイルシステムのマウントポイント。バックファイルシステムが NFS ファイルシステムであれば、merlin: /usr/openwin など、ファイルシステムのマウント元となるサーバーのホスト名と、キャッシュにマウントするファイルシステム名 (コロンで区切る) を指定しなければならない |
mount-point |
ファイルシステムのマウント先となるディレクトリ |
作成したキャッシュが実際にマウントされたかどうかを確認するには、次のように cachefsstat(1M) コマンドを使用します。
# cachefsstat mount-point
たとえば、次のようになります。
# cachefsstat /docs /docs cache hit rate: 100% (0 hits, 0 misses) consistency checks: 1 (1 pass, 0 fail) modifies: 0 garbage collection: 0
マウントポイントは、作成したキャッシュファイルシステムです。cachefsstat コマンドの詳細は、「CacheFS の統計情報」を参照してください。
ファイルシステムがキャッシュにマウントされなかった場合は、次のようなエラーメッセージが表示されます。
# cachefsstat mount-point cachefsstat: mount-point: not a cachefs mountpoint
次の例では、マウントポイント /docs を作成し、NFS ファイルシステム merlin:/docs を、キャッシュされたファイルシステム /docs としてキャッシュ /local/mycache にマウントします。
# mkdir /docs # mount -F cachefs -o backfstype=nfs,cachedir=/local/mycache merlin:/docs /docs
次の例では、CD-ROM (HSFS ファイルシステム) をキャッシュされたファイルシステム /docs として使用可能にします。CD-ROM には書き込めないので、引数 ro を指定してキャッシュされたファイルシステムを読み込み専用にします。CD-ROM は挿入時にボリューム管理によって自動的にマウントされるので、引数 backpath を指定しなければなりません。マウント場所は /cdrom ディレクトリにあり、CD-ROM 名によって決まります。マウントする特殊デバイスは、引数 backpath の値と同じです。
# mount -F cachefs -o backfstype=hsfs,cachedir=/local/mycache,ro, backpath=/cdrom/cdrom_name /cdrom/cdrom_name /docs
次の例では、demandconst オプションを使用して、NFS キャッシュファイルシステム /docs の整合性チェックを指定します。/docs のバックファイルシステムは merlin:/docs です。詳細は、「キャッシュされたファイルシステムとバックファイルシステムとの整合性チェック」を参照してください。
# mount -F cachefs -o backfstype=nfs,cachedir=/local/mycache, demandconst merlin:/docs /docs
スーパーユーザーになります。
エディタを使用して、マウントするファイルシステムを /etc/vfstab ファイル内で指定します。
#device device mount FS fsck mount mount #to mount to fsck point type pass at boot options # /dev/dsk/devicename /dev/rdsk/devicename /mount-point cachefs 2 yes -
最終行は新しいエントリを表します。
次のように mount コマンドを使用してキャッシュされたファイルシステムをマウントするか、リブートします。
# mount /mount-point
次の例は、キャッシュファイルシステム用の /etc/vfstab エントリを示します。
#device device mount FS fsck mount mount #to mount to fsck point type pass at boot options # /dev/dsk/c0t1d0s0 /dev/rdsk/c0t1d0s0 /usr/local cachefs 2 yes -
次のように入力して、/usr/local ディレクトリをキャッシュディレクトリにマウントします。
# mount /usr/local
自動マウントマップ内で -fstype=cachefs マウントオプションを指定して、AutoFS によりキャッシュにファイルシステムをマウントします。CacheFS のマウントオプション (backfstype や cachedir など) も、自動マウントマップ内で指定します。自動マウントマップの詳細は、automount(1M) のマニュアルページや、『NFS の管理』も参照してください。
スーパーユーザーになります。
エディタを使用して、次の 1 行を auto_direct マップに追加します。
/mount-point -fstype=cachefs,cachedir=/directory,backfstype=nfs server:/file-system
エディタを使用して、次の 1 行を auto_master マップに追加します。
/-
/- エントリは、auto_direct マップをチェックするポインタです。
システムをリブートします。
エントリが正しく作成されたか確認するには、次のようにキャッシュにマウントしたファイルシステムにカレントディレクトリを変更して内容を表示します。
# cd filesystem # ls filesystem
AutoFS とマップを編集する方法の詳細は、『NFS の管理』の AutoFS に関する章を参照してください。
次の auto_master エントリは、キャッシュファイルシステムを /docs ディレクトリに自動的にマウントします。
/docs -fstype=cachefs,cachedir=/local/mycache,backfstype=nfs merlin:/docs
作業 |
説明 |
手順の説明 |
|||||
---|---|---|---|---|---|---|---|
キャッシュの変更 |
キャッシュの動作を変更する | ||||||
キャッシュ情報の表示 |
cfsadmin コマンドを使用してキャッシュされたファイルシステムに関する情報を表示する | ||||||
| |||||||
整合性チェックの実行 |
cfsadmin コマンドを使用して必要に応じて整合性チェックを実行する | ||||||
| |||||||
キャッシュの削除 |
umount コマンドと cfsadmin コマンドを使用して、キャッシュされたファイルシステムを削除する | ||||||
| |||||||
ファイルシステムの完全性の検査 |
fsck_cachefs コマンドを使用して、キャッシュされたファイルシステムの完全性をチェックする | ||||||
|
キャッシュを設定し終わったら、次の管理作業を実行できます。
キャッシュ内のファイルシステムを変更する (キャッシュをマウント解除し、削除し、作成し直し、再びマウントする)
キャッシュ情報を表示する
キャッシュの整合性をチェックする
キャッシュからファイルシステムを削除する
キャッシュされたファイルシステムの完全性をチェックする
/etc/vfstab ファイルを使用してファイルシステムをマウントしている場合は、このファイル内でファイルシステムオプションを編集してキャッシュを変更します。AutoFS を使用している場合は、AutoFS マップ内でファイルシステムオプションを編集してキャッシュを変更します。
ファイルシステムの特定のオプションを変更する方法については、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。キャッシュ内でファイルシステムを変更する場合は、キャッシュを削除してから作成し直す必要があります。また、ファイルシステムの共有方法とアクセス方法によっては、マシンをシングルユーザーモードでリブートしなければならない場合があります。
次の例は、この手順を示しています。
次の例では、キャッシュが削除されてから再び作成され、ファイルシステム /docs に指定された demandconst オプションを使用して再びマウントされます。この例は、シングルユーザーモードでリブートするなどの手順を示しています。必要であれば他のコマンドを使用して、この例の作業を実行することもできます。
$ su password: # init 0 . . . ok boot -s . . . Type Cntrl-d to proceed with normal startup, (or give root password for system maintenance): # enter password: . . . 「キッシュを置くファイルシステムについて fsck を実行するか どうかのプロンプトがここで表示される」 # fsck /local # mount /local # cfsadmin -d all /local/mycache # cfsadmin -c /local/mycache # init 6 . . . console login: password: # mount -F cachefs -o backfstype=nfs,cachedir=/local/cache1,demandconst merlin:/docs /docs #
ファイルシステムをキャッシュに正常に戻せなかった場合は、次のようなエラーメッセージが表示されます。
cachefsstat: /doc: not a cachefs mount point
スーパーユーザーになります。
指定したキャッシュにマウントされたすべてのファイルシステムに関する情報を表示します。
# cfsadmin -l cache-directory
cache-directory はキャッシュがあるディレクトリ名です。
次の例は、キャッシュディレクトリ /local/mycache に関する情報を示しています。この例では、ファイルシステム /docs が /local/mycache にマウントされています。最終行にはキャッシュされたファイルシステムが表示されます。
# cfsadmin -l /local/mycache cfsadmin: list cache FS information maxblocks 90% minblocks 0% threshblocks 85% maxfiles 90% minfiles 0% threshfiles 85% maxfilesize 3MB merlin:_docs:_docs #
スーパーユーザーになります。
次のように mount(1M) コマンドの demandconst オプションを指定して、ファイルシステムをキャッシュにマウントします。
# mount -F cachefs -o backfstype=nfs,cachedir=/directory, demandconst server:/file-system /mount-point
キャッシュされた特定のファイルシステム上で整合性チェックを有効にするには、次のように -s オプションを指定して cfsadmin(1M) コマンドを使用します。
# cfsadmin -s /mount-point
整合性チェックの詳細は、「キャッシュされたファイルシステムとバックファイルシステムとの整合性チェック」を参照してください。
スーパーユーザーになります。
キャッシュ内のすべてのファイルシステムをマウント解除します。
# umount mount-point
mount-point では、ファイルシステムのマウント先となるディレクトリを指定します。
次のように、cfsadmin -l による出力からキャッシュ ID を判別します。
# cfsadmin -l cache-directory cfsadmin: list cache FS information maxblocks 90% minblocks 0% threshblocks 85% maxfiles 90% minfiles 0% threshfiles 85% maxfilesize 3MB cache-id #
キャッシュされたファイルシステムを指定したキャッシュから削除します。
# cfsadmin -d cache-id cache-directory
cache-id |
キャッシュされたファイルシステム名。この名前は、cfsadmin -l コマンドからの出力の最終行に表示される。詳細は、「キャッシュされたファイルシステムに関する情報を表示する方法」を参照。cache-id に all を指定すると、特定のキャッシュに書き込まれたすべてのファイルシステムを削除できる |
cache-directory |
キャッシュがあるディレクトリ |
キャッシュされたファイルシステムが削除されたことを確認します。
削除したファイルシステムのキャッシュ ID は、次のコマンドの出力に含まれなくなります。コマンド出力で指定するフィールドの詳細は、cfsadmin(1M) のマニュアルページを参照してください。
# cfsadmin -l cache-directory cfsadmin: list cache FS information maxblocks 90% minblocks 0% threshblocks 85% maxfiles 90% minfiles 0% threshfiles 85% maxfilesize 3MB #
次の例では、キャッシュされたファイルシステムをマウント解除して、キャッシュから削除します。
# umount /usr/openwin # cfsadmin -d merlin:docs /docs /local/mycache
次の例では、/local/mycache キャッシュ内のキャッシュされたファイルシステムをすべて削除します。
# cfsadmin -d all /local/mycache
fsck(1M) コマンドを使用して、キャッシュされたファイルシステムが完全かどうかを確認します。何も操作しなくても、fsck の CacheFS バージョンによって問題が自動的に解決されます。キャッシュされたファイルシステムの場合は、fsck を手作業で実行する必要はありません。fsck は、ブート時またはファイルシステムのマウント時に自動的に実行されます。完全性を手作業で確認したい場合は、次の手順を使用できます。
スーパーユーザーになります。
指定されたキャッシュ内でキャッシュされたファイルシステムをチェックします。
# fsck -F cachefs [-m] [-o noclean] cache-directory
-m |
fsck にキャッシュされたファイルシステムをチェックさせるが、修復しない |
-o noclean |
キャッシュされたファイルシステム上でチェックのみを実行させるが、修復しない |
cache-directory |
キャッシュがあるディレクトリ名 |
詳細は、fsck_cachefs(1M) のマニュアルページを参照してください。
次の例では、/local/mycache キャッシュの一部になっているキャッシュされたファイルシステムをチェックします。
# fsck -F cachefs /local/mycache #
一般的な使い方でも、CacheFS は、ユーザーが要求しなくても自動的に適切な動作をします。最近使用されたファイルがキャッシュされます。パッキング機能を使用するとキャッシュ内で、特定のファイルまたはディレクトリを常に最新の状態で保持できるので、より積極的にキャッシュを管理できます。
パッキング機能を使用すると、キャッシュにロードするファイルやディレクトリを指定できます。つまり、これらのファイルのコピーがキャッシュで利用できることを保証します。
パッキングリストには、特定のファイル名やディレクトリ名が入っています。他のパッキングリストを入れることも可能です。これによって、たくさんの項目をキャッシュにパックする場合に、個々のファイルやディレクトリを指定する手間が省けます。
cachefspack コマンドは、CacheFS ファイルシステムの制御にパッキング機能を追加します。
ファイルをキャッシュにパックするには、cachefspack コマンドを使用します。
$ cachefspack -p filename
-p |
ファイルまたは複数のファイルをパックすることを指定する。これはデフォルト |
filename |
キャッシュにパックするファイル名またはディレクトリ名を指定する。ディレクトリを指定すると、そのサブディレクトリもすべてパックされる。cachefspack コマンドの詳細は、cachefspack(1M) のマニュアルページを参照 |
次の例は、projects ファイルをキャッシュにパックするように指定する方法を示しています。
$ cachefspack -p projects
次の例は、複数のファイルをキャッシュにパックするように指定する方法を示しています。
$ cachefspack -p projects updates master_plan
次の例は、ディレクトリをキャッシュにパックするように指定する方法を示しています。
$ cachefspack -p /usr/openwin/bin
cachefspack コマンドの機能の 1 つに、パッキングリストをパックするという機能があります。これによって、キャッシュにパックする各ファイルをそれぞれ指定するという手間が省けます。
パッキングリストには、キャッシュにパックするファイルやディレクトリが入っています。ディレクトリがパッキングリストに入っている場合、そのサブディレクトリとファイルもすべてパックされます。
パッキングリストを作成するには、vi などのエディタを使用して、ファイルを開きます。パッキングリストファイルの書式は、filesync コマンドで使用する書式と同じです。filesync コマンドの詳細は、filesync(4) のマニュアルページを参照してください。
次の例は、パッキングリストファイルの内容を示しています。
BASE /home/ignatz LIST plans LIST docs IGNORE *.ps
BASE 文は、パックする項目が存在するディレクトリのパスを指定しています。
2 つの LIST 文は、当刻ディレクトリ中のパックされるファイルを指定しています。
IGNORE 文は、パックしないファイルタイプ (ここでは .ps) を指定しています。
パッキングリストを使用してファイルをパックするには、次のように、cachefspack コマンドの -f オプションを使用します。
$ cachefspack -f packing-list
これは、パッキングリストを読み取って、パッキングリストに指定された情報に基づいてファイルをパックすることを意味します。
-f |
パッキングリストに指定された情報に基づいてファイルをパックすることを指定する |
packing-list |
パッキングリスト名を指定する |
この例では、list.pkg ファイルを cachefspack コマンド用のパッキングリストとして使用しています。
$ cachefspack -f list.pkg
(文字どおりのファイル名ではなく) 正規表現として扱う 1 つまたは複数のファイルをパッキングリストに指定するには、cachefspack コマンドの -r オプションと -f オプションを使用します。-r オプションのみを使用することはできません。
$ cachefspack -rf packing_list
packing_list には、次のように定義された LIST コマンドが入っています。
LIST *.doc
-r |
LIST コマンドに定義したファイルまたは複数のファイルを (文字どおりのファイル名ではなく) 正規表現として扱うことを指定する |
-f |
パッキングリストをキャッシュにパックすることを指定する |
packing_list |
正規表現として扱うファイルまたは複数のファイルを指定した LIST コマンドが入っているパッキングリスト名を示す |
次の例は、パッキングリスト list.pkg をキャッシュにパックするように指定する方法を示しています。list.pkg には、正規表現を定義する LIST コマンドが入っています。
$ cachefspack -rf list.pkg
このコマンドは、list.pkg ファイルをキャッシュにパッキングして、LIST コマンドに定義されたファイル名を (文字どおりのファイル名ではなく) 正規表現として扱います。
共有ディレクトリにある、ユーザーが所有するファイルだけをパックするには、次のように LIST コマンドをパッキングリストに定義します。
LIST !find . -user your_user_name -print
cachefspack コマンドの -f オプションといっしょに -s オプションを使用して、パッキングリストをキャッシュにパックします。
$ cachefspack -sf packing_list
-s |
find コマンドの出力をパッキングリストに適するように調整する |
-f |
パッキングリストを読み取ることを指定する |
filename |
読み取るパッキングリスト名を指定する |
-s オプションは -f オプションといっしょに使用しなければなりません。-s オプションのみを使用することはできません。
次の例は、ユーザーが所有するベースディレクトリのファイルだけをパックするために、LIST コマンドをパッキングリストに定義する方法を示しています。
LIST !find . -user jones -print
次の例は、パッキングリストをパックするように指定する方法を示しています。
$ cachefspack -sf /projects/proj_1
キャッシュからファイルを削除、つまりそのパッキングを解除する場合もあります。他よりも優先度が高い一部のファイルまたはディレクトリが存在する場合があるため、重要でないファイルのパッキングを解除する必要があります。たとえば、あるプロジェクトを終了して、そのプロジェクトに関連するファイルをアーカイブしたと仮定します。次は、新しいプロジェクト、つまり新しいファイルのセットで作業することになります。
キャッシュからファイルまたはパッキングリストをのパッキングを解除するには、cachefspack コマンドの -u オプションか -U オプションを使用します。
$ cachefspack -u filename | -U cache-directory
-u |
ファイルまたは複数のファイルのパッキングを解除することを指定する。このオプションを使用する場合は、ファイル名を指定しなければならない |
filename |
キャッシュからパッキングを解除するファイル名またはパッキングリスト名を指定する。cachefspack コマンドの詳細は、マニュアルページを参照 |
-U |
キャッシュ中のすべてのファイルのパッキングを解除することを指定する |
次の例は、キャッシュからファイル /usr/openwin/bin/xlogo のパッキングを解除するように指定する方法を示しています。
$ cachefspack -u /usr/openwin/bin/xlogo
次の例は、キャッシュから複数のファイルのパッキングを解除するように指定する方法を示しています。
$ cd /usr/openwin/bin $ cachefspack -u xlogo xview xcolor
また、次のように、パッキングリスト (ファイルのディレクトリのパスを含むファイル) でもパッキングを解除できます。
$ cachefspack -uf list.pkg
次の例は、キャッシュディレクトリ中のすべてのファイルのパッキングを解除するように -U オプションを使用する方法を示しています。
$ cachefspack -U /local/mycache
ファイルシステムを 1 つもマウントしていないキャッシュのパッキングは解除できません。-U オプションに対して、マウント済みファイルシステムを持っていないキャッシュを指定した場合、次のような出力が表示されます。
$ cachefspack -U /local/mycache cachefspack: Could not unpack cache /local/mycache, no mounted filesystems in the cache.
パックされたファイルについての情報やパッキングの状態を表示することも可能です。
パックされたファイルの情報を表示するには、cachefspack コマンドの -i オプションを使用します。
$ cachefspack -i[v] cached-filename-or-directory
-i |
パックされたファイルの情報を表示することを指定する |
-v |
詳細表示オプション |
cached-filename-or-directory |
情報を表示するファイル名またはディレクトリ名を指定する |
次の例は、ファイル doc_file がパックされていることを示しています。
$ cachefspack -i doc_file cachefspack: file doc_file marked packed YES, packed YES
次の例は、ディレクトリ /usr/openwin に関する情報を示しています。このディレクトリには、サブディレクトリ bin があり、サブディレクトリ bin には xterm、textedit、resize の 3 つのファイルがあります。xterm と resize ファイルはパックするように指定されていますが、パックされていません。textedit ファイルは正常にパックされています。
$ cd /usr/openwin $ cachefspack -i bin . . . cachefspack: file /bin/xterm marked packed YES, packed NO cachefspack: file /bin/textedit marked packed YES, packed YES cachefspack: file /bin/resize marked packed YES, packed NO . . .
-v オプションを -i オプションといっしょに使用した場合、指定したファイルまたはディレクトリがキャッシュからフラッシュされたかどうかの追加情報も表示されます。たとえば、次のとおりです。
$ cd /usr/openwin $ cachefspack -iv bin . . . cachefspack: file /bin/xterm marked packed YES, packed NO, nocache YES cachefspack: file /bin/textedit marked packed YES, packed YES, nocache NO cachefspack: file /bin/resize marked packed YES, packed NO nocache NO . . .
上記例の最後の行は、ディレクトリの内容がキャッシュからフラッシュされていないことを示しています。
cachefspack のすべてのオプションのヘルプの要約とその意味を表示するには、次のように -h オプションを使用します。
$ cachefspack -h Must select 1 and only 1 of the following 5 options -d Display selected filenames -i Display selected filenames packing status -p Pack selected filenames -u Unpack selected filenames -U Unpack all files in directory 'dir' -f Specify input file containing rules -h Print usage information -r Interpret strings in LIST rules as regular expressions -s Strip './' from the beginning of a pattern name -v Verbose option files - a list of filenames to be packed/unpacked
cachefspack コマンドを使用すると、次のようなエラーメッセージが表示される場合があります。
cachefspack: pathname - ディレクトリをオープンできません。アクセス権がありません。
エラーが発生した理由 |
問題を解決する方法 |
---|---|
ファイルまたはディレクトリにアクセスするための正しいアクセス権を持っていません。 |
適切なアクセス権を取得してください。 |
cachefspack: pathname - ディレクトリをオープンできません。ファイルまたはディレクトリは ありません
エラーが発生した理由 |
問題を解決する方法 |
---|---|
正しいファイルまたはディレクトリがありません。 |
入力ミスがないかチェックしてください。 |
cachefspack: pathname - ディレクトリをオープンできません。stale NFS file handle
エラーが発生した理由 |
問題を解決する方法 |
---|---|
アクセスしたときに、ファイルまたはディレクトリがサーバーから移動または削除されていた可能性があります。 |
システム管理者に問い合わせてください。 |
cachefspack: pathname - ディレクトリをオープンできません。interrupted system call
エラーが発生した理由 |
問題を解決する方法 |
---|---|
このコマンドの実行途中で Control-c キーを発行した可能性があります。 |
コマンドを再発行してください。 |
cachefspack: pathname - ディレクトリをオープンできません。I/O エラー
エラーが発生した理由 |
問題を解決する方法 |
---|---|
ハードウェアの障害です。 |
ハードウェアの接続をチェックしてください。 |
cachefspack: error opening dir
エラーが発生した理由 |
問題を解決する方法 |
---|---|
正しいファイルまたはディレクトリがありません。 |
入力ミスがないかチェックしてください。 |
ファイル書式中の BASE コマンドの後に指定したパスはファイルで、ディレクトリではない可能性があります。指定するパスはディレクトリでなければなりません。 |
ファイル書式中の BASE コマンドの後に指定したパスをチェックしてください。これが、ファイルではなく、ディレクトリであることを確認してください。 |
cachefspack: 共有オブジェクトを獲得できません
エラーが発生した理由 |
問題を解決する方法 |
---|---|
実行可能ファイルが壊れている可能性があります。あるいは、そのフォーマットが認識できません。 |
解決方法はありません。 |
cachefspack: filename - ファイルを pack できません。アクセス権がありません
エラーが発生した理由 |
問題を解決する方法 |
---|---|
ファイルまたはディレクトリにアクセスするための正しいアクセス権を持っていません。 | 適切なアクセス権を入手してください。 |
cachefspack: filename - ファイルを pack できません。ファイルまたはディレクトリは ありません
エラーが発生した理由 |
問題を解決する方法 |
---|---|
正しいファイルまたはディレクトリがありません。 |
入力ミスがないかチェックしてください。 |
cachefspack: filename - ファイルを pack できません。stale NFS file handle
エラーが発生した理由 |
問題を解決する方法 |
---|---|
アクセスしたときに、ファイルまたはディレクトリがサーバーから移動または削除されていた可能性があります。 |
システム管理者に問い合わせてください。 |
cachefspack: filename - ファイルを pack できません。interrupted system call
エラーが発生した理由 |
問題を解決する方法 |
---|---|
このコマンドの実行途中で Control-c キーを発行した可能性があります。 |
コマンドを再発行してください。 |
cachefspack: filename - ファイルを pack できません。I/O エラー
エラーが発生した理由 |
問題を解決する方法 |
---|---|
ハードウェアの障害です。 |
ハードウェアの接続をチェックしてください。 |
cachefspack: filename - ファイルを pack できません。ディスクに空き領域がありません
エラーが発生した理由 |
問題を解決する方法 |
---|---|
ディスク容量が足りなくなりました。 |
ディスク容量を増やす必要があります。 |
キャッシュが最大容量に達しました。 |
キャッシュのサイズを増やしてください。 |
cachefspack: filename - ファイルを unpack できません。アクセス権がありません
エラーが発生した理由 |
問題を解決する方法 |
---|---|
ファイルまたはディレクトリにアクセスするための正しいアクセス権を持っていません。 |
適切なアクセス権を取得してください。 |
cachefspack: filename - ファイルを unpack できません。ファイルまたはディレクトリは ありません
エラーが発生した理由 |
問題を解決する方法 |
---|---|
正しいファイルまたはディレクトリがありません。 |
入力ミスがないかチェックしてください。 |
cachefspack: filename - ファイルを unpack できません。stale NFS file handle
エラーが発生した理由 |
問題を解決する方法 |
---|---|
アクセスしたときに、ファイルまたはディレクトリがサーバーから移動または削除されていた可能性があります。 |
システム管理者に問い合わせてください。 |
cachefspack: filename - ファイルを unpack できません。interrupted system call
エラーが発生した理由 |
問題を解決する方法 |
---|---|
このコマンドの実行途中で Control-c キーを発行した可能性があります。 |
コマンドを再発行してください。 |
cachefspack: filename - ファイルを unpack できません。I/O エラー
エラーが発生した理由 |
問題を解決する方法 |
---|---|
ハードウェアの障害です。 |
ハードウェアの接続をチェックしてください。 |
cachefspack: `d'、`i'、`p'、`u' オプションのどれか 1 つを指定できます。
エラーが発生した理由 |
問題を解決する方法 |
---|---|
コマンドに対して上記オプションを複数入力しました。 |
オプションは 1 つだけ選択してください。 |
cachefspack: 環境変数を検索できません。
エラーが発生した理由 |
問題を解決する方法 |
---|---|
構成ファイル中で、$ で指定した環境変数を設定していません。 |
環境変数を適切な場所に定義してください。 |
cachefspack: LIST コマンドを無視します - 動作中の bese がありません
エラーが発生した理由 |
問題を解決する方法 |
---|---|
LIST コマンドが構成ファイル内にありますが、対応する BASE コマンドがありません。 |
BASE コマンドを定義してください。 |
CacheFS の統計情報は、次のように利用できます。
適切なキャッシュサイズを判断する。
キャッシュの性能を監視する。
これらの結果から得られた情報を使用すると、キャッシュサイズと望ましい性能を取捨選択して調整できます。
CacheFS の統計情報は、次の 3 つのコマンドからなっています。
cachefslog |
ログファイルの位置を指定します。また、このコマンドでは、統計情報が現在どこに記録されているかが表示されるので、ロギングを中止できます。詳細は、cachefslog(1M) のマニュアルページを参照してください。 |
cachefswssize |
ログファイルを解釈して推奨キャッシュサイズを表示します。詳細は、cachefswssize(1M) のマニュアルページを参照してください。 |
cachefsstat |
特定のファイルシステム、またはキャッシュされたすべてのファイルシステムに関する統計情報を表示します。このコマンドの出力に含まれる情報は、キャッシュから直接取り出されます。詳細は、cachefsstat(1M) のマニュアルページを参照してください。 |
CacheFS 統計情報コマンドは、どのディレクトリから実行してもかまいません。ただし、cachefswssize(1M) コマンドを実行するには、スーパーユーザーにならなければなりません。
統計の累計は、ログファイルの作成時から始まります。作業時間が終わったら、cachefslog -h コマンドを使用してロギングを停止してください。手順については、「ロギングプロセスを停止する方法」を参照してください。
CacheFS 統計情報コマンドを使用する前に、次の操作を実行しておかなければなりません。
cfsadmin(1M) コマンドを使用してキャッシュを設定する。
作成するログファイルに統計情報を収集できるように、適切な時間を決定する。この時間は、1 日、1 週間、1 カ月など、一般的な作業間隔に等しくする必要がある。
ログファイルの位置またはパスを選択する。ログファイルが大きくなっても対応できる程度の領域があることを確認する。ログファイルに統計情報を収集できる時間を長くするほど、大きな領域が必要になる。
次の手順は推奨する順序を示しています。異なる順序で作業してもかまいません。
表 29-3 は、CacheFS 統計情報の設定に関連する手順を示しています。
表 29-3 CacheFS 統計情報の設定
作業 |
説明 |
手順の説明 |
|||||
---|---|---|---|---|---|---|---|
ロギングの設定 |
cachefslog コマンドを使用して、キャッシュされたファイルシステムのロギングを設定する。 | ||||||
ロギングプロセスを設定する方法 |
cachefslog コマンドを使用してログファイルの位置を指定する。 | ||||||
| |||||||
ロギングプロセスの停止 |
cachefslog コマンドを使用してロギングプロセスを停止する。 | ||||||
| |||||||
キャッシュサイズの表示 |
cachefswssize コマンドを使用してキャッシュサイズを表示する | ||||||
| |||||||
キャッシュ統計情報を表示する。 |
cachefsstat コマンドを使用して統計情報を表示する。 | ||||||
|
この節では CacheFS ロギングを設定し、表示する方法を説明します。
cachefslog コマンドを使用してロギングプロセスを設定します。
$ cachefslog -f log-file-path mount-point
-f |
ロギングプロセスを設定する |
log-file-path |
ログファイルの位置を表す。ログファイルは、vi などのエディタで作成する標準ファイル |
mount-point |
統計情報を収集するマウントポイント (キャッシュされたファイルシステム) を指定する |
ログファイルを正しく設定したかどうかを確認するには、次のように cachefslog コマンドを使用します。
$ cachefslog mount-point
次の例では、ログファイル samlog を設定して /home/sam に関する統計情報を収集します。samlog の場所は /var/tmp/samlog です。
$ cachefslog -f /var/tmp/samlog /home/sam /var/tmp/samlog: /home/sam $ cachefslog /home/sam /var/tmp/samlog: home/sam
オプションを指定せずに cachefslog(1M) コマンドを使用して、特定のマウントポイントに対するログファイルの場所を調べることもできます。
$ cachefslog mount-point
mount-point |
統計情報を表示したいキャッシュされたファイルシステム |
次の例は、ログファイルが設定されている場合の表示を示します。ログファイルは、/var/tmp/stufflog にあります。
$ cachefslog /home/stuff /var/tmp/stufflog: /home/stuff
次の例は、指定したファイルシステムのログファイルが設定されていないことを示しています。
$ cachefslog /home/zap not logged: /home/zap
cachefslog(1M) コマンドの -h オプションを使用して、ロギングプロセスを停止します。
$ cachefslog -h mount-point
次の例では、/home/stuff のロギングを停止します。
$ cachefslog -h /home/stuff not logged: /home/stuff
上記の例と異なるシステム応答が表示される場合は、ロギングプロセスが正常に停止されていません。正しいログファイル名とマウントポイントを指定したかどうかを確認してください。
キャッシュサイズを増やすべきかどうかを確認したり、特定のマウントポイントに関して前回 cachefslog(1M) コマンドを使用した後の作業から理想的なキャッシュサイズを決定したりできます。
スーパーユーザーになります。
cachefswssize(1M) コマンドを使用して、現在のログのキャッシュサイズと最大キャッシュサイズを表示します。
# cachefswssize log-file-path
次の例で、「end size」とは cachefswssize コマンドを実行した時点のキャッシュサイズです。「high water size」とは、ロギングが発生した時間枠内のキャッシュの最大サイズです。
# cachefswssize /var/tmp/samlog /home/sam end size: 10688k high water size: 10704k / end size: 1736k high water size: 1736k /opt end size: 128k high water size: 128k /nfs/saturn.dist end size: 1472k high water size: 1472k /usr/openwin end size: 7168k high water size: 7168k /nfs/venus.svr4 end size: 4688k high water size: 5000k /usr end size: 4992k high water size: 4992k total for cache initial size: 110960k end size: 30872k high water size: 30872k
キャッシュされた特定のファイルシステムに関する情報を表示できます。次の表は、統計情報の出力時に表示される用語を示しています。
表 29-4 統計情報の出力に表示される用語
用語 |
説明 |
---|---|
ヒット率 (hit rate) |
キャッシュのヒット率対欠落率の比と、それに続く実際のヒット数と欠落数。キャッシュヒットは、ユーザーがファイル操作を実行したいときに、そのファイルが実際にはキャッシュ内にあると発生する。キャッシュの欠落は、ファイルがキャッシュになかったときに発生する。サーバーにかかる負荷は、キャッシュ欠落数、整合性チェック数、および変更数の合計である |
チェック数 (checks) |
実行された整合性チェックの回数、合格回数、不合格回数 |
変更数 (modifies) |
書き込みや作成など、変更操作の回数 |
cachefsstat(1M) コマンドを使用して統計情報を表示します。この操作はいつでも実行できます。たとえば、ロギングを設定しなくても統計情報を表示できます。
$ cachefsstat mount-point
mount-point |
統計情報を表示したいキャッシュされたファイルシステム |
マウントポイントを指定しなければ、マウントされているすべての CacheFS ファイルシステムに関する統計情報が表示されます。
$ cachefsstat /home/sam cache hit rate: 73% (1234 hits, 450 misses) consistency checks: 700 (650 pass, 50 fail) modifies: 321
各キャッシュには、その動作と構造を決定する一連のパラメタが付いています。各パラメタは、表 29-5 に示すデフォルト値に設定されています。デフォルト値は、フロントファイルシステム全体をキャッシュに使用するように指定しますが、これはファイルシステムをキャッシュに書き込む場合の推奨方法です。
表 29-5 キャッシュパラメタとデフォルト値
キャッシュパラメタ |
デフォルト値 |
定義 |
---|---|---|
maxblocks |
90% |
CacheFS がフロントファイルシステム内で回収できる最大ブロック数を設定する |
minblocks |
0% |
CacheFS がフロントファイルシステム内で回収できる最小ブロック数を設定する |
threshblocks |
85% |
CacheFS が minblocks で指定したより多数ブロックを回収する前に、フロントファイルシステム内で使用可能でなければならないブロック数を設定する |
maxfiles |
90% |
CacheFS がフロントファイルシステム内で回収できる使用可能 i ノードの最大数 (ファイル数) を指定する |
minfiles |
0% |
CacheFS がフロントファイルシステム内で回収できる使用可能 i ノードの最小数 (ファイル数) を指定する |
threshfiles |
85% |
CacheFS が minfiles で指定したより多数のファイルを回収する前に、フロントファイルシステム内で使用可能でなければならない i ノード数 (ファイル数) を設定する |
通常、これらのパラメタ値を変更する必要はありません。最適のキャッシュ動作が得られるデフォルト値に設定されています。ただし、キャッシュに使用されないフロントファイルシステム内に空き空間があり、それを他のファイルシステムに使用したい場合は、maxblocks と maxfiles の設定を変更できます。そのためには、cfsadmin(1M) コマンドを使用します。たとえば、次のようになります。
$ cfsadmin -o maxblocks=60
CacheFS は、キャッシュされたディレクトリとファイルが最新の状態に保たれることを保証するために、キャッシュに格納されたファイルの整合性を定期的にチェックします。整合性をチェックするために、CacheFS は現在の変更時刻を前回の変更時刻と比較します。変更時刻が異なる場合は、そのディレクトリまたはファイルに関するすべてのデータと属性がキャッシュから消去され、バックファイルシステムから新しいデータと属性が取り出されます。
ユーザーがディレクトリやファイルの処理を要求すると、CacheFS は整合性を検査する時間があるかどうかをチェックします。時間があれば、バックファイルシステムから変更時刻を取得して比較します。
mount(1M) コマンドの demandconst オプションを指定すると、このオプションでマウントしたファイルシステムに関して明示的に要求するときのみ、整合性チェックを実行できます。ファイルシステムをキャッシュにマウントするときに demandconst オプションを指定すると、-s オプションを指定して cfsadmin コマンドを使用し、整合性チェックを要求します。デフォルトでは、ファイルがアクセスされるたびに、各ファイルの整合性がチェックされます。ファイルがアクセスされなければ、チェックは実行されません。demandconst オプションを使用すると、整合性チェックによってネットワークがあふれる事態を回避できます。この整合性チェックの詳細は、cfsadmin(1M) のマニュアルページを参照してください。
この章の内容は次のとおりです。
この節では、スワップ空間の概念と、Solaris 1.x (SunOS 4.x) と Solaris 2.x (SunOS 5.x) のスワップ要件の違いについて説明します。すでに Solaris 2.x のスワップ機構に慣れている方は、「スワップ空間の計画」の節に進んでください。
管理者は、次の事柄を決定する上で Solaris 2.x の機能を理解しておく必要があります。
スワップ空間の要件
tmpfs ファイルシステムとの関係
スワップ空間に関連するエラーメッセージからの復元
Solaris 2.x システムソフトウェアは、ファイルシステムではなく一時記憶域に一部のディスクスライスを使用します。これらのスライスを「 スワップ」スライスと呼びます。スワップスライスは、システムの物理メモリー不足のために現在のプロセスを処理することができないときに、仮想メモリー記憶域として使用されます。
Solaris 2.x の仮想メモリーシステムは、ディスク上のファイルの物理コピーをメモリー内の仮想アドレスに対応付けます。これらのマッピングに関するデータが入った物理メモリーページは、ファイルシステム内の通常ファイルまたはスワップ空間から読み直されます。ユーザーにはメモリーをバックアップしているファイル名はわからないため、スワップ空間から読み直されたメモリーは「anonymous メモリー」として参照されます。
Solaris 1.x の anonymous メモリーページは、システムのスワップ空間プールからランダムに割り当てられた名前を使用して対応付けられます。これらのメモリーページの用途は次のとおりです。
書き込み時コピー処理中に作成されるデータの専用コピー
プロセスとスタックのセグメント
TMPFS ファイルシステム記憶域の資源
Solaris 1.x anonymous メモリーを実装する場合、次の制限があります。
アプリケーションで使用されない場合にも、anonymous メモリーのマッピング用に必ず物理記憶域 (ディスク上にとられたバックアップ用のスワップ空間) を確保しなければならない。
たとえば、大量のデータセグメントを持つアプリケーションは、各ページが物理記憶域にデータが書き出されない場合でも、大量のスワップ空間を使用して構成しなければならない。
バックアップとなる記憶域はランダムに選択され、変更できないので、anonymous メモリーページを物理記憶域に関連付けるための方法には制限があり、柔軟性に欠ける。
Solaris 2.x ソフトウェア環境には、「仮想スワップ空間」という概念が導入されています。これは、anonymous メモリーページとこれらのページを実際にバックアップする物理記憶域 (またはディスク上にとられたバックアップ用のスワップ空間) の間に位置する層です。システムの仮想スワップ空間は、すべての物理 (ディスク上にとられたバックアップ用のスワップ空間) スワップ空間と現在使用可能な物理メモリーの一部の合計に等しくなります。
仮想スワップ空間の長所は次のとおりです。
仮想スワップ空間が物理 (ディスク) 記憶域に対応していなくてもかまわないので、大きな物理スワップ空間を確保する必要がなくなる。
SWAPFS という疑似ファイルシステムが、anonymous メモリーページのアドレスを提供する。SWAPFS はメモリーページの割り当てを制御するので、ページに対する処理を柔軟に決定できる。たとえば、ディスク上にとられたバックアップ用のスワップ記憶域のページ要件を変更できる。
Solaris 2.x 環境では、TMPFS ファイルシステムは /etc/vfstab ファイル内のエントリによって自動的に稼働されます。TMPFS ファイルシステムは、ファイルとそれに関連付けられた情報をディスクではなくメモリー (/tmp ディレクトリ内) に格納するので、これらのファイルへのアクセスが高速になります。このため、コンパイラや DBMS 製品のように /tmp の使用量の大きいアプリケーションの場合は、性能が大幅に改善されます。
TMPFS ファイルシステムは、システムのスワップ資源から /tmp ディレクトリ内の領域を割り当てます。つまり、/tmp 内の領域を使い果たすと、スワップ空間も使い果たしたことになります。したがって、アプリケーションの /tmp の使用量が大きい場合に、スワップ空間の使用状況を監視しなければ、システムがスワップ空間を使い果たす可能性があります。
TMPFS を使用したいがスワップ資源が限られている場合は、次の方法を使用してください。
サイズオプション (-o size) を指定して TMPFS ファイルシステムをマウントし、スワップ資源 TMPFS をどの程度使用できるかを制御する。
スワップ空間が足りなくなった場合は、コンパイラを TMPDIR
環境変数を使用して、より大きな一時ディレクトリを指すことができる。
コンパイラの TMPDIR
変数を使用すると、コンパイラが /tmp を使用するかどうかだけが制御される。他のプログラムによる /tmp の使用には影響しない。
この節では、スワップ空間を使い果たしたときに表示されるエラーメッセージについて説明します。
次のメッセージは、アプリケーションがさらに anonymous メモリーを取得しようとしたが、バックアップ用のスワップ空間が残っていなかったことを示します。
application is out of memory malloc error O WARNING: Sorry, no swap space to grow stack for pid
directory: File system full, swap space limit exceeded
このメッセージは、ファイルに書き込むときにページを割り当てることができない場合に表示されます。このエラーは、TMPFS が許容限度を超えて書き込もうとしたときや、現在実行されているプログラムが大量のメモリーを使用している場合に発生することがあります。
directory: File system full, memory allocation failed
このメッセージは、TMPFS が新しいファイルやディレクトリの作成中に物理メモリーを使い果たしたことを意味します。
TMPFS 関連のエラーメッセージから回復する方法については、TMPFS(7FS) のマニュアルページを参照してください。
最初に、スワップ空間は Solaris インストールプロセスの一部として割り当てられます。インストールプログラムによるディスクスライスの自動レイアウトを使用しており、スワップファイルのサイズを手作業で変更しなければ、Solaris インストールプログラムは表 30-1 のようなデフォルトのスワップスライスを割り当てます。
表 30-1 デフォルトのスワップ空間割り当て
システムに「n」M バイトの物理メモリーがある場合 |
割り当てられるディレクトリのスワップ空間 |
---|---|
16-64 |
32M バイト |
64-128 |
64M バイト |
128-512 |
128M バイト |
512 を超える場合 |
256M バイト |
システムをインストールすると、スワップスライスとファイルは /etc/vfstab ファイル内に列挙され、システムのブート時に /sbin/swapadd スクリプトによって起動されます。
/etc/vfstab ファイル内のスワップデバイスエントリには、次の情報が入っています。
スワップスライスまたはファイルの完全パス名
スワップのファイルシステムタイプ
スワップファイルが入っているファイルシステムは、スワップファイルが稼働される前にマウントしなければならないので、ファイルシステムをマウントするエントリがスワップファイルを起動するエントリより前に入っていることを、/etc/vfstab ファイル内で確認してください。
スワップ空間のサイズを決定する上で最も重要な要素は、システムのソフトウェアアプリケーションの要件です。たとえば、コンピュータ支援設計シミュレータ、データベース管理製品、トランザクションモニター、地質分析システムなどの大型アプリケーションは、超大型メモリーシステム内で 200 〜 1000M バイトのスワップ空間を消費することがあります。
一般にデータファイルのサイズが 10 〜 20M バイトを超えるアプリケーションの場合は、スワップ空間の要件をアプリケーションベンダーに問い合わせてください。
アプリケーションベンダーからスワップ空間の要件を入手できない場合は、次のガイドラインに従ってスワップ空間を割り当ててください。
アプリケーションをサポートするために、次のように割り当てる。
xterm のような通常のアプリケーションごとに 1M バイト
カレンダやメールアプリケーションのような軽量アプリケーションごとに 2 〜 3M バイト
デスクトップパブリッシング (DTP) ソフトウェアのような大型アプリケーションには 20 〜 50M バイト
クラッシュダンプを節約するために、物理メモリー全体を割り当てて最悪の場合のクラッシュダンプを保存する。
システムまたはアプリケーションの要件がわからない場合は、システムの物理メモリーのうち 50% ないし 100% を割り当てる。たとえば、32M バイトの物理メモリーを持つシステムの場合は、16 〜 32M バイトのスワップ空間を割り当てる。これにより、仮想スワップ空間の合計は 48 〜 64M バイトになる。
大型アプリケーション (コンパイラなど) が /tmp ディレクトリを使用するかどうかを決定する。次に、/tmpfs に使用される追加のスワップ空間を割り当てる。TMPFS については、「スワップ空間と TMPFS ファイルシステム」を参照。
/usr/sbin/swap コマンドを使用してスワップ空間を管理します。2 つのオプション -l と -s を使用して、スワップ資源に関する情報を表示します。
swap -l コマンドを使用してシステムのスワップ空間を調べます。有効なスワップデバイスやファイルは、swapfile カラムの下に表示されます。
# swap -l swapfile dev swaplo blocks free /dev/dsk/c0t2d0s1 32,17 8 205624 192704
swap -s コマンドを使用してスワップ資源を監視します。
# swap -s total: 10492k bytes allocated + 7840k reserved = 18332k used, ¥ 21568k available
used と available の数値の統計は、システム上の合計スワップ空間に等しくなります。これには、物理メモリーの一部とスワップデバイス (またはファイル) が含まれます。
使用可能なスワップ空間と使用済みスワップ空間の容量 (swap -s の出力内) を使用して、時間経過に伴うスワップ空間の使用状況を監視できます。システム性能が適正であれば、swap -s を使用するとどの程度のスワップ空間が使用可能であるかがわかります。システム性能が低下したときは、使用可能なスワップ空間の容量をチェックして減少していないかどうかを調べてください。これにより、システムに対するどのような変更が原因でスワップ空間の使用量が増大したかを識別できます。
このコマンドを使用するときには、カーネルとユーザープロセスが物理メモリーをロックして解除するたびに、スワップに使用できる物理メモリーの容量が動的に変化するので注意してください。
swap -l コマンドではスワップ空間が 512 バイトのブロック数として表示され、swap -s コマンドでは 1024 バイトのブロック数として表示されます。swap -l の場合はスワップ空間の計算に物理メモリーが含まれないので、swap -l からのブロック数を合計して K バイト数に換算すると、used + (swap -s の出力内での) available よりも少なくなります。
表 30-2 は、swap -s コマンドの出力を示しています。
表 30-2 swap -s コマンドの出力
キーワード |
説明 |
---|---|
bytes allocated |
現在バックアップ用の記憶域 (ディスク上にとられたバックアップ用のスワップ空間) として使用可能なスワップ空間の合計容量を表す 1024 バイトのブロック数 |
reserved |
現在は割り当てられていないが、後から使用できるようにメモリーによって回収されるスワップ空間の合計容量を表す 1024 バイトのブロック数 |
used |
割り当て済みまたは予約済みのスワップ空間の合計容量を表す 1024 バイトのブロック数 |
available |
後から予約や割り当てに使用可能なスワップ空間の合計容量を表す 1024 バイトのブロック数 |
システム構成を変更して新しいソフトウェアパッケージをインストールした後に、スワップ空間を追加しなければならないことがあります。その場合に望ましいのは、mkfile コマンドと swap コマンドを使用して、既存の UFS または NFS ファイルシステムの一部を補助スワップ空間として指定する方法です。次に説明するように、これらのコマンドを使用すると、ディスクをパーティションに分割し直さなくても、スワップ空間を追加できます。
スワップ空間を追加するもう 1 つの方法は、ディスクをパーティションに分割し直すことです。その方法については、第 21 章「ディスク管理の概要」で使用中のシステムに該当する箇所を参照してください。
次の手順でスワップファイルを作成します。
mkfile コマンドを使用してスワップファイルを作成する。
swap コマンドを使用してスワップファイルを有効にする。
システムのブート時に自動的に有効になるように、スワップファイルのエントリを /etc/vfstab ファイルに追加する。
mkfile コマンドは、NFS のマウント済みスワップ空間またはローカルスワップ空間に使用できるファイルを作成します。スティッキビットが設定され、ファイルは 0 が埋め込まれます。スワップファイルのサイズは、バイト数 (デフォルト) として指定するか、接尾辞 k、b、m を使用して、それぞれ K バイト数、ブロック数、M バイト数として指定できます。
表 30-3 は、mkfile コマンドのオプションを示しています。
表 30-3 mkfile コマンドのオプション
オプション |
説明 |
---|---|
-n |
空のファイルを作成する。サイズは表示されるが、データが書き込まれるまでディスクブロックは割り当てられない。 |
-v |
詳細モード。作成されたファイル名とサイズが表示される。 |
-n オプションは、NFS スワップファイルの作成時のみ使用してください。
スーパーユーザーになります。
root 権限がなくてもスワップファイルを作成できますが、スワップファイルが不注意から上書きされないように、root を所有者にしておくとよいでしょう。
# mkfile nnn[k|b|m] filename
サイズ「nnn」(K バイト数、バイト数、M バイト数) のスワップファイルと指定したファイル名が作成されます。
スワップファイルを有効にします。
# /usr/sbin/swap -a /path/filename
絶対パス名を使用してスワップファイルを指定しなければなりません。スワップファイルが追加され、ファイルシステムがマウント解除されるか、またはシステムがリブートされるまで使用可能になります。
ファイルの完全パス名を指定し、ファイルシステムのタイプとして swap を指定して、スワップファイルのエントリを /etc/vfstab ファイルに追加します。
/path/filename - - swap - no -
スワップファイルが追加されたことを確認するには、次のように入力します。
/usr/sbin/swap -l
次の例では、/files/swapfiles という 24M バイトのスワップファイルを作成します。
# mkfile 24m /files/swapfile # swap -a /files/swapfile # vi /etc/vfstab (エントリがスワップファイル用に追加される) /files/swapfile - - swap - no - # swap -l swapfile dev swaplo blocks free /dev/dsk/c0t2d0s1 32,17 8 205624 192704 /files/swapfile - 8 40952 40952
スーパーユーザーになります。
次のように swap -d コマンドを使用してスワップ空間を削除します。
# /usr/sbin/swap -d /path/filename
スワップファイル名がリストから削除されるので、スワッピングに使用できなくなります。ファイルそのものは削除されません。
/etc/vfstab ファイルを編集して、スワップファイルのエントリを削除します。
他の目的に使用できるようにディスク領域を復元します。
# rm swap-filename
スワップ空間がファイルの場合は削除します。また、スワップ空間が別のスライスに入っていて、不要なことがわかっている場合は、新しいファイルシステムを作成してマウントします。
詳細は、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。
次の例は、/files/swapfile スワップファイルを削除します。
# swap -d /files/swapfile # swap -l swapfile dev swaplo blocks free /dev/dsk/c0t2d0s1 32,17 8 205624 192720
この章の内容は以下のとおりです。
fsck のエラーメッセージについては、第 73 章「ファイルシステムで発生する問題の解決」を参照してください。
UFS ファイルシステムは、一連の内部テーブルに依存して i ノード数、使用済みブロック数、使用可能ブロック数を追跡します。これらの内部テーブルがディスク上のデータと正しく同期していないと、整合性が失われ、ファイルシステムの修復が必要になります。
次のような原因でオペレーティングシステムが異常終了すると、ファイルシステムが損傷したり、整合性が失われたりすることがあります。
電源障害
不注意によるシステム電源の切断
正しいシャットダウン手順以外の方法によるシステム電源の切断
カーネル内のソフトウェアエラー
ファイルシステムの破損は重大ですが、あまり頻繁に起きるものではありません。システムをブートすると、ファイルシステムの整合性チェックが (fsck プログラムを使用して) 自動的に実行されます。ほとんどの場合は、このファイルシステムのチェックによって問題が修復されます。
この章では、fsck プログラムでチェックされ修復される問題と fsck のオプションについて説明します。また、次の作業についても説明します。
ブート時に実行される自動チェック機能を変更する方法
ファイルシステムのチェックが必要かどうかを調べる方法
UFS ファイルシステムを対話形式でチェックして修復する方法
不良スーパーブロックを復元する方法
fsck で修復できない UFS ファイルシステムを修復する方法
fsck エラーメッセージについては、第 73 章「ファイルシステムで発生する問題の解決」を参照してください。
fsck プログラムは、割り当て済みだが参照されないファイルとディレクトリを lost+found ディレクトリに入れます。各ファイルの i ノード番号が名前として割り当てられます。lost+found ディレクトリが存在しない場合は、fsck によって作成されます。lost+found ディレクトリ内の領域が足りない場合は、そのサイズが fsck によって拡張されます。
fsck コマンドは、スーパーブロックに格納された状態フラグを使用して、ファイルシステムの状態を記録します。また、このフラグを使用して、ファイルシステムの整合性をチェックすべきかどうかが判断されます。このフラグはブート時には /sbin/rcS スクリプトによって使用され、コマンド行からは fsck に -m オプションを指定した場合に使用されます。fsck の -m オプションの結果を無視するのなら、状態フラグの設定に関係なく、すべてのファイルシステムをチェックできます。
表 31-1 に状態フラグを示します。
表 31-1 状態フラグの値
状態フラグの値 |
説明 |
---|---|
FSCLEAN |
ファイルシステムが正しくマウント解除されていない場合は、状態フラグが FSCLEAN に設定される。FSCLEAN 状態フラグが設定されているファイルシステムは、システムのブート時にチェックされない。
|
FSSTABLE |
ファイルシステムはマウントされている (またはされた) が、前回のチェックポイント (sync または fsflush) 以後に変更がなかった。チェックポイントは、通常は 30 秒ごとに発生する。たとえば、カーネルはファイルシステムがアイドル状態かどうかを定期的にチェックし、アイドル状態であれば、スーパーブロック内の情報をディスクにフラッシュさせて FSSTABLE マークを設定する。システムがクラッシュした場合、ファイルシステムの構造は安定しているが、少量のデータが失われる。FSSTABLE マークが付いたファイルシステムは、マウント前のチェックをスキップできる。ファイルシステムの状態が FSCLEAN でも FSSTABLE でもなければ、mount(2) システムコールではファイルシステムは読み取り/書き込み用にマウントされない。 |
FSACTIVE |
ファイルシステムがマウントされ、後から変更されると、状態フラグが FSACTIVE に設定される。ファイルシステムには整合性のなくなったものが含まれていることがある。変更後のメタデータがディスクに書き込まれる前に、ファイルシステムに FSACTIVE マークが付けられる。ファイルシステムが正常にマウント解除されると、状態フラグは FSCLEAN に設定される。FSACTIVE フラグが設定されたファイルシステムは、整合性がないので、fsck でチェックしなければならない。 |
FSBAD |
ルート (/) ファイルシステムが、状態が FSCLEAN でも FSSTABLE でもないときにマウントされると、状態フラグが FSBAD に設定される。カーネルは、このファイルシステムの応対を FSCLEAN または FSSTABLE に変更しない。ルート (/) のファイルシステムにブートプロセスの一部として FSBAD フラグが設定されると、読み取り専用としてマウントされる。row のルートデバイス上で fsck を実行できる。その後で、ルート (/) ファイルシステムを読み取り/書き込みとしてマウントし直す。 |
表 31-2 は、状態フラグが変更される場合を示しています。
表 31-2 状態フラグが変更される場合
fsck の前 |
fsck の後 |
|
|
---|---|---|---|
|
|
新しい状態 |
|
初期状態 |
エラーなし |
すべてのエラーを修正済み |
エラーが未修正 |
不明 |
安定 |
安定 |
不明 |
有効 |
安定 |
安定 |
有効 |
安定 |
安定 |
安定 |
有効 |
クリーン |
クリーン |
安定 |
有効 |
不良 |
安定 |
安定 |
不良 |
この節では、ファイルシステムの通常の処理中に発生する問題、原因、fsck で検出される問題、およびそれらの修正方法について説明します。
労働日には毎日多数のファイルが作成、変更、または削除されます。ファイルが変更されるたびに、オペレーティングシステムは一連のファイルシステムの更新処理を実行します。これらの更新処理がディスクに確実に書き込まれると、整合性のあるファイルシステムが生成されます。
ユーザープログラムが書き込みなどの、ファイルシステムを変更する処理を実行すると、書き込まれるデータはまずカーネル内部のインコアバッファにコピーされます。一般に、ディスクの更新は非同期に処理されるので、書き込みシステムコールが値を返した後にしばらくデータの書き込みが発生しなくても、ユーザープロセスは進行できます。したがって、ファイルシステムは、ディスク上にある場合と同様に、インコア情報で表されるファイルシステムの状態から常に遅延することになります。
別の目的にバッファが必要になったり、カーネルが fsflush デーモンを自動的に (30 秒間隔で) 実行すると、インコア情報を反映するようにディスク情報が更新されます。システムがインコア情報を書き込まずに停止すると、ディスク上のファイルシステムの整合性がなくなります。
ファイルシステムの整合性は、さまざまな原因で失われることがあります。最も一般的な原因は、オペレータのエラーとハードウェア障害です。
システムを正しくシャットダウンしなかったり、マウントされているファイルシステムが正しくオフラインにされないと、「クリーンでない停止」が原因で問題が発生することがあります。クリーンでない停止を防ぐには、CPU を停止したり、ディスクをドライブから物理的に取り出したり、ディスクをオフライン状態にする前に、ファイルシステムの現在の状態をディスクに書き込んだりしなければなりません (つまり、同期させなければなりません)。
また、ハードウェアの欠陥が原因で整合性が失われることもあります。ディスクドライブ上ではいつでもブロックが損傷する可能性があり、ディスクコントローラが正常に機能しなくなる可能性があります。
この節では、UFS ファイルシステムの構成要素、つまりスーパーブロック、シリンダグループブロック、i ノード、間接ブロック、データブロックに fsck が適用する整合性チェックの種類について説明します。
スーパーブロックには集計情報が格納されており、UFS ファイルシステム内で最も破損しがちな構成要素です。ファイルシステムの i ノードやデータブロックが変更されるたびに、スーパーブロックも変更されます。CPU が停止した場合、直前のコマンドが sync コマンドでなければ、スーパーブロックはほぼ確実に破損します。
スーパーブロックの非整合性は、次の面からチェックされます。
ファイルシステムのサイズ
i ノード数
空きブロック数
空き i ノード数
ファイルシステムのサイズは、スーパーブロックに使用されるブロック数と i ノードリストに使用されるブロック数よりも大きくなければなりません。i ノード数は、ファイルシステムの最大許容数よりも小さくなければなりません。ファイルシステムのサイズとレイアウト情報は、fsck にとって最も重要な情報部分です。これらのサイズを実際にチェックする方法はありませんが、ファイルシステムの作成時に静的に判断されるので、fsck はサイズが妥当な範囲内にあるかどうかをチェックできます。他のすべてのファイルシステムをチェックするには、これらのサイズが正確でなければなりません。fsck が一次スーパーブロックの静的パラメタ内で破損を検出すると、オペレータに代替スーパーブロックの位置を指定するように促します。
空きブロック数は、シリンダグループのブロックマップに格納されます。fsck は、空きマーク付きのすべてのブロックがファイルに取得されていないかどうかをチェックします。すべてのブロックをチェックし終わると、fsck は空きブロック数と i ノードに取得されるブロック数の合計がファイルシステム内の合計ブロック数に等しくなるかどうかをチェックします。ブロック割り当てマップ内に間違いがあると、fsck はブロックが割り当てられている状態のままで構築し直します。
スーパーブロック内の集計情報には、ファイルシステム内の空きブロックの合計数のカウントが入っています。fsck プログラムは、このブロック数をファイルシステム内で見つかった空きブロック数と比較します。数が一致しなければ、fsck はスーパーブロック内のブロック数を実際の空きブロック数で置き換えます。
スーパーブロック内の集計情報には、ファイルシステム内の空き i ノード数が入っています。fsck プログラムは、この i ノード数をファイルシステム内で見つかった空き i ノード数と比較します。数が一致しなければ、fsck はスーパーブロック内の i ノード数を実際の空き i ノード数で置き換えます。
i ノードリストは、i ノード 2 から順番にチェックされます (i ノード 0 と i ノード 1 は予約されています)。各 i ノードの非整合性は、次の面からチェックされます。
形式とタイプ
リンク数
重複ブロック
不良ブロック番号
i ノードのサイズ
各 i ノードには、そのタイプと状態を記述するモードのワードが入っています。i ノードには、次の 6 つのタイプがあります。
割り当て済み
未割り当て
一部割り当て済み
ファイルシステムが作成されると、一定数の i ノードが確保されますが、必要になるまでは割り当てられません。割り当て済みの i ノードとは、ファイルを指す i ノードです。未割り当ての i ノードは、ファイルを指さないので空のはずです。一部割り当て済みの状態は、i ノードが正しくフォーマットされていないことを意味します。たとえば、ハードウェア障害が原因で i ノードに不良データが書き込まれると、i ノードは一部割り当て済みの状態になることがあります。fsck が実行できる唯一の修正動作は、その i ノードを消去することです。
各 i ノードには、そこにリンクされているディレクトリエントリ数が入っています。fsck プログラムは、ルートディレクトリから順番にディレクトリ構造全体を検査し、i ノードごとに実際のリンク数を計算して、各 i ノードのリンク数を検査します。
i ノードに格納されているリンク数が fsck によって判断された実際のリンク数と一致しない場合は、次の 3 つの状況が考えられます。
格納されたリンク数が 0 でなく、実際のリンク数が 0 の場合
この状況は、i ノードのディレクトリエントリが存在しない場合に発生することがあります。この場合、fsck は切り離されたファイルを lost+found ディレクトリに入れます。
格納されたリンク数が 0 でなく、実際のリンク数も 0 でないが、2 つのリンク数が等しくない場合
この状況は、ディレクトリエントリが追加または削除されたが、i ノードが更新されていない場合に発生することがあります。この場合、fsck は格納されたリンク数を実際のリンク数で置き換えます。
格納されたリンク数が 0 で実際のリンク数が 0 でない場合
この場合、fsck は i ノードのリンク数を実際のリンク数に変更します。
各 i ノードには、それが取得するすべてのブロックのリスト、またはリストを指すポインタ (間接ブロック) が入っています。間接ブロックは i ノードによって所有されるので、間接ブロックの整合性が失われると、それを所有する i ノードが直接影響を受けます。
fsck プログラムは、i ノードによって取得される各ブロック番号を、割り当て済みブロックのリストと比較します。別の i ノードがすでにブロック番号を取得していると、そのブロック番号は重複ブロックのリストに入れられます。それ以外の場合は、割り当て済みブロックのリストが更新され、ブロック番号が組み込まれます。
重複ブロックがあると、fsck は再び i ノードリストを調べて、各重複ブロックを取得するもう 1 つの i ノードを検索します (i ノード内に大量の重複ブロックが入っている場合は、ファイルシステムに間接ブロックが正しく書き込まれていない可能性があります)。どの i ノードにエラーがあるかを正確に判断することはできません。fsck プログラムは、保管する i ノードと消去する i ノードを選択するように促すプロンプトを表示します。
fsck プログラムは、i ノードが取得する各ブロック番号をチェックして、その値が最初のデータブロックよりも大きく、ファイルシステム内の最後のデータブロックより小さいかどうかを調べます。ブロック番号がこの範囲に含まれない場合は、不良ブロック番号と見なされます。
間接ブロックがファイルシステムに書き込まれていないことが原因で、i ノード内に不良ブロック番号が発生することがあります。fsck はその i ノードの消去を促すプロンプトを表示します。
各 i ノードには、参照するデータブロック数が入っています。実際のデータブロック数は、割り当て済みのデータブロック数と間接ブロック数の合計です。fsck はデータブロック数を計算し、そのブロック数を i ノードが取得するブロック数と比較します。i ノードに不正なブロック数が入っていると、fsck はその修正を促すプロンプトを表示します。
各 i ノードには、64 ビットのサイズフィールドが入っています。このフィールドは、i ノードに関連付けられたファイル内の文字数 (データバイト数) を示します。i ノードのサイズフィールドに整合性があるかどうかは、サイズフィールド内の文字数を使用して、i ノードに関連付けるべきブロック数を計算し、その結果を i ノードが取得する実際のブロック数と比較して概算でチェックされます。
間接ブロックは i ノードによって所有されます。したがって、間接ブロック内の整合性が失われると、それを所有する i ノードが影響を受けます。非整合性は、次の面からチェックできます。
すでに別の i ノードに取得されているブロック数
ファイルシステムの範囲に含まれないブロック番号
また、間接ブロックの場合は整合性チェックも実行されます。
i ノードは、3 種類のデータブロックを直接または間接に参照できます。参照されるブロックは、すべて同じ種類でなければなりません。次の 3 種類のデータブロックがあります。
プレーンデータブロック
シンボリックリンクデータブロック
ディレクトリデータブロック
プレーンデータブロックには、ファイルに格納される情報が入っています。シンボリックリンクデータブロックには、シンボリックリンクに格納されるパス名が入っています。ディレクトリデータブロックには、ディレクトリエントリが入っています。fsck はディレクトリデータブロックの妥当性しかチェックできません。
ディレクトリは、i ノードの mode フィールド内のエントリによって通常ファイルと区別されます。ディレクトリに関連付けらたデータブロックには、ディレクトリエントリが入っています。ディレクトリデータブロックの非整合性は、次の面からチェックされます。
未割り当て i ノードを指すディレクトリ i ノード番号
ファイルシステム内の i ノード数より大きいディレクトリ i ノード番号
「.」と「..」ディレクトリには許されないディレクトリ i ノード番号
ファイルシステムから切り離されたディレクトリ
ディレクトリデータブロック内の i ノード番号が未割り当て i ノードを指す場合、fsck はそのディレクトリエントリを削除します。この状況は、ディレクトリエントリが入っているデータブロックが変更されて書き出されたが、i ノードに書き込まれていない場合に発生します。また、警告なしに CPU が停止された場合にも発生します。
ディレクトリエントリの i ノード番号が i ノードリストの最後を超える位置を指す場合、fsck はそのディレクトリエントリを削除します。この状況は、不良データがディレクトリのデータブロックに書き込まれると発生します。
「.」のディレクトリ i ノード番号は、ディレクトリデータブロックの最初のエントリでなければなりません。また、それ自体を参照しなければなりません。つまり、その値はディレクトリデータブロックの i ノード番号に等しくなければなりません。
「..」のディレクトリ i ノード番号は、ディレクトリデータブロックの第 2 のエントリでなければなりません。その値は、親ディレクトリの i ノード番号 (または、ディレクトリがルートディレクトリの場合は、それ自体の i ノード番号) に等しくなければなりません。
「.」と「..」のディレクトリ i ノード番号が不正であれば、fsck は正しい値に置き換えます。ディレクトリへのハードリンクが複数個あると、最初に見つかった方が「..」が指す実際の親であると見なされます。この場合、fsck は他方の名前を削除するように促すプロンプトを表示します。
fsck プログラムは、ファイルシステム全体の接続状態をチェックします。ファイルシステムにリンクされていないディレクトリが見つかると、fsck はそのディレクトリをファイルシステムの lost+found ディレクトリにリンクします (i ノードがファイルシステムに書き込まれていても、それに対応するディレクトリデータブロックがないと、この条件が発生することがあります)。
通常ファイルに関連付けられたデータブロックには、ファイルの内容が入っています。fsck は、通常ファイルのデータブロックの内容が有効かどうかはチェックしません。
ブート中には、ブートスクリプト /sbin/rcS を使用して、ハードディスクからマウントされるファイルシステムごとに予備チェックが実行されます。このスクリプトは、ルート (/) と /usr のファイルシステムをチェックします。他方の rc シェルスクリプトは、fsck コマンドを使用して他のファイルシステムを順番にチェックします。ファイルシステムが並行にチェックされることはありません。「fsck pass」の数値が 1 より大きい場合も、ブート中にはファイルシステムが順番にチェックされます。
ファイルシステムを直接指定せずに、ファイルシステムをチェックしてマウントするコマンドを実行すると、各コマンドは各種フィールドで指定された情報を使用して、ファイルシステムテーブル (/etc/vfstab) を調べます。fsck pass フィールドは、ファイルシステムチェックのための情報を指定します。「mount at boot」フィールドは、ブート時にファイルシステムをマウントするための情報を指定します。
新しいファイルシステムを作成する場合は、ブート時にチェックしてマウントするかどうかを示すエントリを /etc/vfstab に追加します。/etc/vfstab ファイルにエントリを追加する方法の詳細は、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。
/etc/vfstab ファイル内の情報は、各システムのスライスとファイルシステムに固有です。次の例は、/etc/vfstab ファイルを示しています。
$ more /etc/vfstab #device device mount FS fsck mount mount #to mount to fsck point type pass at boot options #/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr ufs 1 yes - /proc - /proc proc - no - fd - /dev/fd fd - no - swap - /tmp tmpfs - yes - /dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no - /dev/dsk/c0t0d0s1 - - swap - no - /dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /usr ufs 2 no - /dev/dsk/c0t0d0s7 /dev/rdsk/c0t0d0s7 /opt ufs 3 yes - pluto:/export/svr4/man - /usr/man nfs no yes - $
表 31-3 に、「fsck pass」フィールドの機能を示します。
表 31-3 「fsck pass」フィールド
フィールドの設定 |
機能 |
備考 |
---|---|---|
- (ハイフン) |
ファイルシステムの状態に関係なく、汎用 fsck コマンドはファイルシステムをチェックしない。 |
ハイフンを使用して、読み取り専用ファイルシステム、リモートファイルシステム、/proc などの疑似ファイルシステムを表す。これらはチェックされない。 |
0 以上 |
ファイルシステム専用の fsck コマンドが呼び出される。 |
値が UFS ファイルシステムよりも大きければ、ファイルシステムはチェックされない。 |
1 以上または fsck -o p を使用 |
ファイルシステム専用の fsck は自動的に UFS ファイルシステムを並行チェックする。 |
この値には 1 より大きい任意の数値を使用できる。 |
preen モードでは、fsck は 1 ディスクごとに 1 つしか有効なファイルシステムをチェックできず、あるチェックが完了した後でなければ次のチェックを開始しません。fsck は、ファイルシステムが存在するデバイスの整数部番号と小数部番号を自動的に使用して、同時に異なるディスク上でファイルシステムをチェックする方法を判断します。
fsck pass 番号が 1 であれば、ファイルシステムは /etc/vfstab ファイルに表示される順番にチェックします。通常、ルート (/) ファイルシステムの fsck pass は 1 に設定されます。
fsck は、fsck pass 番号を使用せずにファイルシステムのチェック順を判断します。
次の場合には、ファイルシステムを対話方式でチェックする必要があります。
マウントできない場合
使用中に問題が発生する場合
使用中のシステムの整合性が失われると、コンソールウィンドウにエラーメッセージが表示されたり、システムがクラッシュしたりすることがあります。
fsck を使用する前に、「fsck コマンドの構文とオプション」と 第 73 章「ファイルシステムで発生する問題の解決」を参照してください。
ファイルシステムをチェックします。
# fsck -m /dev/rdsk/device-name
このコマンドで指定したファイルシステムのスーパーブロック内の状態フラグがチェックされ、ファイルシステムがクリーンかチェックが必要かが判断されます。
デバイス引数を省略すると、/etc/vfstab 内で「fsck pass」の値が 0 より大きいすべての UFS ファイルシステムがチェックされます。
次の例では、第 1 のファイルシステムはチェックが必要で、第 2 のファイルシステムはチェックが不要です。
# fsck -m /dev/rdsk/c0t0d0s6 ** /dev/rdsk/c0t0d0s6 ufs fsck: sanity check: /dev/rdsk/c0t0d0s6 needs checking # fsck -m /dev/rdsk/c0t0d0s7 ** /dev/rdsk/c0t0d0s7 ufs fsck: sanity check: /dev/rdsk/c0t0d0s7 okay
スーパーユーザーになります。
ルート (/) と /usr 以外のローカルファイルシステムをマウント解除します。
# umountall -l
ファイルシステムをチェックします。
# fsck
/etc/vfstab ファイル内で、「fsck pass」フィールド内のエントリが 0 より大きいすべてのファイルシステムがチェックされます。また、fsck の引数として、マウントポイントディレクトリや /dev/rdsk/device-name も指定できます。非整合性メッセージが表示されます。エラーメッセージのプロンプトに応答して 1 つまたは複数の UFS ファイルシステムを対話方式でチェックする方法については、第 73 章「ファイルシステムで発生する問題の解決」を参照してください。
エラーを修正し終わったら、fsck と入力して Return キーを押します。
fsck は、一度の実行ですべてのエラーを修正できないことがあります。「FILE SYSTEM STATE NOT SET TO OKAY」というメッセージが表示される場合は、このコマンドをもう一度実行します。コマンドが機能しない場合は、「fsck で修復できない UFS ファイルシステムを修正する方法」を参照してください。
ファイル名を変更して lost+found ディレクトリに入れます。
fsck によって lost+found ディレクトリに入れられた各ファイル名は、その i ノード番号を使用して変更されます。可能であれば、ファイル名を変更し、ファイルが含まれるディレクトリに移動してください。grep コマンドを使用すると各ファイルの内容を照合し、file コマンドを使用するとファイルタイプを識別できます。ディレクトリ全体を lost+found にダンプする場合は、所属先を指定して移動する方が簡単です。
次の例では、/dev/rdsk/c0t0d0s6 がチェックされ、不正なブロック数が訂正されます。
# fsck /dev/rdsk/c0t0d0s6 checkfilesys: /dev/rdsk/c0t0d0s6 ** Phase 1 - Check Block and Sizes INCORRECT BLOCK COUNT I=2529 (6 should be 2) CORRECT? y ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Cylinder Groups 929 files, 8928 used, 2851 free (75 frags, 347 blocks, 0.6% fragmentation) /dev/rdsk/c0t0d0s6 FILE SYSTEM STATE SET TO OKAY ***** FILE SYSTEM WAS MODIFIED *****
fsck の修復オプション (fsck -o p) は、UFS ファイルシステムをチェックし、単純な問題を自動的に修正します。通常、この種の問題は予期しないシステム停止によるものです。オペレータの介入が必要な問題が発生すると、このコマンドは即座に終了します。また、修復オプションを使用すると、ファイルシステムを並行チェックできます。
-o p オプションを指定して fsck を実行すると、クリーンされずに停止した後でファイルシステムを修復できます。このモードでは、fsck はクリーンフラグを調べずに完全チェックを実行します。これらの処理は、fsck を対話形式で実行した場合の処理のサブセットです。
ファイルシステムをマウント解除します。
# umount mount-point
修復オプションを指定して UFS ファイルシステムをチェックします。
# fsck -o p /dev/rdsk/device-name
fsck の引数として mount-point または /dev/rdsk/device-name を使用すると、各ファイルシステムを修復できます。
次の例では、/usr ファイルシステムが修復されます。
# fsck -o p /usr
ファイルシステムのスーパーブロックが損傷した場合は、復元しなければなりません。スーパーブロックが不良なときには、fsck からメッセージが表示されます。幸い、スーパーブロックの重複コピーがファイルシステム内に格納されています。fsck -o b を使用すると、問題のスーパーブロックをコピーに置き換えることができます。
スーパーユーザーになります。
損傷したファイルシステムの外側のディレクトリに変更します。
ファイルシステムをマウント解除します。
# umount mount-point
次の手順では、必ず newfs といっしょに -N オプションを使用してください。-N オプションを省略すると、新しい空のファイルシステムが作成されます。
newfs -N コマンドを使用して、スーパーブロックの値を表示します。
# newfs -N /dev/rdsk/device-name
このコマンドの出力には、newfs によってファイルシステムが作成されたときに、スーパーブロックのコピーに使用されたブロック番号が表示されます。
fsck コマンドを使用して、代替スーパーブロックを指定します。
# fsck -F ufs -o b=block-number /dev/rdsk/device-name
fsck は、指定された代替スーパーブロックを使用して、一次スーパーブロックを復元します。いつでも代替ブロックとして 32 を試すことができます。また、newfs -N で表示された代替ブロックを使用することもできます。
次の例では、/files7 ファイルシステム用にスーパーブロックのコピー 5264 が復元されます。
# cd / # umount /files7 # newfs -N /dev/rdsk/c0t3d0s7 /dev/rdsk/c0t3d0s7: 163944 sectors in 506 cylinders of 9 tracks, 36 sectors 83.9MB in 32 cyl groups (16 c/g, 2.65MB/g, 1216 i/g) super-block backups (for fsck -b #) at: 32, 5264, 10496, 15728, 20960, 26192, 31424, 36656, 41888, 47120, 52352, 57584, 62816, 68048, 73280, 78512, 82976, 88208, 93440, 98672, 103904, 109136, 114368, 119600, 124832, 130064, 135296, 140528, 145760, 150992, 156224, 161456, # fsck -F ufs -o b=5264 /dev/rdsk/c0t3d0s7 Alternate superblock location: 5264. ** /dev/rdsk/c0t3d0s7 ** Last Mounted on ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 36 files, 867 used, 75712 free (16 frags, 9462 blocks, 0.0% fragmentation) /dev/rdsk/c0t3d0s7 FILE SYSTEM STATE SET TO OKAY ***** FILE SYSTEM WAS MODIFIED ***** #
ルート (/) ファイルシステム内のスーパーブロックが損傷し、システムをブートできない場合は、/kernel/unix をインストールし直し、newfs を使用してルート (/) ファイルシステムを再構築してください。スーパーブロックは newfs コマンドによって作成されるので、復元する必要はありません。
あるパスで問題が訂正されても、前のパスで見つからなかった問題が解決されないため、fsck を何度か実行してファイルシステムを修正しなければならないことがあります。fsck はクリーンになるまで動作を続けるわけではないので、手作業で実行しなければなりません。
fsck で表示される情報に注目してください。問題を解決する上で参考になります。たとえば、メッセージは不良ディレクトリを指す場合があります。そのディレクトリを削除すると、fsck がクリーンな状態で動作していることがわかります。
それでも fsck でファイルシステムを修復できない場合は、fsdb、ff、clri、または ncheck コマンドを使用し、間違いを指定して修正します。これらのコマンドの使用方法については、fsdb(1M)、ff(1M)、clri(1M)、ncheck(1M) の各マニュアルページを参照してください。最終的には、ファイルシステムを作成し直し、その内容をバックアップ媒体から復元せざるを得ない場合があります。ファイルシステム全体を復元する方法については、第 35 章「ファイルとファイルシステムの復元の手順」を参照してください。
ファイルシステムを完全に修復できないが、読み取り専用としてマウントできる場合は、cp、tar、または cpio を使用して、データのすべてまたは一部をファイルシステムから取り出してください。
問題の原因がハードウェアディスクエラーであれば、ファイルシステムを作成し直して復元する前に、ディスクをフォーマットし直して再びスライスに分割しなければならない場合があります。一般に、ハードウェアエラーが発生すると、さまざまなコマンドで同じエラーが繰り返し表示されます。format(1M) コマンドはディスク上の不良ブロックを処理しようとします。ただし、ディスクの損傷が致命的でなければ、フォーマットし直した後も問題が解決されないことがあります。format コマンドの使用方法については、format(1M) のマニュアルページを参照してください。新しいディスクをインストールする方法については、第 23 章「SPARC: ディスク追加の手順」または第 24 章「x86 : ディスク追加の手順」を参照してください。
fsck コマンドは、ファイルシステム内の非整合状態をチェックして修復します。次の 4 つのオプションがあります。
ファイルシステムをマウントできるかどうかだけをチェックする (fsck -m)
修復する前に確認を促すプロンプトを表示する (fsck)
すべての修復に yes または no の応答を想定する (fsck -y)
対話方式でなくファイルシステムを修復し、予期される (小さな) 非整合箇所をすべて修復 (preen) するが、重大な問題にぶつかると終了する (fsck -o p)
fsck には、汎用コマンドとファイルシステム専用の 2 種類のコマンドがあります。汎用コマンドはほとんどのタイプのファイルシステムに使用でき、専用のコマンドはあるタイプのファイルシステムにのみ使用できます。必要に応じて、いつでも汎用コマンドを使用して、ファイルシステム専用のコマンドを呼び出すことができます。
通常、fsck を実行するにはスーパーユーザーにならなければなりません。スーパーユーザーにならなくても fsck コマンドを実行できますが、修復するにはファイルシステムをマウント解除しなければなりません。また、スライス用の raw デバイスファイルの読み取りアクセス権を持っていなければなりません (セキュリティ上の落とし穴になる可能性があります)。
汎用 fsck コマンドは、/etc/vfstab にアクセスして、どのファイルシステムをチェックするかを調べます。また、fsck pass 番号 - または 0 (UFS のみ) で除外されるものを除き、指定された各ファイルシステム上で、該当するファイルシステム専用の fsck コマンドを実行します。
汎用 fsck コマンドの構文は次のとおりです。
/usr/sbin/fsck [-F type] [-V] [-m] [special] /usr/sbin/fsck [-F type] [-V] -[y|Y]|[n|N] [-o specific-options][special]
表 31-4 は、汎用 fsck コマンドのオプションと引数を示しています。
表 31-4 fsck コマンドのオプションと引数
この章の内容は次のとおりです。
Solaris 2.5 リリースから、プラットフォームに依存するカーネルモジュールとコマンドは新しい場所に移動されました。/kernel ディレクトリには、プラットフォームに依存しないオブジェクト (プラットフォームに依存しないカーネル genunix も含む) だけが入っています。プラットフォームに依存するディレクトリ /platform と /usr/platform については、表 32-2 を参照してください。
表 32-1 に、ルート (/) と /usr のデフォルトファイルシステムに入っているすべてのディレクトリを示します。
表 32-1 ルート (/) と /usr のファイルシステムのデフォルトディレクトリ
ディレクトリ |
説明 |
---|---|
ルート (/) ファイルシステムのディレクトリ |
|
/ |
ファイルシステムの名前空間全体のルート |
/dev |
特殊ファイルの一次位置 |
/dev/dsk |
ブロックディスクデバイス |
/dev/pts |
pty スレーブデバイス |
/dev/rdsk |
raw ディスクデバイス |
/dev/rmt |
raw テープデバイス |
/dev/sad |
STREAMS Administrative Driver のエントリポイント |
/dev/term |
端末デバイス |
/etc |
ホスト固有のシステム管理構成ファイルとデータベース |
/etc/acct |
アカウンティングシステムの構成情報 |
/etc/cron.d |
cron の構成情報 |
/etc/default |
各種プログラムのデフォルト情報 |
/etc/dfs |
エクスポートされるファイルシステムの構成情報 |
/etc/fs |
/usr をマウントする前に必要な処理のためにファイルシステムタイプ別に編成されたバイナリ |
/etc/inet |
インターネットサービスの構成ファイル |
/etc/init.d |
実行レベルを切り替えるためのスクリプト |
/etc/lp |
プリンタサブシステムの構成情報 |
/etc/mail |
メールサブシステムの構成 |
/etc/net |
TI (トランスポート独立) ネットワークサービスの構成情報 |
/etc/opt |
オプションパッケージの構成情報 |
/etc/rc0.d |
実行レベル 0 を出入りするためのスクリプト |
/etc/rc1.d |
実行レベル 1 を出入りするためのスクリプト |
/etc/rc2.d |
実行レベル 2 を出入りするためのスクリプト |
/etc/rc3.d |
実行レベル 3 を出入りするためのスクリプト |
/etc/rcS.d |
システムを単一ユーザーモードで起動するスクリプト |
/etc/saf |
サービスアクセス機能ファイル (FIFO など) |
/etc/skel |
新規ユーザーアカウントのデフォルトプロファイルスクリプト |
/etc/sm |
状態モニター情報 |
/etc/sm.bak |
状態モニター情報のバックアップコピー |
/etc/tm |
商標ファイル。内容はブート時に表示 |
/etc/uucp |
uucp 構成情報 |
/export |
エクスポートされるファイルシステムツリーのデフォルトのルート |
/home |
ユーザー命令用のサブツリーのデフォルトのルート |
/kernel |
ブートプロセスの一部として必要なプラットフォーム独立型のロード可能カーネルモジュールのサブツリー。プラットフォーム独立型のコアカーネル /kernel/genunix の汎用部分が含まれる。/platform と /usr/platform ディレクトリ構造については、表 32-2 を参照 |
/mnt |
ファイルシステムの一般的な一次マウントポイント |
/opt |
追加アプリケーションパッケージ用のサブツリーのルート |
/opt/SUNWspro |
バンドルされていない言語製品のマウント/インストールポイント |
/sbin |
ブートプロセスと手作業によるシステム障害の回復に使用される重要な実行可能プログラム |
/stand |
スタンドアロンプログラム |
/tmp |
一次ファイル。ブートシーケンス中に消去される |
/usr |
/usr ファイルシステムのマウントポイント |
/var |
各種ファイルのサブツリーのルート |
/var/adm |
システムのログファイルとアカウンティングファイル |
/var/crash |
カーネルクラッシュダンプのデフォルトの格納場所 |
/var/cron |
cron のログファイル |
/var/lp |
ラインプリンタサブシステムのログ情報 |
/var/mail |
ユーザーのメールが保管されるディレクトリ |
/var/news |
コミュニティサービスメッセージ (注: USENET 方式のニュースとは異なる) |
/var/nis |
NIS+ データベース |
/var/opt |
ソフトウェアパッケージ関連の各種ファイルのサブツリーのルート |
/var/preserve |
vi と ex のバックアップファイル |
/var/sadm |
ソフトウェアパッケージ管理ユーティリティで管理されるデータベース |
/var/saf |
saf (サービスアクセス機能) のログファイルとアカウンティングファイル |
/var/spool |
スプール化された一時ファイルのディレクトリ |
/var/spool/cron |
cron と at のスプールファイル |
/var/spool/locks |
スプールロックファイル |
/var/spool/lp |
ラインプリンタのスプールファイル |
/var/spool/mqueue |
配信用に待ち行列に入れられたメール |
/var/spool/pkg |
スプール化されたパッケージ |
/var/spool/uucp |
待ち行列化された uucp のジョブ |
/var/spool/uucppublic |
uucp によって格納されるファイル |
/var/tmp |
一時ファイルのディレクトリ。ブートシーケンス中には消去されない |
/var/uucp |
c のログファイルと状態ファイル |
/var/yp |
NIS データベース (NIS との下位互換性を保つため。NIS+ への移行が完了した後は不要) |
|
|
|
|
/usr ファイルシステムのディレクトリ |
|
bin |
標準システムコマンドの位置 |
demo |
デモプログラムとデータ |
games |
空のディレクトリ。SunOS 4.x ソフトウェアの遺物 |
include |
ヘッダファイル (C プログラム用など) |
kernel |
その他モジュール |
kvm |
実装されたアーキテクチャ固有のバイナリとライブラリ |
lib |
各種プログラムのライブラリ、アーキテクチャ依存データベース、またはユーザーが直接呼び出さないバイナリ |
lib/acct |
アカウンティングスクリプトとバイナリ |
lib/class |
スケジュールクラス固有のディレクトリ。priocntl コマンドと dispadmin コマンドの実行可能プログラムが入っている |
lib/font |
troff フォント記述ファイル |
lib/fs |
ファイルシステムタイプ依存モジュール。ユーザーは直接呼び出さない |
lib/iconv |
iconv(1) の変換テーブル |
lib/libp |
プロファイルライブラリ |
lib/locale |
各国対応のローカライズデータベース |
lib/lp |
ラインプリンタサブシステムのデータベースとバックエンドの実行可能プログラム |
lib/mail |
mail サブシステムの補助プログラム |
lib/netsvc |
インターネットネットワークサービス |
lib/nfs |
NFS 関連の補助プログラムとデーモン |
lib/pics |
実行時リンカの構築に必要な PIC アーカイブ |
lib/refer |
参照関連の補助プログラム |
lib/sa |
システム活動レポートパッケージ用のスクリプトとコマンド |
lib/saf |
サービスアクセス機能に関連する補助プログラムとデーモン |
lib/uucp |
uucp 関連の補助プログラムとデーモン |
lib/zoneinfo |
時間帯情報 |
local |
サイトのローカルコマンド |
old |
段階的に使用されなくなっているプログラム |
openwin |
OpenWindows ソフトウェアのマウント/インストールポイント |
sadm |
システム管理に関連する各種ファイルとディレクトリ。以下の各サブディレクトリを参照 |
sadm/bin |
FMLI スクリプトに使用する「valtools」境界 |
sadm/install |
pkg 管理用の実行プログラムとスクリプト |
sbin |
システム管理用の実行可能プログラム |
sbin/static |
/usr/bin と /usr/sbin から選択したプログラムの静的リンクバージョン |
share |
アーキテクチャに依存しない共有可能ファイル |
share/lib |
アーキテクチャに依存しないデータベース |
share/lib/keytables |
キーボード配置記述ファイル |
share/lib/mailx |
mailx 関連のヘルプファイル |
share/lib/nterm |
nroff 端末テーブル |
share/lib/pub |
各種データファイル |
share/lib/spell |
spell 関連の補助データベースとスクリプト |
share/lib/tabset |
タブ設定のエスケープシーケンス |
share/lib/terminfo |
terminfo スタイルの端末記述ファイル |
share/lib/tmac |
[nt]roff マクロパッケージ |
share/src |
カーネル、ライブラリ、ユーティリティのソースコード |
ucb |
UCB 互換パッケージのバイナリ |
ucbinclude |
UCB 互換パッケージのヘッダファイル |
ucblib |
UCB 互換パッケージのライブラリ |
表 32-2 に、/platform ディレクトリと /usr/platform ディレクトリに入っているすべてのプラットフォームに依存するオブジェクトを示します。
表 32-2 /platform と /usr/platform ディレクトリ
ディレクトリ |
説明 |
---|---|
/platform |
ルート (/) ファイルシステムに存在すべき一連のディレクトリが、サポートされるプラットフォームごとに入っている。 |
/platform/*/kernel |
プラットフォームに依存するカーネル構成要素が入っている。プラットフォームに依存するコアカーネルであるファイル unix も含む。kernel(1M) のマニュアルページを参照。 |
/usr/platform |
ルート (/) ファイルシステムに存在する必要がない、プラットフォームに依存するオブジェクトが入っている。削除された /usr/kvm の内容に置き換わるオブジェクトを含む。 |
/usr/platform/*/lib |
/usr/lib ディレクトリ中のオブジェクトに類似した、プラットフォームに依存するオブジェクトが入っている。 |
/platform/*/sbin |
/usr/sbin ディレクトリ中のオブジェクトに類似した、プラットフォームに依存するオブジェクトが入っている。 |
UFS ファイルシステムを作成すると、ディスクスライスはシリンダグループに分割され、さらにブロックに分割されて、シリンダグループ内のファイルの構造を制御し、編成します。シリンダグループには、1 つまたは複数の連続するディスクシリンダが含まれています。各種ブロックは、ファイルシステム内で特定の機能を持っています。UFS ファイルシステムには、次の 4 種類のブロックがあります。
ブートブロック - システムのブート時に使用される情報が格納される。
スーパーブロック - ファイルシステムに関する大部分の情報が格納される。
i ノード - ファイルに関して名前以外のすべての情報が格納される。
記憶域またはデータブロック - 各ファイルのデータが格納される。
この節では、これらのブロックの編成と機能について説明します。
ブートブロックには、システムのブート時に使用されるプログラムが格納されます。ファイルシステムがブートに使用されなければ、ブートブロックは空白のままです。ブートブロックは最初のシリンダグループ (シリンダグループ 0) にのみ表示され、スライス内の最初の 8K バイトです。
スーパーブロックには、ファイルシステムに関して大部分の情報が格納されます。その中でも、特に次の情報が重要です。
ファイルシステムのサイズと状態
ラベル (ファイルシステム名とボリューム名)
ファイルシステムの論理ブロックのサイズ
最終更新日時
シリンダグループのサイズ
シリンダグループ内のデータブロック数
集計データブロック
ファイルシステムの状態: クリーン、安定、または有効
最後のマウントポイントのパス名
スーパーブロックは、ディスクスライスの先頭にあり、各シリンダグループ内で複製されます。スーパーブロックには重要なデータが入っているので、ファイルシステムの作成時には複数のスーパーブロックが作成されます。各スーパーブロックの複製は、シリンダグループの先頭からさまざまな大きさだけオフセットされます。複数プラッタを持つディスクドライブの場合、オフセットはスーパーブロックがドライブの各プラッタに表示されるように計算されます。つまり、最初のプラッタが失われても、いつでも代替スーパーブロックを取り出せます。最初のシリンダグループ内の先行ブロックを除き、オフセットによって作成される先行ブロックがデータの格納に使用されます。
集計情報ブロックは、スーパーブロックといっしょに保管されます。複製されませんが、通常はシリンダグループ 0 内で最初のスーパーブロックといっしょにグループ化されます。集計ブロックレコードには、ファイルシステムの使用時に発生した変化が記録され、ファイルシステム内の i ノード数、ディレクトリ数、フラグメント数、および記憶ブロック数が表示されます。
i ノードには、ファイルに関して名前以外のすべての情報が入っており、ディレクトリ内に保管されます。i ノードは 128 バイトです。i ノード情報はシリンダ情報ブロック内に保管され、次の情報が入っています。
ファイルのタイプ
通常ファイル
ディレクトリ
ブロック型特殊ファイル
キャラクタ型特殊ファイル
シンボリックリンク
FIFO (名前付きパイプとも呼ばれます)
ソケット
ファイルのモード (読み込み権-書き込み権-実行権のセット)
ファイルへのハードリンク数
ファイルの所有者のユーザー ID
ファイルが属するグループ ID
ファイル内のバイト数
15 個のディスクブロックアドレスの配列
ファイルの最終アクセス日時
ファイルの最終変更日時
ファイルの作成日時
15 個のディスクアドレス (0 から 14 まで) の配列は、ファイルの内容が格納されるデータブロックを指します。最初の 12 個は直接アドレスで、ファイルの内容のうち最初の 12 個の論理記憶ブロックを直接指します。ファイルが論理ブロック 12 個分より大きい場合は、13 番目のアドレスは間接ブロックを指します。間接ブロックには、ファイルの内容ではなく直接ブロックのアドレスが入っています。14 番目のアドレスは、二重間接ブロックを指します。二重間接ブロックには、間接ブロックのアドレスが入っています。15 番目のアドレスが必要な場合は、三重間接アドレスが格納されます。図 32-1 は、i ノードから始まって、このアドレスブロックチェーンを示しています。
ファイルシステムに割り当てられた残りの領域には、データブロックが入っています。この種のブロックは、記憶ブロックと呼ばれることもあります。これらのデータブロックのサイズは、ファイルシステムの作成時に決定されます。デフォルトでは、データブロックは 2 つのサイズ、つまり 8K バイトの論理ブロックサイズと 1K バイトのフラグメントサイズで割り当てられます。
通常ファイルの場合、データブロックにはファイルの内容が入っています。ディレクトリの場合、データブロックにはディレクトリ内のファイルの i ノード番号とファイル名を示すエントリが入っています。
現在、i ノード、間接アドレスブロック、または記憶ブロックとして使用されていないブロックには、シリンダグループマップ内で空きを示すマークが付けられます。また、このマップはフラグメントを追跡し、ディスク性能の低下を防止します。
UFS ファイルシステムの内容の概念を理解しやすいように、図 32-2 に一般的な UFS システム内の一連のシリンダグループを示しています。
newfs コマンドによって割り当てられるデフォルトのファイルシステムパラメタを変更しようとする前に、各パラメタについて理解しておく必要があります。この節では、次の各パラメタについて説明します。
ブロックサイズ
フラグメントサイズ
最小空き領域
回転の遅れ
最適化タイプ
i ノード数
論理ブロックサイズは、UNIX カーネルがファイルの読み書きに使用するブロックのサイズです。一般に、論理ブロックサイズは物理ブロックサイズ (通常は 512K バイト) とは異なります。物理ブロックサイズは、ディスクコントローラが読み書きできる最小ブロックのサイズです。
ファイルシステムの論理ブロックサイズを指定できます。ファイルシステムの作成後は、ファイルシステムを再構築しなければ、このパラメタを変更できません。論理ブロックサイズの異なるファイルシステムを、同じディスクに格納できます。
デフォルトでは、UFS ファイルシステムの論理ブロックサイズは 8192 バイト (8K バイト) です。UFS ファイルシステムでは、ブロックサイズとして 4096 バイトまたは 8192 バイト (4K または 8K バイト) がサポートされます。8K バイトは、論理ブロックの推奨サイズです。
システムに最善の論理ブロックサイズを選択するには、必要な性能と使用可能容量を検討してください。ほとんどの UFS システムの場合は、8K バイトのファイルシステムが最高の性能を発揮し、ディスク性能と一次メモリーやディスク上の領域の使用量が適切なバランスに保たれます。
原則として、効率を高めるには、ほとんどのファイルがきわめて大きいファイルシステムには大きめの論理ブロックサイズを使用します。ほとんどのファイルがきわめて小さいファイルシステムには、小さめの論理ブロックサイズを使用します。ファイルシステム上で quot -c file-system コマンドを使用すると、ファイルの分散に関する詳細なレポートをブロックサイズ別に表示できます。
ファイルが作成または拡張されると、論理ブロック全体または「フラグメント」と呼ばれる部分のディスク容量が割り当てられます。ファイルのデータを保持するディスク容量が必要になると、まずブロック全体が割り当てられ、次に残りの部分にブロックのうち 1 つまたは複数のフラグメントが割り当てられます。小型ファイルの場合、割り当てはフラグメントから始まります。
ブロック全体ではなく、そのフラグメントを割り当てることができるので、ブロック内の未使用のホールによってディスク容量の「フラグメント」が低下し、容量の節約になります。
UFS ファイルシステムを作成するときに、「フラグメントサイズ」を定義します。デフォルトのフラグメントサイズは 1K バイトです。各ブロックは、1 個、2 個、4 個、または 8 個のフラグメントに分割できます。この場合、フラグメントサイズは 8192 バイトから 512K バイトまでです (4K バイトのファイルシステムのみ)。実際には、下限はディスクのセクターサイズ、通常は 512 バイトに連動します。
上限を、まったくフラグメントのない場合の完全ブロックのサイズに等しくすることができます。容量よりも速度を重視する場合、きわめて大型のファイルがあるファイルシステムには、この構成が最適なことがあります。
フラグメントサイズを選択するときには、処理時間と容量を取捨選択してください。フラグメントサイズが小さければ容量の節約になりますが、割り当てには時間がかかります。原則として、格納効率を高めるには、ほとんどのファイルが大型のファイルシステムには、大きめのフラグメントサイズを使用します。ほとんどのファイルが小型のファイルシステムには、小さめのフラグメントサイズを使用します。
「最小空き容量」とは、ファイルシステムの作成時に予約分として保持されるディスク容量です。デフォルトの予約分は合計ディスク容量の 10 パーセントです。ファイルシステム内の空き容量が少なくなるほど、アクセス速度が低下するので、空き容量は重要です。十分な空き容量があれば、UFS ファイルシステムは効率よく動作します。ファイルシステムがいっぱいになって、使用可能なユーザー領域を使い果たすと、スーパーユーザー以外は予約済みの空き容量にアクセスできません。
df などのコマンドは、最小空き容量として割り当て済みの分を差し引いて、ユーザーに使用可能な容量をパーセントで表示します。コマンドでファイルシステム内のディスク容量の 100 パーセント以上が使用中であると表示される場合は、予約分の一部がルートに使用されています。
ユーザーに制限を適用する場合に、各ユーザーが使用可能な容量には予約分の空き容量は含まれません。tunefs コマンドを使用すると、既存のファイルシステムの最小空き容量の値を変更できます。
「回転の遅れ」は、CPU がデータ転送を完了し、同じディスクシリンダ上で次のデータ転送を開始するまでに予想される最小所要時間 (ミリ秒単位) です。デフォルトの遅れは、ディスクのタイプによって異なり、通常はディスクタイプごとに最適化されています。
ファイルに書き込むときに、UFS 割り当てルーチンは新しいブロックを同じファイル内の直前のブロックと同じディスクシリンダ上に配置しようとします。また、新しいブロックをトラック内で最適の位置に配置して、そこへのアクセスに必要なディスクの回転を最小限度に抑えようとします。
ファイルブロックを「回転して適切に動作」するように配置するには、割り当てルーチンは CPU による転送処理速度と、ディスクが 1 ブロックをスキップする所要時間を認識しなければなりません。mkfs コマンドのオプションを使用すると、ディスクの回転速度と 1 トラック当たりのディスクブロック (セクタ) 数を指定できます。割り当てルーチンは、この情報を使用して、1 ディスクブロックをスキップするミリ秒数を求めます。次に、割り当てルーチンは予想転送時間 (回転の遅れ) を使用して、システムの読み込み準備ができたときに次のブロックがディスクヘッドの真下にくるようにブロックを配置します。
回転の遅れ (newfs の -d オプション) を指定しなくてもよいデバイスがあります。
各ブロックは、システムが同じディスクの回転中に読み込める処理速度の場合にのみ、連続して配置されます。システムが低速であれば、ディスクはファイル内の次のブロックの先頭を通り過ぎてしまうので、そのブロックを読み込むには、もう 1 回転しなければならず、長時間かかります。次のディスク要求が発生するときに該当するブロックにヘッドがきているように、ギャップに適切な値を指定してください。
既存のファイルシステムの場合は、tunefs コマンドを使用してこのパラメタの値を変更できます。変更結果は、それ以後のブロック割り当てにのみ適用され、すでに割り当て済みのブロックには適用されません。
「最適化のタイプ」には、「領域」と「時間」があります。
領域 - 領域の最適化を選択すると、フラグメントを最小限度に抑え、ディスクの使用状況が最適化されるようにディスクブロックが割り当てられる。最小空き領域を 10 パーセント未満に設定している場合は、領域がデフォルトである。
時間 - 時間の最適化を選択すると、配置はあまり重視されず、できるだけ高速になるようにディスクブロックが割り当てられる。最小空き領域を 10 パーセント以上に設定している場合には、時間がデフォルトである。十分な空き領域があれば、それほど細かく分割しなくても、比較的簡単にディスクブロックを効率よく割り当てることができる。
既存のファイルシステムの場合は、tunefs コマンドを使用して最適化タイプのパラメタ値を変更できます。
i ノード数によって、ファイルシステム内で保持できるファイル数が決まります。ファイルごとに 1 つずつ i ノードがあります。 i ノード 1 個あたりのバイト数によって、ファイルシステムの作成時に作成される合計 i ノード数が決まります。これは、ファイルシステムの合計サイズを、i ノード 1 個あたりのバイト数で割った値です。i ノードが割り当てられたら、ファイルシステムを作成し直さなければ、その数は変更できません。
i ノード 1 個あたりのデフォルトのバイト数は 2048 バイト (2K バイト) で、これは各ファイルの平均サイズが 2K バイト以上であることを想定しています。ほとんどのファイルは、2K バイトを超えます。多数のシンボリックリンクを持つファイルシステムの場合は、平均ファイルサイズを小さくすることができます。ファイルシステムに多数の小型ファイルが格納される場合は、このパラメタに小さい値を与えてもかまいません。ただし、i ノードの数が少ないために使い果たすよりは、多すぎる方がよいので注意してください。i ノード数が少なすぎると、実際には空のディスクスライス上で最大ファイル数に達することがあります。
この節では、カスタマイズされたファイルシステムの作成に使用する 2 つのコマンドについて説明します。
newfs
mkfs
newfs コマンドは、ファイルシステムの作成に使用する mkfs コマンドの簡便バージョンです。newfs コマンドは、/usr/sbin ディレクトリに入っています。
構文は次のとおりです。
newfs [-Nv] [mkfs_options] special
表 32-3 に、newfs コマンドのオプションと引数を示します。
表 32-3 newfs コマンドのオプションと引数
オプション |
説明 |
---|---|
N |
ファイルシステムの作成に使用されるファイルシステムパラメタが表示されるが、実際には作成されない。このオプションでは、既存のファイルシステムの作成に使用されたパラメタは表示されない。 |
-v |
mkfs コマンドに渡されるパラメタが表示され、-N オプションを指定しなければファイルシステムが作成される。 |
mkfs-options |
後続のオプションを使用して、mkfs コマンドに渡されるパラメタが設定される。次のオプションは、mkfs に渡される順番に記述されている。各オプションは、先行キーワードを付けずに空白で区切る。 |
-s size |
ファイルシステムのセクター数。デフォルトは、ディスクラベルから自動的に判別される。 |
-t ntrack |
ディスク上の 1 シリンダあたりのトラック数。デフォルトはディスクラベルから判別される。 |
-b bsize |
データ転送に使用される論理ブロックのバイト数。サイズとして 4096 または 8192 バイト (4K または 8K バイト) を指定する。デフォルトは 8192 バイト (8K バイト)。 |
-f fragsize |
ファイルに割り当てられるディスク容量の最小バイト数。フラグメントサイズを、512 バイトから 8192 バイトまでの 2 の乗数単位で指定する。デフォルトは 1024 バイト (1K バイト)。 |
-c cgsize |
1 シリンダグループあたりのディスクシリンダ数。この数値は 1 から 32 までの範囲内でなければならない。デフォルトは 16。 |
-m free |
空きディスク領域の最小許容率。デフォルトは 10 パーセント。 |
-r rpm |
1 分当たりのディスクの回転速度。デフォルトは 3600 である。このパラメタは、mkfs に渡される前に 1 秒当たりの回転数に変換される。 |
-i nbpi |
作成できる i ノードの計算に使用される i ノード 1 個当たりのバイト数。デフォルトは 2048。 |
-o opt |
ディスクブロックをファイルに割り当てるときに使用される最適化のタイプ。s は領域を示し、t は時間を示す。 |
-a apc |
不良ブロックを配置するために予約される 1 ディスクシリンダ (SCSI デバイスのみ) の代替ブロック数。デフォルトは 0。 |
-d gap |
(回転の遅れ) CPU がデータ転送を完了し、同じディスクシリンダ上で次のデータ転送を開始するまでに予想される最小ミリ秒数。デフォルトは 4。 |
-d nrpos |
シリンダグループを分割するさまざまな回転位置の数。デフォルトは 8。 |
-C maxcontig |
あるファイルに属し、回転の遅れが挿入される前に連続して割り当てられる最大ブロック数。デフォルトはドライブごとに異なる。内部 (トラック) バッファを持たないドライブ (または、内部バッファの存在をうたっていないドライブ/コントローラ) の場合は、デフォルトは 1 で、バッファを持つドライブの場合はデフォルトは 7。 このパラメタには、 blocksize*maxcontig が maxphys 以下でなければならないという制限がある。 maxphys は、入出力サブシステムが満たせる最大ブロック転送サイズ (バイト数) を指定する読み込み専用のカーネル変数である (この制限は、newfs や mkfs ではなく mount によって適用される)。 また、このパラメタはクラスタ化も制御する。rotdelay の値に関係なく、maxcontig が 1 より大きいときのみクラスタ化できる。クラスタ化すると、入出力が高速になる。詳細は、tunefs(1M) のマニュアルページを参照。 |
special |
ファイルシステムを入れるパーティションの特殊文字 (raw) デバイスファイル名。この引数は必須。 |
次の newfs の例では、-N オプションを使用して、バックアップスーパーブロックなど、ファイルシステム情報を表示します。
# newfs -N /dev/rdsk/c0t0d0s0 /dev/rdsk/c0t0d0s0: 37260 sectors in 115 cylinders of 9 tracks, 36 sectors 19.1MB in 8 cyl groups (16 c/g, 2.65MB/g, 1216 i/g) superblock backups (for fsck -b #) at: 32, 5264, 10496, 15728, 20960, 26192, 31424, 36656, #
汎用 mkfs コマンドは、ファイルシステム専用の mkfs を呼び出して、指定したディスクスライス上で指定したタイプのファイルシステムを作成させます。mkfs では各種のファイルシステムがサポートされますが、実際には UFS ファイルシステムの作成に使用します。他のタイプのファイルシステムを作成するには、ファイルシステム専用の mkfs コマンドを使用できるようにソフトウェアを作成する必要があります。通常は、mkfs を直接実行せずに、newfs コマンドで呼び出します。
次の例は、mkfs コマンドのすべての引数を示しています。
汎用 mkfs コマンドは、/usr/sbin にあります。引数とオプションについては、mkfs(1M) のマニュアルページを参照してください。