Solaris 8 のシステム管理 (追補)

第 5 章 ファイルシステムの管理

Solaris 8 ソフトウェアリリースに、新しい UFS の機能が含まれるようになりました。詳細は、次の各セクションを参照してください。


注 -

最新のマニュアルページを参照するには、man コマンドを使用してください。Solaris 8 Update リリースのマニュアルページには、「Solaris 8 Reference Manual Collection」には記載されていない新しい情報も提供されています。


UFS 直接入出力の並行処理の向上

Solaris 8 1/01 リリースで UFS ソフトウェアが拡張されました。ここでの説明は、『Solaris のシステム管理 (第 1 巻)』の「ファイルシステムの管理 (概要)」の章の直接入出力に関する情報を補足するものです。

バッファー処理されていないファイルシステムのデータにアクセスするためにデータベースアプリケーションが使用する直接入出力のパフォーマンスが改良され、通常の UFS ファイルへの読み取りおよび書き込みのアクセスの並行処理が可能になりました。これまでは、ファイルデータを更新する操作は、その更新操作が完了するまで、その他すべての読み取りアクセスまたは書き込みアクセスをロックアウトするようになっていました。

書き込みの並行処理は、ファイルのリライトという特別なケースのみに限られます。ファイルを拡張する場合は、書き込みは従来のようにシングルスレッドで行われます。一般に、データベースはファイルを事前に割り当て、その後はあまり拡張することはありません。そのため、この拡張による効果は通常のデータベース操作時に見られます。

直接入出力の改良により、UFS ファイルシステムにおける入出力を長時間使用するデータベースのパフォーマンスは、raw パーティションのアクセススピードの約 90 % に短縮されます。データベースが CPU やバス大域幅を長時間使用する場合は、このパフォーマンスの向上は見られないことになります。

データベーステーブルの保存にすでに UFS を使用している場合、入出力データベースのアプリケーションを直接入出力が可能な状態で実行することを想定してみてください。可能であれば、直接入出力の有効化にデータベースの管理手順を使用します。直接入出力をデータベース製品から可能にすることができない場合は、mount -o forcedirectio オプションを使用して各ファイルシステムについて直接入出力を有効にするか、または directio(3C) ライブラリ呼び出しを使用して直接入出力を有効にします。

詳細は、mount_ufs(1M) または directio(3C) のマニュアルページを参照してください。

UFS スナップショットの概要

Solaris 8 1/01 リリースには、ファイルシステムのマウント中にファイルシステムをバックアップするための、新しい fssnap コマンドが含まれるようになりました。ここでの情報は、『Solaris のシステム管理 (第 1 巻)』の「ファイルシステムのバックアップと復元 (概要)」の章のファイルシステムのバックアップについての情報を補足するものです。

fssnap コマンドを使用して、ファイルシステムの読み取り専用のスナップショットを作成することができます。スナップショットは、バックアップ操作のためのファイルシステムの一時的イメージです。

fssnap コマンドを実行すると、1 つの仮想デバイスと 1 つのバッキングストアファイルが作成されます。ユーザーは、既存の Solaris バックアップコマンドを使用して、実在のデバイスのように動作し実在のデバイスのように見えるこの仮想デバイスをバックアップすることができます。バッキングストアファイルは、スナップショットがとられてから変更されたデータのコピーを含んだビットマップ化ファイルです。

なぜ UFS スナップショットを使用するか

UFS スナップショットにより、バックアップ時に、ファイルシステムをマウントされた状態にしシステムをマルチユーザーモードにしておくことができます。これまでは、バックアップを実行するために ufsdump コマンドを使用する時は、ファイルシステムをアクティブでない状態に保つためにシステムをシングルユーザーモードにすることが推奨されていました。より確実なバックアップのために、tarcpio などの追加の Solaris のバックアップコマンドを使用して UFS スナップショットのバックアップを行うこともできます。

fssnap コマンドにより、企業レベルではないシステムの管理者が、大規模な記憶容量の必要なく、Sun StorEdgeTM Instant Image のような企業レベルツールのパワーを得ることができます。

UFS スナップショットは、Instant Image 製品に似ています。Instant Image は、取り込まれるファイルシステム全体のサイズに等しいスペースを割り当てます。しかし、UFS スナップショットが作成するバッキングストアファイルは、必要なディスクスペースの容量しか占有せず、また希望する場合はバッキングストアファイルのサイズに上限を設定することもできます。

次の表は、UFS スナップショットと Instant Image との特徴的な違いを示します。

UFS スナップショット 

