このパートでは、Solaris オペレーティング環境でファイルシステムを管理する手順について説明します。次の章で構成されています。
ファイルシステムの種類、一般に使用する管理コマンド、ファイルシステムをマウントし、マウント解除する基本的な作業など、ファイルシステム全般について説明します。 |
|
UFS ファイルシステムの作成、一時ファイルシステム (TMPFS) の作成と管理、ループバックファイルシステム (LOFS) の作成を行う手順について説明します。 |
|
どのファイルシステムがマウントされているかを判断する手順、/etc/vfstab に列挙されているファイルをマウントする方法、UFS、NFS、PCFS (DOS) ファイルシステムをマウントする方法について説明します。 |
|
キャッシュファイルシステム (CacheFSTM) の概要と使用手順について説明します。 |
|
スワップ空間を追加する場合の構成、スワップ資源の監視、スワップファイルの作成と使用可能にする方法、余分なスワップ空間を削除する手順などについて説明します。 |
|
ファイルシステムの状態を記録する方法、fsck プログラムでチェックされる内容、自動ブートチェック機能を変更する方法、fsck プログラムの使用方法について説明します。 |
|
ルート(/)と /usr のファイルシステムのデフォルトディレクトリ、/kernel ディレクトリにあり、mkfs コマンドと newfs コマンドに固有のディレクトリなど、ファイルシステムの参照情報について説明します。 |
この章の内容は次のとおりです
Solaris 7 では、ファイルシステムの 2 つの新機能が提供されます。UFS ロギングと、ファイルのアクセス時間更新を無視する新しいマウントオプションです。
UFS ロギングとは、トランザクション (UFS に対する変更操作のすべて) が UFS ファイルシステムに適用される前に、ログに格納するプロセスのことです。一度格納したトランザクションは、その後ファイルシステムに適用できます。
UFS ロギングには 2 つの利点があります。まず UFS ロギングは、ファイルシステムの整合性を保持するため、fsck(1M) を実行する必要がなくなります。また、fsck を省略できるために、システムがクラッシュした場合、あるいは、不完全に停止後、システムリブートの時間が短くなります。
デフォルトでは、UFS ロギングは無効です。UFS ロギングを有効にするには、ファイルシステムをマウントするときに、-o logging オプションを mount コマンドに指定しなければなりません。また、fsdb コマンドも更新され、UFS ロギング用の新しいデバッグコマンドを持つようになりました。
ファイルのアクセス時間の更新を無視するには、UFS ファイルシステムをマウントするときに、-o noatime オプションを指定します。このオプションによって、アクセス時間が重要でないファイルシステム (たとえば、Usenet ニューススプール) でのディスクに対する動作が減ります。詳細は、mount_ufs(1M) のマニュアルページを参照してください。
ファイルシステムは、ファイルを編成して格納するためのディレクトリ構造です。「ファイルシステム」という用語には、さまざまな使用方法があります。
ディスクベース、ネットワークベース、または仮想ファイルシステムなど、特定のタイプのファイルシステムを指す場合
ルートディレクトリから下位へのファイルツリー全体を指す場合
ディスクスライスや他の媒体記憶デバイスのデータ構造を指す場合
ファイル構造のうち、アクセスできるようにメインファイルツリー上のマウントポイントに接続されている部分を指す場合
通常、その意味は状況に応じて判断できます。
Solaris オペレーティング環境は、各種ファイルシステムへの標準インタフェースを提供する「仮想ファイルシステム」 (VFS) アーキテクチャを使用します。VFS アーキテクチャによって、ユーザーやプログラムが基礎となるファイルシステムのタイプを知らなくても、カーネルはファイルの読み取り、書き込み、一覧表示などの基本操作を処理できます。
ファイルシステムの管理は、最も重要なシステム管理作業の 1 つです。この章を読んで概念と計画方法について理解してください。次の作業については、Part VIII の他の章と他の Part を参照してください。
新しい UFS と仮想ファイルシステムを設定する - 詳細は、第 27 章「ファイルシステムの作成手順」と第 29 章「キャッシュファイルシステムの手順」を参照してください。
ローカルファイルとリモートファイルをユーザーが利用できるようにする - 詳細は第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。
新しい記憶デバイスを接続して構成する - 詳細は 第 21 章「ディスク管理の概要」を参照してください。
バックアップスケジュールを計画して導入し、必要に応じてファイルとファイルシステムを復元する - バックアップの作成、およびファイルとファイルシステムの復元については、第 33 章「ファイルシステムのバックアップと復元の概要」を参照してください。
ファイルシステムの損傷をチェックして訂正する - 自動 (ブート時) チェックに失敗した場合の処理については、第 31 章「ファイルシステムの整合性チェック」を参照してください。
Solaris システムソフトウェアでは、次の 3 種類のファイルシステムがサポートされます。
ディスクベース
ネットワークベース
仮想
ファイルシステムのタイプを確認するには、「ファイルシステムのタイプを調べる」を参照してください。
ディスクベースのファイルシステムは、ハードディスク、CD-ROM、フロッピーディスクなどの物理媒体に格納されます。ディスクベースのファイルシステムは、さまざまな形式で作成できます。利用できる形式は次のとおりです。
UFS - UNIX ファイルシステム (4.3 Tahoe リリースに組み込まれていた BSD Fast File システム)。UFS は、Solaris オペレーティング環境のデフォルトのディスクベースファイルシステムです。
UFS ファイルシステムをディスク上に作成する前に、そのディスクをフォーマットし、スライスに分割しなければなりません。ディスクスライスとは物理的なディスクのサブセットのことで、連続するブロックからなる 1 つの範囲のことです。スライスはスワップ空間などの raw デバイスとして使用することも、ディスクベースのファイルシステムとして使用することもできます。ディスクのフォーマットとディスクのスライスへの分割についての詳細は、第 21 章「ディスク管理の概要」を参照してください。
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 ファイルシステムのセマンティクスとファイルタイプを提供します。ただし、書き込み可能ではなく、ハードリンクも提供しません。
PCFS - PC ファイルシステム。DOS ベースのパーソナルコンピュータ用に作成された DOS フォーマットのディスク上のデータとプログラムに読み取り/書き込みのアクセスができます。
ディスクベースの各種ファイルシステムは、次のように特定の媒体のタイプに対応しています。
UFS とハードディスク
HSFS と CD-ROM
PCFS とフロッピーディスク
ただし、上記以外の対応も可能です。たとえば、CD-ROM やフロッピーディスクにも、UFS ファイルシステムを適用できます。
ネットワークベースのファイルシステムは、ネットワーク上でアクセスされるファイルシステムです。一般に、ネットワークベースのファイルシステムは 1 つのシステム上 (通常はサーバー上) にあり、他のシステムからネットワーク経由でアクセスされます。NFS は、ネットワークベースで利用できる唯一のファイルシステムです。
NFS は、Solaris の分散ファイルシステムです。NFS で分散資源 (ファイルやディレクトリ) を管理するには、サーバーから分散資源をエクスポートして個々のクライアントシステムでそれらをマウントします。詳細は、「ネットワークファイルシステム (NFS)」を参照してください。
仮想ファイルシステムは、特殊なカーネル情報と機能へのアクセスを提供するメモリーベースのファイルシステムです。ほとんどの仮想ファイルシステムは、ディスク領域を使用しません。ただし、キャッシュファイルシステム (CacheFS) は、ディスク上のファイルシステムを使用してキャッシュを保持します。また、一時ファイルシステム (TMPFS) などの一部の仮想ファイルシステムは、ディスク上のスワップ空間を使用します。
キャッシュファイルシステム (CacheFS) を使用すると、リモートファイルシステムや、CD-ROM ドライブのような低速デバイスの性能を改善できます。ファイルシステムをキャッシュすると、リモートファイルシステムや CD-ROM から読み込まれたデータは、ローカルシステム上のキャッシュに格納されます。CacheFS ファイルシステムの設定と管理については、第 29 章「キャッシュファイルシステムの手順」を参照してください。
一時ファイルシステム (TMPFS) は、ファイルシステムの読み取りと書き込みにローカルメモリーを使用します。一般に、一時ファイルシステムは、UFS ファイルシステムに比べてアクセス速度が高速です。TMPFS ファイルシステムを使用すると、ローカルディスク上で、あるいはネットワーク経由で一時ファイルの読み書きを行う際のオーバヘッドを軽減でき、システムパフォーマンスを改善できます。たとえば、プログラムをコンパイルすると一時ファイルが作成されます。オペレーティングシステムは、これらのファイルを処理する間に大量のディスク処理やネットワーク処理を行います。TMPFS を使用してこれらの一時ファイルを格納すると、その作成、処理、または削除が大幅に高速になります。
ファイルシステムのマウントが解除されるときと、システムがシャットダウンまたはリブートされるときに、一時ファイルシステム上のファイルは削除されます。
TMPFS は、Solaris オペレーティング環境内の /tmp ディレクトリのデフォルトのファイルシステムです。UFS /tmp ファイルシステムの場合と同様に、/tmp ディレクトリとの間でファイルをコピーまたは移動できます。
TMPFS ファイルシステムは、一時的な退避場所としてスワップ空間を使用します。TMPFS ファイルシステムがマウントされたシステムのスワップ空間が足りないと、次の 2 つの問題が発生する可能性があります。
TMPFS ファイルシステムは、通常のファイルシステムがいっぱいになった場合と同様に容量不足になる可能性がある。
TMPFS はスワップ空間を割り当ててファイルのデータを保存するので (必要な場合)、一部のプログラムはスワップ空間不足のために実行できなくなる。
TMPFS ファイルシステムの作成方法については、第 27 章「ファイルシステムの作成手順」を参照してください。スワップ空間を拡張する方法については、第 30 章「追加スワップ空間の構成の手順」を参照してください。
ループバックファイルシステム (LOFS) を使用すると、代替パス名を使用してファイルにアクセスできるように、新しい仮想ファイルシステムを作成できます。たとえば、/ のループバックマウントを /tmp/newroot 上で作成できます。ファイルシステム階層全体が、NFS サーバーからマウントされるファイルシステムを含め、/tmp/newroot 上に複写されたように見えます。どのファイルにも、/ で始まるパス名または /tmp/newroot で始まるパス名を使用してアクセスできます。
LOFS ファイルシステムの作成方法については、第 27 章「ファイルシステムの作成手順」を参照してください。
プロセスファイルシステム (PROCFS) はメモリー内にあります。PROCFS の /proc ディレクトリには、有効なプロセスのプロセス番号別リストが入っています。/proc ディレクトリ内の内容は、ps などのコマンドに使用されます。デバッガや他の開発ツールも、ファイルシステムコールを使用して、プロセスのアドレス空間にアクセスできます。
/proc ディレクトリ内のファイルは削除しないでください。/proc ディレクトリからプロセスを削除するのは、最善の方法ではありません。/proc ファイルはディスク容量を消費しないため、このディレクトリからファイルを削除してもあまり意味がないので注意してください。
/proc ディレクトリには、システム管理は不要です。
次のタイプの仮想ファイルシステムは、参考のために掲載してあります。管理は不要です。
ほとんどのファイルシステム管理コマンドには、汎用コマンドとファイルシステム専用の 2 種類があります。可能な場合には、常に汎用コマンドを使用してください。汎用コマンドは、ファイルシステム固有のコマンドを呼び出します。表 26-1 に、汎用ファイルシステム管理コマンドを示します。これらのコマンドは、/usr/sbin ディレクトリに入っています。
表 26-1 汎用ファイルシステム管理コマンド
コマンド |
機能 |
---|---|
i ノードをクリアする。 |
|
空きディスクブロック数とファイル数を出力する。 |
|
ファイルシステムのファイル名と統計情報を表示する。 |
|
ファイルシステムの完全性をチェックし、検出された損傷を修復する。 |
|
ファイルシステムをデバッグする。 |
|
ファイルシステムのタイプを調べる。 |
|
テープにコピーするときに、ファイルシステムのラベルを表示または作成する (volcopy コマンド専用)。 |
|
新しいファイルシステムを作成する。 |
|
ローカルおよびリモートのファイルシステムをマウントする。 |
|
仮想ファイルシステムテーブルに指定されているすべてのファイルシステムをマウントする。 (/tec/vfstab) |
|
パス名とその i 番号のリストを生成する。 |
|
ローカルおよびリモートのファイルシステムをマウント解除する。 |
|
仮想ファイルシステムテーブルに指定されているすべてのファイルシステムをマウント解除する。(/etc/vfstab) |
|
ファイルシステムのイメージコピーを作成する。 |
汎用ファイルシステムコマンドは、次の順序でファイルシステムのタイプを判断します。
-F オプションで指定されているファイルシステムのタイプ
特殊デバイスを /etc/vfstab 内のエントリと突き合わせて判断します (special が指定されている場合)。たとえば fsck は、まず fsck device フィールドと突き合わせて一致するエントリを検索します。一致するエントリが見つからなければ、特殊デバイスフィールドと突き合わせてチェックします。
ローカルファイルシステムの場合は /etc/default/fs 内で指定されたデフォルトを使用し、リモートファイルシステムの場合は /etc/dfs/fstypes 内で指定されたデフォルトを使用して判断します。
汎用コマンドと専用コマンドについては、『man Pages(1M): System Administration Commands』を参照してください。専用コマンドのマニュアルページは、汎用コマンドのマニュアルページに続いて入っています。特定のマニュアルページを見つけるには、汎用コマンド名の末尾にアンダースコアとファイルシステムタイプの略称を追加してください。たとえば、UFS ファイルシステムのマウントに関して専用コマンドのマニュアルページを調べるには、man mount_ufs(1M) と入力します。
Solaris ファイルシステムは階層構造になっており、ルートディレクトリ (/) から始まり、下位に多数のディレクトリが形成されています。Solaris のインストールプロセスは、デフォルトのディレクトリセットをインストールし、一連の規則を適用して類似するタイプのファイルをグループ化します。表 26-2 に、デフォルトの Solaris ファイルシステムの概要と、各ファイルシステムのタイプを示します。
システムを動作させるには、ルート (/) と /usr のファイルシステムが必要です。/usr ファイルシステムに置かれている最も基本的なコマンドの一部 (mount など) は、システムのブート時や、システムがシングルユーザーモードで実行しており、/usr ファイルシステムがマウントされていない場合でも使用できるように、ルート (/) ファイルシステムにも置かれています。デフォルトディレクトリのリストについては、第 32 章「ファイルシステムの参照情報」を参照してください。
表 26-2 デフォルトの Solaris ファイルシステム
ファイルシステムまたはディレクトリ |
ファイルシステムのタイプ |
説明 |
---|---|---|
UFS |
階層ファイルツリーの最上位。ルートディレクトリには、カーネル、デバイスドライバ、システムのブートに使用されるプログラムなど、システム処理に欠かせないディレクトリとファイルが入っている。また、ローカルとリモートのファイルシステムをファイルツリーに接続できるマウントポイントディレクトリも入っている。 |
|
UFS |
他のユーザーと共有できるシステムファイルとディレクトリ。特定のタイプのシステム上でのみ実行できるファイルは、/usr ディレクトリに入っている (SPARC 実行可能ファイルなど)。どのタイプのシステム上でも使用できるファイル (マニュアルページなど) は、/usr/share に入っている。 |
|
NFS、UFS |
ユーザーのホームディレクトリのマウントポイント。ホームディレクトリには、そのユーザーの作業ファイルが格納される。デフォルトでは、/home は自動マウントされるファイルシステムである。スタンドアロンシステム上では、/home はローカルディスクスライス上の UFS ファイルシステムの場合がある。 |
|
UFS |
ローカルシステムの使用中に変化または拡大する可能性のあるシステムファイルとディレクトリ。これには、システムログ、vi と ex のバックアップファイル、および uucp ファイルが含まれる。 |
|
NFS、UFS |
オプションの Sun 以外のソフトウェア製品のマウントポイント。システムによっては、/opt がローカルディスクスライス上の UFS ファイルシステムの場合がある。 |
|
TMPFS |
システムがブートされるたびにまたは /tmp ファイルシステムがマウント解除されるたびに消去される一時ファイル |
|
PROCFS |
アクティブなプロセスの番号別リスト |
Solaris オペレーティング環境は、一部のディスクスライスをファイルシステムではなく一時記憶域として使用します。これらのスライスを「スワップスライス」または「スワップ空間」と呼びます。スワップスライスは、現在のプロセスを処理するだけの十分な物理メモリーがシステムにない場合に、仮想メモリー記憶域として使用されます。
多くのアプリケーションは十分なスワップ空間が使用できることを前提に作成されているため、スワップ空間を割り当て、その使われ方を監視して、必要に応じてスワップ空間を追加する方法を知っておくことは大切です。スワップ空間の概要とスワップ空間を追加する手順については、第 30 章「追加スワップ空間の構成の手順」を参照してください。
UFS は、Solaris オペレーティング環境内のデフォルトのディスクベースファイルシステムです。ほとんどの場合、ディスクベースのファイルシステムを管理するときには、UFS を管理していることになります。UFS ファイルシステムの機能は次の通りです。
状態フラグ - ファイルシステムの状態を、クリーン、安定、使用中、ロギング処理、または不明として示します。これらのフラグにより、必要のないチェックをファイルシステム上で行わなくて済みます。ファイルシステムが「クリーン」状態、「安定」状態、または「ロギング処理」状態になっていると、ファイルシステムのチェックは実行されません。
拡張基礎タイプ (EFT) - 32 ビットのユーザー ID (UID)、グループ ID (GID)、およびデバイス番号
大規模ファイルシステム - UFS ファイルシステムの最大サイズは 1T バイト (テラバイト) です。Solaris オペレーティング環境では、論理スライスの大きさを 1T バイトのファイルシステムに対応させるストライプ機能はサポートされていませんが、Sun 提供の Solstice DiskSuiteTM ソフトウェアには、この機能が含まれています。
大規模ファイル - デフォルトでは、UFS ファイルシステムは 2G バイト (ギガバイト) を超える通常ファイルを持つことができます。2G バイトの最大ファイルサイズ制限を有効にするには、nolargefiles マウントオプションを明示的に使用しなければなりません。
UFS ファイルシステムの詳細は、第 32 章「ファイルシステムの参照情報」を参照してください。
UFS ファイルシステムを作成すると、ディスクスライスは、1 つまたは複数の連続するディスクシリンダから構成されるシリンダグループに分割されます。シリンダグループはさらに、位置指定可能なブロックに分割され、このブロックによって、シリンダグループ内のファイルの構造が編成され、制御されます。各種のブロックは、ファイルシステム内で特定の機能を持っています。
UFS ファイルシステムには、次の 4 種類のブロックがあります。
ブートブロック - システムのブート時に使用される情報が格納される。
スーパーブロック - ファイルシステムに関する大部分の情報が格納される。
i ノード - ファイル名を除く、ファイルに関するすべての情報が格納される。
記憶域またはデータブロック - 各ファイルのデータが格納される。
各ブロックタイプの詳細については、「UFS ファイルシステムのシリンダグループの構造」を参照してください。
newfs コマンドまたは mkfs コマンドの引数を使用してファイルシステムをカスタマイズするには、これらのパラメータの変更方法について第 32 章「ファイルシステムの参照情報」を参照してください。
UFS ロギングは、トランザクション (完全な UFS 操作を構成する変更) をログに保存してから、そのトランザクションを UFS ファイルシステムに適用するプロセスです。保存されたトランザクションは、後でファイルシステムに適用できます。
システムはリブート時に、不完全なトランザクションを廃棄しますが、完結している操作のトランザクションは適用します。完結しているトランザクションだけが適用されるために、ファイルシステムの整合性が保たれます。通常であればシステムコールの実行が中断され、UFS ファイルシステムの整合性が確保できないシステムクラッシュ時にも、ファイルシステムの整合性が保たれます。
UFS ロギングには 2 つの長所があります。まず、ファイルシステムの整合性が保持されるため、fsck(1M) を実行する必要がなくなります。また、fsck を省略できるため、システムがクラッシュしたり、異常停止 (クリーンではない停止) した場合でもシステムをリブートするのに要する時間を短縮できます。クリーンではない停止についての詳細は、「fsck でチェックして修復される内容」を参照してください。UFS ロギングを使用すれば、特に、通常であれば fsck による読み込みと確認に時間がかかる大規模ファイルシステムを持つシステムのブート時間を短縮できます。
UFS ロギングが作成するログは、いっぱいになるとフラッシュされます。また、ファイルシステムがマウント解除されたとき、あるいは lockfs -f コマンドを実行したときにも、ログはすべてフラッシュされます。
デフォルトでは、UFS ロギングは無効です。UFS ロギングを有効にするには、ファイルシステムをマウントするときに、-o logging オプションを指定して mount(1M) コマンドを実行しなければなりません。ログはファイルシステムの空きブロックから割り当てられ、1G バイトのファイルシステムごとに約 1M バイトのサイズ (合計で 64M バイトまで) が割り当てられます。ログは、ルート (/) ファイルシステムを含む、任意の UFS で有効にできます。また、fsdb コマンドには、UFS ロギングをサポートするための新しいデバッグオプションが追加されています。
ファイルシステムの配置を決めるときには、要求が競合する可能性があることを考えなければなりません。推奨事項は次の通りです。
作業負荷を異なる入出力システムやディスクドライブ間でできるだけ均等に分散します。/export/home を分散させたり、ディレクトリを入れ替えたりして、異なるディスクに負荷を均等に割り当てます。
プロジェクトの個々の部分やグループのメンバーを同じファイルシステム内に入れます。
1 ディスク当たりのファイルシステム数をできるだけ少なくします。通常、システム (またはブート) ディスク上には、/、/usr、スワップ空間の 3 つのファイルシステムがあります。他のディスク上では、1 つまたは通常は 2 つのスライスを作成します。多数の小型ファイルシステムに分割しすぎるよりもファイルシステム数を少なくして余地を設ける方が、ファイルがフラグメントに分割される可能性が小さくなります。容量の大きいテープドライブを使用し、ufsdump で複数のボリュームを処理できるようにしておけば、大型ファイルシステムでも簡単にバックアップをとることができます。
絶えずきわめて小さいファイルを作成するユーザーがいる場合は、i ノード数を増やして別のファイルシステムを作成することを検討します。ただし、ほとんどのサイトでは、類似するタイプのファイルを同じファイルシステム内で保管するようにする必要はありません。
デフォルトのファイルシステムパラメータや、新しいファイルシステムを作成するときの前提条件と手順については、第 27 章「ファイルシステムの作成手順」を参照してください。
ファイルシステム上のファイルにアクセスするには、ファイルシステムをマウントする必要があります。ファイルシステムのマウントとは、ファイルシステムをディレクトリ (マウントポイント) に接続し、システムで使用可能にすることです。ルート (/) ファイルシステムは、常にマウントされています。他のファイルシステムは、ルート (/) ファイルシステムに接続したり切り離したりすることができます。
ファイルシステムをマウントすると、そのファイルシステムがマウントされている間は、マウントポイントのディレクトリ内に実際に存在しているファイルやディレクトリは使用できなくなります。これらのファイルはマウント処理の影響を永続的に受けるわけではなく、ファイルシステムをマウント解除すると再び使用できるようになります。通常は存在はするがアクセスできないファイルは混乱の原因になるので、マウントディレクトリを空にしておきます。
次の例では、ルート (/) ファイルシステムの下に、サブディレクトリ sbin、etc、および opt を持つローカルのファイルシステムを示します。
ここでは、標準添付されていない製品セットが含まれている /opt ファイルシステムからローカルファイルシステムにアクセスするものとします。
まず、ファイルシステムをマウントするためのマウントポイントとして使用するディレクトリを作成しなければなりません (たとえば、/opt/unbundled)。マウントポイントを作成すると、mount コマンドでファイルシステムをマウントでき、/opt/unbundled 内のすべてのファイルとディレクトリにアクセスできるようになります (図 26-2 を参照)。これらの作業を実行するための詳細な手順については、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。
ファイルシステムをマウント解除すると、そのファイルシステムはマウントポイントから削除されます。一部のファイルシステム管理作業は、マウントされたファイルシステム上では実行できません。次の場合には、ファイルシステムをマウント解除する必要があります。
不要になった場合や、最新ソフトウェアが入っているファイルシステムに交換した場合。
fsck コマンドを使用して検査し修復する場合。fsck コマンドの詳細は、第 31 章「ファイルシステムの整合性チェック」を参照。
ファイルシステムの完全バックアップを実行する前に、そのファイルシステムをマウント解除しておくとよいでしょう。バックアップの実行方法については、第 33 章「ファイルシステムのバックアップと復元の概要」を参照してください。
ファイルシステムは、システムのシャットダウン手続きの一部として自動的にマウント解除されます。
ファイルシステムをマウントまたはマウント解除すると、現在マウントされているファイルシステムのリストを使用して、/etc/mnttab (マウントテーブルファイル) が変更されます。マウントテーブルの内容は cat または more コマンドを使用して表示できますが、/etc/vfstab ファイルのように編集することはできません。次にマウントテーブルファイル /etc/mnttab の例を示します。
$ 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/vfstab ファイル) が作成されました。このファイルに、マウントするファイルシステムとそのマウント方法が指定されます。/etc/vfstab ファイルは、2 つの重要な機能を持っています。1 つは、システムブート時に自動的にマウントするファイルシステムを指定できることです。もう 1 つは、マウントポイント名だけでファイルシステムをマウントできることです。これは、/etc/vfstab ファイルにマウントポイントと実際のデバイススライス名とのマッピングを指定することより可能になります。
デフォルトの /etc/vfstab ファイルは、システムをインストールするときに作成され、その内容はシステムソフトウェアをインストールするときに行なった選択によって異なります。ただし、システムの /etc/vfstab ファイルはいつでも編集できます。エントリを追加するときに指定する必要がある主な情報は、ファイルシステムが置かれているデバイス、マウントポイントの名前、ファイルシステムのタイプ、システムブート時に自動的にブートするかどうか (mountall(1M) コマンドを使用する)、およびマウントオプションです。
次の例は、/etc/vfstab ファイルの内容を示しています。コメント行は # で始まります。この例は、2 つのディスク (c0t0d0 と c0t3d0) を持つシステムの /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 /test ufs 2 yes - $ |
例 26-1 の最後のエントリは、システムブート時に /dev/dsk/c0t2d0s7 スライス上の UFS ファイルシステムを自動的にマウントポイント /test にマウントすることを指定しています。ルート (/) と /usr では、「mount at boot」フィールドの値が no に指定されていることに注意してください。これはこの 2 つのファイルシステムが、mountall コマンドを実行する前にブートシーケンスの一部としてカーネルによってマウントされるからです。
/etc/vfstab の各フィールド、このファイルの編集方法、使用方法については、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。
NFS は、1 つのシステム (通常はサーバー) の資源 (ファイルやディレクトリ) をネットワーク経由で他のシステムと共有するための分散型ファイルシステムです。たとえば、Sun 以外のアプリケーションやソースファイルを他のシステム上のユーザーと共有できます。
NFS は、資源の実際の物理的な位置をユーザーが意識しなくてすむようにします。共通に使用されるファイルのコピーをシステムごとに配置しなくても、あるシステムのディスク上にコピーを 1 つ配置することによって NFS は、他のすべてのシステムがそのコピーにネットワーク経由でアクセスできるようにします。NFS の環境では、リモートファイルシステムは、実際にはローカルシステムと区別がつきません。
システムは、ネットワークに対して共有またはエクスポートするファイルシステを持っているときに、NFS サーバーになります。サーバーは、現在エクスポートされている資源とアクセス制限 (読み取り/書き込み、読み取り専用など) のリストを管理します。
資源を共有する場合は、リモートシステムにマウントできるように、その資源を使用可能な状態にします。
資源を共有するには、次の方法があります。
資源を共有する方法については、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。NFS の詳細な説明については、『NFS の管理』を参照してください。
NFS ファイルシステムをマウントするには、自動マウントまたは AutoFS というクライアント側のサービスを使用します。このサービスによってシステムは、ユーザーがアクセスしたときに自動的に NFS ファイルシステムをマウントまたはマウント解除できます。ユーザーがファイルシステム内のファイルを使用している間、ファイルシステムはマウントされたままになります。ファイルシステムが一定の時間アクセスされなかった場合、ファイルシステムは自動的にマウント解除されます。
次に、AutoFS の特徴を示します。
システムブート時に NFS ファイルシステムをマウントする必要がないために、ブート時間が短くなります。
NFS ファイルシステムをマウントまたはマウント解除するために、root のパスワードを知っている必要はありません。
NFS ファイルシステムは使用されるときにだけマウントされるために、ネットワークトラフィックが軽減されます。
AutoFS サービスは automount(1M) によって初期化され、automount はシステムのブート時に自動的に実行されます。自動マウントデーモン automountd(1M) は永続的に動作し、必要に応じて NFS ファイルシステムをマウントまたはマウント解除します。デフォルトでは、Solaris オペレーティング環境は /home を自動マウントします。
AutoFS は、ネームサービスに指定されたファイルシステムに対して動作します。この情報は、NIS、NIS+、またはローカルの /etc 内のファイルで管理されます。AutoFS を使用すると、同じファイルシステムを提供するサーバーを複数指定できます。このような方法では、1 つのサーバーがダウンしても、AutoFS が他のマシンからファイルシステムをマウントすることができます。各サーバーに優先度を示す数値を割り当てることによって、マップ内の各資源ごとにサーバーの優先順位を指定できます。
AutoFS の設定と管理方法については、『NFS の管理』を参照してください。
NFS マウントされたファイルシステムの性能とスケーラビリティを向上させるには、キャッシュファイルシステム (CacheFS) を使用します。CacheFS は、サーバーとネットワークの負荷を軽減することによって、NFS サーバーの性能とスケーラビリティを向上させる汎用ファイルシステムキャッシュ機構です。
CacheFS は、階層化ファイルシステムとして設計されており、あるファイルシステムを別のファイルシステムのキャッシュに書き込む機能を持っています。NFS 環境では、CacheFS はサーバーあたりのクライアント比率を高め、サーバーとネットワークの負荷を軽減し、ポイントツーポイントプロトコル (PPP) などの低速リンク上のクライアントのパフォーマンスを向上させます。また、CacheFS と AutoFS サービスを併用すると、さらにパフォーマンスとスケーラビリティを向上することができます。
CacheFS についての詳細は、第 29 章「キャッシュファイルシステムの手順」を参照してください。
表 26-3 に、ファイルシステムの用途に応じてファイルシステムをマウントするためのガイドラインを示します。
表 26-3 ファイルシステムのマウント方法の決定
ファイルシステムを含む CD-ROM は、単にドライブに挿入するだけでマウントできます (ボリューム管理が自動的にマウントします)。ファイルシステムを含むフロッピーディスクは、ドライブに挿入して volcheck コマンドを実行することによりマウントできます。詳細は、パート IV「取り外し可能な媒体の管理」を参照してください。
ファイルシステムのタイプは、次のいずれかを使用して判断できます。
この手順は、ファイルシステムがマウントされているかどうかに関わらず使用できます。
grep コマンドを使用して、ファイルシステムのタイプを調べます。
$ grep mount-point fs-table |
mount-point |
タイプを調べるファイルシステムのマウントポイント名を指定する。 |
fs-table |
ファイルシステムのタイプを調べるファイルシステムテーブルへの絶対パスを指定する。ファイルシステムがマウントされている場合、fs-table は /etc/mnttab。マウントされていない場合、fs-table は /etc/vfstab。 |
マウントポイントの情報が表示されます。
ディスクスライスの raw デバイス名を知っている場合、fstyp(1M) コマンドで、ファイルシステムのタイプを調べることができます (そのディスクスライスにファイルシステムが含まれている場合)。
次の例は、/etc/vfstab を使用して、/export ファイルシステムのタイプを調べます。
$ grep /export /etc/vfstab /dev/dsk/c0t3d0s6 /dev/rdsk/c0t3d0s6 /export ufs 2 yes - $ |
次の例は、/etc/mnttab ファイルを使用して、現在マウントしている (ボリューム管理でマウントした) フロッピーディスクのファイルシステムのタイプを調べます。
$ grep /floppy /etc/mnttab /vol/dev/diskette0/unnamed_floppy /floppy/unnamed_floppy pcfs rw,nohidden, nofoldcase,dev=16c0009 89103376 $ |
この章では、UFS、TMPFS、および LOFS ファイルシステムを作成する方法について説明します。UFS ファイルシステムの場合、この章では、newfs(1M) コマンドを使用してファイルシステムをハードディスク上に作成する方法を示します。TMPFS と LOFS は仮想ファイルシステムであるため、これらのファイルシステムを「作成」するには、ファイルシステムをマウントします。
この章で説明する手順は、次のとおりです。
UFS と DOS のファイルシステムを取り外し可能な媒体上に作成する手順については、第 11 章「CD とフロッピーディスクの使用方法の概要」を参照してください。
UFS ファイルシステムをディスクに作成するためには、そのディスクをフォーマットし、スライスに分割しなければなりません。ディスクスライスとは物理的なディスクのサブセットで、連続するブロックからなる 1 つの範囲のことです。スライスはスワップ空間などの raw デバイスとして使用することも、ディスクベースのファイルシステムとして使用することもできます。ディスクのフォーマットとディスクのスライスへの分割についての詳細は、第 21 章「ディスク管理の概要」を参照してください。
Solaris のデバイス名は、用語「スライス (デバイス名内の文字は s)」を使用して、スライス番号を参照します。SunOS 4.0 およびその互換バージョンでは、スライスは「パーティション」と呼ばれていました。
UFS ファイルシステムは、インストール手順の一部として Solaris オペレーティング環境によって自動的に作成されるので、UFS ファイルシステムを作成しなければならないことはほとんどありません。次の場合には、UFS ファイルシステムを作成する (または作成し直す) 必要があります。
ディスクを追加または交換する場合
既存のパーティション構造を変更する場合
ファイルシステム全体を復元する場合
newfs(1M) コマンドを使用するのが、UFS ファイルシステムを作成する標準的な方法です。newfs コマンドは mkfs(1M) の使いやすいフロントエンドで、新しいファイルシステムを作成します。Solaris システムの場合、デフォルトでは 1 シリンダ当たりのトラック数や 1 トラック当たりのセクター数のような newfs(1M) のパラメータは、新しいファイルシステムを作成するディスクのラベルから読み込まれ、ユーザーが選択したオプションは、mkfs コマンドに渡されファイルシステムが作成されます。
ディスクスライス上に新しいファイルシステムを作成するには、ほとんどの場合に newfs コマンドを使用します。表 27-1 に、newfs コマンドで使用するデフォルトのパラメータを示します。
表 27-1 newfs コマンドで使用するデフォルトのパラメータ
パラメータ |
デフォルト値 |
---|---|
ブロックサイズ |
8K バイト |
フラグメントサイズ |
1K バイト |
最小空き領域 |
((64M バイト/パーティションサイズ) * 100) で算出した値を最も近い整数に切り捨てる。値は、パーティションサイズの 1% から 10% の範囲に制限される。 |
回転遅延 |
デバイスに依存 |
最適化のタイプ |
容量 |
i ノード数 |
2K バイトのディスク領域ごとに 1 個 |
UFS ファイルシステムを作成する前に、ディスクをフォーマットしてスライスに分割しておかなければならない。ディスクのフォーマットとスライスへの分割についての詳細は、第 21 章「ディスク管理の概要」を参照してください。
ファイルシステムを格納するスライスのデバイス名を知っていなければならない。ディスク番号とディスクスライス番号を調べる方法については、第 22 章「ディスク管理の手順」を参照してください。
既存の UFS ファイルシステムを作成し直す場合は、そのマウントを解除する。
スーパーユーザーでなければならない。
ファイルシステムを作成します。
# newfs [-N] [-b size] [-i bytes] /dev/rdsk/device-name |
-N |
newfs が mkfs に渡すパラメータを表示する。ファイルシステムは実際に作成されない。newfs コマンドをテストするのに好ましい方法です。 |
-b size |
ファイルシステムのブロックサイズを指定する。デフォルトは 8192 バイトです。 |
-i bytes |
i ノード当たりのバイト数を指定する。デフォルトは 2048 バイトです。 |
device-name |
新しいファイルシステムを作成するディスクデバイス名を指定する。 |
次の手順を実行する前に、スライスに合ったデバイス名を指定したか確認してください。間違ったスライスを指定すると、その内容は新しいファイルシステムの作成時に消去されます。
システムから、確認を促すプロンプトが表示されます。
UFS ファイルシステムが作成されていることを確認するには、fsck(1M) コマンドを使用して新しいファイルシステムをチェックします。
# fsck /dev/rdsk/device-name |
device-name |
新しいファイルシステムを格納するディスクデバイス名を指定する。 |
fsck コマンドは、新しいファイルシステムの整合性をチェックして、問題が検出された場合には、問題を修復する前にプロンプトを表示します。fsck についての詳細は、第 31 章「ファイルシステムの整合性チェック」を参照してください。
次の例では、/dev/rdsk/c0t3d0s7 上に UFS ファイルシステムを作成します。
# 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, |
ファイルシステムをマウントし、使用可能にするには、第 28 章「ファイルシステムのマウントとマウント解除の手順」に進みます。
一時ファイルシステム (TMPFS) は、ファイルシステムの読み取りと書き込みにローカルのメモリーを使用します。そのため、一時ファイルシステムは、UFS ファイルシステムに比べはるかに高速です。TMPFS ファイルシステムを使用すると、ローカルディスク上で、あるいはネットワーク経由で一時ファイルの読み書きを行う際のオーバヘッドが軽減されるのでシステムのパフォーマンスを向上できます。TMPFS ファイルシステム内のファイルは、リブートまたはマウント解除すると削除されます。
複数の TMPFS ファイルシステムを作成した場合は、すべてのファイルシステムが同じシステム資源を使用するということに注意してください。mount コマンドの -o size オプションを使用して TMPFS のサイズを制限しなければ、ある TMPFS ファイルシステムで作成されたファイルが、他の TMPFS のための領域を使い切ってしまう可能性があります。
詳細は、tmpfs(7FS) のマニュアルページを参照してください。
スーパーユーザーになります。
必要に応じて、TMPFS ファイルシステムをマウントしたいディレクトリを作成し、アクセス権と所有権を設定します。
TMPFSファイルシステムを作成します。
ブート時に一時ファイルシステムを自動的に作成するようにシステムを設定するには、「例 - ブート時に TMPFS ファイルシステムを作成する」を参照してください。
# mount -F tmpfs -o size=number swap mount-point |
size=number |
TMPFS ファイルシステムのサイズを M バイト単位で指定する。 |
mount-point |
TMPFS ファイルシステムとしてマウントするディレクトリを指定する。 |
mount コマンドからの出力を調べて、TMPFS ファイルシステムが作成されていることを確認します。
# mount -v |
次の例は、新しいディレクトリ /export/reports を作成し、そのマウントポイントに TMPRS ファイルシステムをマウントして、50M バイトに制限します。
# mkdir /export/reports # chmod 777 /export/reports # mount -F tmpfs -o size=50 swap /export/reports |
ブート時にシステムが自動的に TMPFS ファイルシステムを作成するようにするには、/etc/vfstab ファイルにエントリを追加します。次の例は、システムのブート時に TMPFS ファイルシステムを /export/test に作成する /etc/vfstab ファイルのエントリを示します。size=number オプションを指定していないため、/export/test の TMPFS ファイルシステムのサイズは利用できるシステム資源によって制限されます。
swap - /export/test tmpfs - yes - |
/etc/vfstab ファイルについての詳細は、「/etc/vfstab ファイルのフィールドの説明」を参照してください。
LOFS ファイルシステムは、既存のファイルシステムへの代替パスを提供する仮想ファイルシステムです。他のファイルシステムを LOFS ループバックファイルシステムにマウントしても、元のファイルシステムは変化しません。
詳細は、lofs(7FS) のマニュアルページを参照してください。
LOFS ファイルシステムは慎重に作成してください。LOFS は仮想ファイルシステムなので、ユーザーやアプリケーションを混乱させる可能性があります。
スーパーユーザーになります。
LOFS ファイルシステムをマウントしたいディレクトリを作成し、適切なアクセス権と所有権を設定します。
LOFS ファイルシステムを作成します。
ブート時にループバックファイルシステムを自動的に作成するようにシステムを設定するには、「例 - ブート時に LOFS ファイルシステムを作成する」を参照してください。
# mount -F lofs loopback-directory mount-point |
loopback-directory |
ループバックマウントポイントにマウントするファイルシステムを指定する。 |
mount-point |
LOFS ファイルシステムをマウントするディレクトリを指定する。 |
mount コマンドからの出力を調べて、LOFS ファイルシステムが作成されていることを確認します。
# mount -v |
次の例は、chroot(1M) コマンドと新しい LOFS ファイルシステムを使用して、プロセスやプロセスファミリが完全な仮想ファイルシステムを認識できるようにする。
# mkdir /tmp/newroot # mount -F lofs / /tmp/newroot # chroot /tmp/newroot command |
ブート時にシステムが自動的に LOFS ファイルシステムを作成するようにするには、/etc/vfstab ファイルにエントリを追加します。次の例は、ルート (/) ファイルシステムの LOFS ファイルシステムを /tmp/newroot に作成する /etc/vfstab ファイルのエントリを示しています。
/ - /tmp/newroot lofs - yes - |
ループバックファイルシステムのエントリは、/etc/vfstab ファイル内の最後のエントリでなければなりません。ループバックファイルシステムのエントリが、そこに組み込まれるファイルシステムよりも前にあると、ループバックファイルシステムを作成できません。
/etc/vfstab ファイルの詳細は、「/etc/vfstab ファイルのフィールドの説明」を参照してください。
この章では、ファイルシステムをマウントしたり、マウント解除する方法について説明します。この章で説明する手順は次のとおりです。
ファイルシステムを作成したら、そのファイルシステムをシステムで使用できるようにする必要があります。ファイルシステムを使用できるようにするには、マウントします。マウントしたファイルシステムは、システムのディレクトリツリー内の指定したマウントポイントに接続されます。ルート (/) ファイルシステムは常にマウントされています。他のファイルシステムは、ルート (/) ファイルシステムに接続したり切り離したりできます。
表 28-1 に、ファイルシステムの用途に応じてファイルシステムをマウントするためのガイドラインを示します。
表 28-1 ファイルシステムのマウント方法の決定
ファイルシステムを含む CD-ROM は、単にドライブに挿入するだけでマウントできます (ボリューム管理が自動的にマウントします)。ファイルシステムを含むフロッピーディスクは、ドライブに挿入して volcheck(1) コマンドを実行することによりマウントできます。詳細は、第 11 章「CD とフロッピーディスクの使用方法の概要」を参照してください
表 28-2 に、ファイルシステムのマウントとマウント解除に使用する /usr/sbin ディレクトリ内のコマンドを示します。
表 28-2 ファイルシステムのマウントとマウント解除に使用するコマンド
コマンド |
説明 |
---|---|
mount(1M) |
ファイルシステムとリモート資源をマウントする。 |
mountall(1M) |
/etc/vfstab ファイル内で指定されたすべてのファイルシステムをマウントする。マルチユーザー実行状態になる時に、mountall コマンドが自動的に実行される。 |
umount(1M) |
ファイルシステムとリモート資源をマウント解除する。 |
umountall(1M) |
/etc/vfstab ファイル内で指定されたすべてのファイルシステムをマウント解除する。 |
mount コマンドは、整合性のない読み取り/書き込み用のファイルシステムはマウントしません。mount または mountall コマンドからエラーメッセージが表示される場合は、ファイルシステムをチェックする必要があります。ファイルシステムをチェックする方法については、第 31 章「ファイルシステムの整合性チェック」を参照してください。
umount コマンドは、使用中のファイルシステムはマウント解除しません。ユーザーがファイルシステム内のディレクトリをカレントディレクトリにしているか、あるいは、プログラムがそのファイルシステム上にあるファイルをオープンしている場合、そのファイルシステムは、使用中であると認識されます。
表 28-3 に、mount コマンドの -o オプションで指定できる汎用マウントオプションを示します。複数のオプションを指定する場合は、-o ro,nosuid のようにコンマ (空白を入れない) で区切ります。
各ファイルシステムタイプで指定可能なマウントオプションのリストについては、各マウントコマンドのマニュアルページ (たとえば、mount_ufs(1M)) を参照してください。
表 28-3 -o で指定する汎用マウントオプション
どのファイルシステムがマウントされているかを調べるには、mount(1M) コマンドを使用します。
$ mount -v |
-v |
マウントされているファイルシステムのリストを冗長モードで表示する |
$ 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 Mon Jun 8 10:28:31 1998 /dev/fd on fd read/write/setuid on Mon Jun 8 10:28:31 1998 /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 Mon Jun 8 10:28:31 1998 $ |
/etc/vfstab ファイル内のエントリには、表 28-4 に示すように 7 つのフィールドがあります。
表 28-4 /etc/vfstab ファイルのフィールドの説明
フィールド名 |
説明 |
---|---|
device to mount |
|
device to fsck |
「device to mount」フィールドで指定したファイルシステムに対応する raw (キャラクタ型) デバイス名 (/dev/rdsk/c0t0d0s0 など)。これにより、fsck が使用するインタフェースが決まる。読み取り専用ファイルシステムやリモートファイルシステムなど、適用できるデバイスがない場合は、ダッシュ (-) を使用する。 |
mount point |
デフォルトのマウントポイントディレクトリ ( /usr など) を指定する。
|
FS type |
「device to mount」 フィールドで指定したファイルシステムのタイプを指定する。 |
fsck pass |
fsck がファイルシステムをチェックするか決めるために使用するパス番号。このフィールドでダッシュ (-) を指定すると、ファイルシステムはチェックされない。 このフィールドに 0 が指定されている場合、UFS ファイルシステムはチェックされないが、フィールドに 0 より大きい値が指定されている場合に UFS 以外のファイルシステムはチェックされる。 このフィールドに 1 が指定されている場合、ファイルシステムは順番にチェックされる。このフィールドに 1 より大きな値が指定され、さらに preen (修復) オプション (-o p) が指定されている UFS ファイルシステムが複数ある場合、効率を最大限に高めるために、fsck は複数のディスク上のファイルシステムを並行して自動的にチェックする。それ以外の場合、このフィールドの値は意味を持たない。fsck pass フィールドでは、ファイルシステムをチェックする順序を明示的には指定できない。 |
mount at boot |
システムのブート時にファイルシステムが mountall によって自動的にマウントされるかどうかを表す。yes または no に設定。このフィールドは AutoFS とは連動していないので注意してください。 |
mount options |
ファイルシステムのマウントに使用されるオプションを (空白を空けずに) コンマで区切ったリスト。オプションなしを示すにはダッシュ (-) を使用する。汎用オプションについては、表 28-3 を参照。 |
/etc/vfstab ファイル内のフィールドごとに 1 つずつエントリがなければなりません。フィールドで値を指定しない場合は、必ずダッシュ (-) を入力してください。
スーパーユーザーになります。
また、ファイルシステムをマウントするには、ローカルのシステムにマウントポイントが必要です。マウントポイントとは、マウントされるファイルシステムが接続されるディレクトリのことです。
/etc/vfstab ファイルを編集してエントリを追加します。
ルート (/) ファイルシステムは、ブートプロセスの過程でカーネルによって読み取り専用としてマウントされます。そのため、remount オプション (および、remount と一緒に使用できるオプション) だけが /etc/vfstab ファイルのルート (/) エントリでは有効です。
/etc/vfstab のフィールドエントリの詳細は、 表 28-4 を参照してください。次のことを確認します。
各フィールドを空白 (空白文字またはタブ) で区切る。
フィールドで値を指定しない場合はダッシュ (-) を入力する。
変更結果を保存します。
次の例では、デフォルトのマウントオプション (読み取り/書き込み) を使用して、ディスクスライス /dev/dsk/c0t3d0s7 を UFS ファイルとして、マウントポイントディレクトリ /files1 にマウントします。また、「device to fsck」として raw キャラクタ型デバイス /dev/rdsk/c0t3d0s7 を指定します。「fsck pass」の値が 2 なので、ファイルシステムは順不同でチェックされます。
#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 - / - /tmp/newroot lofs - yes - |
次の例では、システム pluto 上のディレクトリ /export/man を、NFS ファイルシステムとしてマウントポイント /usr/man にマウントします。ファイルシステムが NFS であるため、「device to fsck」や「fsck pass」は指定されません。この例では、「mount options」は ro (読み取り専用) と soft になっています。信頼性を高めるために、読み取り/書き込みの NFS ファイルシステムでは hard マウントオプションを指定します。
#device device mount FS fsck mount mount #to mount to fsck point type pass at boot options pluto:/export/man - /usr/man nfs - yes ro,soft |
次の例では、ルート (/) ファイルシステムをループバックマウントポイント /tmp/newroot にマウントします。「mount at boot」には yes を指定し、「device to fsck」と「fsck pass」の番号は指定しません。LOFS ファイルシステムをマウントするときは、LOFS を構成するのに使用されるファイルシステムを先にマウントし、その後で LOFS をマウントします。
#device device mount FS fsck mount mount #to mount to fsck point type pass at boot options # / - /tmp/ newroot lofs - yes - |
スーパーユーザーになります。
また、ファイルシステムをマウントするには、ローカルのシステムにマウントポイントが必要です。マウントポイントとは、マウントされるファイルシステムが接続されるディレクトリのことです。
/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 Wed May 27 09:11:50 1998 /dev/fd on fd read/write/setuid on Wed May 27 09:11:50 1998 /tmp on swap read/write on Wed May 27 09:11:50 1998 |
次の例では、/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 Mon Jun 8 10:28:31 1998 /dev/fd on fd read/write/setuid on Mon Jun 8 10:28:31 1998 /tmp on swap read/write on Mon Jun 8 10:28:31 1998 /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 |
スーパーユーザーになります。
また、ファイルシステムをマウントするには、ローカルのシステムにマウントポイントが必要です。マウントポイントとは、マウントされるファイルシステムが接続されるディレクトリのことです。
mount(1M) コマンドにより、UFS ファイルシステムをマウントします。
# mount [-o mount-options] /dev/dsk/device-name mount-point |
-o mount-options |
UFS ファイルシステムのマウントに使用できるマウントオプションを指定する。汎用マウントオプションについては、表 28-3を参照。すべてのオプションについては、mount_ufs(1M) のマニュアルページを参照。 |
/dev/dsk/device-name |
ファイルシステムを保持するディスクスライス用のディスクデバイス名 (/dev/dsk/c0t3d0s7 など)。ディスクデバイス名を調べる方法については、「ディスクスライス情報を表示する方法」を参照。 |
mount-point |
ファイルシステムをマウントするディレクトリ |
次の例では、/dev/dsk/c0t3d0s7 を /files1 ディレクトリにマウントします。
# mount /dev/dsk/c0t3d0s7 /files1 |
UFS ロギングによってファイルシステムの整合性が保たれるために、システムのリブート時間が大幅に短縮されます。次の例は、ログを有効にして、/dev/dsk/c0t3d0s7 を /files1 ディレクトリにマウントします。
# mount -o logging /dev/dsk/c0t3d0s7 /files1 |
ファイルシステムをマウントするときには、largefiles オプションがデフォルトで選択されるため、2G バイトを超えるファイルを作成できます。大規模ファイルを作成した後で、nolargefiles オプションを指定してファイルシステムを再マウントするには、大規模ファイルをすべて削除して、fsck を実行して状態を「nolargefiles」にリセットしなければなりません。
以下の手順では、ファイルシステム用のエントリが /etc/vfstab ファイルにあるものとします。
スーパーユーザーになります。
ファイルシステム内に大規模ファイルが存在しないことを確認します。
# cd mount-point # find . -xdev -size +2000000 -exec ls -l {} ¥; |
mount-point |
大規模ファイルがあるかどうかをチェックするファイルシステムのマウントポイントを指定する。 |
大規模ファイルが当該ファイルシステム内に存在する場合は、そのファイルを削除するか、他のファイルシステムに移動します。
ファイルシステムのマウントを解除します。
# umount mount-point |
ファイルシステムの状態をリセットします。
# fsck mount-point |
nolargefiles オプションを指定してファイルシステムを再マウントします。
# mount -o nolargefiles mount-point |
次の例は、/datab ファイルシステムをチェックし、nolargefiles オプションを指定して再マウントしています。
# cd /datab # find . -xdev -size +2000000 -exec ls -l {} ¥; # umount /datab # fsck /datab # mount -o nolargefiles /datab |
スーパーユーザーになります。
また、ファイルシステムをマウントするには、ローカルのシステムにマウントポイントが必要です。マウントポイントとは、マウントされるファイルシステムが接続されるディレクトリのことです。
資源 (ファイルまたはディレクトリ) がサーバーから使用可能かどうかを確認します。
NFS ファイルシステムをマウントするには、share(1M) コマンドを使用し、サーバー上の資源を使用可能にしておかなければなりません。資源を共有する方法については、『NFS の管理』を参照してください。
mount(1M) コマンドにより、NFS ファイルシステムをマウントします。
# mount -F nfs [-o mount-options] server:/directory mount-point |
-o mount-options |
NFS ファイルシステムのマウントに使用できるマウントオプションを指定する。汎用マウントオプションのリストについては、表 28-3を参照。オプションについては、mount_nfs(1M) のマニュアルページを参照。 |
server:/directory |
共有する資源を持つサーバーのホスト名と、マウントするファイルまたはディレクトリへのパスを指定する。 |
mount-point |
ファイルシステムをマウントするディレクトリを指定する。 |
次の例は、サーバー pluto の /export/packages ディレクトリを /mnt にマウントしています。
# mount -F nfs pluto:/export/packages /mnt |
スーパーユーザーになります。
また、ファイルシステムをマウントするには、ローカルのシステムにマウントポイントが必要です。マウントポイントとは、マウントされるファイルシステムが接続されるディレクトリのことです。
mount(1M) コマンドにより、S5FS ファイルシステムをマウントします。
# mount -F s5fs [-o mount-options] /dev/dsk/device_name mount-point |
-o mount-options |
S5FS ファイルシステムのマウントに使用できるマウントオプションを指定する。汎用マウントオプションについては、表 28-3 を参照。オプションについては、mount_s5fs(1M) のマニュアルページを参照。 |
/dev/dsk/device-name |
ファイルシステムが存在するディスクスライスのデバイス名 (/dev/dsk/c0t3d0s7 など) 。ディスクデバイス名を調べる方法については、「ディスクスライス情報を表示する方法」を参照。 |
mount-point |
ファイルシステムをマウントするディレクトリを指定する。 |
次の例では、/dev/dsk/c0t3d0s7 を /files1 ディレクトリにマウントします。
# mount -F s5fs /dev/dsk/c0t3d0s7 /files1 |
次の手順で、PCFS (DOS) ファイルシステムをハードディスクからマウントします。
スーパーユーザーになります。
また、ファイルシステムをマウントするには、ローカルのシステムにマウントポイントが必要です。マウントポイントとは、マウントされるファイルシステムが接続されるディレクトリのことです。
mount(1M) コマンドにより、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 ファイルシステムを使用中のプロセス 4006 を終了させます。
# 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) コマンドを参照してください。
作業 |
説明 |
手順の説明 |
---|---|---|
1. キャッシュの作成 |
cfsadmin コマンドを使用してキャッシュを作成する。 | |
2. ファイルシステムをキャッシュにマウントする |
mount コマンドを使用してファイルシステムをキャッシュにマウントする。 | |
|
/etc/vfstab ファイルを編集してファイルシステムをキャッシュに書き込む。 | |
|
AutoFS を使用してファイルシステムをキャッシュに書き込む。 |
スーパーユーザーになります。
cfsadmin(1M) コマンドの -c オプションを使用してキャッシュを作成します。
# cfsadmin -c cache-directory |
cache-directory |
キャッシュが作成されるディレクトリ名。詳細は、cfsadmin(1M) のマニュアルページを参照 |
キャッシュを作成し終わったら、キャッシュディレクトリ内では操作しないでください。何か実行すると、CacheFS ソフトウェア内で矛盾が生じます。
次の例では、デフォルトのキャッシュパラメータ値を使用して、/local/mycache ディレクトリ内にキャッシュを作成します。
# mkdir /local # cfsadmin -c /local/mycache |
指定したファイルシステム内のファイルにユーザーがローカルにアクセスできるように、キャッシュにマウントされるファイルシステムを指定します。実際には、各ファイルは、ユーザーがアクセスするまではキャッシュに書き込まれません。
キャッシュにマウントされるファイルシステムを指定するには、次の 3 つの方法があります。
mount(1M) コマンドを使用する方法 - 同じファイルにアクセスするには、システムをリブートするたびに mount コマンドを使用する必要がある。
/etc/vfstab ファイルを編集する方法 - 一度編集するだけですむ。/etc/vfstab ファイルの内容は、システムをリブートした後も変更されずに残る。
AutoFS を使用する方法 - 一度実行するだけですむ。AutoFS のマップは、システムをリブートした後も変更されずに残る。
いずれかの方法を選択してファイルシステムをマウントしてください。
CacheFS では、ルート (/) と /usr のファイルシステムをキャッシュに書き込むことはできません。ルート (/) と /usr のファイルシステムをキャッシュに書き込むには、Solstice AutoClient 製品を購入しなければなりません。AutoClient 製品の詳細は、『Solstice AutoClient 2.1 管理者ガイド』を参照してください。
スーパーユーザーになります。
マウントポイントを作成します。
マウントポイントを作成すると、ユーザーはそのマウントポイントで指定されたファイルシステムにアクセスできます。マウントポイントはどこからでも作成できます。次の手順のように、マウントコマンドで使用する 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 |
AutoFS とマップを編集する方法の詳細は、『NFS の管理』の AutoFS に関する章を参照してください。
次の auto_master エントリは、キャッシュファイルシステムを /docs ディレクトリに自動的にマウントします。
/docs -fstype=cachefs,cachedir=/local/mycache,backfstype=nfs merlin:/docs
作業 |
説明 |
手順の説明 |
---|---|---|
1. キャッシュの変更 |
キャッシュの動作を変更する。 | |
2. キャッシュ情報の表示 |
cfsadmin コマンドを使用してキャッシュされたファイルシステムに関する情報を表示する。 | |
3. 整合性チェックの実行 |
cfsadmin コマンドを使用して必要に応じて整合性チェックを実行する。 | |
4. キャッシュの削除 |
umount コマンドと cfsadmin コマンドを使用して、キャッシュされたファイルシステムを削除する。 | |
5. ファイルシステムの完全性の検査 |
fsck_cachefs コマンドを使用して、キャッシュされたファイルシステムの完全性をチェックする。 |
キャッシュを設定し終わったら、次の管理作業を実行できます。
キャッシュ内のファイルシステムを変更する (キャッシュをマウント解除し、削除し、作成し直し、再びマウントする)
キャッシュ情報を表示する
キャッシュの整合性をチェックする
キャッシュからファイルシステムを削除する
キャッシュされたファイルシステムの完全性をチェックする
/etc/vfstab ファイルを使用してファイルシステムをマウントしている場合は、このファイル内でファイルシステムオプションを編集してキャッシュを変更します。AutoFS を使用している場合は、AutoFS マップ内でファイルシステムオプションを編集してキャッシュを変更します。
ファイルシステムの特定のオプションを変更する方法については、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。キャッシュ内でファイルシステムを変更する場合は、キャッシュを削除してから作成し直す必要があります。また、ファイルシステムの共有方法とアクセス方法によっては、マシンをシングルユーザーモードでリブートしなければならない場合があります。
次の例は、この手順を示しています。
次の例では、キャッシュが削除されてから再び作成され、ファイルシステム /docs に指定された demandconst オプションを使用して再びマウントされます。この例は、シングルユーザーモードでリブートするなどの手順を示しています。必要であれば他のコマンドを使用して、この例の作業を実行することもできます。
$ su password: # shutdown -g30 -y . . . Type Cntrl-d to proceed with normal startup, (or give root password for system maintenance): # enter password: . . . Here is where you may be prompted from system to run fsck on the file system where the cache is located. # 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_cachefs(1M) を参照してください。
スーパーユーザーになります。
指定されたキャッシュ内でキャッシュされたファイルシステムをチェックします。
# fsck -F cachefs [-m] [-o noclean] cache-directory |
-m |
fsck にキャッシュされたファイルシステムをチェックさせるが、修復しない |
-o noclean |
キャッシュされたファイルシステム上でチェックのみを実行させるが、修復しない |
cache-directory |
キャッシュがあるディレクトリ名 |
次の例では、/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(1) のマニュアルページを参照してください。
次の例は、パッキングリストファイルの内容を示しています。
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 -sf コマンドを使用して、パッキングリストをキャッシュにパックします。
$ 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 統計情報の設定
作業 |
説明 |
手順の説明 |
---|---|---|
1. ロギングの設定 |
cachefslog コマンドを使用して、キャッシュされたファイルシステムのロギングを設定する。 | |
2. ログファイルの検索 |
cachefslog コマンドを使用してログファイルの位置を特定する。 | |
3. ロギングプロセスの停止 |
cachefslog コマンドを使用してロギングプロセスを停止する。 | |
4. キャッシュサイズの表示 |
cachefswssize コマンドを使用してキャッシュサイズを表示する。 | |
5. キャッシュ統計情報の表示。 |
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(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) のマニュアルページを参照してください。
この章の内容は次のとおりです。
この節では、スワップ空間の概念と、SunOS 4.0/4.1 と SunOS 5.7 のスワップ要件の違いについて説明します。すでに SunOS 5.7 のスワップ機構について精通している方は、「スワップ空間の計画」の節に進んでください。
管理者は、次の事柄を決定する上で SunOS 5.7 のスワップ機構を理解しておく必要があります。
スワップ空間の要件
tmpfs ファイルシステムとの関係
スワップ空間に関連するエラーメッセージからの復元
SunOS 5.7 システムソフトウェアは、一時記憶域にファイルシステムではなくディスクスライスを使用します。これらのスライスを「スワップ」スライスと呼びます。 スワップスライスは、システムの物理メモリーが不足し現在のプロセスを処理することができないときに、仮想メモリー記憶域として使用されます。
SunOS 5.7 の仮想メモリーシステムは、ディスク上のファイルの物理コピーをメモリー内の仮想アドレスに対応付けます。これらのマッピングに関するデータが入った物理メモリーページは、ファイルシステム内の通常ファイルまたはスワップ空間から読み直されます。ユーザーにはメモリーをバックアップしているファイル名はわからないため、スワップ空間から読み直されたメモリーは anonymous メモリーとして参照されます。
SunOS 4.0/4.1 の anonymous メモリーページは、システムのスワップ空間プールからランダムに割り当てられた名前を使用して対応付けられます。これらのメモリーページの用途は次のとおりです。
書き込み時コピー処理中に作成されるデータの専用コピー
プロセスとスタックのセグメント
TMPFS ファイルシステム記憶域の資源
SunOS 4.0/4.1 の anonymous メモリーの実装には、次の制限があります。
アプリケーションで使用されない場合にも、anonymous メモリーのマッピング用に必ず物理記憶域 (ディスク上にとられたバックアップ用のスワップ空間) を確保しなければならない。
たとえば、大量のデータセグメントを持つアプリケーションは、各ページが物理記憶域にデータが書き出されない場合でも、大量のスワップ空間を使用して構成しなければならない。
バックアップとなる記憶域はランダムに選択され、変更できないので、anonymous メモリーページを物理記憶域に関連付けるための方法には制限があり、柔軟性に欠ける。
SunOS 5.7 ソフトウェア環境には、「仮想スワップ空間」という概念が導入されています。これは、anonymous メモリーページとこれらのページを実際にバックアップする物理記憶域 (またはディスク上にとられたバックアップ用のスワップ空間) の間に位置する層です。システムの仮想スワップ空間は、すべての物理 (ディスク上にとられたバックアップ用のスワップ空間) スワップ空間と現在使用可能な物理メモリーの一部の合計に等しくなります。
仮想スワップ空間の長所は次のとおりです。
仮想スワップ空間が物理 (ディスク) 記憶域に対応していなくてもかまわないので、大きな物理スワップ空間を確保する必要がなくなる。
SWAPFS という疑似ファイルシステムが、anonymous メモリーページのアドレスを提供する。SWAPFS はメモリーページの割り当てを制御するので、ページに対する処理を柔軟に決定できる。たとえば、ディスク上にとられたバックアップ用のスワップ記憶域のページ要件を変更できる。
SunOS 5.7 環境では、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 のエラーメッセージについては、『Solaris のシステム管理 (第 2 巻)』の「ファイルシステムで発生する問題の解決」を参照してください。
UFS ファイルシステムは、一連の内部テーブルを基にして使用済み i ノード、使用可能ブロックを特定します。これらの内部テーブルがディスク上のデータと正しく同期していないと、整合性が失われ、ファイルシステムの修復が必要になります。
次のような原因でオペレーティングシステムが異常終了すると、ファイルシステムが損傷したり、整合性が失われたりすることがあります。
電源障害
不注意によるシステム電源の切断
正しいシャットダウン手順以外の方法によるシステム電源の切断
カーネル内のソフトウェアエラー
ファイルシステムの破損は重大ですが、あまり頻繁に起きるものではありません。システムをブートすると、ファイルシステムの整合性チェックが (fsck プログラムを使用して) 自動的に実行されます。ほとんどの場合は、このファイルシステムのチェックによって問題が修復されます。
この章では、fsck プログラムでチェックされ修復される問題と fsck のオプションについて説明します。また、次の作業についても説明します。
ブート時に実行される自動チェック機能を変更する方法
ファイルシステムのチェックが必要かどうかを調べる方法
UFS ファイルシステムを対話形式でチェックして修復する方法
不良スーパーブロックを復元する方法
fsck で修復できない UFS ファイルシステムを修復する方法
fsck のエラーメッセージについては、『Solaris のシステム管理 (第 2 巻)』の「ファイルシステムで発生する問題の解決」を参照してください。
fsck プログラムは、ファイルシステム上に配置されているが参照不可能なファイルとディレクトリを lost+found ディレクトリに入れます。各ファイルの i ノード番号が名前として割り当てられます。lost+found ディレクトリが存在しない場合は、fsck によって作成されます。lost+found ディレクトリ内の領域が足りない場合は、そのサイズが fsck によって拡張されます。
fsck コマンドは、スーパーブロックに格納された状態フラグを使用して、ファイルシステムの状態を記録します。また、このフラグを使用して、ファイルシステムの整合性をチェックする必要があるかどうかが判断されます。このフラグはブート時には /sbin/rcS スクリプトによって使用され、コマンド行からは fsck に -m オプションを指定した場合に使用されます。fsck の -m オプションの結果を無視するのなら、状態フラグの設定に関係なく、すべてのファイルシステムをチェックできます。
表 31-1 に状態フラグを示します。
表 31-1 状態フラグの値
状態フラグの値 |
説明 |
---|---|
FSACTIVE |
ファイルシステムのマウント後、変更されると、状態フラグが FSACTIVE に設定される。ファイルシステムの整合性が失われている可能性がある。変更後のメタデータがディスクに書き込まれるまでは、ファイルシステムに FSACTIVE マークが付けられる。ファイルシステムが正常にマウント解除されると、状態フラグは FSCLEAN に設定される。FSACTIVE フラグが設定されたファイルシステムは、整合性がないので、fsck でチェックしなければならない。 |
FSBAD |
ルート (/) ファイルシステムが、FSCLEAN でも FSSTABLE でもない状態のときにマウントされると、状態フラグが FSBAD に設定される。カーネルが、このファイルシステムの状態を FSCLEAN または FSSTABLE に変更することはない。ブートの処理の一部として、ルート (/) ファイルシステムに FSBAD フラグが設定された場合、ルートファイルシステムは読み取り専用としてマウントされる。ルートの raw デバイスに対して fsck を実行する。その後で、ルート (/) ファイルシステムを読み取り/書き込みとしてマウントし直す。 |
FSCLEAN |
ファイルシステムが正しくマウント解除された場合は、状態フラグが FSCLEAN に設定される。FSCLEAN 状態フラグが設定されているファイルシステムは、システムのブート時にチェックされない。 |
FSLOG |
UFS ロギングを有効にしてファイルシステムがマウントされている場合、状態フラグが FSLOG に設定される。システムのブート時、状態フラグが FSLOG のファイルシステムはチェックされない。 |
FSSTABLE |
ファイルシステムはマウントされている (またはされた) が、前回のチェックポイント (sync または fsflush) 以後に変更がなかった。チェックポイントは、通常は 30 秒ごとに発生する。たとえば、カーネルはファイルシステムがアイドル状態かどうかを定期的にチェックし、アイドル状態であれば、スーパーブロック内の情報をディスクにフラッシュさせて FSSTABLE マークを設定する。システムがクラッシュした場合、ファイルシステムの構造は正しいが、少量のデータが失われている可能性がある。FSSTABLE マークが付いたファイルシステムは、マウント前のチェックをスキップできる。ファイルシステムの状態が FSCLEAN でも FSSTABLE でもなければ、mount(2) システムコールではファイルシステムは読み取り/書き込み用にマウントされない。 |
表 31-2 に、fsck コマンドを使用して、初期状態に基づいて状態フラグを変更する方法を示します。
表 31-2 fsck による状態フラグの変更内容
初期状態 : fsck の実行前 |
fsck の実行後 |
||
---|---|---|---|
エラーなし |
すべてのエラーを修正済み |
エラーが未修正 |
|
unknown |
FSSTABLE |
FSSTABLE |
unknown |
FSACTIVE |
FSSTABLE |
FSSTABLE |
FSACTIVE |
FSSTABLE |
FSSTABLE |
FSSTABLE |
FSACTIVE |
FSCLEAN |
FSCLEAN |
FSSTABLE |
FSACTIVE |
FSBAD |
FSSTABLE |
FSSTABLE |
FSBAD |
FSLOG |
FSLOG |
FSLOG |
FSLOG |
この節では、ファイルシステムの通常の処理中に発生する問題、原因、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 ノードリストを調べて、各重複ブロックを使用する他の 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 ファイルシステムに対して 0 が指定された場合、ファイルシステムはチェックされない。 |
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 コマンドの構文とオプション」 と『Solaris のシステム管理 (第 2 巻)』の「ファイルシステムで発生する問題の解決」を参照してください。
ファイルシステムをチェックします。
# fsck -m /dev/rdsk/device-name |
このコマンドで指定したファイルシステムのスーパーブロック内の状態フラグがチェックされ、ファイルシステムがクリーンであるか、あるいはチェックする必要があるかどうかが判断されます。
デバイス引数を省略すると、/etc/vfstab 内で「fsck pass」の値が 0 より大きいすべての UFS ファイルシステムがチェックされます。
次の例では、ファイルシステムのチェックが必要なことを示しています。
# fsck -m /dev/rdsk/c0t0d0s6 ** /dev/rdsk/c0t0d0s6 ufs fsck: sanity check: /dev/rdsk/c0t0d0s6 needs checking |
スーパーユーザーになります。
ルート (/) と /usr 以外のローカルファイルシステムをマウント解除します。
# umountall -l |
ファイルシステムをチェックします。
# fsck |
/etc/vfstab ファイル内で、「fsck pass」フィールド内のエントリが 0 より大きいすべてのファイルシステムがチェックされます。また、fsck の引数として、マウントポイントディレクトリや /dev/rdsk/device-name も指定できます。整合性が失われている場合には、そのことを示すメッセージが表示されます。エラーメッセージのプロンプトに応答して 1 つまたは複数の UFS ファイルシステムを対話式でチェックする方法については、『Solaris のシステム管理 (第 2 巻)』の「ファイルシステムで発生する問題の解決」 を参照してください。
エラーを修正し終わったら、fsck と入力して Return キーを押します。
fsck は、一度の実行ですべてのエラーを修正できないことがあります。「FILE SYSTEM STATE NOT SET TO OKAY」というメッセージが表示される場合は、fsck を使って、修正作業を繰り返します。fsck では修正できない場合は、「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 の修復オプション (-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 ***** # |
あるパスで問題が訂正されたために、前のパスで見つからなかった問題が表面化する場合があるので、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 デバイスファイルの読み取り権を持っていなければなりません (セキュリティ上の問題のため、一般のユーザーには 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-4 を参照してください。
表 32-1 および表 32-2 に、ルート (/) のデフォルトファイルシステム中のディレクトリを示します。表 32-3 に、/usr のデフォルトファイルシステム中のディレクトリを示します。
表 32-1 ルート (/) ファイルシステムのデフォルトディレクトリ (その 1)
ディレクトリ |
説明 |
---|---|
/ |
ファイルシステムの名前空間全体のルート |
/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-4 を参照 |
表 32-2 ルート (/) ファイルシステムのデフォルトディレクトリ (その 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 |
uucp のログファイルと状態ファイル |
/var/yp |
NIS データベース (NIS との下位互換性を保つため。NIS+ への移行が完了した後は不要) |
表 32-3 /usr ファイルシステムのデフォルトディレクトリ
ディレクトリ |
説明 |
---|---|
bin |
標準システムコマンドの位置 |
demo |
デモプログラムとデータ |
games |
空のディレクトリ。SunOS 4.0/4.1 ソフトウェアで使用されていた |
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/sparcv9 |
64 ビット Solaris ライブラリ |
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-4 に、/platform ディレクトリと /usr/platform ディレクトリに入っているすべてのプラットフォームに依存するオブジェクトを示します。
表 32-4 /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 バイトに連動します。
上限を、まったくフラグメントのない場合の完全ブロックのサイズに等しくすることができます。容量よりも速度を重視する場合、きわめて大型のファイルがあるファイルシステムには、この構成が最適なことがあります。
フラグメントサイズを選択するときには、処理時間と容量を取捨選択してください。フラグメントサイズが小さければ容量の節約になりますが、割り当てには時間がかかります。原則として、格納効率を高めるには、ほとんどのファイルが大型のファイルシステムには、大きめのフラグメントサイズを使用します。ほとんどのファイルが小型のファイルシステムには、小さめのフラグメントサイズを使用します。
「最小空き容量」とは、ファイルシステムの作成時に予約分として保持されるディスク容量です。デフォルトの予約分は、((64M バイト/パーティションサイズ) * 100) で算出し、その値を最も近い整数に切り捨てます。値は、ディスク容量の 1% から 10% の範囲に制限されます。ファイルシステム内の空き容量が少なくなるほど、アクセス速度が低下するので、空き容量は重要です。十分な空き容量があれば、UFS ファイルシステムは効率よく動作します。ファイルシステムがいっぱいになって、使用可能なユーザー領域を使い果たすと、スーパーユーザー以外は予約済みの空き容量にアクセスできなくなります。
df などのコマンドは、最小空き容量として割り当て済みの分を差し引いて、ユーザーに使用可能な容量をパーセントで表示します。コマンドでファイルシステム内のディスク容量の 100 パーセント以上が使用中であると表示される場合は、予約分の一部がルートに使用されています。
ユーザーに制限を適用する場合に、各ユーザーが使用可能な容量には予約分の空き容量は含まれません。tunefs コマンドを使用すると、既存のファイルシステムの最小空き容量の値を変更できます。
「回転の遅れ」は、CPU がデータ転送を完了し、同じディスクシリンダ上で次のデータ転送を開始するまでに予想される最小所要時間 (ミリ秒単位) です。デフォルトの遅れは、ディスクのタイプによって異なり、通常はディスクタイプごとに最適化されています。
ファイルに書き込むときに、UFS 割り当てルーチンは新しいブロックを同じファイル内の直前のブロックと同じディスクシリンダ上に配置しようとします。また、新しいブロックをトラック内で最適の位置に配置して、そこへのアクセスに必要なディスクの回転を最小限度に抑えようとします。
ファイルブロックを「回転して適切に動作」するように配置するには、割り当てルーチンは CPU による転送処理速度と、ディスクが 1 ブロックをスキップする所要時間を認識しなければなりません。mkfs コマンドのオプションを使用すると、ディスクの回転速度と 1 トラック当たりのディスクブロック (セクター) 数を指定できます。割り当てルーチンは、この情報を使用して、1 ディスクブロックをスキップするミリ秒数を求めます。次に、割り当てルーチンは予想転送時間 (回転の遅れ) を使用して、システムの読み込み準備ができたときに次のブロックがディスクヘッドの真下にくるようにブロックを配置します。
回転の遅れ (newfs の -d オプション) を指定しなくてもよいデバイスがあります。
各ブロックは、システムが同じディスクの回転中に読み込める処理速度の場合にのみ、連続して配置されます。システムが低速であれば、ディスクはファイル内の次のブロックの先頭を通り過ぎてしまうので、そのブロックを読み込むには、もう 1 回転しなければならず、長時間かかります。次のディスク要求が発生するときに該当するブロックにヘッドがきているように、ギャップに適切な値を指定してください。
既存のファイルシステムの場合は、tunefs コマンドを使用してこのパラメータの値を変更できます。変更結果は、それ以後のブロック割り当てにのみ適用され、すでに割り当て済みのブロックには適用されません。
「最適化のタイプ」には、「領域」と「時間」があります。
領域 - 領域の最適化を選択すると、フラグメントを最小限度に抑え、ディスクの使用状況が最適化されるようにディスクブロックが割り当てられる。
時間 - 時間の最適化を選択すると、配置はあまり重視されず、できるだけ高速になるようにディスクブロックが割り当てられる。十分な空き領域があれば、それほど細かく分割しなくても、比較的簡単にディスクブロックを効率よく割り当てることができる。デフォルトは「時間」です。
既存のファイルシステムの場合は、tunefs コマンドを使用して最適化タイプのパラメータ値を変更できます。
i ノード数によって、ファイルシステム内で保持できるファイル数が決まります。ファイルごとに i ノードが 1 つあります。 i ノード 1 個あたりのバイト数によって、ファイルシステムの作成時に作成される合計 i ノード数が決まります。これは、ファイルシステムの合計サイズを、i ノード 1 個あたりのバイト数で割った値です。i ノードが割り当てられたら、ファイルシステムを作成し直さないかぎり、その数は変更できません。
i ノード 1 個あたりのデフォルトのバイト数は 2048 バイト (2K バイト) で、これは各ファイルの平均サイズが 2K バイト以上であることを想定しています。ほとんどのファイルは、2K バイトを超えています。多数のシンボリックリンクを持つファイルシステムでは、平均ファイルサイズを小さくすることができます。ファイルシステムに多数の小型ファイルが格納される場合は、このパラメータに小さい値を与えてもかまいません。ただし、i ノード数が少ないために i ノードが不足するよりも、多すぎる方が好ましいことを留意してください。i ノード数が少なすぎると、実際には空のディスクスライス上でも最大ファイル数に達してしまうことがあります。
この節では、カスタマイズされたファイルシステムの作成に使用する 2 つのコマンドについて説明します。
newfs
mkfs
newfs コマンドは、ファイルシステムの作成に使用する mkfs コマンドの簡便バージョンです。newfs コマンドは、/usr/sbin ディレクトリに入っています。
構文は次のとおりです。
newfs [-Nv] [mkfs_options] raw_device |
表 32-5 に、newfs コマンドのオプションと引数を示します。
表 32-5 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 |
空きディスク領域の最小許容率。デフォルトの予約分は、((64M バイト/パーティションサイズ) * 100) で算出した値を最も近い整数に切り捨てます。値は、ディスク容量の 1% から 10% の範囲に制限されます。 |
-r rpm |
1 分当たりのディスクの回転速度。デフォルトは 3600 である。このパラメータは、mkfs に渡される前に 1 秒当たりの回転数に変換される。 |
-i nbpi |
作成できる i ノードの計算に使用される i ノード 1 個当たりのバイト数。デフォルトは 2048。 |
-o opt |
ディスクブロックをファイルに割り当てるときに使用される最適化のタイプ。opt には time または space を指定する。 デフォルトは time です。 |
-a apc |
不良ブロックを配置するために予約される 1 ディスクシリンダ (SCSI デバイスのみ) の代替ブロック数。デフォルトは 0。 |
-d gap |
(回転の遅れ) CPU がデータ転送を完了し、同じディスクシリンダ上で次のデータ転送を開始するまでに予想される最小ミリ秒数。デフォルトは 4。 |
-d nrpos |
シリンダグループを分割するさまざまな回転位置の数。デフォルトは 8。 |
-C maxcontig |
あるファイルに属し、回転の遅れが挿入される前に連続して割り当てられる最大ブロック数。デフォルトはドライブごとに異なる。内部 (トラック) バッファを持たないドライブ (または、内部バッファの存在をうたっていないドライブ/コントローラ) の場合は、デフォルトは 1 で、バッファを持つドライブの場合はデフォルトは 7。 このパラメータには、 maxphys は、入出力サブシステムが満たせる最大ブロック転送サイズ (バイト数) を指定する読み込み専用のカーネル変数である (この制限は、newfs や mkfs ではなく mount によって適用される)。 また、このパラメータはクラスタ化も制御する。rotdelay の値に関係なく、maxcontig が 1 より大きいときのみクラスタ化できる。クラスタ化すると、入出力が高速になる。詳細は、tunefs(1M) のマニュアルページを参照。 |
raw_device |
ファイルシステムを入れるパーティションの特殊文字 (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) のマニュアルページを参照してください。