Solarisのシステムバックアップおよびにリストア方法
■前提条件
- 復旧時にインストールCDを用いてCDブートする
- 復旧時にミラーリングまでは復元しない(シングルディスクで復旧→ミラーリング
- バックアップイメージはテープに保存
- ファイルシステムはUFS
- フルバックアップのみ
■ バックアップ
ローカルディスクのマウントしている全ファイルシステム(スライス)をテープにバックアップ。metadbなどはバックアップしない。
# mt -f /dev/rmt/0 rewind
# ufsdump 0uf /dev/rmt/0n /dev/md/rdsk/d10
# ufsdump 0uf /dev/rmt/0n /dev/md/rdsk/d40
# ufsdump 0uf /dev/rmt/0n /dev/md/rdsk/d60
# ufsdump 0uf /dev/rmt/0n /dev/md/rdsk/d70
# ufsdump 0uf /dev/rmt/0n /dev/md/rdsk/d80
■リストア
1.インストールCDからシングルユーザモードでブートする
起動途中(POSTやメモリ初期化、ハードウェア検索が終わったあと、boot ~ optionの表示があった後)でSTOP+A(TeraTermからのシリアル接続の場合はAlt+B)を押して、OKプロンプトに移行し、以下を入力
{1} ok boot cdrom -sr
2.ディスクスライスの設定
シングルユーザモードで起動したら、まず最初にやるのはディスクスライスの設定(スライスっていうのはsolarisぐらい??)。
ミラーリングする場合は2つのディスクでシリンダーの開始位置終了位置をピッタリ合わせる必要あり。
# format
format> type
AVAILABLE DISK SELECTIONS:
0. c1t0d0 (SUN72G cy1 14087 alt 2 hd 24 see 424)
/pci@1c,600000/scsi@2/sd@0,0
1. c1t1d0 (SUN72G cyl 14087 alt 2 hd 24 see 424)
/pci@lc,600000/scsi&/sd@1,0
specify disk (enter its number) : 0
selecting c1t0d0
:(省略)
19. SUN72G
20. Other
specify disk type (enter its nubber) [19]:
selecting c1t0d0
[disk formatted]
format> partition
partion> 0
Enter partion id tag [root]:
Enter partion permission flag[vm] :
Enter nev starting cyl [0]
Enter partion size[] ←ここは「1234e」とシリンダーの終了位置を
入力したほうが両ディスクでサイズをそろえやすい
:(省略)
partition> print
current partition table (original) :
Total disk cylinders available: 14087+2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 root wm 0 – 2060 10. 00GB (2061/0/0) 20972736
1 swap wu 2061 – 3091 5. 00GB (1031/0/0) 10491456
2 backup vm 0 – 14086 68. 35GB (14087/0/0) 143349312
3 usr wm 3092 – 5152 10. 00GB (2061/0/0) 20972736
4 unassigned wm 5153 – 5157 24. 84MB (5/0/0) 50880
5 unassigned wm 5158 – 7218 10. 00GB (2061/0/0) 20972736
6 var vm 7219 – 9279 10. 00GB (2061/0/0) 20972736
7 home vm 9280 – 14086 23, 32GB (4807/0/0) 48916032
3.ファイルシステム作成(フォーマット)
マウントして使用するスライスにファイルシステムを作成してフォーマット。
+metadb領域も。ミラーリングする場合はもう片方のmetadb領域もファイルシステム作成する
# newfs /dev/rdsk/c1t0d0s0
# newfs /dev/rdsk/c1t0d0s3
# newfs /dev/rdsk/c1t0d0s4
# newfs /dev/rdsk/c1t1d0s4
# newfs /dev/rdsk/c1t0d0s5
# newfs /dev/rdsk/c1t0d0s6
4.テープの内容確認(わかっている場合はやらなくてもよい)
テープデバイスにnをつけてufsrestoreを連続実行すれば、いちいちテープに対する操作をしなくてもよい
# mt -f /dev/rmt/o rewind
#
# ufsrestore if /dev/rmt/0n
ufsrestore > ls
.:
2 *./ 116 kernel/ 128 sbin/
2 *‥/ 125 1ib 131 tmp/
1160 . sh_history 3487 logfile 3486 dump.ksh
9 bin 3 lost+found/ 3485 dump.log
6773 cdrom/ 126 mnt/ 4 usr/
10 dev/ 6771 net/ 5 var/
12 devices/ 3488 nohup.out 7767 vol/
14 etc/ 8 opt/ 6772 xfn/
6 export/ 476 platform/
1193 home/ 127 proc/
ufsrestore > what
Dump date: Mon Dec 29 17:13:25 2009
Dumped from: the epoch
Level 0 dump of / on test:/dev/md/dsk/d10
Label: none
ufsrestore > quit
#
# ufsrestore if /dev/rmt/0n
ufsrestore > ls
:(省略・繰り返し)
# mt -f /dev/rmt/0 rewind
5.ファイルシステムリストア
/mntにファイルシステムをマウントしてリストアする。
ufsrestoreするときのテープデバイスの指定にnを忘れぬこと(どこまでやったかわからなくなる)。
またアンマウントする前にsyncすること。
# mount /dev/dsk/c1t0d0s0 /mnt
# cd /mnt
# ufsrestore rf /dev/rmt/0n
# rm restoresymtable
# sync;sync;sync
# cd
# umount /mnt
# fsck /dev/dsk/c1t0d0s0
:(省略・繰り返し)
6.マウントテーブル変更(ミラーリング環境のみ)
ルートファイルシステムをマウントして、/etc/vfstabの内容を変更する。理由はマウントするデバイスファイルがミラーリング側のデバイスファイルになっているから(今回はミラーリングせずにリストアする(後にミラーリングしなおし))
/dev/md/dsk/d10 → /dev/dsk/c1t0d0s0
/dev/md/rdsk/d10 → /dev/rdsk/c1t0d0s0
# mount /dev/dsk/c1t0d0s0 /mnt
# cp -p /mnt/etc/vfstab /mnt/etc/vfstab.bak
# export TERM=vt100 ←シリアル接続でteraterm使っているときなど
# vi /mnt/etc/vfstab
:(省略)
/dev/dsk/c1t0d0s0 /dev/rdsk/c1t0d0s0 / ufs 1 no –
:(省略)
7.ミラーリング(ソフトウェアRAID)解除
ミラーリングを定義しているファイルの内容を消して、ミラーリングのサービスを起動しないようにする。
ミラーリングを定義しているファイルは2つ
- /etc/lvm/md.cf
- /etc/lvm/mddb.cf
/etc/lvm/md.cfはヘッダーの2行だけ残して、その他の内容を消す
# cp -p /mnt/etc/lvm/md.cf /mnt/etc/lvm/md.cf.bak
# head -n 2 /mnt/etc/lvm/md.cf.bak > /mnt/etc/lvm/md.cf
/etc/lvm/mddb.cf は「* Begin MDD root info (do not edit)」から「* End MDD root info (do not edit)」までの行の内容を消す
# cp -p /mnt/etc/lvm/mddb.cf /mnt/etc/lvm/mddb.cf.bak
# grep -n “Begin MDD root info” /mnt/etc/lvm/mddb.cf
79:* Begin MDD root info (do not edit)
# head -n 78 /mnt/etc/lvm/mddb.cf.bak > /mnt/etc/lvm/mddb.cf
8.metadbの内容消去
上記3で既にしているが、念のため・・・
# newfs /dev/rdsk/c1t0d0s4
# newfs /dev/rdsk/c1t1d0s4
9.ブートローダインストール
最後の仕上げ。
ブートローダをインストールする。これを忘れると起動しないので必ず実行すること。
# installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c1t0d0s0
# sync;sync;sync
10.後片付け
# umount /mnt
# mt -f /dev/rmt/0 offline
11.OS停止
リブートせずにいったんokプロンプトに戻る
shutdown -y -g0 -i0
OSが停止したらCD-ROMを取り出す
12.OS起動
念のため-rオプションでデバイスファイルを再作成してOSを起動する
{1} ok boot -r
13.metadb情報削除
OSが起動したら、中途半端に残っているmetadbの情報を削除する
# metadb -i
フラグ 最初のブロック ブロック数
F M p 16 未知 /dev/dsk/c1t1d0s4
a p 1 8208 8192 /dev/dsk/c1t1d0s4
# metadb -f -d /dev/rdsk/c1t1d0s4
以上。
ミラーリング構築に関しては別記事で。
# metadbの中に、meta情報が過半数以上ないと復帰できないんやったら意味ないやん
# 2本のうち1本のディスクが死ぬ→過半数消滅⇒復帰できるかは割り振りの運次第