そろそろメインのKVMホストをMONDOでバックアップしようとinit 1 でシングルユーザーにしてmondoarchive をやっても最後の方で
I cant find the boot catalog directory 'syslinux'! になる。google先生に聞いても答えが得られない。
yumでmondo関連をremoveし、再インストールをしてみたが、状況は変わらない。
途方に暮れ、もう一度インストールし直そうと思い
# yum list installed | grep mondo
でインストールされているものを調べると
afio.i386 2.5-1.rhel6 @mondorescue
buffer.i386 1.19-4.rhel6 @mondorescue
mindi.x86_64 3.0.1-1.rhel6 @mondorescue
mindi-busybox.x86_64 1.21.1-1.rhel6 @mondorescue
mondo.x86_64 3.2.1-1.rhel6 @mondorescue
perl-MondoRescue.noarch 3.2.1-1.rhel6 @mondorescue
ありゃー、afioとbufferが32bitになっている。(原因は前にこのホストをリストアした時に32bit を使っていた。)
# yum remove afio buffer mindi mindi-busybox mondo perl-mondoRescure
とアンインストールし、
# yum clean all
で、念のためキャッシュを消し、さらに念のため再起動をした。(多分ここまでやる必要は無いと思うが)
そして、再インストール
# yum install afio buffer mindi mindi-busybox mondo perl-mondoRescure
でもって、mondoarchive をインターラクティブモード(引数を与えなければ、このモードになる)
無事成功。
なので、
# init 1
でシングルユーザーにして
# mondoarchive
で無事終わった。
めでたし、めでたし
mondoarchiveからバックアップしたデーターDVDや /var/cache/mindi/mondorescue.isoから作成したCDROMでカーネルパニックになる原因が分った。結論は
mindi と mindi-busybox が32ビットになっていた。この原因も、最初に参考にしたWEBは32ビットだったので、その際にインストールされ、mondo を64ビットにした際に、そのまま mondo のみが 64ビットになり、前の二つは32ビットのままインストールされてしまい、悪いことにこのままバックアップが取れてしまい、又、データーとしては使えるので、以前にテストした時に/var/cache/mindi/mondorescue.isoから作成したCDROMでリストアが出来てしまったので、原因がなかなか解らず、苦労した。
# yum remove mondo mindi mindy-busybox
# yum install mondo mindi mindy-busybox
とやって64ビットを入れ、バックアップを取りDVDから立ち上げたら問題なくOSが立ち上がった。リストアはOSさえ立ち上がれば以前と同じはずなのでやっていない。
PS:だからパニックになった時
/init: error while loading shared libraries: libm.so.6:
cannot open shared object file: No such file or directory
万が一使用中の250GBのSSDが壊れたときの為に、新しいHDDでリストアをやってみます。
SSDがなかったので、500GBのHDDですべてのパーティションを消去してやってみました。もちろんカーネルパニックの出ないV3.0.0-r3332を使います。
パーティションの設定までmondoにまかせっきりだとうまくいかなかったので、最低限250GBのSSDと同じ三つのパーテイションを同じサイズで作ります。(500GBなので残りは未使用)
mondoのブートCDを使い、expertを入力するとコマンドプロンプトで止まりますので
# fdisk -u /dev/sda
Pでパーティションを確認し、もしあれば消去します。
その後、n、p、1、開始ブロック、終了ブロック、
同じようにパーティションの2と3を作ります。
その後2と3のファイルタイプをLVMにするためにt、パーティション番号、8e でLVMにしておきます。
PV,VG,LVは作らずそのままで終了。
後で出てきますが本来パーティションの1にブートフラグを付けて置くこと。
一様、パーティションの1をフォーマット
# mkfs.ext4 /dev/sda1
そして mondorestore と打ち込んでリストアをスタート、
Interractivelyを選びEnter
DVD Disksを選びEnter
mountlist(fstab)が表示されるが全くのデタラメ、何がいけないかと言うと私が /dev/sda に作成している lvm が filetype と mount point とも lvm として入っている。
それ以外は良さげだが TABキーと↓キーでこれらをこれらを全部 delete し(/以外)。OK を選びEnter (その際/のサイズを確認しておく事、もし違っていたらdeleteし、新たに作る事、私はSWAP領域も消した。無くても後から作れる。ブートする事が一番大事)
Are you sure ......とmountlistを保存していいかと聞いてくるので Yes (ここではパーティションは変えないと言っている)
Do yu want to erase and partitions your harddrives? はNo パーティションは作ってある
Do yu want to format your harddraives ? も No フォーマットしてある
Could not mount device(s)
/dev/Data/Kvm-Backupと表示され Abort するかと聞いているので No を選びEnter
注釈:これは原因がある。このCDを作ったときの名は確かにエラーに表示された名前だったが、今は KvmBackup と名前が変更になっているので
Restoreするかと聞いてくるので Yes を選びEnter
データーディスクであるDVD #1 を入れろとくるので、作成したエラーでカーネルパニックになるDVDを挿入(データーとしては使える)
やっぱりSSDより倍位時間がかかった。
Initialize the boot loader は Yes
Regenerate your initrd は Yes とすると
You'll now be chrooted under your
future / partition.
Go under /boot and rebuild your init(rd|ramfs) with
mkinitrd -f -v initrd-2.x.y.img 22.x.y. e.g.
or initramfs, dracut, .... then type exit to finish
# cd /boot
# mkinitrd initrd-2.6.32-573.el6.x86_64.img 2.6.32-573.el6.x86_64
でinitrdを作っておく、(これが必要かは定かでない、私は後でやる dracut の動きが分からなかったので一様やった。)
つづいてinitramfsを作るために
# dracut
ありゃーinitramfs-2.6.32-573....imgを作ってくれてない何でー?
いろいろ思案していくうちにもしかしてと思い現在のカーネルを調べる
# uname -r
ははー 2.6.32-504 を使ってる。そうか、このブータブルCD作ったときは2.26.32-504だったんだ。
それじゃーバージョン指定(その前にオリジナルのファイルはrename してある)
# dracut initramfs-2.6.32-573.el6.x86_64.img 2.6.32-573.el6.x86_64
で作ってくれた。いよいよ再起動
CDROMドライブを外したらHDDからブートする筈。ありゃーウンでもスンでもないぞ。
これは私がよくやる落ち込み、HDDを入れ替えているのでBIOSが元々バックアップ用についているHDDからのブートになっている。
これを直し、再起動。あやーまだウンでもスンでもない。そこでやっとsdaにブートフラグを付け忘れている事に気がついた。
fdiskからブートフラグを付け、またも再起動、今度は
Missing Operation system だと!!
今度は手持ちのubuntuのUSBメモリーからブート(意味は無い、CDより早いだけ)それで
# su - 私はrootのパスワードを設定rootになれる
パスワードを入力後 root になる
# mount /dev/sda1 /t1(このディレクトリーは作ってあった)
# chroot /t1 でsda1をルートにする
# cd /boot
# ls -la . で一様ファイル群を調べる。
# grub-install /dev/sda 私は/bootとルートは同じパーティション(違う時は --root-directory=/ が必要)
またまた、再起動。やったー。やっと起動した。ただしいっぱいエラーが出ている。これはLVM関連を作ってないし、swapもなくしたから。後から手動で作ればいい。今回はテストなので起動さえすれば目的は達成。
早速、作成したDVDでコンピューターを立ち上げますが、万が一リストアに失敗したら大変ですので、あらかじめバックアップを取っておきます。
私の場合はサブのコンピューターでしたので、最悪の場合メインのコンピューターから復元できますのでバックアップは取りませんでした。
なにはさて置き、BIOSを変更し、DVDドライブからブート出きるようにしてからブート。
初期画面が表示されEnterでリストアにしたいが、あれれ!!!カーネルパニックでOSが立ち上がらない。そう言えばこのコンピューター、CentOS6.7のLIVE DVDからもブートしなかったけ。でもおなじDVDは他のマザーボードでは問題無し、なので他のコンピューターから起動するもカーネルパニックになってしまう。エラーの内容は
/init: error while loading shared libraries: libm.so.6:
cannot open shared object file: No such file or directory
追記:この原因は mindi と mindi-busybox が32ビットだった。ここを参照。
だったら前に作成したCD-ROM(以前に /var/cache/mindiに有った mondorescure.iso を焼いたもの)で試した。
画面が出たら”expert”と入力しEnter。おーおー立ち上がったぞ。しかしいろいろエラーが表示されたが関係ないみたい。ともかくコマンドプロンプトが出た。そこで
mondorestoreと入れEnter。
Interractivelyを選びEnter
DVD Disksを選びEnter
mountlist(fstab)が表示されるが全くのデタラメ、何がいけないかと言うと私が /dev/sda に作成している lvm が filetype と mount point とも lvm として入っている。
それ以外は良さげだが TABキーと↓キーでこれらをこれらを全部 delete し(/以外)。OK を選びEnter (その際/のサイズを確認しておく事、もし違っていたらdeleteし、新たに作る事、私はSWAP領域も消した。無くても後から作れる。ブートする事が一番大事)
Are you sure ......とmountlistを保存していいかと聞いてくるので Yes (ここではパーティションは変えないと言っている)
Do yu want to erase and partitions your harddrives? は絶対に No(パーテションを再作成したら、LVMに保存してあるデーターが消える)
Do yu want to format your harddraives ? も絶対に No(フォーマットしたら保存してあるデーターが消える)
Could not mount device(s)
/dev/Data/Kvm-Backupと表示され Abort するかと聞いているので No を選びEnter
注釈:これは原因がある。このCDを作ったときの名は確かにエラーに表示された名前だったが、今は KvmBackup と名前が変更になっているので
Restoreするかと聞いてくるので Yes を選びEnter
データーディスクであるDVD #1 を入れろとくるので、作成したエラーでカーネルパニックになるDVDを挿入(データーとしては使える)
ここで15〜20分位かかり、
Initialize the boot loader は Yes
Regenerate your initrd は No
mountlistを変えたかと聞いてくるが、これは前に変更しOKしたものからさらに変えたかと言う意味らしいので No (Yesにするとmountlistの編集になるが訂正してあるものが表示される)
Label を付けるかはどちらでもいいが私は No にした。
これでやっと終了:プロンプトで exit とやるとリブートするらしいが、私の場合はリブートしなかったので、リセットSWでリブートさせた。
わざとDELETEしたユーザー・ディレクトリーが復活しているので、ちゃんとリストアーされたみたい。又、フォーマットしていないのでファイルのダブリが気になったが、上書きで作っているみたいでおかしな事にはならなかった。
これからパニックになったDVDをどうやって修復するか研究中です。原因はここを参照。
又、まっさらなHDDにもレストア出来るか試すつもり。
それともう一つ注意点:ディスクのUUIDに関する問題。今ではパーティションの指定にUUIDを使うのが主流だが、HDDを新しくするとUUIDも変わるのでブートしなくなる。blkidなどで調べて変更してもいいが、何かとツマヅキの原因になるので、私は fstabとgrub.confのパーティションの指定には /dev/sda1 や kernel /boot/vmlinuz-2.6.32-573.el6.x86_64 ro root=/dev/sda1 ..... 等を使っている。
私は自宅でCentOSを使用し、KVMでサブホストを複数作成し、運用しています。
サブホストやそのデーター領域はBACULAでバックアップしていますが、メインのKVMがあるOSのバックアップもしていますが、ブートできない時はお手上げになりますので、その対策としてMONDOarchiveを使ってブートDVDを作成します。
最初に気がついた事
バックアップ時にシングルユーザーモード(init 1)にしますがその際、仮想化のサブホストの設定がハイバネートになっていると、シングルユーザーモードに移る際に、走っているサブホストを全部 /var/lib/libvirt/qemu/save に保存しますがそのサイズがバカでかくなり、又レジュームした後は消しますので、バックアップが無意味になり、いたずらにサイズを大きくしますので、その対策です。
/etc/sysconfig/libvirt-guestsを修正します
# action taken on host boot
# - start all guests which were running on shutdown are started on boot
# regardless on their autostart settings
# - ignore libvirt-guests init script won't start any guest on boot, however,
# guests marked as autostart will still be automatically started by
# libvirtd
ON_BOOT=start
# Number of seconds to wait between each guest start. Set to 0 to allow
# parallel startup.
START_DELAY=20
# action taken on host shutdown
# - suspend all running guests are suspended using virsh managedsave
# - shutdown all running guests are asked to shutdown. Please be careful with
# this settings since there is no way to distinguish between a
# guest which is stuck or ignores shutdown requests and a guest
# which just needs a long time to shutdown. When setting
# ON_SHUTDOWN=shutdown, you must also set SHUTDOWN_TIMEOUT to a
# value suitable for your guests.
ON_SHUTDOWN=shutdown ←ここをshutdownにする
# If set to non-zero, shutdown will suspend guests concurrently. Number of
# guests on shutdown at any time will not exceed number set in this variable.
PARALLEL_SHUTDOWN=2
# Number of seconds we're willing to wait for a guest to shut down. If parallel
# shutdown is enabled, this timeout applies as a timeout for shutting down all
# guests on a single URI defined in the variable URIS. If this is 0, then there
# is no time out (use with caution, as guests might not respond to a shutdown
# request). The default value is 300 seconds (5 minutes).
SHUTDOWN_TIMEOUT=120
いよいよバックアッププログラムのmondoarchiveをインストールしますがその前にmondoが使う圧縮ソフトlzo,lzop を確認します。
今は yum のBASEレポジトリーにありますので、入っていなければ yum からインストールしてください。
mondoのインストールはレポジトリーを入れた方が簡単みたいなので、
# cd /etc/yum.repos.d/
# wget ftp://ftp.mondorescue.org/rhel/6/x86_64/mondorescue.repo (XOOPSが悪さをするので : が全角になっています)
私は最初ここでi386を指定していましたが、カーネルパニックになり出来ませんでした。
# gedit mondorescue.repo
[mondorescue]
name=rhel 6 x86_64 - mondorescue Vanilla Packages
baseurl=ftp://ftp.mondorescue.org//rhel/6/x86_64
enabled=1
gpgcheck=1
priority=5 ← これを追記
gpgkey=ftp://ftp.mondorescue.org//rhel/6/x86_64/mondorescue.pubkey
インストールしていないときはここを参照。いよいよインストール
# yum install mondo
インストール:
mondo.x86_64 0:3.2.1-1.rhel6
依存性関連をインストールしました:
afio.x86_64 0:2.5-1.rhel6 buffer.x86_64 0:1.19-4.rhel6
mindi.x86_64 0:3.0.1-1.rhel6 mindi-busybox.x86_64 0:1.21.1-1.rhel6
perl-Archive-Tar.x86_64 0:1.58-141.el6 perl-ExtUtils-CBuilder.x86_64 1:0.27-141.el6
perl-IO-Interface.x86_64 0:1.05-2.el6 perl-IO-Zlib.x86_64 1:1.09-141.el6
perl-Module-Build.x86_64 1:0.3500-141.el6 perl-Module-ScanDeps.noarch 0:0.95-2.el6
perl-MondoRescue.noarch 0:3.2.1-1.rhel6 perl-Net-IPv4Addr.noarch 0:0.10-6.el6
perl-Package-Constants.x86_64 1:0.02-141.el6 perl-ProjectBuilder.noarch 0:0.13.1-1.rhel6
syslinux.x86_64 0:4.04-3.el6 syslinux-nonlinux.noarch 0:4.04-3.el6
早速、バックアップを取ってみますが、最初はシングルユーザーモードではなくGUIのマルチユーザーで試して問題なければシングルユーザーモードにしようと思います。
インターラクティブ・モードで試しますが、その前に方針
1:バックアップしたデーターの保存場所:私はKvmBackupと言うディレクトリーに13GBをアタッチした。
2:mondoが使うスクラッチとテンプのディレクトリー:同じくKvmBackupにする
3:イメージ:isoでDVDの容量の4480MB
4:バックアップから除外するディレクトリー:私はメールのデータの保存場所(Thunderbird)とダウンロードした諸々の保存場所(Download)。これらのディレクトリーはbaculaでバックアップされているので必要ない。入れてもいいが、バックアップとリストアーに時間がかかる。
注:スクラッチ・ディレクトリーはバックアップの途中経過が保存され、すべてが終わってから指定したバックアップデーターの保存場所に書いていくので、結構なスペースがいる。又、上記で指定したディレクトリーと/sys,/tmp,/devなどはデフォルトでバックアップされない
# mondoarchive ← 引数なしでやるとインターラクティブ・モードになる
sanityチェックが走った後、バックアップのメディアを聞いてくるので、HARD DISK を選びEnter.
保存場所を聞いてくる:/KvmBackup/Data. と打ち込みTABキーでOKを選びEnter.(Directoryを作っておく事)
圧縮に使うプログラム: lzo を選びEnter. (圧縮が早いそうな)
圧縮レベルを聞いてくるので:Average (4)を選びEnter.
DVDサイズはデフォルトである4480のままTABキーでOKを選びEnter.
バックアップファイルの名前を聞いてくるので:kvmBackup-2015-12-29 と日付を入れ、TABキーでOKを選びEnter.
何をバックアップするかはデフォルトの:/ のままTABキーでOKを選びEnter.(/ 以下全て、ただし後で指定するディレクトリーは除外)
除外するディレクトリー:/Download|/Thunderbird|/KvmBackupと指定し、TABキーでOKを選びEnter. (セパレーターは | )
temporaryディレクトリーは:/KvmBackup/tmpと指定し、TABキーでOKを選びEnter.(Directoryを作っておく事)
scratchディレクトリーは:/KvmBackup/scratchと指定し、TABキーでOKを選びEnter.(Directoryを作っておく事)
Extended attributes? は:Yes のままEnter.
kernelの名前は:デフォルトのまま(私は使用中である /boot/vmlinuz-2.6.32-573.el6.x86_64だった)TABキーでOKを選びEnter.
veryfyはとりあえず:No でEnter.
これが最後だが、proceed するかは:Yes を選んだままEnter
これでやっとバックアップが始まります。
バックアップにはすごく時間がかかります。両方ともVerifyはなしですが、
サブホストをハイバネートしていて、圧縮レートを最大の9を選んだ時:1時間20分(サイズ3.7GBだったと思う。消去したので記憶だけ)
ハイバネートなしで、圧縮レートアベレージの4:52分(サイズ2.4GB)
以上で問題が無ければ
# init 1
でシングルユーザー・モードにして同じことを繰り返す。
終わったら# exit
でGUIマルチユーザーに戻る。
GUIに戻ったら、アプリケーション→サウンドとビデオ→Brasero ディスク作成ツールをクリックし、
表示されたウィンドウの左下の方にある”イメージの作成”をクリック
表示されたウィンドウで /Mondo/Dataにあるisoファイル(私の場合はKvmBackup-2015-12-29-1.iso)を選び、
空のDVDをドライブに入れ、“書き込む(B)”をクリックして、DVDを作成する。