partimageというソフトウェアで新lennyの入っているパーティションをまるごとサーバーにsaveする。その後他の39台にrestoreすることで新OSをコピーすることができる。
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の部分だけでいい。
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をスタートする。しばらくして次のような面画が出、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してゆく。起動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分で終了する。
/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"