ページの先頭行へ戻る
PRIMECLUSTER Global Disk Services 説明書 4.5
FUJITSU Software

F.1.10 ファイルシステムに関する異常

ファイルシステムに関する異常について、以下に該当する場合は、それぞれに記載されている対処を行ってください。

(1) システム再起動後、ローカルクラス内のZFS ストレージプールが UNAVAIL 状態になる。

説明

ローカルクラスのボリューム上に ZFS ストレージプールを作成し、zpool import コマンドの -R オプションを指定せずに ZFS ストレージプールをインポートした状態でシステムを再起動すると、システム再起動後、ZFS ストレージプールが UNAVAIL 状態になり、ZFS ファイルシステムが使用できなくなります。

対処

zpool clear コマンドを使用して、ZFS ストレージプールのエラー情報を削除します。zpool clear コマンドの詳細は、ZFS のマニュアルを参照してください。

また、本現象の発生を防ぐため、「A.2.42 ZFSを使用する場合」の「ローカルクラスでZFSを使用する場合」に従って設定を行ってください。

(2) ローカルボリューム上の UFS ファイルシステムを修復したい。

説明

ローカルクラスのボリュームに作成された UFS ファイルシステムを fsck(1M) コマンドで修復する手順を説明します。

対処

ローカルボリューム上のファイルシステムの場合、fsck(1M) コマンドの実行方法は、下記の 2 点を除いて、物理スライスに作成されたファイルシステムの場合と同様です。

以下では、クラス名が Class1、ボリューム名が Volume1、マウントポイントが /mount_point、ファイルシステムタイプが ufs の場合の手順を例として示します。

  1. 対象のファイルシステムを使用しているアプリケーションを停止します。

  2. 対象のファイルシステムがマウントされている場合は、アンマウントします。

    # umount /mount_point
  3. 対象のボリュームを起動します。
    すでに起動されている場合は、本手順を実行する必要はありません。

    # sdxvolume -N -c Class1 -v Volume1
  4. fsck(1M) コマンドを実行します。fsck(1M) コマンドでは、対象のボリュームのデバイス特殊ファイルを指定します。

    # fsck -F ufs -y /dev/sfdsk/Class1/rdsk/Volume1

    参照

    fsck(1M) コマンドのオプションなどの詳細については、Solaris のマニュアルを参照してください。

(3) 共用ボリューム上の UFS ファイルシステムを修復したい。

説明

共用クラスのボリュームに作成された UFS ファイルシステムを fsck(1M) コマンドで修復する手順を説明します。

対処

共用ボリューム上のファイルシステムの場合、fsck(1M) コマンドの実行方法は、下記の 2 点を除いて、物理スライスに作成されたファイルシステムの場合と同様です。

以下では、クラス名が Class1、ボリューム名が Volume1、マウントポイントが/mount_point、ファイルシステムタイプが ufs の場合の手順を例として示します。

以下の 2 つの場合で手順が異なります。

  1. クラスがクラスタアプリケーションに登録されていない場合

  2. クラスがクラスタアプリケーションに登録されている場合

a. クラスがクラスタアプリケーションに登録されていない場合
  1. クラススコープ内の全ノードで、対象のファイルシステムを使用しているアプリケーションを停止します。

  2. クラススコープ内の全ノードで、対象のファイルシステムをアンマウントします。

    # umount /mount_point
  3. クラススコープ内の全ノードで、対象のボリュームを停止します。

    クラススコープ内の任意の 1 ノードにログインして sdxvolume -F -e allnodes コマンドを実行します。

    # sdxvolume -F -c Class1 -v Volume1 -e allnodes
  4. クラススコープ内の任意の 1 ノードで、対象のボリュームを起動します。

    # sdxvolume -N -c Class1 -v Volume1
  5. 手順 4. でボリュームを起動したノードで、fsck(1M) コマンドを実行します。

    fsck(1M) コマンドでは、対象のボリュームのデバイス特殊ファイルを指定します。

    # fsck -F ufs -y /dev/sfdsk/Class1/rdsk/Volume1

    参照

    fsck(1M) コマンドのオプションなどの詳細については、Solaris のマニュアルを参照してください。

b. クラスがクラスタアプリケーションに登録されている場合
  1. 対象のクラスを使用しているクラスタアプリケーションを停止します。

    参照

    クラスタアプリケーションの停止方法については、「PRIMECLUSTER 導入運用手引書」を参照してください。

  2. クラススコープ内の任意の 1 ノードで、対象のボリュームを起動します。

    # sdxvolume -N -c Class1 -v Volume1
  3. 手順 2.でボリュームを起動したノードで、fsck(1M) コマンドを実行します。

    fsck(1M) コマンドでは、対象のボリュームのデバイス特殊ファイルを指定します。

    # fsck -F ufs -y /dev/sfdsk/Class1/rdsk/Volume1

    参照

    fsck(1M) コマンドのオプションなどの詳細については、Solaris のマニュアルを参照してください。

  4. 手順 2.でボリュームを起動したノードで、対象のボリュームを停止します。

    # sdxvolume -F -c Class1 -v Volume1

