RIGHT:[[Sun 関係覚え書き]]
//*ファイルシステムのオン・ザ・フライバックアップ
*参考文献 [#g16fb79d]
-Sun BigAdmin の
「Backing Up the Data of a File System on the Fly(By Joseph Gen)」
(http://www.sun.com/bigadmin/content/submitted/backup_filesystem.html)
より.
-UNIX USER 2002-04 p.148(UNIX 処方箋)
*バックアップ概要 [#v50c4dee]
Solaris OSでバックアップを取る際,
ファイルシステムは非アクティブでないといけない.
さもないと,出力は一致しないものになることがある.
(バックアップ元のデータとバックアップしたデータが一致したものに
なるとは限らない.)
ファイルシステムがアンマウントされていたり,
OS により書き込みがロックされている場合に,
ファイルシステムは非アクティブである.
Solaris OS では "fssnap" ユーティリティでオンラインバックアップができるが,
ファイルシステムを書き込みロックすることができなければ
うまくいかない.
一方,Solaris Volume Manager は,
オン・ザ・フライで他のファイルシステムへデータを転送するための
"橋渡し(bridge)" として使える.
これなら,いつでもデータをバックアップできる.
ここにファイルシステム "/test" を使った例を示す.
# df -k /test
FileSystem kbytes used avail capacity Mounted on
/dev/dsk/c0t2d1s3 50700783 39746386 10530839 80% /test
まず,"/test" ファイルシステムがマウントしている状態で,
そのファイルシステム上に "d101" という名前でメタデバイスを作成する.
# metainit -f d101 1 1 c0t2d1s3
次に,先ほど作った "d101" をサブミラーとする
One-Way ミラー(片肺)メタデバイスを "d100" という名前で初期化する.
# metainit d100 -m d101
# metastat d100
d100: Mirror
Submirror 0: d101
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 102961152 blocks
d101: Submirror of d100
State: Okay
Size: 102961152 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c0t2d1s3 0 No Okay
そして,新しい場所(ミラー先のスライス) c0t2d1s7 上に
もうひとつのメタデバイス "d102" を作成する.
新しいパーティションのサイズは d101 と同じにしておく必要がある.
# metainit d102 1 1 c0t2d1s7
d102: Concat/Stripe is setup
# metastat d102
d102: Concat/Stripe
State: Okay
Size: 102975488 blocks
Stripe 0:
Device Start Block Dbase
c0t2d1s7 0 No
メタデバイス "d102" を "d100" のサブミラーとして加えと,
再同期が自動的に走る.
# metattach d100 d102
再同期が正常に終了すると,Two-Way ミラーが出来上がっており,
バックアップの準備ができたことになる.
# metastat d100
d100: Mirror
Submirror 0: d101
State: Okay
Submirror 0: d102
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 102961152 blocks
d101: Submirror of d100
State: Okay
Size: 102961152 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c0t2d1s3 0 No Okay
d102: Submirror of d100
State: Okay
Size: 102961152 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c0t2d1s7 0 No Okay
これで,取りたいときにいつでもファイルシステムバックアップが
できるようになった.
バックアップする前には,2番目のメタデバイス "d102" をデタッチするか
オフラインにする必要がある.
デタッチするには
# metadetach d100 d102
とし,オフラインにするには
# metaoffline d100 d102
とする.
c0t2d1s7 にはデタッチした時点のデータがすべて含まれているので,
バックアップは "c0t2d1s7" 上のものをとることだけに
気をつけなければならない.
# ufsdump 0f /dev/rmt/0 /dev/md/rdsk/d102
バックアップが終わったあと,
すべてのメタデバイスを削除することもできるし,
後で使うために残しておくこともできる.
次のバックアップまでに,次のコマンドを実行しておかなければならない.
# metattach d100 d102
か
# metaonline d100 d102
そして,再同期が完了するまで待つ必要がある.
上記 2つの方法(デタッチとオフライン)の違いは,
前者のほうは,
"metaattach"コマンドをした後の同期に,後者のものより時間がかかり,
後者のほうは,
"metaonline" コマンドでファイルシステムをオンラインにするまで,
そのファイルシステムがリードオンリーになるということである.
(metastat での表示を見ると,
metaoffline をしたメタデバイスは「保守中」となるのに対して,
metadetach をしたメタデバイスは,サブミラーから外れて最下方に表示される.)
複数のファイルシステムに対して,
矛盾なくある時点のバックアップが必要なのであれば,
すべてのファイルシステムの 2番目のメタデバイスを同時にデタッチする必要がある.
そうすれば,ひとつずつバックアップができる.
*リストア手順 [#q9c450fd]
CDROM で miniroot をたちあげ作業する.
# tapes <-テープデバイスを作成
# mt -f /dev/rmt/0 rewind テープを巻き戻し
# newfs /dev/rdsk/c0t0d0s0 <-ファイルシステム作成
# fsck /dev/rdsk/c0t0d0s0 <-ファイルシステムチェック
# mount -F ufs /dev/dsk/c0t0d0s0 /mnt <-適当なところにマウント
# cd /mnt
# ufsrestore rf /dev/rmt/0 <-リカバリ
# rm restoresymtable <-ufsrestore コマンドが作成した作業ファイルを削除
この後,vfstab(/mnt/etc/vfstab) と system(/mnt/etc/system) を修正する.
system はメタデバイスを root ファイルシステムとして指定しているところを
コメントアウトしておく.
*rootdev:/pseudo/md@0,0,blk <-先頭に * を付与
最後に bootblk でブートブロックを書いてやる.