何をしたいかというと…
ということである
新しくディスクをつけて認識させると(ハードディスク付属の説明書に従う)
ディスクに名前がついている
ここでは,2つのディスクを "c3t0d0"と"c3t1d0"とする
以下,Solaris8が入っている SUN Enterprise450で行なったときのメモである
ミラーリングのため,2つのディスクを全く同じに設定する
ミラーリングに必要なのでデータベース用のパーティションを用意する(今回はs7)
# format (ここでディスクを選択できる状態になるので,選ぶ) FORMAT MENU: disk - select a disk type - select (define) a disk type partition - select (define) a partition table current - describe the current disk format - format and analyze the disk repair - repair a defective sector label - write label to the disk analyze - surface analysis defect - defect list management backup - search for backup labels verify - read and display labels save - save new disk/partition definitions inquiry - show vendor, product and revision volname - set 8-character volume name !<cmd> - execute <cmd>, then return quit (上記のようなメニューが表示されるので,partitionと入力する) (2つのディスクをCylinders単位で同じサイズに切る) (↓こんな感じに設定しました.Part7がミラーリング設定に使う箇所) partition> print Current partition table (unnamed): Total disk cylinders available: 48120 + 2 (reserved cylinders) 目的 メタデバイス名 Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 2748 1.95GB (2749/0/0) 4096010 / d11,d12 -> d10 1 swap wu 2749 - 4123 1000.37MB (1375/0/0) 2048750 swap d21,d22 -> d20 2 backup wu 0 - 48119 34.19GB (48120/0/0) 71698800 3 unassigned wm 4124 - 5498 1000.37MB (1375/0/0) 2048750 /tmp d31,d32 -> d30 4 var wm 5499 - 12371 4.88GB (6873/0/0) 10240770 /var d41,d42 -> d40 5 usr wm 12372 - 16495 2.93GB (4124/0/0) 6144760 /usr d51,d52 -> d50 6 unassigned wm 16496 - 47834 22.27GB (31339/0/0) 46695110 /export2 d61,d62 -> d60 7 unassigned wm 47835 - 48119 207.35MB (285/0/0) 424650 State Database
両方のディスクとも(t0とt1),newfs して fsck する
s2はディスク全体を表すのでいじらない
# newfs /dev/rdsk/c3t0d0s1 # newfs /dev/rdsk/c3t0d0s3 # newfs /dev/rdsk/c3t0d0s4 # newfs /dev/rdsk/c3t0d0s5 # newfs /dev/rdsk/c3t0d0s6 # newfs /dev/rdsk/c3t0d0s7 # newfs /dev/rdsk/c3t1d0s1 〜 s7 (s2除く) # fsck /dev/rdsk/c3t0d0s1 〜 s7 (s2除く) # fsck /dev/rdsk/c3t1d0s1 〜 s7 (s2除く)
metadbをする
# metadb -a -f -c 2 c3t0d0s7 c3t1d0s7 # metadb (状態を見る) フラグ 最初のブロック ブロックカウント a m pc luo 16 1034 /dev/dsk/c2t0d0s0 a pc luo 16 1034 /dev/dsk/c2t1d0s0 a pc luo 16 1034 /dev/dsk/c2t2d0s0 a pc luo 16 1034 /dev/dsk/c2t3d0s0 a u 16 1034 /dev/dsk/c3t0d0s7 a u 1050 1034 /dev/dsk/c3t0d0s7 a u 16 1034 /dev/dsk/c3t1d0s7 a u 1050 1034 /dev/dsk/c3t1d0s7
matainitをする
# metainit -f d61 1 1 c3t0d0s6 (マウントしているデバイスの場合は -f をつけるらしい) # metainit d62 1 1 c3t1d0s6 # metainit d60 -m d61
ここまでやったら /etc/vfstabを書き換える [実際にマウントしない場合は書き直さない]
#/dev/dsk/c0t0d0s3 /dev/rdsk/c0t0d0s3 /usr ufs 1 no - (古い /usrをコメントアウト) /dev/md/dsk/d30 /dev/md/rdsk/d30 /usr ufs 1 no - (新しい /usrを追加)
reboot [マウントし直さなくてよい場合は必要ない]
metaatach d60 d62 metastat (状態を見るコマンド)
これらを s0(d10), s1(d20), s3(d30), s4(d40), s5(d50), s6(d60) に対して行なった
metadetach -f d60 d62 metaclear d62 metaclear d61 metaclear d60 (resync が終わっていないと実行できない)
念のためシャットダウンするときに同期をとるようにする
/etc/rc0 等 の Unmount file systems. の項目にd10〜d60を書き加える
ハードリンクされているので 1つのファイルを書き換えればいい
# Unmount file systems. /usr, /var, /var/adm, /var/run are not unmounted by # umountall because they are mounted by rcS (for single user mode) rather than # mountall. If this is changed, mountall, umountall and rcS should also change. /usr/sbin/metasync d10 (←追加) … /usr/sbin/metasync d60 (←追加) /sbin/sync /sbin/sync /sbin/sync /sbin/sync /sbin/sync /sbin/sync
今回 swap は d20 である
vfstabを変更する
#/dev/dsk/c0t1d0s1 - - swap - no - (古いswapをコメントアウト) /dev/md/dsk/d20 - - swap - no - (新しいswapを追加) reboot swap -l (状態を見る)
dumpとrestoreを使って,中身を新しいほうにコピーする
/tmpの移行は中身がないので楽
# vi /etc/vfstab (reboot) # chmod 777 /tmp
/, /var, /usr に対して ufsdump & ufsrestore を使う
(/var: /dev/dsk/c0t1d0s4 -> /dev/md/dsk/d40) # mkdir -p /mnt/tmpvar # mount /dev/md/dsk/d40 /mnt/tmpvar (新しいディスクをマウント) # cd /mnt/tmpvar # ufsdump 0f - /dev/dsk/c0t1d0s4 | ufsrestore xf - (ディスク内容のコピー) # cd / # umount /mnt/tmpvar (新しいディスクをアンマウント) # rmdir /mnt/tmpvar # vi /etc/vfstab (起動時のマウント状態の設定) (reboot)
ルートパーティションが d10の場合
# metaroot d10
を実行する
実際に処理を行なわず,実行した場合の処理内容だけを出力する場合は次のコマンド
# metaroot -n d10
/etc/system から次の行を削除してください:
・・・
/etc/system に次の行を追加してください:
・・・
/etc/vfstab から次の行を削除してください:
・・・
/etc/vfstab に次の行を追加してください:
・・・
という指示が出るので "metaroot d10"が心配だったら手動で実行
また,失敗した場合なども上記の逆に編集すればよい
古いディスクの内容はmetarootコマンドで書き直されるのだが
新しいディスクのほうも同様に書き直さないと正しく起動しない
新しいディスクをどこか適当な場所にマウントして,/etc/system, /etc/vfstabをコピーしておく
これをやっておかないと
とりあえず起動はしてくれたのでどうにか対処可能だったが
新しいディスクが書き込み不可でマウントされるという中途半端でよろしくない状態になる…
/usr/sbin/installboot をそのまま実行するとエラーが出る場合は
/usr/sbin/installbootファイルの dd のところに /usr/binというPATHをつける
ブートブロックを新しいディスクに作る
以下のような雰囲気でコマンドを実行する
引数1が"bootblk"の場所で,引数2が新しいルートパーティションである
# installboot /usr/platform/sun4u/lib/fs/ufs/bootblk /dev/md/rdsk/d10 # installboot /usr/platform/sun4u/lib/fs/ufs/bootblk /dev/rdsk/c{controller}t{target}d{LUN}s{partition #} # installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c0t2d0s0
ここまでやったら古いルートパーティションの入っているディスクを外さずに再起動
新しいディスクをマウントした状態できちんと起動してくれれば,第一段階はOK
ここまでだと
古いディスクの"bootblk"を読み込んでから新しいディスクをマウントしている状態 (だと思う)
古いディスクを外して,新しいディスクだけで起動するようにする
ということで,シャットダウンして古いディスクを外す
シングルモードに移行するか,Stopキーを押しながら"a"を押すと,"ok"と書かれたプロンプトが現れる
詳しくは別ファイル参照
ok probe-scsi-all (SCSIディスクの認識)
ok show-disks (ディスクを選択してパス文字列をコピー)
ok nvalias newdisk [Ctrl-y] (パス文字列を貼り付けて"newdisk"という名のエイリアスを作成)
ok boot newdisk ("newdisk"というエイリアスから起動)
起動したら成功
普通に起動したときに"newdisk"から起動するようにする
ok setenv boot-devices newdisk
ok boot
またまた起動したら成功.めでたし.
ufsdump 0cuf /dev/rmt/0m /dev/rdsk/c0t3d0s0
ufsrestore if /dev/rmt/0m
パ−ティション /var を /mnt にコピ−する例
/dev/dsk/c0t3d0s7 は /var にマウントされているとする
# cd /mnt # ufsdump 0f - /dev/rdsk/c0t3d0s7 | ufsretore xf -
内蔵ディスクの内容を新しいディスクにコピー
# /usr/lib/fs/ufs/ufsdump 0f - / | (cd /mnt; \ /usr/lib/fs/ufs/ufsrestore rf -)
ディスク交換 /dev/dsk/c0d0s6 を /dev/dsk/c0d1s6 に変える
# mount /dev/dsk/c0d1s6 /a # cd /a # ufsdump 0f - /dev/dsk/c0d0s6 | ufsrestore xf - # cd / # umount /a
ufsdumpで起動diskをcopyする手順
# cd /mnt/root/ # ufsdump 0ucf - /dev/dsk/c0t0d0s0 | ufsrestore rf -