Solaris のシステム管理

パート 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 システムソフトウェアは、各種ファイルシステムへの標準インタフェースを提供する「仮想ファイルシステム」 (VFS) アーキテクチャを使用します。VFS アーキテクチャによって、ユーザーやプログラムが基礎となるファイルシステムのタイプを知らなくても、カーネルはファイルの読み取り、書き込み、一覧表示などの基本操作を処理できます。

ファイルシステムの管理コマンドは、各種のファイルシステムを管理できるように共通インタフェースを提供します。これらのコマンドには 2 種類あります。1 つは汎用コマンドで、もう 1 つはファイルシステム専用のコマンドです。汎用コマンドはほとんどのタイプのファイルシステムに適用されますが、専用コマンドは特定のタイプのファイルシステムにのみ適用されます。

ファイルシステムの管理は、最も重要なシステム管理作業の 1 つです。この章を読んで概念と計画方法について理解してください。次の作業については、Part VIII の他の章と他の Part を参照してください。

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

Solaris 2.6 リリースにおけるファイルシステムの新しい機能のいくつかを次に説明します。

大規模ファイル

mount コマンドの新しいオプション -largefiles は、Solaris 2.6 環境のデフォルトのマウントオプションです。このオプションを使用すると、2G バイト以上の大規模ファイルを持つファイルシステムを作成できます。-largefiles オプションは、このオプションでマウントしたファイルシステムに 2G バイト以上の大規模ファイルが存在する可能性があることを意味し、必ずしもそのようなファイルが存在している必要はありません。大規模ファイルを持つファイルシステムをマウントする方法の詳細は、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。

NFS クライアントフェイルオーバー

NFS クライアントフェイルオーバーは、選択した最初のホストに到達できなかった場合に、ファイルシステムをマウントする追加のホストを指定する機能です。/etc/vfstab ファイルに設定することも、コマンド行からホストのリストを指定することもできます。

WebNFS

WebNFSTM 機能 (「パブリック NFS」とも言う) によって、Solaris 2.6 リリースでは、share コマンドに 2 つのオプションが追加されます。

-index 「filename」を指定すると、NFS URL で参照されるディレクトリ内に 「filename」に一致する名前のファイルが見つかった場合に、そのファイルが自動的にロードされます。

-public を指定すると、公開ファイルハンドルをそのディレクトリに再設定します。これによって、通常の方法ではマウントできないファイルシステムでも、NFS URL 経由でアクセスできるようになります。

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

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

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

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

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

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

ただし、上記以外の対応も可能です。たとえば、CD-ROM とフロッピーディスクにも、UFS ファイルシステムを作成できます。

ネットワークベースのファイルシステム

ネットワークベースのファイルシステムは、ネットワーク上でアクセスされるファイルシステムです。一般に、ネットワークベースのファイルシステムは 1 つのシステム上にあり、他のシステムからネットワーク経由でアクセスされます。NFS は、ネットワークベースで利用できる唯一のファイルシステムです。

NFS は、Solaris のデフォルトの分散ファイルシステムです。分散ファイルシステムを管理するには、サーバーからエクスポートして個々のシステムにマウントします。詳細は、「マウントとマウント解除」を参照してください。

仮想ファイルシステム

仮想ファイルシステムは、特殊なカーネル情報と機能へのアクセスを提供するメモリーベースのファイルシステムです。ほとんどの仮想ファイルシステムは、ディスク領域を使用しません。ただし、キャッシュファイルシステムは、ディスク上のファイルシステムを使用してキャッシュに入れ、一時ファイルシステムなどの仮想ファイルシステムは、ディスク上のスワップ空間を使用します。

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

キャッシュファイルシステム (CacheFS) を使用すると、リモートファイルシステムや、CD-ROM ドライブのような低速デバイスの性能を改善できます。ファイルシステムをキャッシュすると、リモートファイルシステムや CD-ROM から読み込まれたデータは、ローカルシステム上のキャッシュに格納されます。キャッシュファイルシステムの設定と管理については、第 29 章「キャッシュファイルシステムの手順」を参照してください。

一時ファイルシステム

一時ファイルシステム (TMPFS) は、ファイルシステムの読み取りと書き込みにローカルメモリーを使用します。一般に、UFS ファイルシステム内のファイルよりも、TMPFS ファイルシステム内のファイルにアクセスする方が高速です。ファイルシステムのマウントが解除されるときと、システムがシャットダウンまたはリブートされるときに、一時ファイルシステムが削除されます。

TMPFS は、Solaris システムソフトウェア内の /tmp ディレクトリのデフォルトのファイルシステムです。UFS /tmp ファイルシステムの場合と同様に、/tmp ディレクトリとの間でファイルをコピーまたは移動できます。

TMPFS ファイルシステムを使用すると、一時ファイルをローカルディスクに読み書きしたり、ネットワーク上で読み書きしたりする際のコストを節約でき、システム性能を改善できます。たとえば、プログラムをコンパイルすると一時ファイルが作成されます。オペレーティングシステムは、これらのファイルを処理する間に大量のディスク処理やネットワーク処理を行います。TMPFS を使用してこれらの一時ファイルを格納すると、その作成、処理、または削除が大幅に高速になります。

TMPFS ファイルシステムは、一時的な格納場所としてスワップ空間を使用します。TMPFS ファイルシステムがマウントされたシステムのスワップ空間が足りないと、次の 2 つの問題が発生する可能性があります。

TMPFS ファイルシステムの作成方法については、第 27 章「ファイルシステムの作成手順」を参照してください。スワップ空間を拡張する方法については、第 30 章「スワップ空間の追加構成の手順」を参照してください。

ループバックファイルシステム

ループバックファイルシステム (LOFS) を使用すると、代替パス名を使用してファイルにアクセスできるように、新しい仮想ファイルシステムを作成できます。たとえば、/ のループバックマウントを /tmp/newroot 上で作成できます。ファイルシステム階層全体が、NFS サーバーからマウントされるファイルシステムを含め、/tmp/newroot 上に複写されたように見えます。どのファイルにも、/ で始まるパス名または /tmp/newroot で始まるパス名を使用してアクセスできます。

LOFS ファイルシステムの作成方法については、第 27 章「ファイルシステムの作成手順」を参照してください。

プロセスファイルシステム

プロセスファイルシステム (PROCFS) はメモリー内にあります。PROCFS の /proc ディレクトリには、有効なプロセスのプロセス番号別リストが入っています。/proc ディレクトリ内の内容は、ps などのコマンドに使用されます。デバッガや他の開発ツールも、ファイルシステムコールを使用して、プロセスのアドレス空間にアクセスできます。次の例は、/proc ディレクトリの内容の一部を表示したものです。

$ ls -l /proc
total 144944
-rw-------   1 root     root           0 Dec 19 15:45 00000
-rw-------   1 root     root      196608 Dec 19 15:45 00001
-rw-------   1 root     root           0 Dec 19 15:45 00002
-rw-------   1 root     root     1028096 Dec 19 15:46 00073
-rw-------   1 root     root     1445888 Dec 19 15:46 00091
-rw-------   1 root     root     1142784 Dec 19 15:46 00093
-rw-------   1 root     root     1142784 Dec 19 15:46 00095
-rw-------   1 ignatz   staff    1576960 Dec 19 15:50 00226
-rw-------   1 ignatz   staff     192512 Dec 19 15:51 00236
-rw-------   1 ignatz   staff    1269760 Dec 19 15:52 00240
-rw-------   1 ignatz   staff    6090752 Dec 19 15:52 00241
-rw-------   1 ignatz   staff     188416 Dec 19 15:52 00247
-rw-------   1 ignatz   staff    2744320 Dec 19 15:52 00256

注意 - 注意 -

/proc ディレクトリ内のファイルは削除しないでください。/proc ディレクトリからプロセスを削除するのは、最善の方法ではありません。/proc ファイルはディスク容量を消費しないため、このディレクトリからファイルを削除してもあまり意味がないので注意してください。


/proc ディレクトリには、システム管理は不要です。

その他の仮想ファイルシステム

次のタイプの仮想ファイルシステムは、参考のために掲載してあります。管理は不要です。

ファイルシステム管理コマンド

ほとんどのファイルシステム管理コマンドには、汎用コマンドとファイルシステム専用の 2 種類があります。ファイルシステム専用のコマンドを呼び出す汎用コマンドを使用してください。表 26-1 は、汎用ファイルシステム管理コマンドを示しています。この種のコマンドは、/usr/sbin ディレクトリに入っています。

表 26-1 汎用ファイルシステム管理コマンド

コマンド 

機能 

clri(1M)

i ノードをクリアする。 

df(1M)

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

ff(1M)

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

fsck(1M)

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

fsdb(1M)

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

fstyp(1M)

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

labelit(1M)

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

mkfs(1M)

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

mount(1M)

ファイルシステムとリモート資源をマウントする。 

mountall(1M)

ファイルシステムテーブルで指定されたすべてのファイルシステムをマウントする。 

ncheck(1M)

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

umount(1M)

ファイルシステムとリモート資源のマウントを解除する。 

umountall(1M)

ファイルシステムテーブルで指定されたすべてのファイルシステムをマウント解除する。 

volcopy(1M)

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

上記のほとんどのコマンドには、それに相当するファイルシステム固有のコマンドがあります。


注 -

ファイルシステム上でサポートされない操作を指定すると、汎用コマンドから次のエラーメッセージが表示されます。

コマンド名 : ファイルシステムのタイプ type に操作が適用されません。


汎用コマンドの構文

ほとんどの汎用コマンドには、次の構文を使用します。

コマンド [-F type] [-V] [generic-options] [-o specific-options] [special|mount-point] [operands] 
表 26-2 汎用コマンドのオプションと引数

オプション/引数 

説明 

-F type

ファイルシステムのタイプ。このオプションを使用しなければ、/etc/vfstab ファイル内で special または mount-point と一致するエントリが検索される。それ以外の場合、デフォルトは、ローカルファイルの場合は /etc/default/fs ファイルから取り出され、リモートファイルシステムの場合は /etc/dfs/fstypes ファイルから取り出される。

-V

補完されたコマンド行を表示する。表示される行には、/etc/vfstab から取り込まれた付加情報が含まれていることがある。このオプションを使用し、コマンド行を検査して正しいかどうかを確認する。コマンドは実行されない。

