Fedora Core 5をインストールして以下の通り遊んでみた。
・フルバックアップ・リストアを行う。
・それだけじゃつまらんのでVG名とLV名と、LVolのサイズを変えてみる。(デフォルトの名称は長くて気に入らん)
■環境
環境は以下の通り。
HW:
VMWare Workstation 5.5.1
SCSI:
pci bus 0x0000 cardnum 0x10 function 0x00: vendor 0x1000 device 0x0030
LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI
OS:
[root@localhost ~]# cat /etc/redhat-release
Fedora Core release 5 (Bordeaux)
[root@localhost ~]# cat /proc/version
Linux version 2.6.16-prep (root@ss.example.org) (gcc バージョン 4.1.0 20060304 (Red Hat 4.1.0-3)) #1 Fri Apr 28 17:42:55 JST 2006
ほぼ素の状態。
Xあがらんようにしたくらいか。
SELinuxは有効にしている。
スライス構成:
[root@localhost ~]# fdisk -l
Disk /dev/sda: 9663 MB, 9663676416 bytes
255 heads, 63 sectors/track, 1174 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1174 9325732+ 8e Linux LVM
VG構成:
[root@localhost ~]# vgdisplay -v
Finding all volume groups
Finding volume group "VolGroup00"
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 8.88 GB
PE Size 32.00 MB
Total PE 284
Alloc PE / Size 283 / 8.84 GB
Free PE / Size 1 / 32.00 MB
VG UUID UDeUEj-dSFg-b8w6-TbBJ-vWr4-gXSk-Q8HDLp
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol00
VG Name VolGroup00
LV UUID F9W73B-K2eZ-5km3-zZwf-6Wf4-F3mO-TOUJOq
LV Write Access read/write
LV Status available
# open 1
LV Size 8.34 GB
Current LE 267
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:0
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol01
VG Name VolGroup00
LV UUID vXiel6-uHYQ-4jGq-Euc6-713w-7ib7-AxtGkv
LV Write Access read/write
LV Status available
# open 1
LV Size 512.00 MB
Current LE 16
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1
--- Physical volumes ---
PV Name /dev/sda2
PV UUID SFvWTN-cA8D-RcqH-NaIg-X5V1-S51P-RlIOhd
PV Status allocatable
Total PE / Free PE 284 / 1
データサイズ:
[root@localhost ~]# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
8474820 1639764 6397604 21% /
/dev/sda1 101086 9953 85914 11% /boot
tmpfs 128044 0 128044 0% /dev/shm
■バックアップ
バックアップにはdumpを使った。テープデバイスがないので、sshでリモートのファイルシステム上に取った。
# dump 0f - / | ( ssh hoge@hoge "cd /dokoka; gzip | dd of=root.dump.gz bs=10240" )
# dump 0f - /boot | ( ssh hoge@hoge "cd /dokoka; gzip | dd of=boot.dump.gz bs=10240" )
fdiskの出力は絶対にあったほうがよいので一緒にとっておく。
■リストア用CDイメージ
ripを使った。
(RIPLinuX-1.4.grub.iso)
fedoraのrescueディスクだとLVM2が入ってないみたいで、これではディザスタリカバリには使えない。
■ripによる起動
適当に起動。
理由はよくわからんがnon-initramfsじゃないとbootしない環境もあるみたいだ。
■fdiskによるスライス確保
fdisk.outを見て、適当にサイズを確保する。
■VG作成
sda2対象にvgを作成。
ちなみに、既存のvgがある場合ripはそのvgを認識しているはず。ファイルの救出が目的の場合はvgchange実行後mountすればファイルを読み出せると思う。
・pvcreate
# pvcreate /dev/sda2
以前のVG構成情報が残っているときはオプション-ffをつけて初期化する必要がある。
・vgcreate
# vgcreate vg00 /dev/sda2
オプション指定しないとインストーラによるVG作成時からPEのサイズが変わっちゃうので、気に入らない人は適宜指定してあげること。
・lvcreate
# lvcreate -L 4G -n lv00 vg00# lvcreate -L 256M -n lv01 vg00
# lvcreate -L 2056M -n lv02 vg00
lv00のサイズを適当に減らし、データ用の論理ボリュームとしてlv02を作成する。
lv01はswap用。
VG内の割り当て可能サイズはvgdisplayでわかる。残り全てをlv02に割り当てたいときはPEサイズとFreePEの数を掛けた数をlv02のサイズとして指定する。
■ファイルシステム作成
# mke2fs -j /dev/sda1
# mke2fs -j /dev/vg00/lv00
# mke2fs -j /dev/vg00/lv02
■mount
lv00を/mnt/linuxにマウントする。
# mount /dev/vg00/lv00 /mnt/linux
■ネットワークインタフェース設定
ネットワーク経由でrestoreを行うため、インタフェースの設定を行う。
テスト環境にはdhcpサーバがいたのでdhcpによるアドレス設定を行った。
ripにはdhcpcdというDHCPクライアント用コマンドが入っている。
# dhcpcd eth0
■restore実施
バックアップしたデータをリストアする。
# cd /mnt/linux
# ssh hoge@192.168.0.254 "gzip -dc /dokoka/root.dump.gz" \
| restore -rf -
restore : lsetxattr ./hoge failed: Operation not supported
ファイル毎にこのようなろくでもないメッセージが表示されるが如何ともしがたいような気がしたので無視した。
/のリストアが終わったら、今度は/bootのリストアを実施。
# mount /dev/sda1 /mnt/linux/boot
# cd /mnt/linux/boot
# ssh hoge@192.168.0.254 "gzip -dc /dokoka/boot.dump.gz" \
| restore -rf -
■swap領域作成
# mkswap /dev/vg00/lv01
■ラベル作成
# e2label /dev/sda1 /boot
■fstab変更
VG名を変更したので、/mnt/linux/etc/fstabを適宜編集する。
■vgデバイスファイル作成
以下の手順で/mnt/linux/devにvg00のデバイスファイルを作っておく。
・ダミーの/procファイル作成
許されることなのかどうなのかよくわからん。
# cat /proc/devices > /mnt/linux/proc/devices
# cat /proc/mounts > /mnt/linux/proc/mounts
# cat /proc/misc > /mnt/linux/proc/misc
・MAKEDEV展開
vgscanを実行するのに、chrootした状態でsdaが見えてる必要がある。やり方がよくわからんのでMAKEDEVを使ってみたらとりあえず行けた。
MAKEDEV-3.21-3.i386.rpmを入手し、/mnt/linux/tmpに配置する。ripにはsshdも含まれている。
sshdサーバプロセスを使う場合はrootアカウントのパスワード設定を行う。
# mkdir /mnt/linux/tmp/tool
# cd /mnt/linux/tmp/tool
# rpm2cpio ../MAKEDEV-3.21-3.i386.rpm \
| cpio -id
/mnt/linux/tmp/tool以下にいろいろ展開される。
で、デバイスファイルを作成する。
/dev以下にsda*ができてることを確認する。
# vgscan --mknodes
で、vg00を認識させる。
vgdisplayでvg00が表示されることを確認。
# exit
で、chroot環境を終わらせる。
/mnt/linux/proc/devices /mnt/linux/proc/mounts /mnt/linux/proc/miscは消しておく。
■initrd変更
initrd内に、VG名をベタに書いたファイルがあるのでこれを編集する。
# mkdir /mnt/linux/tmp/newinit
# cd /mnt/linux/tmp/newinit
# gzcat /mnt/linux/boot/initrd-2.6.16-prep.img | cpio -id
initというファイルが展開したディレクトリ構造の根にある。
テスト環境では以下の三行を変更した。
# diff init init.org71,72c71,72
< lvm vgchange -ay --ignorelockingfailure vg00
< resume /dev/vg00/lv01
---
> lvm vgchange -ay --ignorelockingfailure VolGroup00
> resume /dev/VolGroup00/LogVol01
74c74
< mkrootdev -t ext3 -o quota,ro /dev/vg00/lv00
---
> mkrootdev -t ext3 -o quota,ro /dev/VolGroup00/LogVol00
新しいinitrdファイルを作成する。
cpioに-cオプションを付けないとbootできない。
■grub.conf変更
/mnt/linux/boot/grub/grub.confを編集し、新しいinitrdファイルを読むエントリを追加しておく。
■grub-install実行
# grub-install --root-directory=/mnt/linux /dev/sda
/dev/sda1と/dev/vg00/lv00をアンマウントし、rebootする。
■最初の起動
SELinuxを無効にしてbootしないとログインすらできない。
新しいinitrdファイルを使うエントリを選択し、
enforcing=0
をカーネルに渡して起動する。
■SELinux再設定
bootupしたらrootでログインし、全ファイルに属性を設定する。
# fixfiles relabel
カスタマイズしてたらどうするのかは知りません・・・・・
shutdown -rで再起動しておしまい。
grub-installでsplashimageが行方不明になってると思うので、困る方は再度grub-installを実行する。
■その他
データ用論理ボリュームはあとで適当にやっつけてやってください。