Solaris のシステム管理 (第 1 巻)

パート VIII ファイルシステムの管理

このパートでは、Solaris オペレーティング環境でファイルシステムを管理する手順について説明します。次の章で構成されています。

第 26 章「ファイルシステムの概要」

ファイルシステムの種類、一般に使用する管理コマンド、ファイルシステムをマウントし、マウント解除する基本的な作業など、ファイルシステム全般について説明します。 

第 27 章「ファイルシステムの作成手順」

UFS ファイルシステムの作成、一時ファイルシステム (TMPFS) の作成と管理、ループバックファイルシステム (LOFS) の作成を行う手順について説明します。 

第 28 章「ファイルシステムのマウントとマウント解除の手順」

どのファイルシステムがマウントされているかを判断する手順、/etc/vfstab に列挙されているファイルをマウントする方法、UFS、NFS、PCFS (DOS) ファイルシステムをマウントする方法について説明します。

第 29 章「キャッシュファイルシステムの手順」

キャッシュファイルシステム (CacheFSTM) の概要と使用手順について説明します。

第 30 章「追加スワップ空間の構成の手順」

スワップ空間を追加する場合の構成、スワップ資源の監視、スワップファイルの作成と使用可能にする方法、余分なスワップ空間を削除する手順などについて説明します。 

第 31 章「ファイルシステムの整合性チェック」

ファイルシステムの状態を記録する方法、fsck プログラムでチェックされる内容、自動ブートチェック機能を変更する方法、fsck プログラムの使用方法について説明します。

第 32 章「ファイルシステムの参照情報」

ルート(/)と /usr のファイルシステムのデフォルトディレクトリ、/kernel ディレクトリにあり、mkfs コマンドと newfs コマンドに固有のディレクトリなど、ファイルシステムの参照情報について説明します。

第 26 章 ファイルシステムの概要

この章の内容は次のとおりです

ファイルシステムにおける新機能

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 を参照してください。

ファイルシステムのタイプ

Solaris システムソフトウェアでは、次の 3 種類のファイルシステムがサポートされます。

ファイルシステムのタイプを確認するには、「ファイルシステムのタイプを調べる」を参照してください。

ディスクベースのファイルシステム

ディスクベースのファイルシステムは、ハードディスク、CD-ROM、フロッピーディスクなどの物理媒体に格納されます。ディスクベースのファイルシステムは、さまざまな形式で作成できます。利用できる形式は次のとおりです。

ディスクベースの各種ファイルシステムは、次のように特定の媒体のタイプに対応しています。

ただし、上記以外の対応も可能です。たとえば、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 ファイルシステムの作成方法については、第 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 汎用ファイルシステム管理コマンド

コマンド 

機能 

clri(1M)

i ノードをクリアする。 

df(1M)

空きディスクブロック数とファイル数を出力する。 

ff(1M)

ファイルシステムのファイル名と統計情報を表示する。 

fsck(1M)

ファイルシステムの完全性をチェックし、検出された損傷を修復する。 

fsdb(1M)

ファイルシステムをデバッグする。 

fstyp(1M)

ファイルシステムのタイプを調べる。 

labelit(1M)

テープにコピーするときに、ファイルシステムのラベルを表示または作成する (volcopy コマンド専用)。

mkfs(1M)

新しいファイルシステムを作成する。 

mount(1M)

ローカルおよびリモートのファイルシステムをマウントする。 

mountall(1M)

仮想ファイルシステムテーブルに指定されているすべてのファイルシステムをマウントする。 (/tec/vfstab)

ncheck(1M)

パス名とその i 番号のリストを生成する。 

umount(1M)

ローカルおよびリモートのファイルシステムをマウント解除する。 

umountall(1M)

仮想ファイルシステムテーブルに指定されているすべてのファイルシステムをマウント解除する。(/etc/vfstab)

volcopy(1M)

ファイルシステムのイメージコピーを作成する。 

ファイルシステムコマンドによるファイルシステムタイプの判断

汎用ファイルシステムコマンドは、次の順序でファイルシステムのタイプを判断します。

  1. -F オプションで指定されているファイルシステムのタイプ

  2. 特殊デバイスを /etc/vfstab 内のエントリと突き合わせて判断します (special が指定されている場合)。たとえば fsck は、まず fsck device フィールドと突き合わせて一致するエントリを検索します。一致するエントリが見つからなければ、特殊デバイスフィールドと突き合わせてチェックします。

  3. ローカルファイルシステムの場合は /etc/default/fs 内で指定されたデフォルトを使用し、リモートファイルシステムの場合は /etc/dfs/fstypes 内で指定されたデフォルトを使用して判断します。

汎用コマンドと専用コマンドのマニュアルページ

汎用コマンドと専用コマンドについては、『man Pages(1M): System Administration Commands』を参照してください。専用コマンドのマニュアルページは、汎用コマンドのマニュアルページに続いて入っています。特定のマニュアルページを見つけるには、汎用コマンド名の末尾にアンダースコアとファイルシステムタイプの略称を追加してください。たとえば、UFS ファイルシステムのマウントに関して専用コマンドのマニュアルページを調べるには、man mount_ufs(1M) と入力します。

デフォルトの Solaris ファイルシステム

Solaris ファイルシステムは階層構造になっており、ルートディレクトリ (/) から始まり、下位に多数のディレクトリが形成されています。Solaris のインストールプロセスは、デフォルトのディレクトリセットをインストールし、一連の規則を適用して類似するタイプのファイルをグループ化します。表 26-2 に、デフォルトの Solaris ファイルシステムの概要と、各ファイルシステムのタイプを示します。

システムを動作させるには、ルート (/) と /usr のファイルシステムが必要です。/usr ファイルシステムに置かれている最も基本的なコマンドの一部 (mount など) は、システムのブート時や、システムがシングルユーザーモードで実行しており、/usr ファイルシステムがマウントされていない場合でも使用できるように、ルート (/) ファイルシステムにも置かれています。デフォルトディレクトリのリストについては、第 32 章「ファイルシステムの参照情報」を参照してください。

表 26-2 デフォルトの Solaris ファイルシステム

ファイルシステムまたはディレクトリ 

ファイルシステムのタイプ 

説明 

ルート (/)

UFS 

階層ファイルツリーの最上位。ルートディレクトリには、カーネル、デバイスドライバ、システムのブートに使用されるプログラムなど、システム処理に欠かせないディレクトリとファイルが入っている。また、ローカルとリモートのファイルシステムをファイルツリーに接続できるマウントポイントディレクトリも入っている。 

/usr

UFS 

他のユーザーと共有できるシステムファイルとディレクトリ。特定のタイプのシステム上でのみ実行できるファイルは、/usr ディレクトリに入っている (SPARC 実行可能ファイルなど)。どのタイプのシステム上でも使用できるファイル (マニュアルページなど) は、/usr/share に入っている。

/export/home または /home

NFS、UFS 

ユーザーのホームディレクトリのマウントポイント。ホームディレクトリには、そのユーザーの作業ファイルが格納される。デフォルトでは、/home は自動マウントされるファイルシステムである。スタンドアロンシステム上では、/home はローカルディスクスライス上の UFS ファイルシステムの場合がある。

/var

UFS 

ローカルシステムの使用中に変化または拡大する可能性のあるシステムファイルとディレクトリ。これには、システムログ、viex のバックアップファイル、および uucp ファイルが含まれる。

/opt

NFS、UFS 

オプションの Sun 以外のソフトウェア製品のマウントポイント。システムによっては、/opt がローカルディスクスライス上の UFS ファイルシステムの場合がある。

/tmp

TMPFS 

システムがブートされるたびにまたは /tmp ファイルシステムがマウント解除されるたびに消去される一時ファイル

/proc

PROCFS 

アクティブなプロセスの番号別リスト 

スワップ空間

Solaris オペレーティング環境は、一部のディスクスライスをファイルシステムではなく一時記憶域として使用します。これらのスライスを「スワップスライス」または「スワップ空間」と呼びます。スワップスライスは、現在のプロセスを処理するだけの十分な物理メモリーがシステムにない場合に、仮想メモリー記憶域として使用されます。

多くのアプリケーションは十分なスワップ空間が使用できることを前提に作成されているため、スワップ空間を割り当て、その使われ方を監視して、必要に応じてスワップ空間を追加する方法を知っておくことは大切です。スワップ空間の概要とスワップ空間を追加する手順については、第 30 章「追加スワップ空間の構成の手順」を参照してください。

UFS ファイルシステム

UFS は、Solaris オペレーティング環境内のデフォルトのディスクベースファイルシステムです。ほとんどの場合、ディスクベースのファイルシステムを管理するときには、UFS を管理していることになります。UFS ファイルシステムの機能は次の通りです。

UFS ファイルシステムの詳細は、第 32 章「ファイルシステムの参照情報」を参照してください。

UFS ファイルシステムの構成

UFS ファイルシステムを作成すると、ディスクスライスは、1 つまたは複数の連続するディスクシリンダから構成されるシリンダグループに分割されます。シリンダグループはさらに、位置指定可能なブロックに分割され、このブロックによって、シリンダグループ内のファイルの構造が編成され、制御されます。各種のブロックは、ファイルシステム内で特定の機能を持っています。

UFS ファイルシステムには、次の 4 種類のブロックがあります。

各ブロックタイプの詳細については、「UFS ファイルシステムのシリンダグループの構造」を参照してください。

newfs コマンドまたは mkfs コマンドの引数を使用してファイルシステムをカスタマイズするには、これらのパラメータの変更方法について第 32 章「ファイルシステムの参照情報」を参照してください。

UFS ロギング

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 ロギングをサポートするための新しいデバッグオプションが追加されています。

UFS ファイルシステムの計画

ファイルシステムの配置を決めるときには、要求が競合する可能性があることを考えなければなりません。推奨事項は次の通りです。

デフォルトのファイルシステムパラメータや、新しいファイルシステムを作成するときの前提条件と手順については、第 27 章「ファイルシステムの作成手順」を参照してください。

ファイルシステムのマウントとマウント解除

ファイルシステム上のファイルにアクセスするには、ファイルシステムをマウントする必要があります。ファイルシステムのマウントとは、ファイルシステムをディレクトリ (マウントポイント) に接続し、システムで使用可能にすることです。ルート (/) ファイルシステムは、常にマウントされています。他のファイルシステムは、ルート (/) ファイルシステムに接続したり切り離したりすることができます。

ファイルシステムをマウントすると、そのファイルシステムがマウントされている間は、マウントポイントのディレクトリ内に実際に存在しているファイルやディレクトリは使用できなくなります。これらのファイルはマウント処理の影響を永続的に受けるわけではなく、ファイルシステムをマウント解除すると再び使用できるようになります。通常は存在はするがアクセスできないファイルは混乱の原因になるので、マウントディレクトリを空にしておきます。

次の例では、ルート (/) ファイルシステムの下に、サブディレクトリ sbinetc、および opt を持つローカルのファイルシステムを示します。

図 26-1 ルート (/) ファイルシステムの例

Graphic

ここでは、標準添付されていない製品セットが含まれている /opt ファイルシステムからローカルファイルシステムにアクセスするものとします。

