LinuxでXFSファイルシステムのOSのディスクを別のディスクにコピーする場合のメモ。
ミラーリングをしたくない場合でバックアップ用ディスクを作りたい場合や、ディスクの内容をまるごと別のディスクに移したい場合などに。
以下のログは SLES10 SP1 で試した時のもので、1本目のディスクは、swap と / の2パーティション構成の場合とします。
node01:~ # df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 74G 4.6G 69G 7% / udev 501M 124K 501M 1% /dev node01:~ #fdisk や parted で2本目のディスクにパーティションを作成。
今回はまったく同じ構成にしてみました。
(サイズやパーティション構成を変更したい場合にも使えます)
node01:~ # fdisk -l /dev/sd[ab] Disk /dev/sda: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 131 1052226 82 Linux swap / Solaris /dev/sda2 132 9729 77095935 83 Linux Disk /dev/sdb: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 131 1052226 82 Linux swap / Solaris /dev/sdb2 132 9729 77095935 83 Linux node01:~ #mkfsでファイルシステム作成。
ext3と違って一瞬で完了するのが嬉しい。
node01:~ # mkfs.xfs /dev/sdb2 meta-data=/dev/sdb2 isize=256 agcount=16, agsize=1204623 blks = sectsz=512 attr=0 data = bsize=4096 blocks=19273968, imaxpct=25 = sunit=0 swidth=0 blks, unwritten=1 naming =version 2 bsize=4096 log =internal log bsize=4096 blocks=9411, version=1 = sectsz=512 sunit=0 blks realtime =none extsz=4096 blocks=0, rtextents=0 node01:~ #swap作成。
node01:~ # mkswap /dev/sdb1 Setting up swapspace version 1, size = 1077473 kB node01:~ #2本目のディスクの / パーティションを /new にマウント。
node01:~ # mount /dev/sdb2 /new node01:~ # df -h / /new Filesystem Size Used Avail Use% Mounted on /dev/sda2 74G 4.6G 69G 7% / /dev/sdb2 74G 544K 74G 1% /new node01:~ #あと、OSのDVD等に含まれるxfsdumpパッケージが必要。
これでdump/restoreの準備完了です。
/ から /new ファイルシステムへのコピーは、manページにあるように、基本的に以下で可能。
# xfsdump -J - / | xfsrestore -J - /newこの -J はdump inventory databaseを更新しないというオプション。
xfsdumpはインクリメンタルバックアップなどのために、databaseとして /var/lib/xfsdump/inventory を使用するが、今回のようなコピーの場合には必要がないため。
あと、私は -p 60 といったオプションを付けたりします。
指定秒毎に進捗を表示してくれます。
実際のログは以下。
node01:~ # xfsdump -J - / | xfsrestore -J -p 60 - /new xfsrestore: using file dump (drive_simple) strategy xfsdump: xfsrestore: version 2.2.43 (dump format 3.0) - Running single-threaded using file dump (drive_simple) strategy xfsdump: version 2.2.43 (dump format 3.0) - Running single-threaded xfsdump: level 0 dump of node01:/ xfsdump: dump date: Thu Jan 8 19:17:11 2009 xfsdump: session id: b52423b6-bc30-4859-89cb-c1b6b478fdbc xfsdump: session label: "" xfsrestore: media label: "" xfsrestore: file system id: cf274d72-c6f4-41ff-9f17-38b6fbc281dc xfsrestore: session id: b52423b6-bc30-4859-89cb-c1b6b478fdbc xfsrestore: media id: 59d1444a-04c8-4cac-a425-7b57f0ad1689 xfsrestore: searching media for directory dump xfsrestore: reading directories xfsdump: dumping non-directory files xfsrestore: 8796 directories and 101172 entries processed xfsrestore: directory post-processing xfsrestore: restoring non-directory files xfsrestore: status at 19:18:11: 9955/89299 files restored, 5.7% complete, 60 seconds elapsed xfsrestore: status at 19:19:11: 19612/89299 files restored, 11.5% complete, 120 seconds elapsed (中略) xfsrestore: status at 19:26:11: 75234/89299 files restored, 98.1% complete, 540 seconds elapsed xfsdump: ending media file xfsdump: media file size 4674038560 bytes xfsdump: dump size (non-dir files) : 4641927160 bytes xfsdump: dump complete: 564 seconds elapsed xfsdump: Dump Status: SUCCESS xfsrestore: restore complete: 573 seconds elapsed xfsrestore: Restore Status: SUCCESS node01:~ #dfなどで確認。
node01:~ # df -h / /new Filesystem Size Used Avail Use% Mounted on /dev/sda2 74G 4.6G 69G 7% / /dev/sdb2 74G 4.6G 69G 7% /new node01:~ #/etc/fstab , /boot/grub/menu.lst を確認。
/dev/sda1などのデバイス名で指定してあれば問題ないが、LABELやUUIDで指定してある場合には変更などが必要。
最後に、このままでは、2本目のディスクには GRUB がインストールされていないので手動でインストールする必要がある。
今回、2本目のディスクの /boot はこの時点では /dev/sdb2 にあるので、grub で root (hd1,1) を指定して setup すればインストールされる。
node01:~ # grub grub> root (hd1,1) Filesystem type is xfs, partition type 0x83 grub> setup (hd1) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/xfs_stage1_5" exists... yes Running "embed /boot/grub/xfs_stage1_5 (hd1)"... 18 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd1) (hd1)1+18 p (hd1,1)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded Done. grub>
以上で、2本目のディスクに入れ替えれば、同じOSで起動するはずです。
ちなみに、どのファイルシステムが好きかと言えば、やはりXFSですね。
サポートされていれば、XFSを使いたいです。