ここでは、次のタスクを実行する方法について説明します。
次の理由により、ルートプールのディスクの置き換えが必要になることがあります。
ルートプールが小さすぎるため、小さいディスクを大きいディスクに置き換えたい。
ルートプールのディスクに障害が発生している。非冗長プールでディスクに障害が発生してシステムが起動しない場合は、CD やネットワークなどの代替メディアから起動したあとでルートプールのディスクを置き換える必要があります。
ミラー化ルートプール構成では、代替メディアからの起動を行わずにディスク交換を試みることができます。zpool replace コマンドを使用すれば、障害が発生したデバイスを置き換えることができます。あるいは追加ディスクがある場合には、zpool attach コマンドを使用できます。追加ディスクの接続やルートプールディスクの切り離しの例については、この節に含まれる手順を参照してください。
一部のハードウェアでは、故障したディスクを交換するための zpool replace 操作を試みる前に、ディスクをオフラインにして構成解除する必要があります。次に例を示します。
# zpool offline rpool c1t0d0s0 # cfgadm -c unconfigure c1::dsk/c1t0d0 <Physically remove failed disk c1t0d0> <Physically insert replacement disk c1t0d0> # cfgadm -c configure c1::dsk/c1t0d0 # zpool replace rpool c1t0d0s0 # zpool online rpool c1t0d0s0 # zpool status rpool <Let disk resilver before installing the boot blocks> SPARC# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t0d0s0 x86# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t9d0s0 |
一部のハードウェアでは、交換用ディスクの装着後にそのディスクをオンラインにしたり再構成を行ったりする必要がありません。
交換用ディスクからの起動をテストできるように、また、交換用ディスクに障害が発生した場合に既存のディスクから手動で起動できるように、現在のディスクと新しいディスクの起動デバイスのパス名を特定する必要があります。次の手順の例では、現在のルートプールディスク (c1t10d0s0) のパス名は次のとおりです。
/pci@8,700000/pci@3/scsi@5/sd@a,0 |
交換用起動ディスク (c1t9d0s0) のパス名は次のとおりです。
/pci@8,700000/pci@3/scsi@5/sd@9,0 |
交換用ディスク (新しいディスク) を物理的に接続します。
新しいディスクに SMI ラベルが付けられていてスライス 0 があることを確認してください。
ルートプールに使用するディスクのラベルを変更する方法については、次のサイトを参照してください。
http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide
新しいディスクをルートプールに接続します。
次に例を示します。
# zpool attach rpool c1t10d0s0 c1t9d0s0 |
ルートプールのステータスを確認します。
次に例を示します。
# zpool status rpool pool: rpool state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scrub: resilver in progress, 25.47% done, 0h4m to go config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c1t10d0s0 ONLINE 0 0 0 c1t9d0s0 ONLINE 0 0 0 errors: No known data errors |
ディスクの再同期化が完了したら、新しいディスクにブートブロックを適用します。
次のような構文を使用します。
SPARC:
# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t9d0s0 |
x86:
# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t9d0s0 |
新しいディスクから起動できることを確認します。
たとえば、SPARC システムの場合、次のような構文を使用します。
ok boot /pci@8,700000/pci@3/scsi@5/sd@9,0 |
新しいディスクからシステムが起動した場合は、古いディスクを切り離します。
次に例を示します。
# zpool detach rpool c1t10d0s0 |
システムが新しいディスクから自動的に起動するように設定します。そのためには、eeprom コマンドまたは SPARC ブート PROM のsetenv コマンドを使用するか、PC BIOS を再設定します。
回復に利用できるようにルートプールのスナップショットを作成することができます。ルートプールのスナップショットを作成するための最適な方法は、ルートプールの再帰的なスナップショットを実行することです。
次の手順に従って、再帰的なルートプールスナップショットを作成し、そのスナップショットをリモートシステムでプール内のファイルとして保存します。ルートプールで障害が発生した場合には、NFS を使ってリモートデータセットをマウントし、そのスナップショットファイルを受信して作成し直したプール内に格納することができます。代わりに、ルートプールスナップショットをリモートシステムのプール内の実際のスナップショットとして保存することもできます。修復対象のシステムを Solaris OS ミニルートから起動する一方で ssh を構成または rsh を使用する必要があるので、リモートシステムとのスナップショットの送受信は、やや複雑です。
ルートプールスナップショットをリモートで保存して回復する方法、およびルートプールの回復に関する最新情報については、次のサイトを参照してください。
http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide
ファイルまたはスナップショットとしてリモートに格納されたスナップショットの内容を確認することは、ルートプールを回復する際の重要なステップです。プールの構成が変更された場合や Solaris OS をアップグレードした場合など、定期的にいずれかの方法を使ってスナップショットを作成し直すべきです。
次の手順では、zfsBE ブート環境からシステムを起動します。
リモートシステム上で、スナップショットを格納するためのプールとファイルシステムを作成します。
次に例を示します。
remote# zfs create rpool/snaps |
ファイルシステムをローカルシステムと共有します。
次に例を示します。
remote# zfs set sharenfs='rw=local-system,root=local-system' rpool/snaps # share -@rpool/snaps /rpool/snaps sec=sys,rw=local-system,root=local-system "" |
ルートプールの再帰的なスナップショットを作成します。
local# zfs snapshot -r rpool@0804 local# zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 6.17G 60.8G 98K /rpool rpool@0804 0 - 98K - rpool/ROOT 4.67G 60.8G 21K /rpool/ROOT rpool/ROOT@0804 0 - 21K - rpool/ROOT/zfsBE 4.67G 60.8G 4.67G / rpool/ROOT/zfsBE@0804 386K - 4.67G - rpool/dump 1.00G 60.8G 1.00G - rpool/dump@0804 0 - 1.00G - rpool/swap 517M 61.3G 16K - rpool/swap@0804 0 - 16K - |
ルートプールのスナップショットをリモートシステムに送信します。
次に例を示します。
local# zfs send -Rv rpool@0804 > /net/remote-system/rpool/snaps/rpool.0804 sending from @ to rpool@0804 sending from @ to rpool/swap@0804 sending from @ to rpool/ROOT@0804 sending from @ to rpool/ROOT/zfsBE@0804 sending from @ to rpool/dump@0804 |
この手順では、次の条件を前提としています。
ZFS ルートプールを回復できない。
ZFS ルートプールのスナップショットがリモートシステム上に保存されており、NFS で共有されている。
手順はすべてローカルシステム上で実行します。
CD/DVD またはネットワークから起動します。
SPARC: 次のいずれかのブート方法を選択します。
ok boot net -s ok boot cdrom -s |
-s オプションを使用しない場合は、インストールプログラムを終了する必要があります。
x86: DVD またはネットワークから起動するオプションを選択します。その後、インストールプログラムを終了します。
リモートのスナップショットのデータセットをマウントします。
次に例を示します。
# mount -F nfs remote-system:/rpool/snaps /mnt |
ネットワークサービスを構成していない場合は、remote-system の IP アドレスを指定する必要があります。
ルートプールのディスクが置き換えられ、ZFS で使用可能なディスクラベルを含んでいない場合は、ディスクのラベルを変更する必要があります。
ディスクのラベル変更の詳細は、次の Web サイトを参照してください。
http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide
ルートプールを再作成します。
次に例を示します。
# zpool create -f -o failmode=continue -R /a -m legacy -o cachefile= /etc/zfs/zpool.cache rpool c1t1d0s0 |
ルートプールのスナップショットを復元します。
この手順には時間がかかることがあります。次に例を示します。
# cat /mnt/rpool.0804 | zfs receive -Fdu rpool |
-u オプションを使用すると、復元されたアーカイブは zfs receive 処理の完了時にマウントされません。
ルートプールのデータセットが復元されていることを確認します。
次に例を示します。
# zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 6.17G 60.8G 98K /a/rpool rpool@0804 0 - 98K - rpool/ROOT 4.67G 60.8G 21K /legacy rpool/ROOT@0804 0 - 21K - rpool/ROOT/zfsBE 4.67G 60.8G 4.67G /a rpool/ROOT/zfsBE@0804 398K - 4.67G - rpool/dump 1.00G 60.8G 1.00G - rpool/dump@0804 0 - 1.00G - rpool/swap 517M 61.3G 16K - rpool/swap@0804 0 - 16K - |
ルートプールの BE に bootfs プロパティーを設定します。
次に例を示します。
# zpool set bootfs=rpool/ROOT/zfsBE rpool |
新しいディスクに起動ブロックをインストールします。
SPARC:
# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t1d0s0 |
x86:
# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t1d0s0 |
システムを再起動します。
# init 6 |
この手順では、ルートプールの既存のスナップショットを利用できることを前提としています。この例は、それらはローカルシステム上で使用可能となっています。
# zfs snapshot -r rpool@0804 # zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 6.17G 60.8G 98K /rpool rpool@0804 0 - 98K - rpool/ROOT 4.67G 60.8G 21K /rpool/ROOT rpool/ROOT@0804 0 - 21K - rpool/ROOT/zfsBE 4.67G 60.8G 4.67G / rpool/ROOT/zfsBE@0804 398K - 4.67G - rpool/dump 1.00G 60.8G 1.00G - rpool/dump@0804 0 - 1.00G - rpool/swap 517M 61.3G 16K - rpool/swap@0804 0 - 16K - |
システムをシャットダウンし、フェイルセーフモードで起動します。
ok boot -F failsafe ROOT/zfsBE was found on rpool. Do you wish to have it mounted read-write on /a? [y,n,?] y mounting rpool on /a Starting shell. |
ルートプールの各スナップショットをロールバックします。
# zfs rollback rpool@0804 # zfs rollback rpool/ROOT@0804 # zfs rollback rpool/ROOT/zfsBE@0804 |
再起動してマルチユーザーモードにします。
# init 6 |