まず、ファイルシステムをマウントするためのマウントポイントとして使用するディレクトリを作成しなければなりません (たとえば、/opt/unbundled)。マウントポイントを作成すると、mount コマンドでファイルシステムをマウントでき、/opt/unbundled 内のすべてのファイルとディレクトリにアクセスできるようになります (図 26-2 を参照)。これらの作業を実行するための詳細な手順については、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。

図 26-2 ファイルシステムのマウント

Graphic

ファイルシステムをマウント解除すると、そのファイルシステムはマウントポイントから削除されます。一部のファイルシステム管理作業は、マウントされたファイルシステム上では実行できません。次の場合には、ファイルシステムをマウント解除する必要があります。

ファイルシステムの完全バックアップを実行する前に、そのファイルシステムをマウント解除しておくとよいでしょう。バックアップの実行方法については、第 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 つのディスク (c0t0d0c0t3d0) を持つシステムの /etc/vfstab ファイルです。


例 26-1 /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)

NFS は、1 つのシステム (通常はサーバー) の資源 (ファイルやディレクトリ) をネットワーク経由で他のシステムと共有するための分散型ファイルシステムです。たとえば、Sun 以外のアプリケーションやソースファイルを他のシステム上のユーザーと共有できます。

NFS は、資源の実際の物理的な位置をユーザーが意識しなくてすむようにします。共通に使用されるファイルのコピーをシステムごとに配置しなくても、あるシステムのディスク上にコピーを 1 つ配置することによって NFS は、他のすべてのシステムがそのコピーにネットワーク経由でアクセスできるようにします。NFS の環境では、リモートファイルシステムは、実際にはローカルシステムと区別がつきません。

システムは、ネットワークに対して共有またはエクスポートするファイルシステを持っているときに、NFS サーバーになります。サーバーは、現在エクスポートされている資源とアクセス制限 (読み取り/書き込み、読み取り専用など) のリストを管理します。

資源を共有する場合は、リモートシステムにマウントできるように、その資源を使用可能な状態にします。

資源を共有するには、次の方法があります。

資源を共有する方法については、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。NFS の詳細な説明については、『NFS の管理』を参照してください。

自動マウント (AutoFS)

NFS ファイルシステムをマウントするには、自動マウントまたは AutoFS というクライアント側のサービスを使用します。このサービスによってシステムは、ユーザーがアクセスしたときに自動的に NFS ファイルシステムをマウントまたはマウント解除できます。ユーザーがファイルシステム内のファイルを使用している間、ファイルシステムはマウントされたままになります。ファイルシステムが一定の時間アクセスされなかった場合、ファイルシステムは自動的にマウント解除されます。

次に、AutoFS の特徴を示します。

AutoFS サービスは automount(1M) によって初期化され、automount はシステムのブート時に自動的に実行されます。自動マウントデーモン automountd(1M) は永続的に動作し、必要に応じて NFS ファイルシステムをマウントまたはマウント解除します。デフォルトでは、Solaris オペレーティング環境は /home を自動マウントします。

AutoFS は、ネームサービスに指定されたファイルシステムに対して動作します。この情報は、NIS、NIS+、またはローカルの /etc 内のファイルで管理されます。AutoFS を使用すると、同じファイルシステムを提供するサーバーを複数指定できます。このような方法では、1 つのサーバーがダウンしても、AutoFS が他のマシンからファイルシステムをマウントすることができます。各サーバーに優先度を示す数値を割り当てることによって、マップ内の各資源ごとにサーバーの優先順位を指定できます。

AutoFS の設定と管理方法については、『NFS の管理』を参照してください。

キャッシュファイルシステム (CacheFS)

NFS マウントされたファイルシステムの性能とスケーラビリティを向上させるには、キャッシュファイルシステム (CacheFS) を使用します。CacheFS は、サーバーとネットワークの負荷を軽減することによって、NFS サーバーの性能とスケーラビリティを向上させる汎用ファイルシステムキャッシュ機構です。

CacheFS は、階層化ファイルシステムとして設計されており、あるファイルシステムを別のファイルシステムのキャッシュに書き込む機能を持っています。NFS 環境では、CacheFS はサーバーあたりのクライアント比率を高め、サーバーとネットワークの負荷を軽減し、ポイントツーポイントプロトコル (PPP) などの低速リンク上のクライアントのパフォーマンスを向上させます。また、CacheFS と AutoFS サービスを併用すると、さらにパフォーマンスとスケーラビリティを向上することができます。

CacheFS についての詳細は、第 29 章「キャッシュファイルシステムの手順」を参照してください。

マウント方法の決定

表 26-3 に、ファイルシステムの用途に応じてファイルシステムをマウントするためのガイドラインを示します。

表 26-3 ファイルシステムのマウント方法の決定

マウントするファイルシステムとマウントの頻度 

方法 

ローカルまたはリモートのファイルシステムをときどきマウントする 

コマンド行から手動で mount コマンドを入力する。

ローカルのファイルシステムを頻繁にマウントする 

/etc/vfstab ファイルを使用して、システムがマルチユーザー状態でブートされたときに自動的にファイルシステムをマウントする。

リモートのファイルシステムを頻繁にマウントする (ホームディレクトリなど) 

  • /etc/vfstab ファイルを使用して、システムがマルチユーザー状態でブートされたときに自動的にファイルシステムをマウントする。

  • AutoFS により、ユーザーがディレクトリに移動したとき (マウント)、あるいはディレクトリから移動したとき (マウント解除) に、自動的にファイルシステムをマウントまたはマウント解除する。

パフォーマンスを向上させるには、CacheFS を使用してリモートのファイルシステムをキャッシュすることもできる。 

ファイルシステムを含む 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
$

第 27 章 ファイルシステムの作成手順

この章では、UFS、TMPFS、および LOFS ファイルシステムを作成する方法について説明します。UFS ファイルシステムの場合、この章では、newfs(1M) コマンドを使用してファイルシステムをハードディスク上に作成する方法を示します。TMPFS と LOFS は仮想ファイルシステムであるため、これらのファイルシステムを「作成」するには、ファイルシステムをマウントします。

この章で説明する手順は、次のとおりです。


注 -

UFS と DOS のファイルシステムを取り外し可能な媒体上に作成する手順については、第 11 章「CD とフロッピーディスクの使用方法の概要」を参照してください。


UFS ファイルシステムの作成

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 ファイルシステムを作成する方法

  1. 次の前提条件を満たしているかどうかを確認します。

    • UFS ファイルシステムを作成する前に、ディスクをフォーマットしてスライスに分割しておかなければならない。ディスクのフォーマットとスライスへの分割についての詳細は、第 21 章「ディスク管理の概要」を参照してください。

    • ファイルシステムを格納するスライスのデバイス名を知っていなければならない。ディスク番号とディスクスライス番号を調べる方法については、第 22 章「ディスク管理の手順」を参照してください。

    • 既存の UFS ファイルシステムを作成し直す場合は、そのマウントを解除する。

    • スーパーユーザーでなければならない。

  2. ファイルシステムを作成します。


    # newfs [-N] [-b size] [-i bytes] /dev/rdsk/device-name
    

    -N

    newfsmkfs に渡すパラメータを表示する。ファイルシステムは実際に作成されない。newfs コマンドをテストするのに好ましい方法です。

    -b size

    ファイルシステムのブロックサイズを指定する。デフォルトは 8192 バイトです。 

    -i bytes

    i ノード当たりのバイト数を指定する。デフォルトは 2048 バイトです。 

    device-name

    新しいファイルシステムを作成するディスクデバイス名を指定する。 


    注意 - 注意 -

    次の手順を実行する前に、スライスに合ったデバイス名を指定したか確認してください。間違ったスライスを指定すると、その内容は新しいファイルシステムの作成時に消去されます。


    システムから、確認を促すプロンプトが表示されます。

  3. UFS ファイルシステムが作成されていることを確認するには、fsck(1M) コマンドを使用して新しいファイルシステムをチェックします。


    # fsck /dev/rdsk/device-name
    

    device-name

    新しいファイルシステムを格納するディスクデバイス名を指定する。 

    fsck コマンドは、新しいファイルシステムの整合性をチェックして、問題が検出された場合には、問題を修復する前にプロンプトを表示します。fsck についての詳細は、第 31 章「ファイルシステムの整合性チェック」を参照してください。

例 - UFS ファイルシステムを作成する

次の例では、/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) の作成

一時ファイルシステム (TMPFS) は、ファイルシステムの読み取りと書き込みにローカルのメモリーを使用します。そのため、一時ファイルシステムは、UFS ファイルシステムに比べはるかに高速です。TMPFS ファイルシステムを使用すると、ローカルディスク上で、あるいはネットワーク経由で一時ファイルの読み書きを行う際のオーバヘッドが軽減されるのでシステムのパフォーマンスを向上できます。TMPFS ファイルシステム内のファイルは、リブートまたはマウント解除すると削除されます。

複数の TMPFS ファイルシステムを作成した場合は、すべてのファイルシステムが同じシステム資源を使用するということに注意してください。mount コマンドの -o size オプションを使用して TMPFS のサイズを制限しなければ、ある TMPFS ファイルシステムで作成されたファイルが、他の TMPFS のための領域を使い切ってしまう可能性があります。

詳細は、tmpfs(7FS) のマニュアルページを参照してください。

一時ファイルシステムを作成する方法

  1. スーパーユーザーになります。

  2. 必要に応じて、TMPFS ファイルシステムをマウントしたいディレクトリを作成し、アクセス権と所有権を設定します。

  3. TMPFSファイルシステムを作成します。

    ブート時に一時ファイルシステムを自動的に作成するようにシステムを設定するには、「例 - ブート時に TMPFS ファイルシステムを作成する」を参照してください。


    # mount -F tmpfs -o size=number swap mount-point
    

    size=number

    TMPFS ファイルシステムのサイズを M バイト単位で指定する。 

    mount-point

    TMPFS ファイルシステムとしてマウントするディレクトリを指定する。 

  4. 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 ファイルシステムを作成する

ブート時にシステムが自動的に 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 ループバックファイルシステムにマウントしても、元のファイルシステムは変化しません。

詳細は、lofs(7FS) のマニュアルページを参照してください。


注意 - 注意 -

LOFS ファイルシステムは慎重に作成してください。LOFS は仮想ファイルシステムなので、ユーザーやアプリケーションを混乱させる可能性があります。


LOFS ファイルシステムを作成する方法

  1. スーパーユーザーになります。

  2. LOFS ファイルシステムをマウントしたいディレクトリを作成し、適切なアクセス権と所有権を設定します。

  3. LOFS ファイルシステムを作成します。

    ブート時にループバックファイルシステムを自動的に作成するようにシステムを設定するには、「例 - ブート時に LOFS ファイルシステムを作成する」を参照してください。


    # mount -F lofs loopback-directory mount-point
    

    loopback-directory

    ループバックマウントポイントにマウントするファイルシステムを指定する。 

    mount-point

    LOFS ファイルシステムをマウントするディレクトリを指定する。 

  4. mount コマンドからの出力を調べて、LOFS ファイルシステムが作成されていることを確認します。


    # mount -v
    

例 - LOFS ファイルシステムを作成する

次の例は、chroot(1M) コマンドと新しい LOFS ファイルシステムを使用して、プロセスやプロセスファミリが完全な仮想ファイルシステムを認識できるようにする。


# mkdir /tmp/newroot
# mount -F lofs / /tmp/newroot
# chroot /tmp/newroot command

