- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

はじめに Edit

dumpとrestoreを使って、システムのバックアップをしてみようというお話。

dumpはext2、ext3フォーマットでしか使えませんので、
それが前提です。

そのうちxfs用も書きたいところです。

システムのバックアップ Edit

dumpのインストール Edit

sudo apt-get install dump では、入らないと思うので、
8.04 LTSだとふつーにaptitudeで入りました。

sudo aptitude install dump

dumpする Edit

/dev/hda1をバックアップする場合。
/mntには、別のHDDをマウントしておく。

sudo dump -0 -u -j /dev/hda1 -f /mnt/backup.dump

みたいな感じで。

  • jは圧縮オプション。でもbzip2単体より小さくならんな……。なんでやろ。

復旧 Edit

※この作業は危険です。
パーティション吹っ飛ばして、フォーマットしてるので、
試験環境で練習しましょう。
だけど、本番でいつでもできるようにもしとかないといけないんだよなあ。

まずは、
UbuntuのDesktopCDを入手しておいて、CDブート(起動)する。
http://www.ubuntulinux.jp/News/News20060805

以下は、大体は、Ubuntu DesktopCDで作業します。

パーティションを割り当てる Edit

fdiskを使って、パーティションを割り当てします。

sudo fdisk /dev/(HDDデバイス名)

する。

まずは、パーティションがあるなら、d コマンドで、
いったんパーティションを全部消去します。

Command (m for help): p

Disk /dev/sda: 82.3 GB, 82348277760 bytes
255 heads, 63 sectors/track, 10011 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        9606    77160163+  83  Linux
/dev/sda2            9607       10011     3253162+  82  Linux swap / Solaris

Command (m for help): d
Partition number (1-4): 1

Command (m for help): d
Selected partition 2

あとは、パーティションの割り当て。

パーティションの割り当て方はポリシーにもよりますが、ここでは、
簡単に、/ と swap の2つのみとします。

n コマンドを使って、/とswapを割り当て、
t コマンドで、swapをswapとして指定します。
a コマンドで、bootパーティションを指定しておきます。

例えば、以下のようになります。
サイズの指定ですが、swapが実メモリの2〜3倍程度にしとおきます。
残りは/になるように調節します。(適当でいいと思います)

Command (m for help): p

Disk /dev/sda: 82.3 GB, 82348277760 bytes
255 heads, 63 sectors/track, 10011 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n  
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-10011, default 1): 
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-10011, default 10011): +79G

Command (m for help): p  

Disk /dev/sda: 82.3 GB, 82348277760 bytes
255 heads, 63 sectors/track, 10011 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1        9606    77160163+  83  Linux

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (9607-10011, default 9607): 
Using default value 9607
Last cylinder or +size or +sizeM or +sizeK (9607-10011, default 10011): 
Using default value 10011

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap / Solaris)

Command (m for help): p

Disk /dev/sda: 82.3 GB, 82348277760 bytes
255 heads, 63 sectors/track, 10011 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1        9606    77160163+  83  Linux
/dev/sda2            9607       10011     3253162+  82  Linux swap / Solaris

Command (m for help): a
Partition number (1-4): 1

Command (m for help): p

Disk /dev/sda: 82.3 GB, 82348277760 bytes
255 heads, 63 sectors/track, 10011 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        9606    77160163+  83  Linux
/dev/sda2            9607       10011     3253162+  82  Linux swap / Solaris

最後に、wコマンドで書き込みます。
これをしないと、書き込んだことにならないので注意してください。

フォーマットする Edit

まずは、/のフォーマット、
ext3でフォーマットするなら、

mkfs.ext3 /dev/sda1

のようにする。
/ 以外にもパーティションを作ったなら、
同じようにフォーマットしてください。

それと、

mkswap /dev/sda2

のようにして、swap領域もフォーマットしておくこと

restoreを使いたいので、dumpをインストールする。 Edit

UbuntuのDesktopCDには、dumpがデフォルトで入ってないので、
インストールする。

/etc/apt/source.lstの上の方に以下を追加。

