2016年3月24日木曜日

システムバックアップその7

0030_create_config の作成もあと僅か。
先日の作業に続けて、0030_create_config に以下の行を追記しよう。
--追記ココから--
for FSCONFIG in ${ETCDIR}/fsconfig/*
do
  USELVM=""
  VOLNAME=""
 
  . ${FSCONFIG}
 
  if [ x${USELVM} = "xNo" ]
  then
    /sbin/blkid -o export /dev/${VOLNAME} > ${BACKUPPOINT}/current/config/blkid/${VOLNAME}
  else
    /sbin/blkid -o export /dev/${ROOTVG}/${VOLNAME} > ${BACKUPPOINT}/current/config/blkid/${VOLNAME}
  fi
 
done

--追記ココまで--
今まで以上にグッとプログラムっぽくなった。(/sbin/blkid の2行、変な所で改行されているように見える部分があるかもしれないが、1行ずつだ。)
けど、中身は前回説明したforループと、if文、blkidコマンドの組み合わせに過ぎない。
変数の確認の前に、全体の流れを確認しておこう。
 
まずは forループ。
ループの回数に影響する部分が ${ETCDIR}/fsconfig/* となっている。
これは、${ETCDIR}/fsconfig の下のファイル一式、と考えてもらって構わない。
つまり、そのディレクトリに aファイルと bファイルが存在していた場合は、以下のようになる。
for FSCONFIG in ${ETCDIR}/fsconfig/a ${ETCDIR}/fsconfig/b
つまり、FSCONFIGという変数に、ファイル名が格納されるということになる。
 
次のポイントは、". ${FSCONFIG}"の部分か?
これは、「このスクリプトのこの部分(ドットがある部分)に、${FSCONFIG}のファイルの中身を差し込む」という意味になる。
先ほどの for文 と合わせて考えると、ループ1回目には、この部分に ${ETCDIR}/fsconfig/a の中身が差し込まれ、ループ2回目には ${ETCDIR}/fsconfig/b というファイルが差し込まれる、というわけだ。
この差し込まれるファイル、この後で使用している ${USELVM}という変数と、${VOLNAME}という変数が定義してある。
つまり、ループを回る都度、変数の値を変更されて実行される、という意味合いになる。
 
そして if文。
if文は、特に解説しなくてもいいかと思う。
if [ x${USELVM} = "xNo" ]
これは、${USELVM}がNoだった場合(頭に x を付与しているので、全体としては xNo だった場合、という条件になるけど…)、then以降を実行し、Noでは無かった場合、else以降を実行するという、いわゆる「条件分岐」だ。
 
ここまで見れば、${ETCDIR}/fsconfig/* のファイルは、「あ、マウントポイント(ファイルシステム)毎に定義ファイルを作って、その対象領域がLVM管理下だったら、${USELVM}変数にYesを、LVM管理外だったらNoを入れればいいんだな?」と予想出来ると思う。
 
もう一つの変数 ${VOLNAME} は、blkidコマンドで使用されている。
blkidコマンドは、ブロックデバイス(HDDパーティションとか)の属性値を出力するコマンドだ。特に -o export というオプションを付与すると、変数定義のような形で出力してくれる。
ブロックデバイスを指定する、ということは、${VOLNAME}はブロックデバイス名を指定すればイイ、ということが予想できると思う。
ズバリその通りで、sda1 とか lv-usr-local と指定している。
 
これによって、ブロックデバイスのUUIDやDEVNAME、ファイルシステムタイプが出力(保存)出来ることになる。
ちょうど、前回書けなかった 「4. 各ファイルシステムのファイルシステムフォーマット情報やuuid情報」 に相当する部分を出力することが出来るわけだ。
 
おっと忘れてはいけない。
これらを出力するためには、etc/fsconfig の下に、それぞれのブロックデバイス(バックアップ対象領域)の定義ファイルを作らないといけない。
いきなり全部作るのは結構大変なので、今は3つぐらいにしておこう。(最終的には全て作らないといけないのだが…)
まずは1つ目
# vi ../etc/fsconfig/0010_sda1
--ココから--
#
# USELVM:
# Area to be backed up or LVM region, simple partition of the flag.
# Specify a Yes in the case of LVM of LVOL area.
#
USELVM=No

#
# VOLNAME:
# You want to specify the volume device name of the target volume.
# For simple partition, sda1 and sda2 like.
# You can easily find LVM of LVOL area, specify the LVOL name (lvol1, etc.).
#
VOLNAME=sda1

--ココまで--
 
続いてsda2
# vi ../etc/fsconfig/0020_sda2
--ココから--
#
# USELVM:
# Area to be backed up or LVM region, simple partition of the flag.
# Specify a Yes in the case of LVM of LVOL area.
#
USELVM=No

#
# VOLNAME:
# You want to specify the volume device name of the target volume.
# For simple partition, sda1 and sda2 like.
# You can easily find LVM of LVOL area, specify the LVOL name (lvol1, etc.).
#
VOLNAME=sda2

--ココまで--
 
これまでの2つは、LVM配下ではない領域だった。今度はLVM配下の領域(lvol)を1つだけ作成しておこう。(あくまで、とりあえず、で。最後は必ず全部作る必要が有るよ。)
# vi ../etc/fsconfig/0030_lv-root
--ココから--
#
# USELVM:
# Area to be backed up or LVM region, simple partition of the flag.
# Specify a Yes in the case of LVM of LVOL area.
#
USELVM=Yes

#
# VOLNAME:
# You want to specify the volume device name of the target volume.
# For simple partition, sda1 and sda2 like.
# You can easily find LVM of LVOL area, specify the LVOL name (lvol1, etc.).
#
VOLNAME=lv-root

--ココまで--
 
ここまで出来たら、テストで動かしてみよう。
0010から順番に動かせばいいぞ。
その前に、実行パーミッションを付けておくのを忘れないように。
# chmod +x 0030_create_config
# ./0010_mount
# ./0020_mkdir
# ./0030_create_config
# ls /media/backup/current/config
# ls /media/backup/current/config/blkid
0030_create_configを実行したところで「Voume group .... successfully backed up.」と表示されたかもしれない。
vgcfgbackupを実行すると表示されるメッセージで、successfullyと出ていれば特に気にしなくていい。
無事にファイルが出来ているだろうか?config ディレクトリの下には、efibootやsfdisk.sda、vgcfgbackup.vg-root、vgs.pvid といったファイルが出来ているはずだ。
また、config/blkid ディレクトリの下には、sda1 とか sda2、lv-root というファイルが出来上がっているはず。
全てテキストファイルなので、中身を確認したかったらcat等で確認しておこう。(できれば、一通り中身を確認して、少なくとも空では無いことだけはチェックしておこう。)
 
ざっと、こんなもんだろうか。上手く説明出来ない部分も当然あるし、もっと良いやり方があるかもしれない。あくまで私が作った部分なので…ということにしておいてくれぃ。
 
今回はココまで。
次は、LVMのlvol領域のスナップショットを作成する部分だ。

0 件のコメント:

コメントを投稿