例 - ブート時に LOFS ファイルシステムを作成する

ブート時にシステムが自動的に LOFS ファイルシステムを作成するようにするには、/etc/vfstab ファイルにエントリを追加します。次の例は、ルート (/) ファイルシステムの LOFS ファイルシステムを /tmp/newroot に作成する /etc/vfstab ファイルのエントリを示しています。


/ - /tmp/newroot  lofs   -  yes  -

注意 - 注意 -

ループバックファイルシステムのエントリは、/etc/vfstab ファイル内の最後のエントリでなければなりません。ループバックファイルシステムのエントリが、そこに組み込まれるファイルシステムよりも前にあると、ループバックファイルシステムを作成できません。


/etc/vfstab ファイルの詳細は、/etc/vfstab ファイルのフィールドの説明」を参照してください。

第 28 章 ファイルシステムのマウントとマウント解除の手順

この章では、ファイルシステムをマウントしたり、マウント解除する方法について説明します。この章で説明する手順は次のとおりです。

ファイルシステムのマウント

ファイルシステムを作成したら、そのファイルシステムをシステムで使用できるようにする必要があります。ファイルシステムを使用できるようにするには、マウントします。マウントしたファイルシステムは、システムのディレクトリツリー内の指定したマウントポイントに接続されます。ルート (/) ファイルシステムは常にマウントされています。他のファイルシステムは、ルート (/) ファイルシステムに接続したり切り離したりできます。

表 28-1 に、ファイルシステムの用途に応じてファイルシステムをマウントするためのガイドラインを示します。

表 28-1 ファイルシステムのマウント方法の決定

マウントするファイルシステムとマウントの頻度 

方法 

ローカルまたはリモートのファイルシステムをときどきマウントする 

コマンド行から手動で mount コマンドを入力する。

ローカルのファイルシステムを頻繁にマウントする 

/etc/vfstab ファイルを使用して、システムがマルチユーザー状態でブートされたときに、自動的にファイルシステムをマウントする。

リモートのファイルシステムを頻繁にマウントする (ホームディレクトリなど) 

  • /etc/vfstab ファイルを使用して、システムがマルチユーザー状態でブートされたときに、自動的にファイルシステムをマウントする。

  • AutoFS により、ユーザーがディレクトリに移動したとき (マウント)、あるいはディレクトリから移動したとき (マウント解除) に、自動的にファイルシステムをマウントまたはマウント解除する。

パフォーマンスを向上させるには、CacheFS を使用してリモートのファイルシステムをキャッシュすることもできる。 

ファイルシステムを含む 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 で指定する汎用マウントオプション

オプション 

ファイルシステム 

説明 

bg | fg

NFS 

最初の試行に失敗すると、バックグラウンド (bg) またはフォアグラウンド (fg) で再試行する。デフォルトは fg

f

UFS 

/etc/mnttab 内にエントリを作成するが、実際にはファイルシステムをマウントしない。

hard | soft

NFS 

サーバーが応答しない場合の手続きを指定する。soft は、エラーが返されることを示す。hard は、サーバーが応答するまで再試行要求が継続されることを示す。デフォルトは hard

intr | nointr

NFS 

ハードマウントされたファイルシステムに関する応答を待って実行を停止しているプロセスを、キーボード割り込みで強制終了できるかどうかを指定する。デフォルトは intr (割り込み可能)。

largefiles | nolargefiles

UFS 

2G バイトを超えるファイルを持つファイルシステムを作成できるようにする。largefiles オプションでマウントされたファイルシステムは、2G バイトを超えるファイルを格納できる (必須ではない)。デフォルトは largefiles

logging | nologging

UFS 

ファイルシステムのロギングを有効にする。UFS ロギングとは、トランザクション (完全な UFS 操作を構成する変更) をログに保存してから、そのトランザクションを UFS ファイルシステムに適用するプロセスである。ファイルシステムの整合性が保たれるために、fsck(1M) を省略できる。したがって、システムがクラッシュしたとき、あるいは、不完全な停止後にシステムをリブートする際の時間を短縮できる。

ログはファイルシステムの空きブロックから、1G バイトのファイルシステムごとに約 1M バイトのサイズ (合計で 64M バイトまで) が割り当てられる。デフォルトは nologging

m

CacheFS, NFS, PCFS, S5FS, UFS 

/etc/mnttab にエントリを作成せずに、ファイルシステムをマウントする。

noatime

UFS 

ファイルのアクセス時間更新を無視する。ただし、ctime または mtime の更新が同時に行れると場合を除く。stat(2) を参照。このオプションによって、アクセス時間が重要でないファイルシステム (たとえば、Usenet ニューススプール) でのディスクに対する動作が減る。デフォルトでは、通常アクセス時間 (atime) が記録される。

remount

NFS, S5FS, UFS 

読み取り専用のファイルシステムを読み書き可能として (rw オプションで) 再マウントする。このオプションは、flogging | nologging、および m オプションと組み合わせる場合にだけ指定できる。このオプションは現在マウントされている読み取り専用のファイルシステムに対してのみ動作する。

retry=n

NFS 

マウント操作に失敗した場合に再試行する。n は再試行回数。

ro | rw

CacheFS, NFS, PCFS, UFS, S5FS 

読み取り/書き込みまたは読み取り専用と指定する。このオプションを指定しない場合のデフォルトは読み取り/書き込み。 

suid | nosuid

CacheFS, HSFS, NFS, S5FS, UFS 

setuid 実行を許可または禁止する。デフォルトは、setuid 実行を許可する。

どのファイルシステムがマウントされているかを調べる方法

どのファイルシステムがマウントされているかを調べるには、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 ファイルでファイルシステムをマウントする

/etc/vfstab ファイルのフィールドの説明

/etc/vfstab ファイル内のエントリには、表 28-4 に示すように 7 つのフィールドがあります。

表 28-4 /etc/vfstab ファイルのフィールドの説明

フィールド名 

説明 

device to mount

  • ローカル UFS ファイルシステム用のブロックデバイス名 (/dev/dsk/c0t0d0s0 など)

  • リモートファイルシステム用の資源名 (myserver:/export/home など)。NFS の詳細は、『NFS の管理』を参照してください。

  • スワップ空間用のスライスのブロックデバイス名 (/dev/dsk/c0t3d0s1 など)

  • /proc ディレクトリと proc ファイルシステムのタイプ

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 ファイルにエントリを追加する方法

  1. スーパーユーザーになります。

    また、ファイルシステムをマウントするには、ローカルのシステムにマウントポイントが必要です。マウントポイントとは、マウントされるファイルシステムが接続されるディレクトリのことです。

  2. /etc/vfstab ファイルを編集してエントリを追加します。


    注 -

    ルート (/) ファイルシステムは、ブートプロセスの過程でカーネルによって読み取り専用としてマウントされます。そのため、remount オプション (および、remount と一緒に使用できるオプション) だけが /etc/vfstab ファイルのルート (/) エントリでは有効です。


    /etc/vfstab のフィールドエントリの詳細は、 表 28-4 を参照してください。次のことを確認します。

    • 各フィールドを空白 (空白文字またはタブ) で区切る。

    • フィールドで値を指定しない場合はダッシュ (-) を入力する。

  3. 変更結果を保存します。

例 - /etc/vfstab ファイルにエントリを追加する

次の例では、デフォルトのマウントオプション (読み取り/書き込み) を使用して、ディスクスライス /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 ファイル内に列挙されている複数のファイルシステムをマウントする方法

  1. スーパーユーザーになります。

    また、ファイルシステムをマウントするには、ローカルのシステムにマウントポイントが必要です。マウントポイントとは、マウントされるファイルシステムが接続されるディレクトリのことです。

  2. /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」エントリがあるすべてのファイルシステムがチェックされ、必要であれば修正されます。

例 - /etc/vfstab ファイル内に列挙されている複数のファイルシステムをマウントする

次の例は、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 ファイル内に列挙されているファイルシステムをマウントする方法

  1. スーパーユーザーになります。

    また、ファイルシステムをマウントするには、ローカルのシステムにマウントポイントが必要です。マウントポイントとは、マウントされるファイルシステムが接続されるディレクトリのことです。

  2. /etc/vfstab ファイル内に列挙されているファイルシステムをマウントします。


    # mount mount-point
    

    mount-point

    /etc/vfstab ファイル内の「mount point」または「device to mount」フィールド内のエントリ。通常は、マウントポイントを指定する方が簡単です。

例 - /etc/vfstab ファイル内に列挙されているファイルシステムをマウントする

次の例では、/etc/vfstab ファイル内に列挙されているファイルシステム /usr/openwin をマウントします。


# mount /usr/openwin

mount コマンドでファイルシステムをマウントする

UFS ファイルシステムをマウントする方法

  1. スーパーユーザーになります。

    また、ファイルシステムをマウントするには、ローカルのシステムにマウントポイントが必要です。マウントポイントとは、マウントされるファイルシステムが接続されるディレクトリのことです。

  2. 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

    ファイルシステムをマウントするディレクトリ 

例 - UFS ファイルシステムをマウントする

次の例では、/dev/dsk/c0t3d0s7/files1 ディレクトリにマウントします。


# mount /dev/dsk/c0t3d0s7 /files1

例 -ログを有効にして、UFS ファイルシステムをマウントする

UFS ロギングによってファイルシステムの整合性が保たれるために、システムのリブート時間が大幅に短縮されます。次の例は、ログを有効にして、/dev/dsk/c0t3d0s7/files1 ディレクトリにマウントします。


# mount -o logging /dev/dsk/c0t3d0s7 /files1

大規模ファイルを持たない UFS ファイルシステムを再マウントする方法

ファイルシステムをマウントするときには、largefiles オプションがデフォルトで選択されるため、2G バイトを超えるファイルを作成できます。大規模ファイルを作成した後で、nolargefiles オプションを指定してファイルシステムを再マウントするには、大規模ファイルをすべて削除して、fsck を実行して状態を「nolargefiles」にリセットしなければなりません。

以下の手順では、ファイルシステム用のエントリが /etc/vfstab ファイルにあるものとします。

  1. スーパーユーザーになります。

  2. ファイルシステム内に大規模ファイルが存在しないことを確認します。


    # cd mount-point
    # find . -xdev -size +2000000 -exec ls -l {} ¥;
     
    

    mount-point

    大規模ファイルがあるかどうかをチェックするファイルシステムのマウントポイントを指定する。 

    大規模ファイルが当該ファイルシステム内に存在する場合は、そのファイルを削除するか、他のファイルシステムに移動します。

  3. ファイルシステムのマウントを解除します。


    # umount mount-point
    
  4. ファイルシステムの状態をリセットします。


    # fsck mount-point
    
  5. 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 ファイルシステムをマウントする方法

  1. スーパーユーザーになります。

    また、ファイルシステムをマウントするには、ローカルのシステムにマウントポイントが必要です。マウントポイントとは、マウントされるファイルシステムが接続されるディレクトリのことです。

  2. 資源 (ファイルまたはディレクトリ) がサーバーから使用可能かどうかを確認します。

    NFS ファイルシステムをマウントするには、share(1M) コマンドを使用し、サーバー上の資源を使用可能にしておかなければなりません。資源を共有する方法については、『NFS の管理』を参照してください。

  3. 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

    ファイルシステムをマウントするディレクトリを指定する。 

