もくじ

partimageによる40台コピー(2010/5/10)

概要

partimageというソフトウェアで新lennyの入っているパーティションをまるごとサーバーにsaveする。その後他の39台にrestoreすることで新OSをコピーすることができる。

partimage

partimageはHDDのドライブごと、またはパーティションごとをファイルとして保存するソフトウェア。保存先は別のHDDでもよいし、nfsなどを通じてサーバー上でもよい。ソフトウェアの性格上、稼働しているOSはコピーできないので、CDやUSBで起動するLinuxディストリビューションに含まれているpartimageを使うのが便利。最近はKnoppixEduが起動も速くマウント操作も便利なのでお勧め。

KnoppxEduは8まで公開されているが、今回使ったのは6と7。8はDHCPからIPアドレスをとることができず使えない。KnoppxEduでなければならないこともないが、partimageがインストールされているかということの他に、まずsave使用とするPCで起動できるかということと、起動してからサーバーとnfsマウントをするのでnfsクライアントになれるかということなども考慮する必要がある。

今回のシステムは/dev/hda1にWindowsMe、/dev/hda2にlennyとなっていてgrubで選択する。grubの部分はpartimageでは別扱いだが、今回は/dev/hda2の部分だけでいい。

save

CUIで起動

KNOPPIXのロゴがでたら、knopix 2 と入力して、コンソールで起動させる。キー入力しないと5秒ほどでGUIで起動してしまうが、そうなったら仮想端末から操作してもよい。GUI起動まで待てない場合やCUIでしか起動しない場合知っていると便利。

シェルスクリプト

saveは一度しかしないので、端末で partimage とコマンドを打ってあとはガイドにしたがって対話的に進めるのもよいが、前回のsave-restoreでシェルスクリプトを作ってあるのでこれを利用する。

#!/bin/sh
LANG=C
export LANG
echo 'knoppix'
if [ ! -d /mnt/sys ]; then
   mkdir /mnt/sys
   echo 'mkdir'
fi
if [ ! -d /mnt/sys/temp ]; then
   mount -t nfs jonah:/srv/partimage /mnt/sys -o "rw,nolock"
   echo 'mount srv/partimage'
fi
partimage -b -z1 -n save /dev/hda2 /mnt/sys/lennyBps18fish100510

このスクリプトはUSBメモリに保存してある。CUIで起動後USBをマウントしてスクリプトを実行する。KnoppixEduではUSBのマウントは mount /dev/sda1 など省略型が使えるので便利。

partimageでsave

partimageが起動するとコメント入力を促されるが適当に書いてsaveをスタートする。しばらくして次のような面画が出、25分程度でsaveされる。(このPCは866MHzなので遅い)

--------------------| save partition to image file |----------------------
 Partition to save:.........../dev/hda2
 Size of the Partition:.......9.18 GiB = 9853885440 bytes
 Current image file:........../mnt/sys/lennyBps18fish100510.000
 Image file size:.............1.29 GiB
 Available space for image:...13.42 GiB = 14407892992 bytes
 Detected file system:........ext3fs
 Compression level:...........gzip
 
 
 Time elasped:................24m:28sec
 Estimated time remaining:....10sec
 Speed:.......................150.34 MiB/min
 Data copied:.................3.59 GiB / 3.62 GiB
 
 
 


                               99%                                99 %
--------------------------------------------------------------------------

restore

別のコンピュータにrestoreしてゆく。起動CDは数枚用意しておくと能率が上がる。

やはりKNOPPIXのロゴがでたら、knopix 2 と入力して、コンソールで起動させる。

シェルスクリプト

restoreは何度もするので対話的に進めると効率が悪い。シェルスクリプトが必須。

#!/bin/sh
export LANG=C
echo 'knoppix'
if [ ! -d /mnt/sys ]; then
   mkdir /mnt/sys
   echo 'mkdir'
fi
if [ ! -d /mnt/sys/temp ]; then
   mount -t nfs jonah:/srv/partimage /mnt/sys -o "rw,nolock"
   echo 'mount srv/partimage'
fi
partimage -f2 -b -n restore /dev/hda2 /mnt/sys/lennyBps18fish100510.000
   #      -finish 0:wait 2:reboot
   #          -batch
   #              -nossl
   #                 action
   #                        destination
   #                                   filename

さまざまな注意は概ねsaveの時とおなじ。

ファイル名はsaveすると自動で.000などの番号がつくのでディレクトリを見て最初の数字のファイルを指定する。普通.000

-f は終わったときの振る舞いを指定するもの。

-----------------| restore partition from image file |--------------------
 Partition to restore:............./dev/hda2
 Size of partition to restore:.....9.18 GiB = 9853885440 bytes
 Current image file:.............../mnt/sys/lennyBps18fish100510.000
 File system:......................ext3fs
 Compression level:................gzip
 Partition was on device:........../dev/hda2
 Image created on:.................Sat May  8 15:06:07 2010
 Size of the original partition:...9.18 GiB =  9853885440 bytes  
 
 Time elasped:.....................6m:15sec
 Estimated time remaining:.........0sec
 Speed:............................592.84 MiB/min
 Data copied:......................3.62 GiB / 3.62 GiB
 
 
 


                               100%                                100 %
--------------------------------------------------------------------------

およそ6分で終了する。

saveの前にnet.rules

/etc/udev/rules.d/に persistent-net.rules という設定がある。udev が動的にネットワークデバイスを割り当てるのだが、同じデバイスに異なる名前がつくことを防止しようと記録をとるようになったらしい。

たとえば、macアドレスが00:e0:18:05:9b:98ならばeth0

SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:e0:18:05:9b:98", NAME="eth0"

このままsave-restoreするとリストア先のネットワークカードのmacアドレスが異なるので、eth0に割り当てられず、eth1に割り当てられる。これがトラブルの元になる。

今回、この記録をしているファイルが z25persistent-net.rules から 70persistent-net.rules になっており、記録の仕方も変更になっている。(1)の部分が前回のリストア後に自動で記録されていて今回saveにあたって削除(コメントアウト)した部分。その後起動して、(2)の部分が今回のリストア後に自動的に作られている部分。改良が加えられているような感じもするが、次回も大事をとって削除すると思う。

/etc/udev/rules.d/70-persistent-net.rules

# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.
# adachi before save by partimage delete following 

# PCI device 0x1039:0x0900 (sis900)
# adachi for save partition (1)
#SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:e0:18:05:9b:98", NAME="eth0"

# PCI device 0x1039:0x0900 (sis900) (2)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:e0:18:05:9b:98", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Linuxクライアント/サーバ運用
聖愛中学高等学校
安達 順一
http://www.seiai.ed.jp/
2010-05-30