Instant Image 

バッキングストアファイルのサイズは、スナップショットがとられた後のデータの変更量による 

バッキングストアファイルのサイズは、コピーされるファイルシステム全体のサイズに等しい 

システムのリブート後は保持されない 

システムのリブート後も保持される 

UFS ファイルシステムで動作する 

ルート (/) または /usr ファイルシステムでは使用できない

Solaris 8 1/01 リリースに組み込まれている 

Enterprise Services Package に組み込まれている 

UFS スナップショットは大規模なファイルシステムをコピーすることができますが、企業レベルのシステムには Instant Image の方が適しています。UFS スナップショットは、小さめのシステムに適しています。

UFS スナップショットのパフォーマンス上の問題

ファイルシステムのスナップショットが最初に作成される時、そのファイルシステムのユーザーは短い一時停止に気づくでしょう。一時停止の時間は、取り込まれるファイルシステムのサイズとともに増加します。ファイルシステムのスナップショットがアクティブな間、そのファイルシステムのユーザーは、ファイルシステムに書き込む際に、若干のパフォーマンス上の影響に気づくでしょう。しかしファイルシステムを読む際には影響はありません。

UFS スナップショットの作成

fssnap コマンドを使用してファイルシステムのスナップショットを作成する際は、バッキングストアファイルがどれだけのディスクスペースを消費するかを監視してください。バッキングストアファイルは初めはスペースを全く使用せず、その後特によく使用されているシステムにおいて、急速に拡大します。バッキングストアファイルが拡大するのに充分なスペースを必ず確保しておくか、または -o maxsize=n [k,m,g] オプション (n [k,m,g] はバッキングストアファイルの最大限のサイズ) でそのサイズを制限してください。


注意 - 注意 -

バッキングストアファイルにスペースが不足する場合、スナップショットが削除されてしまうことがあり、バックアップが失敗します。スナップショットのエラーの可能性を調べるため、/var/adm/messages ファイルをチェックしてください。


UFS スナップショットを作成するには

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

  2. バッキングストアファイルに充分なディスクスペースがあることを確認します。


    # df -k
    
  3. 同じロケーションに同じ名前の既存のバッキングストアファイルが存在していないことを確認します。


    # ls /file-system/backing-store-file
    
  4. ファイルシステムのスナップショットを作成します。


    # fssnap -F ufs -o bs=/file-system/backing-store-file /file-system
    

例 - UFS スナップショットの作成

次の例では、/usr ファイルシステムのスナップショットを作成します。バッキングストアファイルは /scratch/usr.back.file、仮想デバイスは /dev/fssnap/1 です。


# fssnap -F ufs -o bs=/scratch/usr.back.file /usr
/dev/fssnap/1

次の例では、バッキングストアファイルを 500M バイトに制限します。


# fssnap -F ufs -o maxsize=500m,bs=/scratch/usr.back.file /export/home
/dev/fssnap/1

UFS スナップショットの情報を表示するには

fssnap -i オプションの使用により、システムの現在のスナップショットを表示することができます。1 つのファイルシステムを指定する場合、そのスナップショットについての詳細な情報が表示されます。特定のファイルシステムを指定しない場合は、現在のすべてのファイルシステムのスナップショットとそれらに対応する仮想デバイスの情報が表示されます。

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

  2. 現在のスナップショットをリスト表示します。


    # fssnap -i
       0    /
       1    /usr

    特定の 1 つのスナップショットについての詳細な情報を表示する場合は、次のように実行します。


    # fssnap -i /usr
    Snapshot number               : 1
    Block Device                  : /dev/fssnap/1
    Raw Device                    : /dev/rfssnap/1
    Mount point                   : /usr
    Device state                  : idle
    Backing store path            : /scratch/usr.back.file
    Backing store size            : 480 KB
    Maximum backing store size    : Unlimited
    Snapshot create time          : Tue Aug 08 09:57:07 2000
    Copy-on-write granularity     : 32 KB

UFS スナップショットの削除

UFS スナップショットを作成する際、バッキングストアファイルがリンクされないように指定することができます。これは、そのバッキングストアファイルが、スナップショットが削除された後で削除されることを示します。UFS スナップショットを作成する際に -o unlink オプションを指定しない場合は、後で手動で削除する必要があります。

バッキングストアファイルは、バッキングストアファイルを削除するために -o unlink オプションを使用した場合はスナップショットが削除されるまで、そうでなければ手動で削除するまで、ディスクスペースを使用します。

UFS スナップショットを削除するには