例 - NFS ファイルシステムをマウントする

次の例は、サーバー pluto/export/packages ディレクトリを /mnt にマウントしています。


# mount -F nfs pluto:/export/packages /mnt

x86: System V (S5FS) ファイルシステムをマウントする方法

  1. スーパーユーザーになります。

    また、ファイルシステムをマウントするには、ローカルのシステムにマウントポイントが必要です。マウントポイントとは、マウントされるファイルシステムが接続されるディレクトリのことです。

  2. 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

    ファイルシステムをマウントするディレクトリを指定する。 

例 - S5FS ファイルシステムをマウントする

次の例では、/dev/dsk/c0t3d0s7/files1 ディレクトリにマウントします。


# mount -F s5fs /dev/dsk/c0t3d0s7 /files1

x86: ハードディスク上の PCFS (DOS) ファイルシステムをマウントする方法

次の手順で、PCFS (DOS) ファイルシステムをハードディスクからマウントします。

  1. スーパーユーザーになります。

    また、ファイルシステムをマウントするには、ローカルのシステムにマウントポイントが必要です。マウントポイントとは、マウントされるファイルシステムが接続されるディレクトリのことです。

  2. 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」 は、コロンで区切らなければならないので注意してください。

例 - PCFS (DOS) ファイルシステムをハードディスクからマウントする

次の例では、基本 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 ファイルから削除されます。マウントされているファイルシステム上では、一部のファイルシステム管理作業を実行できません。次の場合には、ファイルシステムをマウント解除する必要があります。

前提条件

ファイルシステムをマウント解除する場合の前提条件は次のとおりです。

マウント解除したファイルシステムを検査する

ファイルシステムをマウント解除したことを確認するには、mount コマンドからの出力を調べます。この手順については、「どのファイルシステムがマウントされているかを調べる方法」を参照してください。

ファイルシステムを使用中のすべてのプロセスを終了させる方法

  1. スーパーユーザーになります。

  2. どのプロセスを終了させるのかがわかるように、ファイルシステムを使用中のすべてのプロセスを表示します。


    # fuser -c [ -u ] mount-point
    

    -c

    ファイルシステムのマウントポイントとなっているファイルと、マウントされているファイルシステム内のファイルが表示される 

    -u

    プロセス ID ごとにユーザーのログイン名が表示されます 

    mount-point

    プロセスを終了させたいファイルシステム名 

  3. ファイルシステムのすべてのプロセスを終了させます。


    注 -

    ユーザーのプロセスを終了させるときには、必ず事前に警告してください。



    # fuser -c -k mount-point
    

    ファイルシステムを使用中のプロセスに SIGKILL が送信されます。

  4. ファイルシステムを使用中のプロセスがないことを確認します。

    # 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 ファイルシステムは特殊な場合です。システムが機能するにはルートが必要なので、ルート (/) のファイルシステムはシャットダウン中でなければマウント解除できません。


  1. 「前提条件」の前提条件を満たしているかどうかを確認します。

  2. ファイルシステムをマウント解除します。


    # umount mount-point
    

    mount-point

    マウント解除したいファイルシステム名。ここでは、ファイルシステムがマウントされているディレクトリ名、ファイルシステムのデバイス名パス、NFS ファイルシステムの資源、LOFS ファイルシステムのループバックディレクトリのいずれかを指定できる 

例 - ファイルシステムをマウント解除する

次の例では、ローカルのホームディレクトリからファイルシステムがマウント解除されます。


# umount /export/home

次の例ではローカルディスクの 7 番目のスライス上のファイルシステムのマウントが解除されます。


# umount /dev/dsk/c0t0d0s7

/etc/vfstab ファイルに列挙されているファイルシステムをマウント解除する方法

次の手順で、//proc/var/usr のファイルシステムを除き、/etc/vfstab ファイルに列挙されているすべてのファイルシステムをマウント解除します。

  1. 「前提条件」の前提条件を満たしているかどうかを確認します。

  2. /etc/vfstab ファイルに列挙されているすべてのファイルシステムをマウント解除します。


    # umountall
    

    可能なファイルシステムがすべてマウント解除されます。使用中のファイルシステムはマウント解除されません。

  3. 使用中だったためにマウント解除されなかったファイルシステムの場合は、「ファイルシステムを使用中のすべてのプロセスを終了させる方法」で説明した手順に従って、マウント解除できるようにします。

  4. 必要に応じて、すべてのファイルシステムがマウント解除されるまで手順 2 を繰り返します。

第 29 章 キャッシュファイルシステムの手順

キャッシュファイルシステム (CacheFS) は、サーバーとネットワークの負荷を軽減して NFS サーバーの性能とスケーラビリティを改善する汎用ファイルシステムキャッシュ機構です。CacheFS は階層化ファイルシステムとして設計されていて、あるファイルシステムを別のファイルシステムのキャッシュに書き込む機能を持っています。NFS 環境では、CacheFS はサーバーあたりのクライアント比率を高め、サーバーとネットワークの負荷を軽減し、ポイントツーポイントプロトコル (PPP) のような低速リンク上でクライアントの性能を改善します。

この章の内容は次のとおりです。

CacheFS の機能

キャッシュにマウントするように指定したファイルシステムに、ユーザーがネットワークを経由しなくてもローカルにアクセスできるように、cfsadmin(1M) コマンドを使用してキャッシュをクライアント上で作成します。図 29-1 は、CacheFS の使用に関連する構成要素の関係を示しています。

バックファイルシステムとは、キャッシュにマウントするように指定するファイルシステムです。通常、これは NFS または HSFS (High Sierra File System) ファイルシステムです。ユーザーがバックファイルシステムの一部であるファイルにアクセスしようとすると、そのファイルはキャッシュに書き込まれます。したがって、ユーザーがファイルにアクセスするまで、キャッシュは空になっています。ユーザーにとって、ファイルに初めてアクセスするときは低速に思われますが、同じファイルを使用すると高速になります。


注 -

共有可能なファイルシステムしかマウントできません。share(1M) コマンドを参照してください。


図 29-1 CacheFS の機能

Graphic

キャッシュファイルシステムの設定

表 29-1 作業マップ : キャッシュファイルシステムの設定

作業 

説明 

手順の説明 

1. キャッシュの作成 

cfsadmin コマンドを使用してキャッシュを作成する。

「キャッシュを作成する方法」

2. ファイルシステムをキャッシュにマウントする 

mount コマンドを使用してファイルシステムをキャッシュにマウントする。

mount を使用してキャッシュにマウントするファイルシステムを指定する方法」

 

/etc/vfstab ファイルを編集してファイルシステムをキャッシュに書き込む。

/etc/vfstab ファイルを編集してファイルシステムをキャッシュにマウントする方法」

 

AutoFS を使用してファイルシステムをキャッシュに書き込む。 

「AutoFS を使用してファイルシステムをキャッシュにマウントする方法」

キャッシュを作成する方法

  1. スーパーユーザーになります。

  2. cfsadmin(1M) コマンドの -c オプションを使用してキャッシュを作成します。


    # cfsadmin -c cache-directory
    

    cache-directory

    キャッシュが作成されるディレクトリ名。詳細は、cfsadmin(1M) のマニュアルページを参照


    注 -

    キャッシュを作成し終わったら、キャッシュディレクトリ内では操作しないでください。何か実行すると、CacheFS ソフトウェア内で矛盾が生じます。


例 - キャッシュを作成する

次の例では、デフォルトのキャッシュパラメータ値を使用して、/local/mycache ディレクトリ内にキャッシュを作成します。


# mkdir /local
# cfsadmin -c /local/mycache

キャッシュにマウントするファイルシステムの指定

指定したファイルシステム内のファイルにユーザーがローカルにアクセスできるように、キャッシュにマウントされるファイルシステムを指定します。実際には、各ファイルは、ユーザーがアクセスするまではキャッシュに書き込まれません。

キャッシュにマウントされるファイルシステムを指定するには、次の 3 つの方法があります。

mount を使用してキャッシュにマウントするファイルシステムを指定する方法

  1. スーパーユーザーになります。

  2. マウントポイントを作成します。

    マウントポイントを作成すると、ユーザーはそのマウントポイントで指定されたファイルシステムにアクセスできます。マウントポイントはどこからでも作成できます。次の手順のように、マウントコマンドで使用する CacheFS オプションによって、作成するマウントポイントを、指定したキャッシュディレクトリ内のキャッシュに書き込むように決めます。

  3. mount コマンドを使用して、ファイルシステムをキャッシュにマウントします。


    # mount -F cachefs -o backfstype=fstype,cachedir=cache-directory[,options] 
    back-filesystem mount-point
    

    fstype

    nfs など、バックファイルシステムのタイプ

    cache-directory

    キャッシュがあるディレクトリ名。これは、「キャッシュを作成する方法」でキャッシュを作成するときの指定と同じ

    options

    ファイルシステムをキャッシュにマウントするときに追加できる他のマウントオプションを指定する。CacheFS マウントオプションの詳細は、mount_cachefs(1M) のマニュアルページを参照

    back-filesystem

    キャッシュにマウントするバックファイルシステムのマウントポイント。バックファイルシステムが NFS ファイルシステムであれば、merlin: /usr/openwin など、ファイルシステムのマウント元となるサーバーのホスト名と、キャッシュにマウントするファイルシステム名 (コロンで区切る) を指定しなければならない

    mount-point

    ファイルシステムのマウント先となるディレクトリ 

  4. 作成したキャッシュが実際にマウントされたかどうかを確認するには、次のように 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

例 - mount を使用してキャッシュにマウントするファイルシステムを指定する

次の例では、マウントポイント /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 ファイルを編集してファイルシステムをキャッシュにマウントする方法

  1. スーパーユーザーになります。

  2. エディタを使用して、マウントするファイルシステムを /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  -

    最終行は新しいエントリを表します。

  3. 次のように mount コマンドを使用してキャッシュされたファイルシステムをマウントするか、リブートします。


    # mount /mount-point
    

例 - /etc/vfstab ファイルを編集してキャッシュにファイルシステムをマウントする

次の例は、キャッシュファイルシステム用の /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

AutoFS を使用してファイルシステムをキャッシュにマウントする方法

自動マウントマップ内で -fstype=cachefs マウントオプションを指定して、AutoFS によりキャッシュにファイルシステムをマウントします。CacheFS のマウントオプション (backfstypecachedir など) も、自動マウントマップ内で指定します。自動マウントマップの詳細は、automount(1M) のマニュアルページや、『NFS の管理』も参照してください。

  1. スーパーユーザーになります。

  2. エディタを使用して、次の 1 行を auto_direct マップに追加します。

      /mount-point -fstype=cachefs,cachedir=/directory,backfstype=nfs server:/file-system
    
  3. エディタを使用して、次の 1 行を auto_master マップに追加します。

      /-

    /- エントリによって、auto_direct マップをチェックするように指示します。

  4. システムをリブートします。

  5. エントリが正しく作成されたか確認するには、次のようにキャッシュにマウントしたファイルシステムにカレントディレクトリを変更して内容を表示します。


    # cd filesystem
    # ls 
    

AutoFS とマップを編集する方法の詳細は、『NFS の管理』の AutoFS に関する章を参照してください。

例 - AutoFS を使用してファイルシステムをキャッシュにマウントする