generic-options

各種ファイルシステムに共通するオプション 

-o specific-options

ファイルシステムのタイプに固有のオプションのリスト。このリストは、-o の次に空白を 1 つ付け、その後に一連の keyword [=value] をコンマで区切って空白を入れずに入力しなければならない。

special|mount-point

ファイルシステムの指定。この名前は、ファイルシステムを保持するスライスのマウントポイントまたは特殊デバイスファイルでなければならない。コマンドによって、特殊ファイルは raw (キャラクタ型) デバイスでなければならない場合と、ブロック型デバイスでなければならない場合がある。ディスクデバイス名の詳細は、404 ページの「デバイス名の命名規則」を参照。この引数は、ファイル /etc/vfstab 内で一致するエントリを検索し、他の情報を取得するためのキーとして使用されることがある。ほとんどの場合、この引数は必須であり、specific-options の次に指定しなければならない。ただし、コマンドを /etc/vfstab ファイルに列挙されたすべてのファイルシステム (タイプ別に区切られることもある) に適応させたい場合は不要である。

operands

ファイルシステムのタイプに固有の引数。詳細は、各コマンド (mkfs_ufs(1M) など) のマニュアルページを参照。

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

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

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

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

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

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

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

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

Solaris ファイルシステムは階層形式で、ルートディレクトリ (/) から始まり、下位に多数のディレクトリが入っています。システムソフトウェアは、デフォルトのディレクトリセットをインストールし、一連の規約を使用して類似するタイプのファイルをグループ化します。表 26-3 は、デフォルトの Solaris ファイルシステムの概要と、各ファイルシステムのタイプを示しています。ルートと /usr のファイルシステムのデフォルトディレクトリの詳細は、第 32 章「ファイルシステムの参照情報」を参照してください。

表 26-3 デフォルトの 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 

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

/proc

PROCFS 

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

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

スワップ空間

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

Solaris 2.x の仮想メモリーシステムは、ディスク上の物理コピーをメモリー内の仮想アドレスに対応付けます。これらのマッピングに関するデータが入った物理メモリーページのバックアップを、ファイルシステム内の通常ファイルまたはスワップ空間に作成できます。メモリーのバックアップがスワップ空間に作成されると、ユーザーにはメモリーのバックアップファイル名が分からないため、これを「anonymous メモリー」と呼びます。

スワップ空間の詳細な概念、スワップ空間を増やす手順、Solaris 1.x (SunOS 4.x) と Solaris 2.x (SunOS 5.X) のスワップ要件の違いについては、第 30 章「スワップ空間の追加構成の手順」を参照してください。

UFS ファイルシステム

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


注 -

Solaris デバイス名は、スライスという用語 (およびデバイス名に含まれる文字「s」) を使用してスライス番号を指します。SunOS 4.x ではスライスのことを「パーティション」と呼んでいました。


図 26-1 は、ディスクスライスをどのようにフォーマットして UFS ファイルシステムを格納できるかを示しています。

図 26-1 UFS ファイルシステム用にフォーマットされたディスクスライス

Graphic

この後の各節では、ディスクがどのようにスライスとシリンダグループに分割され、UFS ファイルシステムとして作成されるかについて説明します。

ディスクスライス

スライスは、ブロックの集合体です。これは、ディスクの物理的なサブセットです (ただし、スライス 2 は通常はディスク全体を表します)。ディスク上でファイルシステムを作成する前に、まずフォーマットしてスライスに分割しなければなりません。ディスクをインストールしてフォーマットし、ディスクをスライスに分割する方法の詳細は、パート VIIを参照してください。

スライスをスワップ空間用の raw デバイスとして使用するか、1 つの UFS ファイルシステムを格納できます。1 つのディスクを最高で 8 つのスライスに分割できます。一般的なディスクスライス割り当てのリストについては、パート VIIを参照してください。

次の例は、/dev/dsk/c0t3d0 のディスク情報を示しています。format コマンドでは、利用可能なディスクセクションの一部としてスライス情報が表示されないので注意してください。ディスクごとにコントローラ、ターゲット、およびディスクの番号が表示されます。


例 26-1 format コマンドの使用方法

$ su
Password:
# format
AVAILABLE DISK SELECTIONS:
 0. c0t0d0 at scsibus0 slave 24
 sd0: <SUN0207 cyl 1254 alt 2 hd 9 sec 36>
 1. c0t3d0 at scsibus0 slave 0: veryloud
 sd3: <SUN0207 cyl 1254 alt 2 hd 9 sec 36>
Specify disk (enter its number): 1
FORMAT MENU:
 disk - select a disk
 type - select (define) a disk type
 partition - select (define) a partition table
 current - describe the current disk
 format - format and analyze the disk
 repair - repair a defective sector
 label - write label to the disk
 analyze - surface analysis
 defect - defect list management
 backup - search for backup labels
 verify - read and display labels
 save - save new disk/partition definitions
 inquiry - show vendor, product and revision
 volname - set 8-character volume name
 quit
format> partition
PARTITION MENU:
 0 - change `0' partition
 1 - change `1' partition
 2 - change `2' partition
 3 - change `3' partition
 4 - change `4' partition
 5 - change `5' partition
 6 - change `6' partition
 7 - change `7' partition
 select - select a predefined table
 modify - modify a predefined partition table
 name - name the current table
 print - display the current table
 label - write partition map and label to the disk
 quit