(4) ルートボリューム上のUFSファイルシステムを修復したい。

説明

ルートクラスのボリュームに作成された UFS ファイルシステムを fsck(1M) コマンドで修復する手順を説明します。

対処

a. / (ルート)、/usr、/var 以外のファイルシステムの場合

/ (ルート)、 /usr、 /var 以外のファイルシステムの場合、ローカルクラスのボリュームに作成されたファイルシステムの場合と手順は同じです。

手順の詳細については、「(2) ローカルボリューム上の UFS ファイルシステムを修復したい。」を参照してください。

b. / (ルート)、/usr、/var ファイルシステムの場合

システム起動時に"Run fsck manually (fsck -F ~)"といった fsck(1M) コマンドの実行を要求するメッセージが出力された場合は、メッセージに従って fsck(1M) コマンドを実行してください。

以下では、CD-ROM 装置からブートして、/ (ルート)、/usr、/var ファイルシステムを fsck(1M) コマンドで修復する手順を説明します。CD-ROM 装置からブートして、ミラーリングしていた物理スライスのうちの 1 つに対して fsck(1M) コマンドを実行し、その物理スライスのデータを他の物理スライスにコピーします。

  1. CD-ROM 装置からシステムをブートします。

    注意

    • CD-ROM 装置からブートする Solaris のバージョンは、修復する Solaris と同じバージョンにしてください。

    • GDS でミラーリングしているシステムにおいて、CD-ROM 装置からブートして不当な操作を行うと、ミラーリング状態が破壊される場合があります。

      必ず本手順に沿って操作を行い、本手順にない操作はできるだけ避けてください。

    • 復旧作業に伴い、物理スライス上のファイルシステムをマウントする場合には、不当な書込みを防ぐために、読取り専用でマウントすることを推奨します。

  2. / (ルート)、/usr、/varファイルシステムのうち、修復したいファイルシステムの物理スライス名を調べて記録します。

    注意

    多重度 3 以上のミラーリング構成の場合、副側の物理スライスは複数存在します。

    # eeprom nvramrc | grep sdx-root-slice
    devalias sdx-root-slice-1 /devices/pci@1f,4000/scsi@3/sd@0,0:a,raw
    devalias sdx-root-slice-2 /devices/pci@1e,4000/scsi@3/sd@0,0:a,raw
    # eeprom nvramrc | grep sdx-usr-slice
    devalias sdx-usr-slice-1 /devices/pci@1f,4000/scsi@3/sd@0,0:g,raw
    devalias sdx-usr-slice-2 /devices/pci@1e,4000/scsi@3/sd@0,0:g,raw
    # eeprom nvramrc | grep sdx-var-slice
    devalias sdx-var-slice-1 /devices/pci@1f,4000/scsi@3/sd@0,0:b,raw
    devalias sdx-var-slice-2 /devices/pci@1e,4000/scsi@3/sd@0,0:b,raw

    この例では、物理スライスは以下です。

    / (ルート)の主側: /devices/pci@1f,4000/scsi@3/sd@0,0:a,raw
                副側: /devices/pci@1e,4000/scsi@3/sd@0,0:a,raw
          /usrの主側: /devices/pci@1f,4000/scsi@3/sd@0,0:g,raw
                副側: /devices/pci@1e,4000/scsi@3/sd@0,0:g,raw
          /varの主側: /devices/pci@1f,4000/scsi@3/sd@0,0:b,raw
                副側: /devices/pci@1e,4000/scsi@3/sd@0,0:b,raw

    参考

    /usr、/var ファイルシステムが存在しない構成の場合は、以下のように物理スライス名が表示されません。

    # eeprom nvramrc | grep sdx-usr-slice
    # eeprom nvramrc | grep sdx-var-slice
  3. 修復するファイルシステムの主側の物理スライスを指定して、fsck(1M) コマンドを実行します。

    3-1) 主側の物理スライスに対応する /dev/rdsk/cXtXdXsX の形式の特殊ファイル名を調べます。

    grep(1) コマンドの引数には、手順 2.で調べた主側の物理スライス名の末尾に ",raw" を付加したものを指定します。

    # ls -l /dev/rdsk | grep /devices/pci@1f,4000/scsi@3/sd@0,0:a,raw
    lrwxrwxrwx   1 root     root          45  Jan 21  18:09 c0t0d0s0
    -> ../../devices/pci@1f,4000/scsi@3/sd@0,0:a,raw
    # ls -l /dev/rdsk | grep /devices/pci@1f,4000/scsi@3/sd@0,0:g,raw
    lrwxrwxrwx   1 root     root          45  Jan 21  18:09 c0t0d0s6
    -> ../../devices/pci@1f,4000/scsi@3/sd@0,0:a,raw
    # ls -l /dev/rdsk | grep /devices/pci@1f,4000/scsi@3/sd@0,0:b,raw
    lrwxrwxrwx   1 root     root          45  Jan 21  18:09 c0t0d0s1
    -> ../../devices/pci@1f,4000/scsi@3/sd@0,0:a,raw

    この例では、主側の物理スライスの特殊ファイル名は以下です。

    / (ルート): /dev/rdsk/c0t0d0s0
          /usr: /dev/rdsk/c0t0d0s6
          /var: /dev/rdsk/c0t0d0s1

    3-2) 手順 3-1) で調べた特殊ファイルを指定して fsck(1M) コマンドを実行します。

    # fsck -F ufs -y /dev/rdsk/c0t0d0s0
    # fsck -F ufs -y /dev/rdsk/c0t0d0s6
    # fsck -F ufs -y /dev/rdsk/c0t0d0s1

    参照

    fsck(1M) コマンドのオプションなどの詳細については、Solaris のマニュアルを参照してください。

    fsck(1M) コマンドで修復できない場合は、本手順では復旧できません。

    この場合、「6.3.3 リストア手順 (システムがブートできない場合)」の手順に従ってファイルシステムのリストアを行ってください。

  4. ディスクのセクタサイズとシリンダサイズを調べて記録します。

    # prtvtoc /devices/pci@1f,4000/scsi@3/sd@0,0:a,raw
     ~
    * Dimensions:
    *     512 bytes/sector
    *     248 sectors/track
    *      19 tracks/cylinder
    *    4712 sectors/cylinder
     ~

    この例では、セクタサイズは 512 バイト、シリンダサイズは 4712 セクタ = 4712 × 512 バイトです。

  5. ディスクの先頭セクタ (VTOC域) を含む物理スライスを調べます。

    prtvtoc(1M) の出力結果において First Sector フィールドが 0 の物理スライスが、ディスクの先頭セクタを含んでいます。

    # prtvtoc /devices/pci@1f,4000/scsi@3/sd@0,0:a,raw
      ~
    *                          First     Sector    Last
    * Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
           0      2    00          0    409656    409655
           1      7    00     409656    307242    716897
           2      5    00          0   4117568   4117567
           3      3    01     737906    388648   1126553
           4     33    00     716898     21008    737905
           5      4    00    1126554    942734   2069287
           6      4    00    2069288   2048280   4117567
      ~

    この例では、Partition 0 の物理スライス (:a) が先頭セクタを含みます。

    参考

    Partition 2 はディスク全体に対応するパーティションです。

  6. fsck(1M) コマンドで修復した主側の物理スライスから副側の物理スライスにデータをコピーします。

    以下の手順に従ってコピーを実施します。

    • 物理スライスがディスクの先頭セクタを含まない場合は a. の手順

    • 物理スライスがディスクの先頭セクタを含む場合は b. の手順

    注意

    • 多重度 3 以上のミラーリング構成の場合、副側の物理スライスは複数存在します。すべての副側の物理スライスにデータをコピーしてください。

    • 手順 3. において fsck(1M) コマンドによる修復を行っていない主側のスライスは、コピーする必要はありません。

    1. 物理スライスがディスクの先頭セクタを含まない場合:

      コピー時間を短縮するために、dd(1M) コマンドの bs オプション (入出力ブロックサイズ) には、手順 4. で算出したシリンダサイズを指定します。

      # dd if=/devices/pci@1f,4000/scsi@3/sd@0,0:g,raw \
      of=/devices/pci@1e,4000/scsi@3/sd@0,0:g,raw bs=4712b
      # dd if=/devices/pci@1f,4000/scsi@3/sd@0,0:b,raw \
      of=/devices/pci@1e,4000/scsi@3/sd@0,0:b,raw bs=4712b
    2. 物理スライスがディスクの先頭セクタを含む場合:

      以下の手順を実施します。

      b-1) まず、物理スライスの先頭シリンダのみをコピーします。副側の先頭セクタ (VTOC域) を上書きしないように先頭セクタをスキップし、セクタ単位にコピーします。

      先頭セクタをスキップするため、dd(1M) コマンドの iseek オプションと oseek オプションには 1 を指定します。bs オプションには、手順 4. で調べたセクタサイズを指定します。count オプションには、手順 4. で算出したシリンダサイズ (単位は512バイトのブロック) から1引いた値を指定します。

      # dd if=/devices/pci@1f,4000/scsi@3/sd@0,0:a,raw \
      of=/devices/pci@1e,4000/scsi@3/sd@0,0:a,raw bs=512 \
      iseek=1 oseek=1 count=4711

      b-2) 次に、物理スライスの残りのシリンダをコピーします。

      コピー時間を短縮するために、dd(1M) コマンドの bs オプションには、手順 4. で算出したシリンダサイズを指定します。手順 6 の b-1) でコピーした先頭シリンダをスキップするため、iseek オプションと oseek オプションには 1 を指定します。

      # dd if=/devices/pci@1f,4000/scsi@3/sd@0,0:a,raw \
      of=/devices/pci@1e,4000/scsi@3/sd@0,0:a,raw bs=4712b \
      iseek=1 oseek=1
  7. システムを再起動します。

    # shutdown -g0 -i6 -y