次の auto_master エントリは、キャッシュファイルシステムを /docs ディレクトリに自動的にマウントします。

/docs	 -fstype=cachefs,cachedir=/local/mycache,backfstype=nfs merlin:/docs

キャッシュされたファイルシステムの管理

表 29-2 作業マップ : キャッシュされたファイルシステムの管理

作業 

説明 

手順の説明 

1. キャッシュの変更 

キャッシュの動作を変更する。 

「キャッシュ内でファイルシステムを変更する方法」

2. キャッシュ情報の表示 

cfsadmin コマンドを使用してキャッシュされたファイルシステムに関する情報を表示する。

「キャッシュされたファイルシステムに関する情報を表示する方法」

3. 整合性チェックの実行 

cfsadmin コマンドを使用して必要に応じて整合性チェックを実行する。

「必要に応じて整合性チェックを指定する方法」

4. キャッシュの削除 

umount コマンドと cfsadmin コマンドを使用して、キャッシュされたファイルシステムを削除する。

「キャッシュされたファイルシステムを削除する方法」

5. ファイルシステムの完全性の検査 

fsck_cachefs コマンドを使用して、キャッシュされたファイルシステムの完全性をチェックする。

「キャッシュされたファイルシステムの完全性をチェックする方法」

キャッシュの管理

キャッシュを設定し終わったら、次の管理作業を実行できます。

キャッシュ内でファイルシステムを変更する方法

ファイルシステムの特定のオプションを変更する方法については、第 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

キャッシュされたファイルシステムに関する情報を表示する方法

  1. スーパーユーザーになります。

  2. 指定したキャッシュにマウントされたすべてのファイルシステムに関する情報を表示します。


    # 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
#

必要に応じて整合性チェックを指定する方法

  1. スーパーユーザーになります。

  2. 次のように mount(1M) コマンドの demandconst オプションを指定して、ファイルシステムをキャッシュにマウントします。


    # mount -F cachefs -o backfstype=nfs,cachedir=/directory,demandconst 
    server:/file-system /mount-point
    

  3. キャッシュされた特定のファイルシステム上で整合性チェックを有効にするには、次のように -s オプションを指定して cfsadmin(1M) コマンドを使用します。


    # cfsadmin -s  /mount-point
    

    整合性チェックについての詳細は、「キャッシュされたファイルシステムとバックファイルシステムとの整合性チェック」を参照してください。

キャッシュされたファイルシステムを削除する方法

  1. スーパーユーザーになります。

  2. キャッシュ内のすべてのファイルシステムをマウント解除します。


    # umount mount-point
    

    mount-point には、削除したい、キャッシュされたファイルシステムを指定します。

  3. 次のように、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
    #
  4. キャッシュされたファイルシステムを指定したキャッシュから削除します。


    # cfsadmin -d cache-id cache-directory
    

    cache-id

    キャッシュされたファイルシステム名。この名前は、cfsadmin -l コマンドからの出力の最終行に表示される。詳細は、「キャッシュされたファイルシステムに関する情報を表示する方法」を参照。cache-idall を指定すると、特定のキャッシュに書き込まれたすべてのファイルシステムを削除できる

    cache-directory

    キャッシュがあるディレクトリ 

  5. キャッシュされたファイルシステムが削除されたことを確認します。

    削除したファイルシステムのキャッシュ 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) を参照してください。

  1. スーパーユーザーになります。

  2. 指定されたキャッシュ内でキャッシュされたファイルシステムをチェックします。


    # fsck -F cachefs [-m] [-o noclean] cache-directory
    

    -m

    fsck にキャッシュされたファイルシステムをチェックさせるが、修復しない

    -o noclean

    キャッシュされたファイルシステム上でチェックのみを実行させるが、修復しない 

    cache-directory

    キャッシュがあるディレクトリ名 

例 - キャッシュされたファイルシステムの完全性をチェックする

次の例では、/local/mycache キャッシュの一部になっているキャッシュされたファイルシステムをチェックします。


# fsck -F cachefs /local/mycache
#

cachefspack によるキャッシュファイルシステムの管理

一般的な使い方でも、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

パッキングリストに指定してファイルをキャッシュにパックする方法

パッキングリストを使用してファイルをパックするには、次に示すように、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 コマンドに定義されたファイル名を (文字どおりのファイル名ではなく) 正規表現として扱います。

共有ディレクトリのファイルをパックする方法

  1. 共有ディレクトリにある、ユーザーが所有するファイルだけをパックするには、次のように LIST コマンドをパッキングリストに定義します。

       LIST !find . -user your_user_name -print
  2. 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 には xtermtexteditresize の 3 つのファイルがあります。xtermresize ファイルはパックするように指定されていますが、パックされていません。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 コマンドのヘルプの表示

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 コマンドを使用すると、次のようなエラーメッセージが表示される場合があります。


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 の統計情報は、次のように利用できます。

これらの結果から得られた情報を使用すると、キャッシュサイズと望ましい性能を取捨選択して調整できます。

CacheFS の統計に関連する、次の 3 つのコマンドがあります。

cachefslog

ログファイルの位置を指定します。また、このコマンドでは、統計情報が現在どこに記録されているかが表示されるので、ロギングを中止できます。詳細は、cachefslog(1M) のマニュアルページを参照してください。

cachefswssize

ログファイルを解釈して推奨キャッシュサイズを表示します。詳細は、cachefswssize(1M) のマニュアルページを参照してください。

cachefsstat

特定のファイルシステム、またはキャッシュされたすべてのファイルシステムに関する統計情報を表示します。このコマンドの出力に含まれる情報は、キャッシュから直接取り出されます。詳細は、cachefsstat(1M) のマニュアルページを参照してください。


注 -

CacheFS 統計情報コマンドは、どのディレクトリから実行してもかまいません。ただし、cachefswssize(1M) コマンドを実行するには、スーパーユーザーにならなければなりません。


統計の累計は、ログファイルの作成時から始まります。作業時間が終わったら、cachefslog -h コマンドを使用してロギングを停止してください。手順については、「ロギングプロセスを停止する方法」を参照してください。

CacheFS 統計情報を設定して表示するための前提条件

CacheFS 統計情報コマンドを使用する前に、次の操作を実行しておかなければなりません。


注 -

次の手順は推奨する順序を示しています。異なる順序で作業してもかまいません。


CacheFS 統計情報の設定

表 29-3 に、CacheFS 統計情報の設定に関連する手順を示します。

表 29-3 作業マップ : CacheFS 統計情報の設定

作業 

説明 

手順の説明 

1. ロギングの設定 

cachefslog コマンドを使用して、キャッシュされたファイルシステムのロギングを設定する。

「ロギングプロセスを設定する方法」

2. ログファイルの検索 

cachefslog コマンドを使用してログファイルの位置を特定する。

「ログファイルの場所を調べる方法」

3. ロギングプロセスの停止 

cachefslog コマンドを使用してロギングプロセスを停止する。

「ロギングプロセスを停止する方法」

4. キャッシュサイズの表示 

cachefswssize コマンドを使用してキャッシュサイズを表示する。

「作業セット (キャッシュ) のサイズを表示する方法」

5. キャッシュ統計情報の表示。 

cachefsstat コマンドを使用して統計情報を表示する。

「キャッシュ統計情報を表示する方法」

CacheFS ロギング

この節では CacheFS ロギングを設定し、表示する方法を説明します。

ロギングプロセスを設定する方法

  1. cachefslog コマンドを使用してロギングプロセスを設定します。


    $ cachefslog -f  log-file-path mount-point 
    

    -f

    ロギングプロセスを設定する 

    log-file-path

    ログファイルの位置を表す。ログファイルは、vi などのエディタで作成する標準ファイル 

    mount-point

    統計情報を収集するマウントポイント (キャッシュされたファイルシステム) を指定する 

  2. ログファイルを正しく設定したかどうかを確認するには、次のように 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) コマンドを使用した後の作業から理想的なキャッシュサイズを決定したりできます。

作業セット (キャッシュ) のサイズを表示する方法

  1. スーパーユーザーになります。

  2. 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 ノード数 (ファイル数) を設定する

通常、これらのパラメータ値を変更する必要はありません。最適のキャッシュ動作が得られるデフォルト値に設定されています。ただし、キャッシュに使用されないフロントファイルシステム内に空き空間があり、それを他のファイルシステムに使用したい場合は、maxblocksmaxfiles の設定を変更できます。そのためには、cfsadmin(1M) コマンドを使用します。たとえば、次のようになります。


$ cfsadmin -o maxblocks=60

キャッシュされたファイルシステムとバックファイルシステムとの整合性チェック

CacheFS は、キャッシュされたディレクトリとファイルが最新の状態に保たれることを保証するために、キャッシュに格納されたファイルの整合性を定期的にチェックします。整合性をチェックするために、CacheFS は現在の変更時刻を前回の変更時刻と比較します。変更時刻が異なる場合は、そのディレクトリまたはファイルに関するすべてのデータと属性がキャッシュから消去され、バックファイルシステムから新しいデータと属性が取り出されます。

ユーザーがディレクトリやファイルの処理を要求すると、CacheFS は整合性を検査する時間があるかどうかをチェックします。時間があれば、バックファイルシステムから変更時刻を取得して比較します。

必要に応じて行う整合性チェック

mount(1M) コマンドの demandconst オプションを指定すると、このオプションでマウントしたファイルシステムに関して明示的に要求するときのみ、整合性チェックを実行できます。ファイルシステムをキャッシュにマウントするときに demandconst オプションを指定すると、-s オプションを指定して cfsadmin コマンドを使用し、整合性チェックを要求します。デフォルトでは、ファイルがアクセスされるたびに、各ファイルの整合性がチェックされます。ファイルがアクセスされなければ、チェックは実行されません。demandconst オプションを使用すると、整合性チェックによってネットワークがあふれる事態を回避できます。この整合性チェックの詳細は、cfsadmin(1M) のマニュアルページを参照してください。

第 30 章 追加スワップ空間の構成の手順

この章の内容は次のとおりです。

スワップ空間について

この節では、スワップ空間の概念と、SunOS 4.0/4.1 と SunOS 5.7 のスワップ要件の違いについて説明します。すでに SunOS 5.7 のスワップ機構について精通している方は、「スワップ空間の計画」の節に進んでください。

管理者は、次の事柄を決定する上で SunOS 5.7 のスワップ機構を理解しておく必要があります。

スワップ空間と仮想メモリー

SunOS 5.7 システムソフトウェアは、一時記憶域にファイルシステムではなくディスクスライスを使用します。これらのスライスを「スワップ」スライスと呼びます。 スワップスライスは、システムの物理メモリーが不足し現在のプロセスを処理することができないときに、仮想メモリー記憶域として使用されます。

SunOS 5.7 の仮想メモリーシステムは、ディスク上のファイルの物理コピーをメモリー内の仮想アドレスに対応付けます。これらのマッピングに関するデータが入った物理メモリーページは、ファイルシステム内の通常ファイルまたはスワップ空間から読み直されます。ユーザーにはメモリーをバックアップしているファイル名はわからないため、スワップ空間から読み直されたメモリーは anonymous メモリーとして参照されます。

SunOS 4.0/4.1 の anonymous メモリーページは、システムのスワップ空間プールからランダムに割り当てられた名前を使用して対応付けられます。これらのメモリーページの用途は次のとおりです。