partition> print
Volume: veryloud
Current partition table (original sd3):
Part      Tag   Flag     Cylinders        Size       Blocks
  0       root    wm       0 - 39        14.06MB     (40/0/0)
  1       swap    wu       40 - 199      56.25MB    (160/0/0)
  2     backup    wm       0 - 1150     404.65MB   (1151/0/0)
  3 unassigned    wm       0               0          (0/0/0)
  4 unassigned    wm       0               0          (0/0/0)
  5          -    wm       0             10.20MB     (29/0/0)
  6        usr    wm       200 - 228    121.29MB    (345/0/0)
  7       home    wm       574 - 1150   202.85MB    (577/0/0
partition> quit
format> quit
#

ディスク番号とスライス番号がわかっている場合は、prtvtoc (ボリュームの内容一覧を表示) コマンドを使用してディスク情報を表示できます。ディスク上で定義されているゼロ以外のサイズのスライスを指定すると、ボリュームを指定できます (たとえば、ディスク 3 のすべてのスライスの場合は /dev/rdsk/c0t3d0s2、ディスク 3 の 8 番目のスライスの場合は /dev/rdsk/c0t3d0s7)。ディスクのターゲット番号はわかっているが、どのようにスライスに分割されているかがわからない場合は、スライス 2 またはスライス 0 を指定してディスク全体の情報を表示できます。

シリンダグループ

UFS ファイルシステムを、シリンダグループと呼ばれる 1 つまたは複数の領域に分割されたディスクスライス上で作成します。シリンダグループは、1 つまたは複数の連続するディスクシリンダ (プラッタの中心から同じ半径を持つ、プラッタグループ上のトラックの集合) からなっています。ディスクのジオメトリの詳細は、第 21 章「ディスク管理の概要」を参照してください。

シリンダグループマップは、シリンダグループごとに作成されます。シリンダグループマップには、ブロックの使用状況と使用可能なブロックが記録されます。

ブロックのタイプ

シリンダグループは、シリンダグループ内のファイルの構造を制御して編成するブロックに分かれています。各ブロックタイプが、システム内で固有の機能を持っています。UFS ファイルには、4 種類のアドレス可能ブロックと付加的な情報管理ディスク領域があります。4 つのブロックタイプは、次の通りです。

各ブロックタイプの詳細は、第 32 章「ファイルシステムの参照情報」を参照してください。

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

UFS ファイルシステムのサイズ制限

合計サイズ

ファイルシステムの合計サイズの上限は 1T バイトです。UFS ファイルシステムは、それを保持するスライスと同じ大きさにできます。

最大ファイルサイズ

UFS ファイルシステム内の 1 つのファイルの最大サイズは、そのファイルシステムの構成方法によって異なります。

最大ファイル数

UFS ファイルシステム 1 つ当たりの最大ファイル数は、そのファイルシステムに割り当てられた i ノード数によって決まります。i ノード数は、各 i ノードに割り当てられたディスク容量とファイルシステムの合計サイズによって決まります。デフォルトでは、2K バイトのデータ容量ごとに 1 つずつ i ノードが割り当てられます。newfs コマンドの -i オプションを使用すると、デフォルトの割り当てを変更できます。

論理ブロックとフラグメントのサイズ

フラグメントは、論理ブロックの未使用部分を減らして容量を節約するために作成される小型の論理ブロックです。論理ブロックとフラグメントの最大サイズは 8192 バイトですが、一般に、フラグメントは論理ブロックと同じか、それより小さいサイズです。

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

ディスクをフォーマットしてスライスに分割し終わったら、UFS ファイルを入れる各スライス上でファイルシステムを作成する必要があります。ディスクをフォーマットしてスライスに分割する方法の詳細は、 第 22 章「ディスク管理の手順」を参照してください。

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

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

マウントとマウント解除

ファイルシステムを、システム上で利用できるディレクトリ階層に接続できます。このプロセスをマウントと呼びます。マウントしたファイルシステムは、指定したマウントポイント (マウントされたファイルシステムの接続先ディレクトリ) で、システムのディレクトリツリーに接続され、システムに利用できるようになります。他のファイルシステムをルート (/) ファイルシステムに接続したり切り離したりできます。

ファイルシステムについて、次の事柄を決める必要があります。

ファイルシステムをマウントするための必要事項は次の通りです

原則として、ローカルディスクスライスは必ず /etc/vfstab ファイルに入れる必要があります。OpenWindows ソフトウェアやマニュアルページのようなサーバーからのソフトウェアと、サーバーからのホームディレクトリは、サイトの方針に応じて /etc/vfstab ファイルに組み込んでも、automount コマンドを使用して自動的にマウントしてもかまいません。

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

図 26-2 に、サブディレクトリ sbinetchome を持つルート (/) ファイルシステムを示します。

図 26-2 ファイルシステム

Graphic

あるユーザーのホームディレクトリを空の /export/home ディレクトリのマウントポイントに接続するには、まず新規ユーザー用のディレクトリを作成します。ignatz というユーザーであれば、/export/home 内に ignatz というディレクトリを作成し、適切なアクセス権と所有権を与えます。次に、ファイルシステムをマウントします。ignatz ファイルシステムがマウントされると、図 26-3 のように /export/home/ignatz 内のすべてのファイルとディレクトリが使用可能になります。また、/export/home ディレクトリ内で他のユーザーのディレクトリを作成し、そのディレクトリを別のユーザーのファイルシステムのマウントポイントとして使用できます。これらの作業を行う方法については、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。

図 26-3 ホームディレクトリにファイルシステムをマウントする

Graphic


注 -

この例は、マウント処理の概念を示しています。/home はデフォルトでは AutoFS のマウントポイントディレクトリなので、ホームディレクトリファイルは mount コマンドではなく AutoFS によってマウントされます。


ファイルシステムをマウントまたはマウント解除すると、現在マウントされているファイルシステムのリストを使用して、/etc/mnttab (マウントテーブルファイル) が変更されます。マウントテーブルの内容は cat または more コマンドを使用して表示できますが、/etc/vfstab ファイルのように編集できません。次にマウントテーブルファイルの例を示します。

$ more /etc/mnttab
/dev/dsk/c0t3d0s0    /       ufs     rw,suid,dev=800018,largefiles 863804345
/dev/dsk/c0t3d0s6    /usr    ufs     rw,suid,dev=80001e,largefiles 863804345
/proc   /proc   proc    rw,suid,dev=2900000     863804345
fd      /dev/fd fd      rw,suid,dev=29c0000     863804345
/dev/dsk/c0t3d0s3   /export ufs     suid,rw,largefiles,dev=80001b  863804347
/dev/dsk/c0t3d0s7   /export/home ufs suid,rw,largefiles,dev=80001f 863804348
/dev/dsk/c0t3d0s4   /export/swap ufs suid,rw,largefiles,dev=80001c 863804348
/dev/dsk/c0t3d0s5   /opt  ufs   suid,rw,largefiles,dev=80001d  863804347
swap    /tmp    tmpfs   dev=2a80000     863804347
$

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

ファイルシステムの完全バックアップを実行する前に、マウント解除しておくとよいでしょう。バックアップの実行方法については、第 33 章「ファイルシステムのバックアップと復元の概要」を参照してください。


注 -

ファイルシステムは、システムのシャットダウン手続きの一部として自動的にマウント解除されます。


仮想ファイルシステム

デフォルトのファイルシステム構成テーブル (/etc/vfstab ファイル) は、システムソフトウェアのインストール時に選択する内容に応じて異なります。ローカルの UFS ファイルシステム、重要な NFS ファイルシステム、その他の該当するファイルシステムを自動的にマウントするには、システムごとに /etc/vfstab ファイルを編集する必要があります。

次の例は、/etc/vfstab ファイルの内容を示しています。このファイルシステムテーブルは ASCII ファイルです。コメント行は # で始まります。この例は、2 つのディスクと 2 つの NFS ファイルシステムがマウントされたシステムの /etc/vfstab ファイルです。

$ more /etc/vfstab
#device         device          mount           FS      fsck   mount  mount
#to mount       to fsck         point           type    pass   at boot options
/dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 /          ufs     1       no      -
/proc           -               /proc           proc    -       no      -
/dev/dsk/c0t0d0s1 -                -            swap    -       no      -
swap            -               /tmp            tmpfs   -       yes     -
/dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /usr       ufs     2       no      -
/dev/dsk/c0t3d0s7 /dev/rdsk/c0t3d0s7 /files7    ufs     2       no      -
cheers:/export/svr4/man.ja5  -  /usr/man        nfs     -       yes     hard
cheers:/export/svr4/openwinV3.ja4 -     /usr/openwin    nfs     -       yes
    hard
$

ルート (/) と /usr の場合は、「mount at boot」フィールドの値が no として指定されているので注意してください。この 2 つのファイルシステムが、mountall コマンドを実行する前にブートシーケンスの一部としてマウントされるからです。automount フィールドの値を yes として指定すると、mountall プログラムはこれらのすでにマウント済みのファイルシステムを重複して (不要に) マウントしようとします。ブート手順については、第 5 章「システムのシャットダウンとブートの概要」を参照してください。

/etc/vfstab の各フィールド、このファイルの編集方法、使用方法については、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。

ディレクトリの自動マウント

自動マウントと呼ばれる方法を使用すると、NFS を通じて共有されるファイルシステムをマウントできます。AutoFS はバックグラウンドで実行され、リモートディレクトリを必要に応じてマウントまたはマウントを解除します。AutoFS を実行中のクライアントシステム上のユーザーが、AutoFS を通じて使用できるリモートファイルやディレクトリにアクセスすると、AutoFS はそのユーザーのシステムにファイルシステムをマウントします。ユーザーがそのディレクトリの中にいてファイルを使用している限り、リモートファイルシステムはマウントされたままになっています。一定の時間内にリモートファイルシステムへのアクセスがなければ、自動的にマウントが解除されます。ユーザー側でディレクトリ変更以外の操作を実行しなくても、AutoFS は必要に応じて、ファイルシステムをマウントしたりマウントを解除したりします。

ファイル階層には、AutoFS を使用してマウントできるものと、/etc/vfstab ファイルと mount コマンドを使用してマウントするものがあります。ディスクレスマシンには、/etc/vfstab ファイル内にルート (/)、/usr/usr/kvm のエントリがなければなりません。共有ファイルシステムは絶えず使用可能になっているので、AutoFS を使用して /usr/share をマウントしないでください。

AutoFS は、「maps」で指定したファイルシステムと連動します。これらのマップは、NIS、NIS+、またはローカルの /etc 内のファイルにより管理できます。

AutoFS マップでは、特定のファイルに複数のリモート位置を指定できます。これにより、いずれかのサーバーが停止しても、AutoFS は別のマシンからマウントできます。各サーバーに重み係数を割り当てると、マップ内で各資源のための優先サーバーを指定できます。

AutoFS は、システムが実行レベル 3 になると自動的に起動されます。また、コマンド行からも起動できます。AutoFS を設定して管理する方法の詳細は、『NFS の管理』を参照してください。

デフォルトでは、SunOS システムソフトウェアは /home を自動マウントします。

サーバーからファイルを共有する

NFS は、さまざまなオペレーティングシステムを実行するコンピュータを「連結」して使用できる分散ファイルシステムです。たとえば、DOS を実行するシステムは、UNIX を実行するシステムとファイルを共有できます。

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

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

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

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

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

次のデフォルトの /etc/dfs/dfstab ファイルには、エントリの構文と例が入っています。

$ more /etc/dfs/dfstab
#       Place share(1M) commands here for automatic execution
#       on entering init state 3.
#
#       Issue the command '/etc/init.d/nfs.server start' to run the NFS
#       daemon processes and the share commands, after adding the very
#       first entry to this file.
#
#       share [-F fstype] [ -o options] [-d ""]  [resource]
#       .e.g,
#       share  -F nfs  -o rw=engineering  -d "home dirs"  /export/home2
share -F nfs /var/mail
$

自動的に共有させたい資源ごとに 1 つずつ、エントリを /etc/dfs/dfstab に追加します。各エントリは、次の構文を使用して別の行に入力しなければなりません。

share [-F nfs] [-o specific-options] [-d "description"] pathname

表 26-4 にこれらの変数を示します。

表 26-4 /etc/dfstab エントリの変数

オプション 

説明 

-F nfs

ファイルシステムのタイプが NFS であることを示す。分散ファイルシステムのパッケージを 1 つしかインストールしていない場合は nfs がデフォルトであり、-F オプションは省略可能

-o specific-options

資源の共有方法を指定する。-o フラグに続けて、次のいずれかのオプションをコンマで区切って指定できる。 

rw - ro= で指定したものを除き、すべてのクライアントに pathname で指定する資源の読み取り/書き込み権を共有させる (デフォルト)。

ro - rw= で指定したものを除き、すべてのクライアントに pathname で指定する資源の読み取り専用権を共有させる。

ro=client[:client] - 列挙したクライアントマシンまたはネットグループ名に pathname で指定する資源の読み取り専用権を共有させる (rw を無効にする)。

rw=client[:client] - 列挙したクライアントマシンまたはネットグループ名に pathname で指定する資源の読み取り/書き込み権を共有させる (ro を無効にする)。

anon=uid - pathname で指定する資源にアクセスするときに「anonymous」ユーザー、つまり uid が 0 ( Solaris システム上のルートの UID ) であるユーザー用に別の uid を指定できる。デフォルトでは、anonymous ユーザーは UID_NOBODY を持つユーザー nobody に対応付けられる。ユーザー nobody は、root 特権ではなく通常のユーザー特権を持つ。

root=host[:host] - ホスト host から、uid が 0 のユーザーがルートとして pathname で指定する資源にアクセスできるようにする。他のすべてのホストからのユーザーは anon になる。このオプションを指定しなければ、どのホストからのユーザーにも、pathname で指定する資源への root アクセス権は与えられない。

secure - ユーザー認証を追加要求して資源を共有させる。(詳細は『NFS の管理』を参照)

kerberos - Kerberos 認証を使用して資源を共有させる。(詳細は、「Kerberos Version 4 認証の管理」を参照)

-d description

共有する資源を説明するコメント。-d オプションを使用すると、説明は sharetab ファイルに格納される。ただし、クライアントが dfshares コマンドを使用して、そのシステム上で共有される資源を表示しても、この説明は表示されない

pathname 

共有する資源の完全パス名。パス名はルート (/) から始まる

rwro を引数なしで指定できません。また、rw= リストと ro= リストで同じクライアントを指定することもできません。読み取り/書き込みオプションを指定しなければ、デフォルトではすべてのクライアントの読み取り/書き込みとなります。


注意 - 注意 -

他のホストに root アクセスを与えると、セキュリティが低下します。root= オプションを指定する際は注意してください。


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


注 -

クライアントまたはホストのリストを指定できる引数 (ro=rw=root=) は、UDP 上では確実に機能しますが、他のトランスポートプロトコル上では機能しないことがあります。


NFS 上では、サーバーはそれ自体が所有する資源を共有するので、クライアントはその資源をマウントできます。ただし、クライアント側でスーパーユーザーになったユーザーは、マウントされているリモート資源にスーパーユーザーとしてアクセスしようとしても拒否されます。あるホスト上でスーパーユーザーとしてログインしたユーザーが NFS を通じて共有されるリモートファイルへのアクセスを要求すると、そのユーザー ID は 0 からユーザー名 nobody のユーザー ID に変更されます。ユーザー nobody のアクセス権は、特定のファイルに関して公共に与えられるものと同じです。たとえば、公共がファイルの実行権しか持っていなければ、ユーザー nobody はそのファイルの実行しかできません。

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

ファイルシステムのタイプは、次のいずれかを使用して判断できます。

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

grep コマンドを使用して、/etc/vfstab ファイル内でファイルシステムのタイプを検索します。

$ grep /tmp /etc/vfstab
swap       -          /tmp     tmpfs   -     yes    -
$

マウントポイントに関する情報が表示されます。

vfstab にファイルシステムのエントリが入っていない場合は、次のいずれかの手順を使用してファイルシステムのタイプを判断してください。

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

mount-point ディレクトリが /etc/mnttab にないかを調べます。

$ grep /home /etc/mnttab
mars:(pid129)  /home nfs  ro,ignore,map=/etc/auto_home,indirect,
dev=21c0004 693606637
neptune:/export/home/neptune  /tmp_mnt/home/neptune nfs rw,
dev=21c0005 695409833

マウントポイントに関する情報が表示されます。

または次の手順を実行します。

  1. devnm コマンドを使用して、マウントされているファイルシステムの raw デバイス名を表示します。

    $ devnm /filesystem
    

    /filesystem

    調べたい raw デバイス名の、マウント済みファイルシステム 

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

  3. fstyp コマンドを使用してファイルシステムのタイプを表示します。

    # fstyp dev/rdsk/device-name
    

    /dev/rdsk/device-name

    調べたいファイルシステムのある raw デバイス名 

例 - マウントされているファイルシステムのタイプを調べる

次の例では、devnm コマンドを使用して、マウント済みファイルシステム /usr のあるデバイス名を調べます。次に、fstyp コマンドを使用して、ファイルシステム /usr のタイプを調べます。

$ devnm /usr
/dev/dsk/cot3d0s6 /usr
$ su
# fstyp /dev/rdsk/c0t3d0s6
ufs

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

ディスク番号とスライス番号がわかっている場合は、prtvtoc (ボリューム内容一覧の表示) コマンドを使用してディスク情報を表示できます。ボリュームを指定するには、ディスク上で定義されているサイズが 0 でないスライスを指定します (ディスク 3 のすべてのスライスの場合は /dev/rdsk/c0t3d0s2、ディスク 3 の 8 番目のスライスの場合は /dev/rdsk/c0t3d0s7 など)。ディスクのターゲット番号は分かっているが、どのようにスライスに分割されているかがわからない場合は、スライス 2 またはスライス 0 を指定してディスク全体の情報を表示できます。

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

  2. ディスクとスライスの情報を表示します。

    # prtvtoc /dev/rdsk/device-name
    

    /dev/rdsk/device-name

    調べたいファイルシステムのある raw デバイス名 

例 - どのファイルシステムがどのディスクスライスにマウントされているかを調べる

次の例では、ディスク 3 のすべてのスライスに関する情報が表示されます。

$ su
Password:
# prtvtoc /dev/rdsk/c0t3d0s2
* /dev/rdsk/c0t3d0s2 (volume "") partition map
*
* Dimensions:
*     512 bytes/sector
*      36 sectors/track
*       9 tracks/cylinder
*     324 sectors/cylinder
*    1272 cylinders
*    1254 accessible cylinders
*
* Flags:
*   1: unmountable
*  10: read-only
*
*                          First     Sector    Last
* Partition  Tag  Flags    Sector    Count     Sector  Mount
Directory
       2      5    01          0    406296    406295
       6      4    00          0    242352    242351
       7      0    00     242352    163944    406295   /files7

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

この章では、UFS ファイルシステム、一時ファイルシステム、ループバックファイルシステムをハードディスク上で作成して管理する方法について説明します。この章で説明する手順は、次のとおりです。

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

ファイルシステムは、インストールプロセスの一部としてシステムソフトウェアによって自動的に作成されるので、UFS ファイルシステムを作成しなければならないことはほとんどありません。次の場合には、UFS ファイルシステムを作成する (または作成し直す) 必要があります。

次の手順では、newfs コマンドを使用して UFS ファイルシステムを作成します。newfs コマンドは、新しいファイルシステムを作成する mkfs への便利なフロントエンドです。Solaris 2.x システムの場合、デフォルトでは、1 シリンダ当たりのトラック数や 1 トラック当たりのセクター数のような newfs のパラメタは、新しいファイルシステムを入れるディスクのラベルから読み込まれるので、選択したオプションは mkfs コマンドに渡され、ファイルシステムが作成されます。

ファイルシステムパラメタ

ディスクスライス上で新しいファイルシステムを作成するには、ほとんどの場合に newfs コマンドを使用します。表 27-1 は、newfs コマンドで使用するデフォルトのパラメタを示しています。

表 27-1 newfs コマンドで使用するデフォルトのパラメタ

パラメタ 

デフォルト値 

ブロックサイズ 

8K バイト 

フラグメントサイズ 

1K バイト 

最小空き領域 

10% 

回転遅延 

デバイスに依存 

最適化のタイプ 

領域 

i ノード数 

2K バイトのディスク領域ごとに 1 個 

前提条件

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

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

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

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

    -N

    newfsmkfs に渡すすべてのパラメタを表示する。ファイルシステムは作成されない

    -b size

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

    -i bytes

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

    device-name

    新しいファイルシステムを入れるデバイス 


    注意 - 注意 -

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


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

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

    # fsck /dev/rdsk/device-name
    

    device-name

    新しいファイルシステムを入れるデバイス名 

    このユーティリティは、新しいファイルシステムの整合性をチェックして、見つかった問題を出力し、問題を修復する前にプロンプトを表示します。fsck の詳細は、第 31 章「ファイルシステムの完全性チェック」を参照してください。

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

次の例では、/dev/rdsk/c0t3d0s7 上でファイルシステムを作成します。

# newfs /dev/rdsk/c0t3d0s7
newfs: construct a new file system /dev/rdsk/c0t3d0s7 (y/n)? y
/dev/rdsk/c0t3d0s7:     163944 sectors in 506 cylinders of 9 tracks, 
       36 sectors 83.9MB in 32 cyl groups (16 c/g, 2.65MB/g, 1216 i/g)
super-block backups (for fsck -b #) at:
 32, 5264, 10496, 15728, 20960, 26192, 31424, 36656, 41888,
 47120, 52352, 57584, 62816, 68048, 73280, 78512, 82976, 88208,
 93440, 98672, 103904, 109136, 114368, 119600, 124832, 130064,
 135296, 140528, 145760, 150992, 156224, 161456,

次の手順

ファイルシステムを使用可能にするための操作 

参照先 

mount コマンドを使用してファイルシステムをマウントする

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

/etc/vfstab 内でエントリを作成し、システムのブート時にファイルシステムを自動的にマウントする

/etc/vfstab ファイルにエントリを追加する方法」

一時ファイルシステム (TMPFS) の作成

TMPFS が最もよく使用されるのは /tmp ディレクトリです。デフォルトでは、SunOS システムソフトウェアの /tmp ディレクトリは TMPFS であり、そのエントリはデフォルトの /etc/vfstab ファイルに入っています。TMPFS ディレクトリ内のファイルは、リブートまたはマウント解除すると削除されます。

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

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

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

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

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

    # mount -F tmpfs swap mount-point
    

    -F tmpfs swap

    TMPFS ファイルシステム 

    mount-point

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

  4. mount コマンドを使って、/visitors という一時ファイルシステムが作成され、/usr/tmp ディレクトリにマウントされていることを確認します。

    $ mount
                            .
                            .
                            .
    /visitors on /usr/tmp on Wed May 28 15:27:16 1997
    $ ls /usr/tmp
    NTa0006h    ps_data      visitors

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

次の例では、新しいディレクトリ /export/reports を作成し、そのディレクトリに一時ファイルシステムをマウントします。

# mkdir /export/reports
# chmod 777 /export/reports
# mount -F tmpfs swap /export/reports

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

一時ファイルシステムとして保持する方法

/etc/vfstab ファイルにエントリを追加すると、リブートまたはマウント解除しても TMPFS として保持できます。このファイルを編集し、各フィールドをタブで区切って次のようなエントリを追加します。

swap - mount-point  tmpfs   -  yes  -

mount-point

デフォルトのマウントポイントディレクトリ 


注意 - 注意 -

TMPFS として保持されるだけで、そこに作成されたファイルは保持されません。


/etc/vfstab ファイルの編集の詳細は、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。

ループバックファイルシステム (LOFS) の作成

LOFS は、既存のファイルシステムへの代替パスを提供する仮想ファイルシステムです。他のファイルシステムをループバックファイルシステムにマウントしても、元のファイルシステムは変化しません。

/etc/vfstab ファイルにエントリを追加すると、リブートまたはマウント解除する間も LOFS を保持できます。


注意 - 注意 -

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


ループバックファイルシステムを作成する方法

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

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

  3. ループバックファイルシステムを作成します。

    # mount -F lofs loopback-directory mount-point
    

    loopback-directory

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

    mount-point

    LOFS をマウントするディレクトリ 

例 - ループバックファイルシステムを作成する

次の例は、chroot コマンドといっしょに新しいループバックファイルシステムを使用して、プロセスやプロセスファミリに完全な仮想ファイルシステムをアクセスできる方法を示しています。

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

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

ループバックファイルシステムを保持する方法

/etc/vfstab ファイルにエントリを追加すると、リブートまたはマウント解除する間もループバックファイルシステムを保持できます。ファイルを編集し、各フィールドをタブで区切って次のようなフィールドをファイルの終わりに追加します。

/    -   mount-point  lofs   -   yes     -

mount-point

デフォルトのマウントポイントディレクトリ (/tmp/newroot など)


注意 - 注意 -

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


/etc/vfstab ファイルの詳細は、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。

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

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

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

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

ローカルファイルシステムは、次の方法でマウントできます。

ファイルシステムをサーバーから共有する場合に、クライアントは次の 3 つの方法のいずれかで NFS ファイルシステムとしてマウントできます。

CD-ROM 上のファイルシステムは、CD-ROM を挿入するとマウントされます。フロッピーディスク上のファイルシステムは、volcheck(1) コマンドを実行してマウントします。

前提条件

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

マウントされたファイルシステムの確認

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

ファイルシステムのマウントとマウント解除に使用するコマンド

表 28-1 は、ファイルシステムのマウントとマウント解除に使用する /usr/sbin ディレクトリ内のコマンドを示しています。

表 28-1 ファイルシステムのマウントとマウント解除に使用するコマンド

コマンド 

説明 

mount(1M)

ファイルシステムとリモート資源をマウントする 

mountall(1M)

/etc/vfstab ファイル内で指定されたすべてのファイルシステムをマウントする。マルチユーザー実行状態に入ると、mountall コマンドが自動的に実行される

umount(1M)

ファイルシステムとリモート資源をマウント解除する 

umountall(1M)

/etc/vfstab ファイル内で指定されたすべてのファイルシステムをマウント解除する

umount コマンドは、整合性のない読み取りや書き込み用のファイルシステムはマウントされません。mount または mountall コマンドからエラーメッセージが表示される場合は、ファイルシステムをチェックする必要があります。ファイルシステムをチェックする方法については、第 31 章「ファイルシステムの完全性チェック」を参照してください。

umount コマンドでは、使用中のファイルシステムはマウント解除されません。ファイルシステムは、ユーザーがそのディレクトリ内にいる場合や、プログラムがその中のファイルを開いている場合に使用中と見なされます。

汎用マウントオプション

表 28-2 は、mount コマンドの -o オプションで指定できる汎用マウントオプションを示しています。複数のオプションを指定する場合は、-o ro,nosuid のように (空白ではなく) コンマで区切ります。

表 28-2 汎用マウントオプション

オプション 

ファイルシステム 

説明 

-rw | ro

CacheFS、NFS、PCFS、UFS、S5FS 

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

-nosuid

HSFS、NFS、UFS 

setuid を実行不可にし、ファイルシステム上のデバイスが開かれないようにする。デフォルトでは、setuid は実行可能であり、デバイスを開くことができる

-remount

NFS、UFS、S5FS 

rw とともに、読み取り/書き込み権を持つファイルシステムをマウントし直す

-f

UFS、S5FS 

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

-n

UFS、S5FS 

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

-bg | fg

NFS 

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

-soft | hard

NFS 

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

-intr | nointr

NFS 

ハードマウントされたファイルシステムに関する応答を待つ間にハングしたプロセスを、キーボード割り込みで消去できるか指定する。デフォルトは intr (割り込み可能)

-retry=n

NFS 

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

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

/etc/vfstab ファイル内のエントリには、表 28-3 のように 7 つのフィールドが入っています。

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

フィールド名 

説明 

device to mount

マウントできるデバイスは次のとおり 

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

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

  • スワップするスライス名 (/dev/dsk/c0t3d0s1 など)

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

device to fsck

device to mount」フィールドで指定したファイルシステムに対応する raw (キャラクタ型) 特殊デバイス (/dev/rdsk/c0t0d0s0 など)。これにより、fsck に使用されるインタフェースが決まる。読み取り専用ファイルシステムやリモートファイルシステムなど、適用できるデバイスがない場合は、ダッシュ (-) を使用する

mount point

デフォルトのマウントポイントディレクトリ (/dev/dsk/c0t0d0s6 の場合は /usr など)

 

FS type

「device to mount」 フィールドで指定したファイルシステムのタイプ

fsck pass

fsck がファイルシステムをチェックするか決めるために使用するパス番号。このフィールドでダッシュ (-) を指定すると、ファイルシステムはチェックされない。このフィールドに 0 より大きい値が入っていると、ファイルシステムがチェックされる。fsck pass の値が 0 の UFS 以外のファイルシステムはチェックされる。UFS ファイルシステムのみの場合は、このフィールドに 0 が入っていると、ファイルシステムはチェックされない。fsck pass の値が 1 より大きい複数の UFS ファイルシステム上で fsck を実行する場合に、preen (修復) オプション (-o p) を指定すると、最大効率を発揮するために fsck によって各種ディスク上でファイルシステムが並行して自動的にチェックされる。このフィールドに値 1 が入っていると、ファイルシステムは順番にチェックされる。SunOS システムソフトウェアの場合、「fsck pass」フィールドはシステムがチェックされる順序を明示的に指定しない

mount at boot

システムのブート時にファイルシステムが mountall によって自動的にマウントされるかどうかを表す。yes または no に設定。このフィールドは AutoFS とは連動していないので注意してください。

mount options

ファイルシステムのマウントに使用されるオプションを (空白を空けずに) コンマで区切ったリスト。オプションなしを示すにはダッシュ (-) を使用する。オプションについては、mount(1M) のマニュアルページを参照


注 -

/etc/vfstab ファイル内のフィールドごとに 1 つずつエントリがなければなりません。フィールドで値を指定しない場合は、必ずダッシュ (-) を入力してください。


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

どのファイルシステムがマウントされているかを調べるには、次のように入力します。

$ mount

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

$ mount
/ on /dev/dsk/c0t3d0s0 read/write/setuid/largefiles on ...
/usr on /dev/dsk/c0t3d0s6 read/write/setuid/largefiles on ...
/proc on /proc read/write/setuid on Fri May 16 11:39:05 1997
/dev/fd on fd read/write/setuid on Fri May 16 11:39:05 1997
/export on /dev/dsk/c0t3d0s3 setuid/read/write/largefiles on ...
/export/home on /dev/dsk/c0t3d0s7 setuid/read/write/largefiles on ...
/export/swap on /dev/dsk/c0t3d0s4 setuid/read/write/largefiles on ...
/opt on /dev/dsk/c0t3d0s5 setuid/read/write/largefiles on ...
/tmp on swap read/write on Fri May 16 11:39:07 1997
$

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

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

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

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

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

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

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

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

#device           device             mount    FS      fsck   mount    mount
#to mount         to fsck            point    type    pass   at boot  options
	#
/dev/dsk/c0t3d0s7 /dev/rdsk/c0t3d0s7 /files1  ufs     2      yes       -
pluto:/export/man   -                /usr/man nfs     -      yes     ro,soft
/                   -                /tmp/newroot lofs -     yes     -          

この例では、デフォルトのマウントオプション (読み取り/書き込み) を使用して、マウントポイントディレクトリ /files1 に接続される UFS ファイルとして、ディスクスライス /dev/dsk/c0t3d0s7 をマウントします。また、「device to fsck」として raw キャラクタ型デバイス /dev/rdsk/c0t3d0s7 を指定します。「fsck pass」の値は 2 なので、ファイルシステムは順不同でチェックされます。

この例では、システム pluto からのディレクトリ /export/man を、NFS ファイルシステムとしてマウントポイント /usr/man にマウントします。NFS ファイルシステムである「device to fsck」や「fsck pass」は指定されていません。この例では、「mount options」は ro (読み取り専用) と soft になっています。信頼性を高めるために、読み取り/書き込み NFS ファイルシステムの場合は hard マウントオプションを指定します。

この例では、ルート (/) ファイルシステムをループバックマウントポイント /tmp/newroot にマウントします。「mount at boot」は yes と指定し、「device to fsck」と「fsck pass」の番号は指定していません。ループバックファイルシステムを構成するファイルシステムを使用したら、必ずループバックファイルシステムをマウントしなければなりません。ループバックエントリは、それが依存するエントリの後に位置するように、/etc/vfstab ファイル内で最後のエントリでなければなりません。

/etc/vfstab ファイル内に列挙された複数のファイルシステムをマウントする方法

  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 Fri May 16 11:39:05 1997
/dev/fd on fd read/write/setuid on Fri May 16 11:39:05 1997
/tmp on swap read/write on Fri May 16 11:39:07 1997

次の例では、/etc/vfstab ファイル内に列挙されたすべてのリモートファイルシステムがマウントされます。

# mountall -r
# mount
/ on /dev/dsk/c0t3d0s0 read/write/setuid/largefiles on ...
/usr on /dev/dsk/c0t3d0s6 read/write/setuid/largefiles on ...
/proc on /proc read/write/setuid on Fri May 16 11:39:05 1997
/dev/fd on fd read/write/setuid on Fri May 16 11:39:05 1997
/tmp on swap read/write on Fri May 16 11:39:07 1997
/nfs/mars.dist on mars:/usr/dist intr/remote on ...
/nfs/mars.mail on mars:/var/mail intr/noac/remote on ...

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

  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

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

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

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

    # mount [-o mount-options] /dev/dsk/device-namemount-point
    

    -o mount-options

    UFS ファイルシステムのマウントに使用できるマウントオプションを指定する。汎用マウントオプションについては、表 28-2 を参照。すべてのオプションについては、mount_ufs(1M) のマニュアルページを参照

    /dev/dsk/device-name

    ファイルシステムを保持するディスクスライス用の特殊ブロックデバイスファイル (/dev/dsk/c0t3d0s7 など)。ディスクデバイス名を調べる方法については、第 26 章「ファイルシステムの概要」を参照

    mount-point

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

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

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

# mount /dev/dsk/c0t3d0s7 /files1

大規模ファイルを持つファイルシステムをマウントする方法

新しい largefiles マウントオプションは Solaris 2.6 環境のデフォルトの状態で、2G バイトより大きい大規模ファイルを持つファイルシステムをマウントできるようになります。

大規模ファイルを持つファイルシステムをマウントする手順は、「UFS ファイルシステムをマウントする方法」ですでに説明している手順と同じです。

largefiles オプションは、このオプションでマウントしたファイルシステムが 2G バイトより大きい大規模ファイルを 1 つまたは複数持つ可能性があることを意味します。しかし、このオプションでマウントしたファイルシステムが必ずしも 2G バイトより大きい大規模ファイルを持つ必要はありません。このオプションは、このようなファイルがファイルシステム内に存在することを許可します。

この動作を無効にするには、nolargefiles マウントオプションを明示的に使用しなければなりません。nolargefiles オプションは、2G バイトの最大ファイルサイズ制限を課すことによって、以前のファイルシステムの動作との全体的な互換性を提供します。

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

デフォルトの largefiles マウントオプションでファイルシステムをマウントして、大規模ファイルを作成した後には、大規模ファイルを削除して、fsck を実行して状態を「nolargefiles」にリセットするまで、nolargefiles オプションでファイルシステムを再マウントできません。

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

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

    # cd /file-system
    # find . -xdev -size +2000000 -exec ls -l {} ¥;
    

    file-system

    大規模ファイルをチェックするファイルシステム 

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

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

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

    # fsck /dev/rdsk/device-name
    
  5. nolargefiles オプションでファイルシステムを再マウントします。

    # mount -o nolargefiles /dev/rdsk/device-name
    

例 - 大規模ファイルを持たないファイルシステムをマウントする

この例では、/datab 中に大規模ファイルが存在しないことをチェックして、/dev/dsk/c0t3d0s7/datab ディレクトリにマウントしています。

# cd /datab
# find . -xdev -size +2000000 -exec ls -l {} ¥;
# find . -xdev -size +2000000 -exec ls -l {} ¥;
# umount /datab 
# fsck /dev/rdsk/c0t3d0s7 /files1
# mount -o nolargefiles /dev/dsk/c0t3d0s7 /files1

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

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

  2. ファイルシステムをサーバーから使用可能かどうかを確認します。

    NFS ファイルシステムをマウントするには、サーバーシステムから使用できるようにしなければなりません。サーバーで share(1M) コマンドを使用すると、ネットワーク上で共有できるファイルシステムのリストが表示されます。ファイルシステムの共有方法については、『NFS の管理』を参照してください。

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

    # mount -F nfs [-o mount-options] server:/directory mount-point
    

    -o mount-options

    NFS ファイルシステムのマウントに使用できるマウントオプションを指定する。汎用マウントオプションのリストについては、表 28-2 を参照。オプションについては、mount_nfs(1M) のマニュアルページを参照

    server:/directory

    ファイルシステムをマウントするサーバーのホスト名と、マウントするファイルシステム名 

    mount-point

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

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

次の例では、ディレクトリ /export/packages 内のパッケージがサーバー pluto から /mnt にマウントされます。

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

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

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

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

    # mount -F s5fs [-o mount-options] /dev/dsk/device-name mount-point
    

    -o mount-options

    S5FS ファイルシステムのマウントに使用できるマウントオプションを指定する。汎用マウントオプションについては、表 28-2 を参照。オプションについては、mount_s5fs(1M) のマニュアルページを参照

    /dev/dsk/device-name

    ファイルシステムを保持するディスクスライスのデバイス名 (/dev/dsk/c0t3d0s7 など) 。ディスクデバイス名を調べる方法については、第 20 章「デバイスへのアクセス」を参照

    mount-point

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

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

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

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

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

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

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

  2. 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 ファイルシステムを使用中のプロセス 4006c が停止されます。

# fuser -c /export/home
/export/home:     4006c
# fuser -c -k /export/home
/export/home:     4006c
# fuser -c /export/home
/export/home: 

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

次の手順で、ファイルシステム (/ または /usr を除く) をマウント解除します。


注 -

ルート (/) と /usr の UFS ファイルシステムは特殊ケースです。システムが機能するにはルートが必要なので、ルート (/) のファイルシステムはシャットダウン中でなければマウント解除できません。


  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 キャッシュファイルシステムの設定
 

作業 

 

説明 

 

手順の説明 

 

キャッシュの作成 

 

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

 

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

 
          
 

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

 

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

 

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

 
 

 

 

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

 

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

 

 

 

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

 

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

        

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

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

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

    # cfsadmin -c cache-directory
    

    cache-directory

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


    注 -

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


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

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

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

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

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

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

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

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

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

作業 

 

説明 

 

手順の説明 

 

キャッシュの変更 

 

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

 

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

 
        
 

キャッシュ情報の表示 

 

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

 

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

 
          
 

整合性チェックの実行 

 

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

 

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

 
          
 

キャッシュの削除 

 

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

 

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

 
          
 

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

 

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

 

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

   

キャッシュの管理

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

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

ファイルシステムの特定のオプションを変更する方法については、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。キャッシュ内でファイルシステムを変更する場合は、キャッシュを削除してから作成し直す必要があります。また、ファイルシステムの共有方法とアクセス方法によっては、マシンをシングルユーザーモードでリブートしなければならない場合があります。

次の例は、この手順を示しています。

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

次の例では、キャッシュが削除されてから再び作成され、ファイルシステム /docs に指定された demandconst オプションを使用して再びマウントされます。この例は、シングルユーザーモードでリブートするなどの手順を示しています。必要であれば他のコマンドを使用して、この例の作業を実行することもできます。

$ su
password:

# init 0
.
.
.
ok boot -s
.
.
.
Type Cntrl-d to proceed with normal startup,
(or give root password for system maintenance):
# enter password:
.
.
.
「キッシュを置くファイルシステムについて fsck を実行するか
どうかのプロンプトがここで表示される」

# fsck /local
# mount /local
# cfsadmin -d all /local/mycache
# cfsadmin -c /local/mycache
# init 6
.
.
.
console login:
password:
# mount -F cachefs -o backfstype=nfs,cachedir=/local/cache1,demandconst 
merlin:/docs /docs
#

ファイルシステムをキャッシュに正常に戻せなかった場合は、次のようなエラーメッセージが表示されます。

cachefsstat: /doc: not a cachefs mount point

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

  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 は、ブート時またはファイルシステムのマウント時に自動的に実行されます。完全性を手作業で確認したい場合は、次の手順を使用できます。

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

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

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

    -m

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

    -o noclean

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

    cache-directory

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

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

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

次の例では、/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(4) のマニュアルページを参照してください。

例 - パッキングリストを作成する

次の例は、パッキングリストファイルの内容を示しています。

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 コマンドの -f オプションといっしょに -s オプションを使用して、パッキングリストをキャッシュにパックします。

    $ cachefspack -sf packing_list
    

    -s

    find コマンドの出力をパッキングリストに適するように調整する

    -f

    パッキングリストを読み取ることを指定する 

    filename

    読み取るパッキングリスト名を指定する 


    注 -

    -s オプションは -f オプションといっしょに使用しなければなりません。-s オプションのみを使用することはできません。


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

次の例は、ユーザーが所有するベースディレクトリのファイルだけをパックするために、LIST コマンドをパッキングリストに定義する方法を示しています。

LIST !find . -user jones -print

次の例は、パッキングリストをパックするように指定する方法を示しています。

$ cachefspack -sf /projects/proj_1

ファイルのパッキング解除

キャッシュからファイルを削除、つまりそのパッキングを解除する場合もあります。他よりも優先度が高い一部のファイルまたはディレクトリが存在する場合があるため、重要でないファイルのパッキングを解除する必要があります。たとえば、あるプロジェクトを終了して、そのプロジェクトに関連するファイルをアーカイブしたと仮定します。次は、新しいプロジェクト、つまり新しいファイルのセットで作業することになります。

キャッシュからファイルまたはパッキングリストのパッキングを解除する方法

キャッシュからファイルまたはパッキングリストをのパッキングを解除するには、cachefspack コマンドの -u オプションか -U オプションを使用します。

$ cachefspack -u filename | -U cache-directory

-u

ファイルまたは複数のファイルのパッキングを解除することを指定する。このオプションを使用する場合は、ファイル名を指定しなければならない 

filename

キャッシュからパッキングを解除するファイル名またはパッキングリスト名を指定する。cachefspack コマンドの詳細は、マニュアルページを参照

-U

キャッシュ中のすべてのファイルのパッキングを解除することを指定する 

例 - キャッシュからファイルまたはパッキングリストのパッキングを解除する

次の例は、キャッシュからファイル /usr/openwin/bin/xlogo のパッキングを解除するように指定する方法を示しています。

$ cachefspack -u /usr/openwin/bin/xlogo

次の例は、キャッシュから複数のファイルのパッキングを解除するように指定する方法を示しています。

$ cd /usr/openwin/bin
$ cachefspack -u xlogo xview xcolor

また、次のように、パッキングリスト (ファイルのディレクトリのパスを含むファイル) でもパッキングを解除できます。

$ cachefspack -uf list.pkg

次の例は、キャッシュディレクトリ中のすべてのファイルのパッキングを解除するように -U オプションを使用する方法を示しています。

$ cachefspack -U /local/mycache

ファイルシステムを 1 つもマウントしていないキャッシュのパッキングは解除できません。-U オプションに対して、マウント済みファイルシステムを持っていないキャッシュを指定した場合、次のような出力が表示されます。

$ cachefspack -U /local/mycache
cachefspack: Could not unpack cache /local/mycache, no mounted
filesystems in the cache.

パックされたファイルの情報の表示

パックされたファイルについての情報やパッキングの状態を表示することも可能です。

パックされたファイルの情報を表示する方法

パックされたファイルの情報を表示するには、cachefspack コマンドの -i オプションを使用します。

$ cachefspack -i[v] cached-filename-or-directory

-i

パックされたファイルの情報を表示することを指定する 

-v

詳細表示オプション 

cached-filename-or-directory

情報を表示するファイル名またはディレクトリ名を指定する 

次の例は、ファイル doc_file がパックされていることを示しています。

$ cachefspack -i doc_file
cachefspack: file doc_file marked packed YES, packed YES

次の例は、ディレクトリ /usr/openwin に関する情報を示しています。このディレクトリには、サブディレクトリ bin があり、サブディレクトリ bin には 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 統計情報の設定
 

作業 

 

説明 

 

手順の説明 

 

ロギングの設定 

 

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

 

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

 
        
 

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

 

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

 

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

 
          
 

ロギングプロセスの停止 

 

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

 

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

 
          
 

キャッシュサイズの表示 

 

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

 

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

 
          
 

キャッシュ統計情報を表示する。 

 

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 /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 章 スワップ空間の追加構成の手順

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

スワップ空間について

この節では、スワップ空間の概念と、Solaris 1.x (SunOS 4.x) と Solaris 2.x (SunOS 5.x) のスワップ要件の違いについて説明します。すでに Solaris 2.x のスワップ機構に慣れている方は、「スワップ空間の計画」の節に進んでください。

管理者は、次の事柄を決定する上で Solaris 2.x の機能を理解しておく必要があります。

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

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

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

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

Solaris 1.x anonymous メモリーを実装する場合、次の制限があります。

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

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

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

Solaris 2.x 環境では、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 のエラーメッセージについては、第 73 章「ファイルシステムで発生する問題の解決」を参照してください。

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

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

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

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

fsck エラーメッセージについては、第 73 章「ファイルシステムで発生する問題の解決」を参照してください。

fsck プログラムは、割り当て済みだが参照されないファイルとディレクトリを lost+found ディレクトリに入れます。各ファイルの i ノード番号が名前として割り当てられます。lost+found ディレクトリが存在しない場合は、fsck によって作成されます。lost+found ディレクトリ内の領域が足りない場合は、そのサイズが fsck によって拡張されます。

ファイルシステムの状態はどのように記録されるか

fsck コマンドは、スーパーブロックに格納された状態フラグを使用して、ファイルシステムの状態を記録します。また、このフラグを使用して、ファイルシステムの整合性をチェックすべきかどうかが判断されます。このフラグはブート時には /sbin/rcS スクリプトによって使用され、コマンド行からは fsck-m オプションを指定した場合に使用されます。fsck-m オプションの結果を無視するのなら、状態フラグの設定に関係なく、すべてのファイルシステムをチェックできます。

表 31-1 に状態フラグを示します。

表 31-1 状態フラグの値

状態フラグの値 

説明 

FSCLEAN

ファイルシステムが正しくマウント解除されていない場合は、状態フラグが FSCLEAN に設定される。FSCLEAN 状態フラグが設定されているファイルシステムは、システムのブート時にチェックされない。

 

FSSTABLE

ファイルシステムはマウントされている (またはされた) が、前回のチェックポイント (sync または fsflush) 以後に変更がなかった。チェックポイントは、通常は 30 秒ごとに発生する。たとえば、カーネルはファイルシステムがアイドル状態かどうかを定期的にチェックし、アイドル状態であれば、スーパーブロック内の情報をディスクにフラッシュさせて FSSTABLE マークを設定する。システムがクラッシュした場合、ファイルシステムの構造は安定しているが、少量のデータが失われる。FSSTABLE マークが付いたファイルシステムは、マウント前のチェックをスキップできる。ファイルシステムの状態が FSCLEAN でも FSSTABLE でもなければ、mount(2) システムコールではファイルシステムは読み取り/書き込み用にマウントされない。

FSACTIVE

ファイルシステムがマウントされ、後から変更されると、状態フラグが FSACTIVE に設定される。ファイルシステムには整合性のなくなったものが含まれていることがある。変更後のメタデータがディスクに書き込まれる前に、ファイルシステムに FSACTIVE マークが付けられる。ファイルシステムが正常にマウント解除されると、状態フラグは FSCLEAN に設定される。FSACTIVE フラグが設定されたファイルシステムは、整合性がないので、fsck でチェックしなければならない。

FSBAD

ルート (/) ファイルシステムが、状態が FSCLEAN でも FSSTABLE でもないときにマウントされると、状態フラグが FSBAD に設定される。カーネルは、このファイルシステムの応対を FSCLEAN または FSSTABLE に変更しない。ルート (/) のファイルシステムにブートプロセスの一部として FSBAD フラグが設定されると、読み取り専用としてマウントされる。row のルートデバイス上で fsck を実行できる。その後で、ルート (/) ファイルシステムを読み取り/書き込みとしてマウントし直す。

表 31-2 は、状態フラグが変更される場合を示しています。

表 31-2 状態フラグが変更される場合

fsck の前

fsck の後

 

 

 

 

新しい状態  

 

初期状態

エラーなし

すべてのエラーを修正済み

エラーが未修正

不明 

安定 

安定 

不明 

有効 

安定 

安定 

有効 

安定 

安定 

安定 

有効 

クリーン 

クリーン 

安定 

有効 

不良 

安定 

安定 

不良 

fsck でチェックして修復される内容

この節では、ファイルシステムの通常の処理中に発生する問題、原因、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 ノードリストを調べて、各重複ブロックを取得するもう 1 つの 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 ファイルシステムよりも大きければ、ファイルシステムはチェックされない。 

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 コマンドの構文とオプション」第 73 章「ファイルシステムで発生する問題の解決」を参照してください。

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

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

  2. ファイルシステムをチェックします。

    # fsck -m /dev/rdsk/device-name
    

    このコマンドで指定したファイルシステムのスーパーブロック内の状態フラグがチェックされ、ファイルシステムがクリーンかチェックが必要かが判断されます。

    デバイス引数を省略すると、/etc/vfstab 内で「fsck pass」の値が 0 より大きいすべての UFS ファイルシステムがチェックされます。

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

次の例では、第 1 のファイルシステムはチェックが必要で、第 2 のファイルシステムはチェックが不要です。

# fsck -m /dev/rdsk/c0t0d0s6
** /dev/rdsk/c0t0d0s6
ufs fsck: sanity check: /dev/rdsk/c0t0d0s6 needs checking
# fsck -m /dev/rdsk/c0t0d0s7
** /dev/rdsk/c0t0d0s7
ufs fsck: sanity check: /dev/rdsk/c0t0d0s7 okay

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

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

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

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

    # fsck
    

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

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

    fsck は、一度の実行ですべてのエラーを修正できないことがあります。「FILE SYSTEM STATE NOT SET TO OKAY」というメッセージが表示される場合は、このコマンドをもう一度実行します。コマンドが機能しない場合は、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修復オプション (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 *****
# 

ルート (/) ファイルシステム内のスーパーブロックが損傷し、システムをブートできない場合は、/kernel/unix をインストールし直し、newfs を使用してルート (/) ファイルシステムを再構築してください。スーパーブロックは newfs コマンドによって作成されるので、復元する必要はありません。

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 デバイスファイルの読み取りアクセス権を持っていなければなりません (セキュリティ上の落とし穴になる可能性があります)。

汎用 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 引数を省略すると、指定した fsck デバイスと fsck pass の値が 0 より大きい /etc/vfstab 内のエントリがチェックされる。修復 (-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-2 を参照してください。

表 32-1 に、ルート (/) と /usr のデフォルトファイルシステムに入っているすべてのディレクトリを示します。

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

ディレクトリ 

説明 

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

/

ファイルシステムの名前空間全体のルート 

/dev

特殊ファイルの一次位置 

/dev/dsk

ブロックディスクデバイス 

/dev/pts

pty スレーブデバイス

/dev/rdsk

raw ディスクデバイス 

/dev/rmt

raw テープデバイス 

/dev/sad

STREAMS Administrative Driver のエントリポイント 

/dev/term

端末デバイス 

/etc

ホスト固有のシステム管理構成ファイルとデータベース 

/etc/acct

アカウンティングシステムの構成情報 

/etc/cron.d

cron の構成情報

/etc/default

各種プログラムのデフォルト情報 

/etc/dfs

エクスポートされるファイルシステムの構成情報 

/etc/fs

/usr をマウントする前に必要な処理のためにファイルシステムタイプ別に編成されたバイナリ

/etc/inet

インターネットサービスの構成ファイル 

/etc/init.d

実行レベルを切り替えるためのスクリプト 

/etc/lp

プリンタサブシステムの構成情報 

/etc/mail

メールサブシステムの構成 

/etc/net

TI (トランスポート独立) ネットワークサービスの構成情報 

/etc/opt

オプションパッケージの構成情報 

/etc/rc0.d

実行レベル 0 を出入りするためのスクリプト 

/etc/rc1.d

実行レベル 1 を出入りするためのスクリプト 

/etc/rc2.d

実行レベル 2 を出入りするためのスクリプト 

/etc/rc3.d

実行レベル 3 を出入りするためのスクリプト 

/etc/rcS.d

システムを単一ユーザーモードで起動するスクリプト 

/etc/saf

サービスアクセス機能ファイル (FIFO など) 

/etc/skel

新規ユーザーアカウントのデフォルトプロファイルスクリプト 

/etc/sm

状態モニター情報 

/etc/sm.bak

状態モニター情報のバックアップコピー 

/etc/tm

商標ファイル。内容はブート時に表示 

/etc/uucp

uucp 構成情報

/export

エクスポートされるファイルシステムツリーのデフォルトのルート 

/home

ユーザー命令用のサブツリーのデフォルトのルート 

/kernel

ブートプロセスの一部として必要なプラットフォーム独立型のロード可能カーネルモジュールのサブツリー。プラットフォーム独立型のコアカーネル /kernel/genunix の汎用部分が含まれる。/platform/usr/platform ディレクトリ構造については、表 32-2 を参照

/mnt

ファイルシステムの一般的な一次マウントポイント 

/opt

追加アプリケーションパッケージ用のサブツリーのルート 

/opt/SUNWspro

バンドルされていない言語製品のマウント/インストールポイント 

/sbin

ブートプロセスと手作業によるシステム障害の回復に使用される重要な実行可能プログラム 

/stand

スタンドアロンプログラム 

/tmp

一次ファイル。ブートシーケンス中に消去される 

/usr

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

/var

各種ファイルのサブツリーのルート 

/var/adm

システムのログファイルとアカウンティングファイル 

/var/crash

カーネルクラッシュダンプのデフォルトの格納場所 

/var/cron

cron のログファイル

/var/lp

ラインプリンタサブシステムのログ情報 

/var/mail

ユーザーのメールが保管されるディレクトリ 

/var/news

コミュニティサービスメッセージ (注: USENET 方式のニュースとは異なる) 

/var/nis

NIS+ データベース 

/var/opt

ソフトウェアパッケージ関連の各種ファイルのサブツリーのルート 

/var/preserve

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

c のログファイルと状態ファイル 

/var/yp

NIS データベース (NIS との下位互換性を保つため。NIS+ への移行が完了した後は不要) 

 

 

 

 

/usr ファイルシステムのディレクトリ

bin

標準システムコマンドの位置 

demo

デモプログラムとデータ 

games

空のディレクトリ。SunOS 4.x ソフトウェアの遺物 

include

ヘッダファイル (C プログラム用など) 

kernel

その他モジュール 

kvm

実装されたアーキテクチャ固有のバイナリとライブラリ 

lib

各種プログラムのライブラリ、アーキテクチャ依存データベース、またはユーザーが直接呼び出さないバイナリ 

lib/acct

アカウンティングスクリプトとバイナリ 

lib/class

スケジュールクラス固有のディレクトリ。priocntl コマンドと dispadmin コマンドの実行可能プログラムが入っている

lib/font

troff フォント記述ファイル

lib/fs

ファイルシステムタイプ依存モジュール。ユーザーは直接呼び出さない 

lib/iconv

iconv(1) の変換テーブル

lib/libp

プロファイルライブラリ 

lib/locale

各国対応のローカライズデータベース 

lib/lp

ラインプリンタサブシステムのデータベースとバックエンドの実行可能プログラム 

lib/mail

mail サブシステムの補助プログラム

lib/netsvc

インターネットネットワークサービス 

lib/nfs

NFS 関連の補助プログラムとデーモン 

lib/pics

実行時リンカの構築に必要な PIC アーカイブ 

lib/refer

参照関連の補助プログラム 

lib/sa

システム活動レポートパッケージ用のスクリプトとコマンド 

lib/saf

サービスアクセス機能に関連する補助プログラムとデーモン 

lib/uucp

uucp 関連の補助プログラムとデーモン

lib/zoneinfo

時間帯情報 

local

サイトのローカルコマンド 

old

段階的に使用されなくなっているプログラム 

openwin

OpenWindows ソフトウェアのマウント/インストールポイント 

sadm

システム管理に関連する各種ファイルとディレクトリ。以下の各サブディレクトリを参照 

sadm/bin

FMLI スクリプトに使用する「valtools」境界 

sadm/install

pkg 管理用の実行プログラムとスクリプト

sbin

システム管理用の実行可能プログラム 

sbin/static

/usr/bin/usr/sbin から選択したプログラムの静的リンクバージョン

share

アーキテクチャに依存しない共有可能ファイル 

share/lib

アーキテクチャに依存しないデータベース 

share/lib/keytables

キーボード配置記述ファイル 

share/lib/mailx

mailx 関連のヘルプファイル

share/lib/nterm

nroff 端末テーブル

share/lib/pub

各種データファイル 

share/lib/spell

spell 関連の補助データベースとスクリプト

share/lib/tabset

タブ設定のエスケープシーケンス 

share/lib/terminfo

terminfo スタイルの端末記述ファイル

share/lib/tmac

[nt]roff マクロパッケージ

share/src

カーネル、ライブラリ、ユーティリティのソースコード 

ucb

UCB 互換パッケージのバイナリ 

ucbinclude

UCB 互換パッケージのヘッダファイル 

ucblib

UCB 互換パッケージのライブラリ 

プラットフォームに依存するディレクトリ

表 32-2 に、/platform ディレクトリと /usr/platform ディレクトリに入っているすべてのプラットフォームに依存するオブジェクトを示します。

表 32-2 /platform/usr/platform ディレクトリ

ディレクトリ 

説明 

/platform

ルート (/) ファイルシステムに存在すべき一連のディレクトリが、サポートされるプラットフォームごとに入っている。

/platform/*/kernel

プラットフォームに依存するカーネル構成要素が入っている。プラットフォームに依存するコアカーネルであるファイル unix も含む。kernel(1M) のマニュアルページを参照。

/usr/platform

ルート (/) ファイルシステムに存在する必要がない、プラットフォームに依存するオブジェクトが入っている。削除された /usr/kvm の内容に置き換わるオブジェクトを含む。

/usr/platform/*/lib

/usr/lib ディレクトリ中のオブジェクトに類似した、プラットフォームに依存するオブジェクトが入っている。

/platform/*/sbin

/usr/sbin ディレクトリ中のオブジェクトに類似した、プラットフォームに依存するオブジェクトが入っている。

UFS ファイルシステムのシリンダグループの構造

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 バイトに連動します。


注 -

上限を、まったくフラグメントのない場合の完全ブロックのサイズに等しくすることができます。容量よりも速度を重視する場合、きわめて大型のファイルがあるファイルシステムには、この構成が最適なことがあります。


フラグメントサイズを選択するときには、処理時間と容量を取捨選択してください。フラグメントサイズが小さければ容量の節約になりますが、割り当てには時間がかかります。原則として、格納効率を高めるには、ほとんどのファイルが大型のファイルシステムには、大きめのフラグメントサイズを使用します。ほとんどのファイルが小型のファイルシステムには、小さめのフラグメントサイズを使用します。

最小空き容量

「最小空き容量」とは、ファイルシステムの作成時に予約分として保持されるディスク容量です。デフォルトの予約分は合計ディスク容量の 10 パーセントです。ファイルシステム内の空き容量が少なくなるほど、アクセス速度が低下するので、空き容量は重要です。十分な空き容量があれば、UFS ファイルシステムは効率よく動作します。ファイルシステムがいっぱいになって、使用可能なユーザー領域を使い果たすと、スーパーユーザー以外は予約済みの空き容量にアクセスできません。

df などのコマンドは、最小空き容量として割り当て済みの分を差し引いて、ユーザーに使用可能な容量をパーセントで表示します。コマンドでファイルシステム内のディスク容量の 100 パーセント以上が使用中であると表示される場合は、予約分の一部がルートに使用されています。

ユーザーに制限を適用する場合に、各ユーザーが使用可能な容量には予約分の空き容量は含まれません。tunefs コマンドを使用すると、既存のファイルシステムの最小空き容量の値を変更できます。

回転の遅れ (ギャップ)

「回転の遅れ」は、CPU がデータ転送を完了し、同じディスクシリンダ上で次のデータ転送を開始するまでに予想される最小所要時間 (ミリ秒単位) です。デフォルトの遅れは、ディスクのタイプによって異なり、通常はディスクタイプごとに最適化されています。

ファイルに書き込むときに、UFS 割り当てルーチンは新しいブロックを同じファイル内の直前のブロックと同じディスクシリンダ上に配置しようとします。また、新しいブロックをトラック内で最適の位置に配置して、そこへのアクセスに必要なディスクの回転を最小限度に抑えようとします。

ファイルブロックを「回転して適切に動作」するように配置するには、割り当てルーチンは CPU による転送処理速度と、ディスクが 1 ブロックをスキップする所要時間を認識しなければなりません。mkfs コマンドのオプションを使用すると、ディスクの回転速度と 1 トラック当たりのディスクブロック (セクタ) 数を指定できます。割り当てルーチンは、この情報を使用して、1 ディスクブロックをスキップするミリ秒数を求めます。次に、割り当てルーチンは予想転送時間 (回転の遅れ) を使用して、システムの読み込み準備ができたときに次のブロックがディスクヘッドの真下にくるようにブロックを配置します。


注 -

回転の遅れ (newfs-d オプション) を指定しなくてもよいデバイスがあります。


各ブロックは、システムが同じディスクの回転中に読み込める処理速度の場合にのみ、連続して配置されます。システムが低速であれば、ディスクはファイル内の次のブロックの先頭を通り過ぎてしまうので、そのブロックを読み込むには、もう 1 回転しなければならず、長時間かかります。次のディスク要求が発生するときに該当するブロックにヘッドがきているように、ギャップに適切な値を指定してください。

既存のファイルシステムの場合は、tunefs コマンドを使用してこのパラメタの値を変更できます。変更結果は、それ以後のブロック割り当てにのみ適用され、すでに割り当て済みのブロックには適用されません。

最適化のタイプ

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

i ノード 1 つあたりのバイト数

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

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

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

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

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

newfs コマンドは、ファイルシステムの作成に使用する mkfs コマンドの簡便バージョンです。newfs コマンドは、/usr/sbin ディレクトリに入っています。

構文は次のとおりです。

newfs [-Nv] [mkfs_options] special

表 32-3 に、newfs コマンドのオプションと引数を示します。

表 32-3 newfs コマンドのオプションと引数

オプション 

説明 

N

ファイルシステムの作成に使用されるファイルシステムパラメタが表示されるが、実際には作成されない。このオプションでは、既存のファイルシステムの作成に使用されたパラメタは表示されない。 

-v

mkfs コマンドに渡されるパラメタが表示され、-N オプションを指定しなければファイルシステムが作成される。

mkfs-options

後続のオプションを使用して、mkfs コマンドに渡されるパラメタが設定される。次のオプションは、mkfs に渡される順番に記述されている。各オプションは、先行キーワードを付けずに空白で区切る。

-s size

ファイルシステムのセクター数。デフォルトは、ディスクラベルから自動的に判別される。 

-t ntrack

ディスク上の 1 シリンダあたりのトラック数。デフォルトはディスクラベルから判別される。 

-b bsize

データ転送に使用される論理ブロックのバイト数。サイズとして 4096 または 8192 バイト (4K または 8K バイト) を指定する。デフォルトは 8192 バイト (8K バイト)。 

-f fragsize

ファイルに割り当てられるディスク容量の最小バイト数。フラグメントサイズを、512 バイトから 8192 バイトまでの 2 の乗数単位で指定する。デフォルトは 1024 バイト (1K バイト)。 

-c cgsize

1 シリンダグループあたりのディスクシリンダ数。この数値は 1 から 32 までの範囲内でなければならない。デフォルトは 16。 

-m free

空きディスク領域の最小許容率。デフォルトは 10 パーセント。 

-r rpm

1 分当たりのディスクの回転速度。デフォルトは 3600 である。このパラメタは、mkfs に渡される前に 1 秒当たりの回転数に変換される。

-i nbpi

作成できる i ノードの計算に使用される i ノード 1 個当たりのバイト数。デフォルトは 2048。 

-o opt

ディスクブロックをファイルに割り当てるときに使用される最適化のタイプ。s は領域を示し、t は時間を示す。

-a apc

不良ブロックを配置するために予約される 1 ディスクシリンダ (SCSI デバイスのみ) の代替ブロック数。デフォルトは 0。 

-d gap

(回転の遅れ) CPU がデータ転送を完了し、同じディスクシリンダ上で次のデータ転送を開始するまでに予想される最小ミリ秒数。デフォルトは 4。 

-d nrpos

シリンダグループを分割するさまざまな回転位置の数。デフォルトは 8。 

-C maxcontig

あるファイルに属し、回転の遅れが挿入される前に連続して割り当てられる最大ブロック数。デフォルトはドライブごとに異なる。内部 (トラック) バッファを持たないドライブ (または、内部バッファの存在をうたっていないドライブ/コントローラ) の場合は、デフォルトは 1 で、バッファを持つドライブの場合はデフォルトは 7。 

このパラメタには、 

blocksize*maxcontigmaxphys 以下でなければならないという制限がある。

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

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

special

ファイルシステムを入れるパーティションの特殊文字 (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) のマニュアルページを参照してください。