deb http://jp.archive.ubuntu.com/ubuntu/ dapper universe
deb-src http://jp.archive.ubuntu.com/ubuntu/ dapper universe

で、

sudo apt-get update
sudo apt-get install dump

restoreする Edit

あとは、

sudo mkdir /mnt/system
sudo mkdir /mnt/backup

などとして、マウント先を作っておいて、
システムを復元したいパーティションと、バックアップ(dumpファイル)を保存したところを以下のような感じでマウントする。
デバイス名は適当です。適時変えてね。

sudo mount /etc/sda1 /mnt/system
sudo mount /etc/sdb /mnt/backup

そして、以下のようにして、restoreでdumpしたデータを書き込む。

cd /mnt/system
sudo restore -rf /mnt/backup/backup.dump

lsで確認する。

ls /mnt/system

あと片付け

sudo umount /mnt/system
sudo umount /mnt/backup

MBRを書き込む Edit

前に、linuxを動かしていたなら、いらないのですが、
買ってきたばかりのHDDや、ブートに使ってないHDDの場合、
MBRを書き込まないと起動しません。

そこで、MBRを書き込みます。

MBRの設定をパーティションを/にmountして、
(パーティションではなく)デバイスにMBRを書き込みます。

sudo mount /dev/sda1 /
grub-install /dev/sda  ←sda1じゃなくて、sdaなのに注意

いくつかエラーがでても、MBRは書き込めたというメッセージが出ればOKです。

実は、mountはいらないかもです。

swapパーティションの扱い Edit

ここからは、復旧したHDDから起動できていると思いますので、
そちらで作業します。CDは抜いて起動してください。

で、

less /proc/meminfo

とか

less /proc/swaps

で、swapがちゃんと認識されているか確認すること。

swapが認識されていないなら、
/etc/fstabのswapのデバイスが正しいか確認。

書き換えたら、再起動したら、swapが認識されているか確認して下さい。

定期的にバックアップを取りたい Edit

例えば、以下のようなスクリプトを/usr/local/sbin/dump_system
として作って、cronででもまわします。

cronでの回し方は、../cronでスクリプトを回そうを参照。

#!/bin/sh

# Source Directory
SOURCE_DEVICES="/dev/sda1 /dev/my/root"
# Destination Derectory
DEST_MOUNT=/backup
DEST_DIR=$DEST_MOUNT/system
# Destination Mount Device
DEST_MOUNT_DEVICE=/dev/sdb

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# main
echo "==== starting dump system at \"`date`\" ===="
umount $DEST_MOUNT_DEVICE >/dev/null 2>&1
if mount $DEST_MOUNT_DEVICE $DEST_MOUNT
then
        # delete old files
        find $DEST_DIR -mtime +5 -name '*.dump' -exec rm -f {} \;

        # dump devices
        for src in $SOURCE_DEVICES
        do
                DEV_NAME=`echo $src | awk '{gsub(/^(.+)\//, ""); print;}'`
                DEST_FILE=$DEST_DIR/`hostname`-$DEV_NAME-`date +%Y-%m-%d`.dump
                echo "== begin $src =="
                dump -0 -u -j $src -f $DEST_FILE
                echo "== end $src =="
        done

        umount $DEST_MOUNT_DEVICE
else        echo "failed to mount"
fi
echo "==== finished dump system at \"`date`\" ===="

解説。

DEST_DIR: バックアップ先のディレクトリ
SOURCE_DEVICES: バックアップとるデバイス名

find は、*.dumpを探して、6日前より古いのを削除しています。
つまり、6日分のバックアップが残るわけです。
後は、ホスト名-デバイス-日付で、dumpしています。

大体dumpファイル1個、370MBくらいだったので、x6として、
2.2GBくらい食う計算です。
この辺は、HDD容量と相談してください。

(pdumpfs-cleanみたいに月の頭だけとか残したいんだけどなあ…)

テスト Edit

sudo sh /usr/local/sbin/dump_system

でちゃんとバックアップが取れるかテストして下さい。




Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2009-01-30 Fri 19:59:09 JST (3244d)