SunOS 4.0/4.1 の anonymous メモリーの実装には、次の制限があります。

SunOS 5.7 ソフトウェア環境には、「仮想スワップ空間」という概念が導入されています。これは、anonymous メモリーページとこれらのページを実際にバックアップする物理記憶域 (またはディスク上にとられたバックアップ用のスワップ空間) の間に位置する層です。システムの仮想スワップ空間は、すべての物理 (ディスク上にとられたバックアップ用のスワップ空間) スワップ空間と現在使用可能な物理メモリーの一部の合計に等しくなります。

仮想スワップ空間の長所は次のとおりです。

スワップ空間と TMPFS ファイルシステム

SunOS 5.7 環境では、TMPFS ファイルシステムは /etc/vfstab ファイル内のエントリによって自動的に稼働されます。TMPFS ファイルシステムは、ファイルとそれに関連付けられた情報をディスクではなくメモリー (/tmp ディレクトリ内) に格納するので、これらのファイルへのアクセスが高速になります。このため、コンパイラや DBMS 製品のように /tmp の使用量の大きいアプリケーションの場合は、性能が大幅に改善されます。

TMPFS ファイルシステムは、システムのスワップ資源から /tmp ディレクトリ内の領域を割り当てます。つまり、/tmp 内の領域を使い果たすと、スワップ空間も使い果たしたことになります。したがって、アプリケーションの /tmp の使用量が大きい場合に、スワップ空間の使用状況を監視しなければ、システムがスワップ空間を使い果たす可能性があります。

TMPFS を使用したいがスワップ資源が限られている場合は、次の方法を使用してください。

スワップ空間の追加が必要かどうかを調べる方法

この節では、スワップ空間を使い果たしたときに表示されるエラーメッセージについて説明します。

スワップ関連のエラーメッセージ

次のメッセージは、アプリケーションがさらに anonymous メモリーを取得しようとしたが、バックアップ用のスワップ空間が残っていなかったことを示します。


application is out of memory

malloc error O

WARNING: Sorry, no swap space to grow stack for pid

TMPFS 関連のエラーメッセージ


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 ファイル

システムをインストールすると、スワップスライスとファイルは /etc/vfstab ファイル内に列挙され、システムのブート時に /sbin/swapadd スクリプトによって起動されます。

/etc/vfstab ファイル内のスワップデバイスエントリには、次の情報が入っています。

スワップファイルが入っているファイルシステムは、スワップファイルが稼働される前にマウントしなければならないので、ファイルシステムをマウントするエントリがスワップファイルを起動するエントリより前に入っていることを、/etc/vfstab ファイル内で確認してください。

スワップ空間の計画

スワップ空間のサイズを決定する上で最も重要な要素は、システムのソフトウェアアプリケーションの要件です。たとえば、コンピュータ支援設計シミュレータ、データベース管理製品、トランザクションモニター、地質分析システムなどの大型アプリケーションは、超大型メモリーシステム内で 200 〜 1000M バイトのスワップ空間を消費することがあります。

一般にデータファイルのサイズが 10 〜 20M バイトを超えるアプリケーションの場合は、スワップ空間の要件をアプリケーションベンダーに問い合わせてください。

アプリケーションベンダーからスワップ空間の要件を入手できない場合は、次のガイドラインに従ってスワップ空間を割り当ててください。

スワップ資源の監視

/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

usedavailable の数値の統計は、システム上の合計スワップ空間に等しくなります。これには、物理メモリーの一部とスワップデバイス (またはファイル) が含まれます。

