[solaris]システムバックアップリストア(ufsdump/ufsrestore テープ使用 SDS ミラーリング)

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本のディスクが死ぬ→過半数消滅⇒復帰できるかは割り振りの運次第

linux システムバックアップリストア(ext2/ext3 dump restore)

linux ext2/ext3ファイルシステム使用時のシステムバックアップリストア方法
こちらにメンテナンスされた(最新版の)文章があります。リンク先をご覧ください。
■ 前提条件

  • レスキューCD(インストールCD)を利用する
  • バックアップイメージは他サーバーのNFSエクスポート領域に配置
  • ファイルシステムはext2またはext3を使用

■ バックアップ
ローカルディスクの全ファイルシステムをバックアップ

# sync #念のため
# dump -0f – <ファイルシステムデバイス> | gzip -c > /backup/<イメージ名>

パーティション構造、lvm構造とかも記録しておく

#fdisk -l
#df
#cat /etc/fstab
# pvdisplay
# lvdisplay

■ リストア
1.インストールCDからブート
起動パラメータは

linux rescue       (レスキューモード)

ネットワークはメニューで設定しない。
後ほどコマンドで設定

# ifconfig eth0 ipaddr 192.168.1.xxx netmask 255.255.255.0

ファイルシステムはマウントしない
インストール済みLINUXを/mnt/sysimageに・・・   → スキップする
シェル起動完了


※ディスク交換した場合ディスクのパーティションを定義

# fdisk

/bootになるパーティションにはブートフラグを立てる。
lvm領域はタイプを8e(LinuxLVM)にする
lvm定義

# lvm pvcreate <デバイス>
# lvm vgcreate <vg名> <pvデバイスファイル>    ※vg名は以前のvg名とあわせる(vmlinuzの中に記録されている??)
# lvm lvcreate –size lv容量 –name lv名 <VG名>

ファイルシステム作成(+スワップ領域作成)

# mke2fs -j <ファイルシステムデバイス>    ※ラベルが設定されていた場合ラベルも設定する
# mkswap <ファイルシステムデバイス>

※上記作業中に中断(電源落とす)して、再開した場合
vgが有効化されていないので有効化する

# lvm vgchagne -ay


2.バックアップイメージを置いたNFS領域をマウント
/backup 以下にバックアップイメージを置いたNFS領域をマウント

# mkdir /backup
# mount -t nfs <NFSサーバーエクスポートディレクトリ> /backup

大抵のディストリビューションのrescueモードはnfsマウントしかできないはず・・・
(家庭用NASでsmbfsのみのものがよくあるので注意!)
3.リストア
”復旧させるファイルシステムのルートディレクトリ”に移動して、リストアする。
一番最初に、/にマウントするファイルシステムを/restoreにマウントし、リストア。その後、/boot などにマウントするファイルシステムを/restore以下に復活しているマウントポイントにマウントしてリストアする。
/tmpになるファイルシステムはリストアしないがrestoreコマンドで使用する(下記参照)ので/restore/tmpなどにマウントすると吉。

# mkdir /restore
# mount -t ext3 -o nouser_xattr <ファイルシステムデバイス> /restore/<従来のマウントポイント>
# cd /restore/<従来のマウントポイント>
# gzip -dc /backup/<バックアップイメージ> | restore -r -T <大容量ファイルが格納できるディレクトリ> -f –
(mountから繰り返し)
# sync

※mountするときは、ファイルシステムタイプを必ず指定すること。rescueモードでは自動的にファイルシステムタイプを認識しない。(よって、ext3でもタイプを指定しなければext2でマウントされてしまう → バックアップイメージが2G超だとrestoreがフリーズする)
※restore時に-Tオプションで大容量ファイルが格納できるディレクトリを指定する。1ファイルをバックアップイメージから抜き出すときに使用するため。この領域がなければrestoreは失敗する(restoreがデフォルトで使用するrescueモードの/tmpは小さい)。復旧予定のディスクの/tmpになるファイルシステムをマウントして、そのディレクトリを指定しておけば良い。
※nouser_xattrは拡張属性を無効にする(つけないとCentOS5で警告が出る)
4.各種設定変更
マウントの情報やらネットワークの情報を必要に応じて変更する。
# vi /etc/fstab
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
# vi /etc/sysconfig/network
# vi /etc/resolv.conf

など・・・


※ディスク交換した場合
5.ブートローダ(grub)のインストールgrubをインストール
chrootしてリストア先のgrubコマンドを直接実行できるようにする。KNOPPIXなどリストアするOSと違うディストリビューションのLiveCDを使用いる場合に有効。この場合chroot後/devにブロックデバイスファイルは当然存在しないので作成してあげディスクにアクセスできるようにする。

# chroot /restore
# MAKEDEV hda # SATAの場合はsda
# /usr/sbin/grub
grub> root (hd0,0)
grub> setup (hd0)
grub> quit


インストールCDをドライブから抜いて再起動。

# sync;sync;sync #←石橋を叩きたい数だけ(笑)
# exit

ハードウェアを交換した場合は再起動中のkudzuで質問に答えてハードウェア情報を更新しておくこと。