スナップショットは、システムをリブートするか、あるいは fssnap -d コマンドを使用してファイルシステムのスナップショットを含むファイルシステムのパスを指定することで、削除できます。

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

  2. 削除するスナップショットを特定します。


    # fssnap -i
    
  3. そのスナップショットを削除します。


    # fssnap -d  /file-system
    Deleted snapshot 1.
  4. (オプション) スナップショットの作成時に -o unlink オプションを使用しなかった場合は、そのバッキングストアファイルを手動で削除する必要があります。


    # rm /file-system/backing-store-file
    

例 - UFS スナップショットの削除

以下は、unlink オプションを使用しなかった場合の、スナップショットを削除する例です。


# fssnap -i
    0    /    1    /usr
# fssnap -d /usr
 Deleted snapshot 1.
# rm /scratch/usr.back.file

UFS スナップショットのバックアップ

ファイルシステムのスナップショットを含む仮想デバイスは、標準の読み取り専用デバイスとして振舞います。これは、仮想デバイスを、ファイルシステムのデバイスをバックアップするかのようにバックアップすることができるということを示します。

ufsdump コマンドを使用して UFS スナップショットをバックアップする場合、バックアップ時にスナップショットの名前を指定することができます。詳細は、次の節を参照してください。

tar コマンドを使用してスナップショットをバックアップする場合、次のように、バックアップを行う前にスナップショットをマウントします。


# mkdir /backups/home.bkup
# mount -F UFS -o ro /dev/fssnap/1 /backups/home.bkup
# cd /backups/home.bkup
# tar cvf /dev/rmt/0 .

ファイルシステムをバックアップする方法についての詳細は、『Solaris のシステム管理 (第 1 巻)』の「ファイルとファイルシステムのバックアップ (手順)」の章を参照してください。

UFS スナップショットのバックアップを行うには

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

  2. バックアップをとるファイルシステムのスナップショットを特定します。


    # fssnap -i /file-system
    

    例:


    # fssnap -i /usr
    Snapshot number               : 1
    Block Device                  : /dev/fssnap/1
    Raw Device                    : /dev/rfssnap/1
    Mount point                   : /usr
    Device state                  : idle
    Backing store path            : /scratch/usr.back.file
    Backing store size            : 480 KB
    Maximum backing store size    : Unlimited
    Snapshot create time          : Tue Aug 08 09:57:07 2000
    Copy-on-write granularity     : 32 KB
  3. ファイルシステムのスナップショットのバックアップを行います。


    # ufsdump 0ucf /dev/rmt/0 /snapshot-name
    

    例:


    # ufsdump 0ucf /dev/rmt/0 /dev/rfssnap/1
    
  4. スナップショットがバックアップされたことを確認します。


    # ufsrestore ta /dev/rmt/0
    

UFS スナップショットの増分ダンプを作成するには

ファイルシステムのスナップショットをインクリメンタル (増分的) に作成したい場合、つまり最後のスナップショット以降に変更のあったファイルだけをバックアップしたい場合は、ufsdump コマンドを新しい N オプションとともに使用します。このオプションは、増分ダンプをトラックするために /etc/dumpdates ファイルに挿入されるファイルシステムのデバイス名を指定します。

次の例では、ufsdump コマンド内で fssnap コマンドを組み込んでファイルシステムの増分ダンプを作成しています。

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

  2. ファイルシステムスナップショットの増分ダンプを作成します。


    # ufsdump 1ufN /dev/rmt/0 /dev/rdsk/c0t1d0s0 `fssnap -F ufs -o raw,bs=
    /export/scratch,unlink /dev/rdsk/c0t1d0s0`
    

    上記の例では、ブロックデバイスではなく raw デバイスの名前を表示するために -o raw オプションが使用されています。このオプションの使用により、fssnap コマンドを raw デバイスを必要とするコマンド (ufsdump コマンドなど) に組み込むことが容易になります。

  3. スナップショットがバックアップされたことを確認します。


    # ufsrestore ta /dev/rmt/0
    

UFS スナップショットのバックアップからのデータの復元

仮想デバイスから作成されたバックアップは、基本的には、スナップショットがとられた時点でのオリジナルのファイルシステムの状態を表しています。バックアップから復元を行う場合は、オリジナルのファイルシステムから直接そのバックアップをとったかのように (たとえば ufsrestore コマンドを使用したものなどのように) 復元します。ファイルシステムの復元についての詳細は、『Solaris のシステム管理 (第 1 巻)』の「ファイルとファイルシステムの復元 (手順)」の章を参照してください。