使用可能なスワップ空間と使用済みスワップ空間の容量 (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 コマンド

mkfile コマンドは、NFS のマウント済みスワップ空間またはローカルスワップ空間に使用できるファイルを作成します。スティッキビットが設定され、ファイルは 0 が埋め込まれます。スワップファイルのサイズは、バイト数 (デフォルト) として指定するか、接尾辞 kbm を使用して、それぞれ K バイト数、ブロック数、M バイト数として指定できます。

表 30-3 は、mkfile コマンドのオプションを示しています。

表 30-3 mkfile コマンドのオプション

オプション 

説明 

-n

空のファイルを作成する。サイズは表示されるが、データが書き込まれるまでディスクブロックは割り当てられない。 

-v

詳細モード。作成されたファイル名とサイズが表示される。 


注意 - 注意 -

-n オプションは、NFS スワップファイルの作成時のみ使用してください。


スワップファイルを作成して使用可能にする方法

  1. スーパーユーザーになります。

    root 権限がなくてもスワップファイルを作成できますが、スワップファイルが不注意から上書きされないように、root を所有者にしておくとよいでしょう。

  2. スワップファイルを作成します。


    # mkfile nnn[k|b|m] filename
    

    サイズ「nnn」(K バイト数、バイト数、M バイト数) のスワップファイルと指定したファイル名が作成されます。

  3. スワップファイルを有効にします。


    # /usr/sbin/swap -a /path/filename
    

    絶対パス名を使用してスワップファイルを指定しなければなりません。スワップファイルが追加され、ファイルシステムがマウント解除されるか、またはシステムがリブートされるまで使用可能になります。

  4. ファイルの完全パス名を指定し、ファイルシステムのタイプとして swap を指定して、スワップファイルのエントリを /etc/vfstab ファイルに追加します。

       
    /path/filename   -      -       swap     -     no     -
  5. スワップファイルが追加されたことを確認するには、次のように入力します。


    /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

スワップファイルを削除する

不要になった余分なスワップ空間は、削除することができます。

余分なスワップ空間を削除する方法

  1. スーパーユーザーになります。

  2. 次のように swap -d コマンドを使用してスワップ空間を削除します。


    # /usr/sbin/swap -d /path/filename
    

    スワップファイル名がリストから削除されるので、スワッピングに使用できなくなります。ファイルそのものは削除されません。

  3. /etc/vfstab ファイルを編集して、スワップファイルのエントリを削除します。

  4. 他の目的に使用できるようにディスク領域を復元します。


    # 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

第 31 章 ファイルシステムの整合性チェック

この章の内容は以下のとおりです。

fsck のエラーメッセージについては、『Solaris のシステム管理 (第 2 巻)』の「ファイルシステムで発生する問題の解決」を参照してください。

UFS ファイルシステムは、一連の内部テーブルを基にして使用済み i ノード、使用可能ブロックを特定します。これらの内部テーブルがディスク上のデータと正しく同期していないと、整合性が失われ、ファイルシステムの修復が必要になります。

次のような原因でオペレーティングシステムが異常終了すると、ファイルシステムが損傷したり、整合性が失われたりすることがあります。

ファイルシステムの破損は重大ですが、あまり頻繁に起きるものではありません。システムをブートすると、ファイルシステムの整合性チェックが (fsck プログラムを使用して) 自動的に実行されます。ほとんどの場合は、このファイルシステムのチェックによって問題が修復されます。

この章では、fsck プログラムでチェックされ修復される問題と fsck のオプションについて説明します。また、次の作業についても説明します。

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 でチェックして修復される内容

この節では、ファイルシステムの通常の処理中に発生する問題、原因、fsck で検出される問題、およびそれらの修正方法について説明します。

非整合状態が発生する原因

労働日には毎日多数のファイルが作成、変更、または削除されます。ファイルが変更されるたびに、オペレーティングシステムは一連のファイルシステムの更新処理を実行します。これらの更新処理がディスクに確実に書き込まれると、整合性のあるファイルシステムが生成されます。

ユーザープログラムが書き込みなどの、ファイルシステムを変更する処理を実行すると、書き込まれるデータはまずカーネル内部のインコアバッファにコピーされます。一般に、ディスクの更新は非同期に処理されるので、ユーザープロセスは、書き込みシステムコールが値を返した後すぐに処理を続けることができますが、実際へのデータの書き込みは、ずいぶん後に実行されることもあります。したがって、ディスク上にあるファイルシステムは、インコア情報で表されるファイルシステムの状態から常に遅延することになります。

別の目的にバッファが必要になったり、カーネルが fsflush デーモンを自動的に (30 秒間隔で) 実行すると、インコア情報を反映するようにディスク情報が更新されます。システムがインコア情報を書き込まずに停止すると、ディスク上のファイルシステムの整合性がなくなります。

ファイルシステムの整合性は、さまざまな原因で失われることがあります。最も一般的な原因は、オペレータのエラーとハードウェア障害です。

システムを正しくシャットダウンしなかったり、マウントされているファイルシステムが正しくオフラインにされないと、「クリーンでない停止」が原因で問題が発生することがあります。クリーンでない停止を防ぐには、CPU を停止したり、ディスクをドライブから物理的に取り出したり、ディスクをオフライン状態にする前に、ファイルシステムの現在の状態をディスクに書き込まなければなりません (つまり、同期させなければなりません)。

また、ハードウェアの欠陥が原因で整合性が失われることもあります。ディスクドライブ上ではいつでもブロックが損傷する可能性があり、ディスクコントローラが正常に機能しなくなる可能性があります。

整合性がチェックされる UFS 構成要素

この節では、UFS ファイルシステムの構成要素、つまりスーパーブロック、シリンダグループブロック、i ノード、間接ブロック、データブロックに fsck が適用する整合性チェックの種類について説明します。

スーパーブロック

スーパーブロックには集計情報が格納されており、UFS ファイルシステム内で最も破損しがちな構成要素です。ファイルシステムの i ノードやデータブロックが変更されるたびに、スーパーブロックも変更されます。CPU が停止した場合、直前のコマンドが sync コマンドでなければ、スーパーブロックはほぼ確実に破損します。

スーパーブロックの非整合性は、次の面からチェックされます。

ファイルシステムと i ノードリストのサイズ

ファイルシステムのサイズは、スーパーブロックに使用されるブロック数と i ノードリストに使用されるブロック数よりも大きくなければなりません。i ノード数は、ファイルシステムの最大許容数よりも小さくなければなりません。ファイルシステムのサイズとレイアウト情報は、fsck にとって最も重要な情報部分です。これらのサイズを実際にチェックする方法はありませんが、ファイルシステムの作成時に静的に判断されるので、fsck はサイズが妥当な範囲内にあるかどうかをチェックできます。ファイルシステムの他のすべてのチェックを行うには、これらのサイズが正確でなければなりません。fsck が一次スーパーブロックの静的パラメータ内に不正な情報を検出すると、オペレータに代替スーパーブロックの位置を指定するように促します。

空きブロック数

空きブロック数は、シリンダグループのブロックマップに格納されます。fsck は、空きマーク付きのすべてのブロックがファイルによって使用されていないかどうかをチェックします。すべてのブロックをチェックし終わると、fsck は空きブロック数と i ノードによって使用されるブロック数の合計がファイルシステム内の合計ブロック数に等しくなるかどうかをチェックします。ブロック割り当てマップ内に間違いがあると、fsck はブロックが割り当てられている状態のままで構築し直します。

スーパーブロック内の集計情報には、ファイルシステム内の空きブロックの合計数のカウントが入っています。fsck プログラムは、このブロック数をファイルシステム内で見つかった空きブロック数と比較します。数が一致しなければ、fsck はスーパーブロック内の空きブロック数を実際の空きブロック数で置き換えます。

空き i ノード数

スーパーブロック内の集計情報には、ファイルシステム内の空き i ノード数が入っています。fsck プログラムは、この i ノード数をファイルシステム内で見つかった空き i ノード数と比較します。数が一致しなければ、fsck はスーパーブロック内の空き i ノード数を実際の空き i ノード数で置き換えます。

i ノード数

i ノードリストは、i ノード 2 から順番にチェックされます (i ノード 0 と i ノード 1 は予約されています)。各 i ノードの非整合性は、次の面からチェックされます。

i ノードのフォーマットとタイプ

各 i ノードには、そのタイプと状態を記述するモードのワードが入っています。i ノードには、次の 6 つのタイプがあります。

i ノードの状態は、次の 3 つに分かれています。

ファイルシステムが作成されると、一定数の i ノードが確保されますが、必要になるまでは割り当てられません。割り当て済みの i ノードとは、ファイルを指す i ノードです。未割り当ての i ノードは、ファイルを指さないので空のはずです。不完全に割り当て済みの状態は、i ノードが正しくフォーマットされていないことを意味します。たとえば、ハードウェア障害が原因で i ノードに不正なデータが書き込まれると、i ノードは不完全に割り当て済みの状態になることがあります。fsck が実行できる唯一の修正動作は、その i ノードを消去することです。

リンク数

各 i ノードには、そこにリンクされているディレクトリエントリ数が入っています。fsck プログラムは、ルートディレクトリから順番にディレクトリ構造全体を検査し、i ノードごとに実際のリンク数を計算して、各 i ノードのリンク数を検査します。

i ノードに格納されているリンク数が fsck によって判断された実際のリンク数と一致しない場合は、次の 3 つの状況が考えられます。

重複ブロック数

各 i ノードには、それが使用するすべてのブロックのリスト、またはリストを指すポインタ (間接ブロック) が入っています。間接ブロックは i ノードによって所有されるので、間接ブロックの整合性が失われると、それを所有する i ノードが直接影響を受けます。

fsck プログラムは、i ノードから使用される各ブロック番号を、割り当て済みブロックのリストと比較します。別の i ノードからすでにブロック番号が使用されていると、そのブロック番号は重複ブロックのリストに入れられます。それ以外の場合は、割り当て済みブロックのリストが更新され、ブロック番号が追加されます。

重複ブロックがあると、fsck は再び i ノードリストを調べて、各重複ブロックを使用する他の i ノードを検索します (i ノード内に大量の重複ブロックが入っている場合は、ファイルシステムに間接ブロックが正しく書き込まれていない可能性があります)。どの i ノードにエラーがあるかを正確に判断することはできません。fsck プログラムは、保持する i ノードと消去する i ノードを選択するように促すプロンプトを表示します。

不正なブロック番号

fsck プログラムは、i ノードから使用される各ブロック番号をチェックして、その値が最初のデータブロック番号よりも大きく、ファイルシステム内の最後のデータブロック番号より小さいかどうかを調べます。ブロック番号がこの範囲に含まれない場合は、不正なブロック番号と見なされます。

間接ブロックがファイルシステムに正しく書き込まれていないことが原因で、i ノード内に不正なブロック番号が発見されることがあります。fsck はその i ノードの消去を促すプロンプトを表示します。

i ノードサイズ

各 i ノードには、参照するデータブロック数が入っています。実際のデータブロック数は、割り当て済みのデータブロック数と間接ブロック数の合計です。fsck はデータブロック数を計算し、そのブロック数を i ノードから使用されるブロック数と比較します。i ノードに不正なブロック数が入っていると、fsck はその修正を促すプロンプトを表示します。

各 i ノードには、64 ビットのサイズフィールドがあります。このフィールドは、i ノードに関連付けられたファイル内の文字数 (データバイト数) を示します。i ノードのサイズフィールドに整合性があるかどうかは、サイズフィールド内の文字数を使用して、i ノードに関連付けるべきブロック数を計算し、その結果を i ノードから使用される実際のブロック数と比較して概算でチェックされます。

間接ブロック

間接ブロックは i ノードによって所有されます。したがって、間接ブロック内の整合性が失われると、それを所有する i ノードが影響を受けます。非整合性は、次の面からチェックできます。

また、間接ブロックの場合は整合性チェックも実行されます。

データブロック

i ノードは、3 種類のデータブロックを直接または間接に参照できます。参照されるブロックは、すべて同じ種類でなければなりません。次の 3 種類のデータブロックがあります。

プレーンデータブロックには、ファイルに格納される情報が入っています。シンボリックリンクデータブロックには、シンボリックリンクに格納されるパス名が入っています。ディレクトリデータブロックには、ディレクトリエントリが入っています。fsck はディレクトリデータブロックの妥当性しかチェックできません。

ディレクトリは、i ノードの mode フィールド内のエントリによって通常ファイルと区別されます。ディレクトリに関連付けらたデータブロックには、ディレクトリエントリが入っています。ディレクトリデータブロックの非整合性は、次の面からチェックされます。

未割り当てディレクトリ

ディレクトリデータブロック内の i ノード番号が未割り当て i ノードを指す場合、fsck はそのディレクトリエントリを削除します。この状況は、ディレクトリエントリが入っているデータブロックが変更されて書き出されたが、i ノードが書き込まれていない場合に発生します。また、警告なしに CPU が停止された場合にも発生します。

不正な i ノード番号

ディレクトリエントリの 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 ファイル

ファイルシステムを直接指定せずに、ファイルシステムをチェックしたりマウントするコマンドを実行すると、各コマンドは、ファイルシステムテーブル (/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 番号を使用せずにファイルシステムのチェック順を決定します。


ブート中に実行される自動チェック機能を変更する方法

  1. スーパーユーザーになります。

  2. fsck pass」フィールド内の /etc/vfstab エントリを編集し、編集結果を保存します。

    次にシステムをブートしたときに、新しい値が使用されます。

UFS ファイルシステムを対話式でチェックして修復する

次の場合には、ファイルシステムを対話式でチェックする必要があります。

使用中のシステムの整合性が失われると、コンソールウィンドウにエラーメッセージが表示されたり、システムがクラッシュしたりすることがあります。

fsck を使用する前に、fsck コマンドの構文とオプション」 と『Solaris のシステム管理 (第 2 巻)』の「ファイルシステムで発生する問題の解決」を参照してください。

ファイルシステムのチェックが必要かどうかを調べる方法

  1. スーパーユーザーになります。

  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

ファイルシステムを対話式でチェックする方法

  1. スーパーユーザーになります。

  2. ルート (/) と /usr 以外のローカルファイルシステムをマウント解除します。


    # umountall -l
    
  3. ファイルシステムをチェックします。


    # fsck
    

    /etc/vfstab ファイル内で、「fsck pass」フィールド内のエントリが 0 より大きいすべてのファイルシステムがチェックされます。また、fsck の引数として、マウントポイントディレクトリや /dev/rdsk/device-name も指定できます。整合性が失われている場合には、そのことを示すメッセージが表示されます。エラーメッセージのプロンプトに応答して 1 つまたは複数の UFS ファイルシステムを対話式でチェックする方法については、『Solaris のシステム管理 (第 2 巻)』の「ファイルシステムで発生する問題の解決」 を参照してください。

  4. エラーを修正し終わったら、fsck と入力して Return キーを押します。

    fsck は、一度の実行ですべてのエラーを修正できないことがあります。「FILE SYSTEM STATE NOT SET TO OKAY」というメッセージが表示される場合は、fsck を使って、修正作業を繰り返します。fsck では修正できない場合は、fsck で修復できない UFS ファイルシステムを修正する方法」を参照してください。

  5. 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 *****

UFS ファイルシステムの修復

fsck修復オプション (-o p) は、UFS ファイルシステムをチェックし、単純な問題を自動的に修正します。通常、この種の問題は予期しないシステム停止によるものです。オペレータの介入が必要な問題が発見されると、このコマンドは即座に終了します。また、修復オプションを使用する場合には、ファイルシステムを並列にチェックすることも可能です。

状態がクリーンにマークされずにシステムが停止した後のファイルシステムの修復にも、-o p オプションを指定して fsck を実行することができます。このモードでは、fsck はクリーンフラグを調べずに完全チェックを実行します。これらの処理は、fsck を対話形式で実行した場合の処理のサブセットです。

ファイルシステムを修復する方法

  1. スーパーユーザーになります。

  2. ファイルシステムをマウント解除します。


    # umount mount-point
    
  3. 修復オプションを指定して UFS ファイルシステムをチェックします。


    # fsck -o p /dev/rdsk/device-name
    

    fsck の引数として mount-point または /dev/rdsk/device-name を使用すると、個々のファイルシステムを修復できます。

例 - ファイルシステムを修復する

次の例では、/usr ファイルシステムが修復されます。


# fsck -o p /usr

不正なスーパーブロックの復元

ファイルシステムのスーパーブロック内のデータが破壊された場合は、復元しなければなりません。スーパーブロックが不正なときには、fsck からメッセージが表示されます。幸い、スーパーブロックの冗長コピーがファイルシステム内に格納されています。fsck -o b を使用すると、スーパーブロックをそのコピーで置き換えることができます。

不正なスーパーブロックを復元する方法

  1. スーパーユーザーになります。

  2. データが破壊されたファイルシステム上のディレクトリがカレントディレクトリになっている場合は、カレントディレクトリを変更します。

  3. ファイルシステムをマウント解除します。


    # umount mount-point
    

    注意 - 注意 -

    次の手順では、必ず newfs-N オプションを使用してください。-N オプションを省略すると、新しい空のファイルシステムが作成されます。


  4. newfs -N コマンドを使用して、スーパーブロックの値を表示します。


    # newfs -N /dev/rdsk/device-name
    

    このコマンドの出力には、newfs によってファイルシステムが作成されたときに、スーパーブロックのコピーとして使用されることになったブロック番号が表示されます。

  5. 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 で修復できない UFS ファイルシステムを修正する方法

あるパスで問題が訂正されたために、前のパスで見つからなかった問題が表面化する場合があるので、fsck を何度か実行してファイルシステムを修正しなければならないことがあります。fsck はクリーンになるまで動作を続けるわけではないので、手作業で実行しなければなりません。

fsck で表示される情報に注目してください。問題を解決する上で参考になります。たとえば、メッセージは不正なディレクトリを指す場合があります。そのディレクトリを削除すると、fsck が問題なく実行されるようになる場合もあります。

それでも fsck でファイルシステムを修復できない場合は、fsdbffclri、または ncheck コマンドを使用し、間違いを指定して修正します。これらのコマンドの使用方法については、fsdb(1M)ff(1M)clri(1M)ncheck(1M) の各マニュアルページを参照してください。最終的には、ファイルシステムを作成し直し、その内容をバックアップ媒体から復元せざるを得ない場合があります。ファイルシステム全体を復元する方法については、第 35 章「ファイルとファイルシステムの復元の手順」を参照してください。

ファイルシステムを完全に修復できないが、読み取り専用としてマウントできる場合は、cptar、または cpio を使用して、データのすべてまたは一部をファイルシステムから取り出してください。

問題の原因がハードウェア上のディスクエラーであれば、ファイルシステムを作成し直して復元する前に、ディスクをフォーマットし直して再びスライスに分割しなければならない場合があります。一般に、ハードウェアエラーが発生すると、さまざまなコマンドで同じエラーが繰り返し表示されます。format(1M) コマンドはディスク上の不良ブロックを使用しないようにします。ただし、ディスクの損傷が致命的な場合、フォーマットし直した後も問題が解決されないことがあります。format コマンドの使用方法については、format(1M) のマニュアルページを参照してください。新しいディスクをインストールする方法については、第 23 章「SPARC: ディスク追加の手順」または第 24 章「x86: ディスク追加の手順」を参照してください。

fsck コマンドの構文とオプション

fsck コマンドは、ファイルシステム内の非整合状態をチェックして修復します。次の 4 つのオプションがあります。

汎用 fsck コマンドの構文、オプション、引数

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 コマンドのオプションと引数

オプションのタイプ 

オプション 

説明 

汎用 

-F

ファイルシステムのタイプ (type) を指定する。コマンド行で type を指定しない場合は、/etc/vfstab ファイル内のエントリを、指定した raw デバイス名と照合して取得される。エントリが見つからない場合は、/etc/default/fs 内で指定されたデフォルトのローカルのファイルシステムのタイプが使用される。

 

-V

実行される完全なコマンド行が表示される (詳細モード)。表示行には、/etc/vfstab から取り出された追加情報が含まれる。このオプションを使用すると、コマンド行を検査して有効性を確認できる。コマンド自体は実行されない。

 

-m

予備チェックのみを実行する。ファイルシステムの状態を示すコードを返す。0 は「クリーン」を示し、32 は「ダーティ」を示す。起動スクリプト /sbin/rcS は、このオプションを使用して、ファイルシステムのチェックが必要かどうかを判断する。

 

-y-Y-n、または -N

実行されるコマンドのすべてのプロンプトに対して、自動的に、yes または no で応答する。 

 

c

静的にテーブルが割り当てられている古い形式のファイルシステムを、新しい形式の動的に割り当てられたテーブルに変換する。静的割り当ては最大テーブルサイズにハード制限が適用されることを示し、動的割り当ては、初期割り当ての後で必要に応じてテーブル用の領域を追加できることを意味する。ファイルシステムが新しい形式であれば、テーブル割り当てが古い形式で許される固定最大サイズを超えない限り、古い形式に変換される。fsck は変換方法を表示する。対話モードでは、fsck は変換前に確認を促すプロンプトを表示する。-o p オプションを使用すると、確認を促すプロンプトは表示されずに変換試行が実行される。このオプションは、多数のファイルシステムを一度に変換したい場合に便利である。ファイルシステムが古い形式か新しい形式かは、fstyp(1M) コマンドを実行し、最初に表示される行を調べれば判断できる。

 

w

書き込みアクセスできるファイルシステムのみをチェックする。 

 

special

1 つまたは複数のファイルシステムのマウントポイントまたは raw デバイス名を指定する。マウントポイントのエントリは、/etc/vfstab 内になければならない。special 引数を省略すると、/etc/vfstab 内で fsck デバイスが指定されていて、fsck pass の値が 0 より大きいエントリがチェックされる。修復 (-o p) が有効で、fsck pass の値が 1 より大きいエントリが複数個あると、異なるディスク上のファイルシステムは並列してチェックされる。

専用 

 

-o オプションに続けて、オプションをコンマで区切ったリスト。UFS 固有の fsck コマンドが解釈できるように渡されるオプションを指定する。

 

p

修復。コマンドはプロンプトを表示せずに実行され、検出されたエラーは自動的に訂正されるが、オペレータの介入が必要な問題が見つかると終了する。このオプションを使用すると、UFS ファイルシステムを並列にチェックすることもできる。 

 

b=blocknumber

指定した位置にある代替 (冗長) スーパーブロックを使用する。このオプションを使用すると、不良スーパーブロックを修復できる。newfs -N コマンドを使用すると、代替スーパーブロックのリストを表示できる。

第 32 章 ファイルシステムの参照情報

この章の内容は次のとおりです。

ルート (/) と /usr ファイルシステムのデフォルトディレクトリ

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

viex のバックアップファイル

/var/sadm

ソフトウェアパッケージ管理ユーティリティで管理されるデータベース 

/var/saf

saf (サービスアクセス機能) のログファイルとアカウンティングファイル

/var/spool

スプール化された一時ファイルのディレクトリ 

/var/spool/cron

cronat のスプールファイル

/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 ファイルシステムのシリンダグループの構造

UFS ファイルシステムを作成すると、ディスクスライスは、1 つまたは複数の連続するディスクシリンダから構成される、シリンダグループに分割されます。シリンダグループはさらにアドレス指定可能なブロックに分割され、このブロックによって、シリンダグループ内のファイルの構造が編成され、制御されます。各種のブロックは、ファイルシステム内で特定の機能を持っています。UFS ファイルシステムには、次の 4 種類のブロックがあります。

この節では、これらのブロックの編成と機能について説明します。

ブートブロック

ブートブロックには、システムのブート時に使用されるプログラムが格納されます。ファイルシステムがブートに使用されなければ、ブートブロックは空白のままです。ブートブロックは最初のシリンダグループ (シリンダグループ 0) にのみ表示され、スライス内の最初の 8K バイトです。

スーパーブロック

スーパーブロックには、ファイルシステムに関する大部分の情報が格納されます。その中でも、特に次の情報が重要です。

スーパーブロックは、ディスクスライスの先頭にあり、各シリンダグループ内で複製されます。スーパーブロックには重要なデータが入っているので、ファイルシステムの作成時には複数のスーパーブロックが作成されます。各スーパーブロックの複製は、シリンダグループの先頭からさまざまな大きさだけオフセットされます。複数プラッタを持つディスクドライブの場合、オフセットはスーパーブロックがドライブの各プラッタに表示されるように計算されます。つまり、最初のプラッタが失われても、いつでも代替スーパーブロックを取り出せます。最初のシリンダグループ内の先行ブロックを除き、オフセットによって作成される先行ブロックがデータの格納に使用されます。

集計情報ブロックは、スーパーブロックといっしょに保管されます。複製されませんが、通常はシリンダグループ 0 内で最初のスーパーブロックといっしょにグループ化されます。集計ブロックレコードには、ファイルシステムの使用時に発生した変化が記録され、ファイルシステム内の i ノード数、ディレクトリ数、フラグメント数、および記憶ブロック数が表示されます。

i ノード

i ノードには、ファイルに関して名前以外のすべての情報が入っており、ディレクトリ内に保管されます。i ノードは 128 バイトです。i ノード情報はシリンダ情報ブロック内に保管され、次の情報が入っています。

15 個のディスクアドレス (0 から 14 まで) の配列は、ファイルの内容が格納されるデータブロックを指します。最初の 12 個は直接アドレスで、ファイルの内容のうち最初の 12 個の論理記憶ブロックを直接指します。ファイルが論理ブロック 12 個分より大きい場合は、13 番目のアドレスは間接ブロックを指します。間接ブロックには、ファイルの内容ではなく直接ブロックのアドレスが入っています。14 番目のアドレスは、二重間接ブロックを指します。二重間接ブロックには、間接ブロックのアドレスが入っています。15 番目のアドレスが必要な場合は、三重間接アドレスが格納されます。図 32-1 は、i ノードから始まって、このアドレスブロックチェーンを示しています。

図 32-1 UFS システム内のファイルシステムアドレスチェーン

Graphic

データブロック

ファイルシステムに割り当てられた残りの領域には、データブロックが入っています。この種のブロックは、記憶ブロックと呼ばれることもあります。これらのデータブロックのサイズは、ファイルシステムの作成時に決定されます。デフォルトでは、データブロックは 2 つのサイズ、つまり 8K バイトの論理ブロックサイズと 1K バイトのフラグメントサイズで割り当てられます。

通常ファイルの場合、データブロックにはファイルの内容が入っています。ディレクトリの場合、データブロックにはディレクトリ内のファイルの i ノード番号とファイル名を示すエントリが入っています。

空きブロック

現在、i ノード、間接アドレスブロック、または記憶ブロックとして使用されていないブロックには、シリンダグループマップ内で空きを示すマークが付けられます。また、このマップはフラグメントを追跡し、ディスク性能の低下を防止します。

UFS ファイルシステムの内容の概念を理解しやすいように、図 32-2 に一般的な UFS システム内の一連のシリンダグループを示しています。

図 32-2 一般的な UFS ファイルシステム

Graphic

カスタムファイルシステムパラメータの決定

newfs コマンドによって割り当てられるデフォルトのファイルシステムパラメータを変更しようとする前に、各パラメータについて理解しておく必要があります。この節では、次の各パラメータについて説明します。

論理ブロックサイズ

論理ブロックサイズは、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 コマンドを使用してこのパラメータの値を変更できます。変更結果は、それ以後のブロック割り当てにのみ適用され、すでに割り当て済みのブロックには適用されません。

最適化のタイプ

「最適化のタイプ」には、「領域」と「時間」があります。

ファイルの数

i ノード数によって、ファイルシステム内で保持できるファイル数が決まります。ファイルごとに i ノードが 1 つあります。 i ノード 1 個あたりのバイト数によって、ファイルシステムの作成時に作成される合計 i ノード数が決まります。これは、ファイルシステムの合計サイズを、i ノード 1 個あたりのバイト数で割った値です。i ノードが割り当てられたら、ファイルシステムを作成し直さないかぎり、その数は変更できません。

i ノード 1 個あたりのデフォルトのバイト数は 2048 バイト (2K バイト) で、これは各ファイルの平均サイズが 2K バイト以上であることを想定しています。ほとんどのファイルは、2K バイトを超えています。多数のシンボリックリンクを持つファイルシステムでは、平均ファイルサイズを小さくすることができます。ファイルシステムに多数の小型ファイルが格納される場合は、このパラメータに小さい値を与えてもかまいません。ただし、i ノード数が少ないために i ノードが不足するよりも、多すぎる方が好ましいことを留意してください。i ノード数が少なすぎると、実際には空のディスクスライス上でも最大ファイル数に達してしまうことがあります。

カスタマイズされたファイルシステムを作成するためのコマンド

この節では、カスタマイズされたファイルシステムの作成に使用する 2 つのコマンドについて説明します。

newfs コマンドの構文、オプション、引数

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 は、入出力サブシステムが満たせる最大ブロック転送サイズ (バイト数) を指定する読み込み専用のカーネル変数である (この制限は、newfsmkfs ではなく mount によって適用される)。

また、このパラメータはクラスタ化も制御する。rotdelay の値に関係なく、maxcontig が 1 より大きいときのみクラスタ化できる。クラスタ化すると、入出力が高速になる。詳細は、tunefs(1M) のマニュアルページを参照。

raw_device

ファイルシステムを入れるパーティションの特殊文字 (raw) デバイスファイル名。この引数は必須。 

例 - newfs コマンドのオプションと引数

次の 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 を呼び出して、指定したディスクスライス上で指定したタイプのファイルシステムを作成させます。mkfs では各種のファイルシステムがサポートされますが、実際には UFS ファイルシステムの作成に使用します。他のタイプのファイルシステムを作成するには、ファイルシステム専用の mkfs コマンドを使用できるようにソフトウェアを作成する必要があります。通常は、mkfs を直接実行せずに、newfs コマンドで呼び出します。

次の例は、mkfs コマンドのすべての引数を示しています。

Graphic

汎用 mkfs コマンドは、/usr/sbin にあります。引数とオプションについては、mkfs(1M) のマニュアルページを参照してください。