LVM2なFC5のバックアップ・リストア手順など

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の出力は絶対にあったほうがよいので一緒にとっておく。

# fdisk -l | ( ssh hoge@hoge "cat > /dokoka/fdisk.out" )

■リストア用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以下にいろいろ展開される。

# chroot /mnt/linux
# /tmp/tool/sbin/MAKEDEV sda

で、デバイスファイルを作成する。

/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.org

71,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ファイルを作成する。

# find . | cpio -o -c | gzip -c > /mnt/linux/boot/initimage

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

カスタマイズしてたらどうするのかは知りません・・・・・

reboot

shutdown -rで再起動しておしまい。

grub-installでsplashimageが行方不明になってると思うので、困る方は再度grub-installを実行する。

■その他

データ用論理ボリュームはあとで適当にやっつけてやってください。