水曜日 8 13, 2008
水曜日 8 13, 2008
先月 OpenSolaris 2008.05 を CD/DVDもnetworkも無い状態で導入 というのを書いておりますが、 その中で別の方法で導入できる気もするといっております。 今回はそれを試してみた結果です。 基本的には前回の導入方法を試みている時にZFSの柔軟性とそのパワフルさに感心し、 さらに大胆な別の方法でできるのではないかと考えました。 それは、"zfs send"でできるイメージを導入に使うというものです。 この方法を2台のマシンで試しており現在の所、 特に大きな問題もなく運用できています。 マシンはそれぞれ、SunのデスクトップマシンであるW1100z(AMD Opteron)と、 PanasonicのCF-W5(Intel Core2 Duo)というノートパソコンです。
英語で書いた時は"cheat"という言葉を使っていますが、 あまり良い意味ではありません。 まあ、インチキというかいい加減な方法であるということです。
OpenSolaris 2008.05の導入、とくに"All language"というバージョンの場合、 結構時間かかりますよね? ざっとCDからイメージを複写してる時間を計ってみると (つまりブート、構成している時間などを除いて)、 CF-W5(DRAM 1GB)でまるまる1時間以上、W1100z(DRAM 2GB)で40分以上かかります。 たかがCD一枚なのですが、圧縮の解凍に時間がかかっているようで、 ディスクとかCDドライブの時間よりもCPUに時間をとられているようです。 しかし、"zfs recv"はかなり効率が良く、高速です。 これが今回方法の思い立ったヒントです。
以下が今回のインチキなネットインストール方法です。
すでに導入済みのマシンがあり、かつ@installのsnapshotを消していない場合は、 そのマシンでもかまわないはずです。jack@opensolaris:~$ pfexec su jack@opensolaris:~# zfs send -R rpool@install | ssh 他のホスト名 -l ログイン名 "dd of=ファイル名 bs=1024k"
でまずはroot権限を獲得します。jack@opensolaris:~$ pfexec su jack@opensolaris:~#
format> fdisk Total disk size is 9729 cylinders Cylinder size is 16065 (512 byte) blocks Cylinders Partition Status Type Start End Length % ========= ====== ============ ===== === ====== === 1 Other OS 0 254 255 3 2 IFS: NTFS 255 4629 4375 45 3 Active Solaris2 4629 8714 4086 42 SELECT ONE OF THE FOLLOWING: 1. Create a partition 2. Specify the active partition 3. Delete a partition 4. Change between Solaris and Solaris2 Partition IDs 5. Exit (update disk configuration and exit) 6. Cancel (exit without updating disk configuration) Enter Selection: 6 format> p PARTITION MENU: 0 - change `0' partition 1 - change `1' partition 2 - change `2' partition 3 - change `3' partition 4 - change `4' partition 5 - change `5' partition 6 - change `6' partition 7 - change `7' partition select - select a predefined table modify - modify a predefined partition table name - name the current table print - display the current table label - write partition map and label to the disk ! - execute , then return quit partition> p Current partition table (original): Total disk cylinders available: 4084 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 root wm 262 - 4083 29.28GB (3822/0/0) 61400430 1 swap wu 1 - 261 2.00GB (261/0/0) 4192965 2 backup wu 0 - 4083 31.29GB (4084/0/0) 65609460 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0 8 boot wu 0 - 0 7.84MB (1/0/0) 16065 9 unassigned wm 0 0 (0/0/0) 0 partition>
これは、"zfs recv"を実行時にrecvしたファイルシステムから 順次自動的にマウントしてくれるのですが、 途中で既存のものとぶつかるとそこで止まって先をやってくれないためです。 実際最初/export/homeができなくて結構面倒なことになりました (rootでログインできないようになっているのに、 設定したユーザのホームディレクトリが無いとログインできません。 なんとか救済できるのですが、面倒です)。jack@opensolaris:~# mv /opt /opt-
jack@opensolaris:~# zpool create -f rootディスク(例えばc5d0s0) jack@opensolaris:~# ssh 他のホスト名 -l ログイン名 "dd if=ファイル名 bs=1024k" | zfs recv -Fvd rpool
jack@opensolaris:~# zfs rollback rpool@install jack@opensolaris:~# zfs rollback rpool/ROOT@install jack@opensolaris:~# zfs rollback rpool/ROOT/opensolaris@install jack@opensolaris:~# mkdir /a jack@opensolaris:~# mount -F zfs rpool/ROOT/opensolaris /a
実際の所install-finishが何をするスクリプトのなのか完全には把握していません。 しかし、これを走らせるとディスクにすでに導入されているOSをGRUBのメニューに 書き込んだ上でbootアーカイブを作ってくれます (おそらく、これ以外にも何かしています)。 CF-W5の場合はWindows Vistaでした。 また、zfs.cacheも実際のマシンの内容と違うとおかしな動きをします。jack@opensolaris:~# cp /etc/zfs/zpool.cache /a/etc/zfs/ jack@opensolaris:~# cp /etc/path_to_inst /a/etc jack@opensolaris:~# /sbin/install-finish /a cd jack@opensolaris:~# installgrub -m /a/boot/grub/stage1 /a/boot/grub/stage2 /dev/rdsk/rootディスク(例えばc5d0s0) <<. y . jack@opensolaris:~# umount /a
通常のリブートはshutdown(1M)やGNOMEのメニューから"シャットダウン”を 選んで電源再投入をするべきですが、ここではむしろよけいなことをされたくないので、 さっくり落とします。 また、リブート中にLiveCDのメディアを抜いて確実にハードディスクからブートさせてください。jack@opensolaris:~# reboot
マシンは大きな問題なくブートするはずですが、 いくつか修正する必要があるかもしれません。
の一行を加え、リブートします。LAYOUT=キーボード配列の名前
なにか私がリブート前に修正し忘れているファイルがあるのかもしれません
もちろんこの方法によるOpenSolaris 20058.05の導入はSunがサポートする方法ではありませんし、 一台だけ導入するのであれば単に面倒なだけです。 しかし、試験のために何度も導入したり、多くのマシンを導入する際には、 高速で有効な方法だと思います。 実は"zfs send"のイメージをどこかにおこうかと思ったのですが、 2.6GBのサイズになり、 mediacast.sun.comだと500MBごとに切らないといけないのでやめてしまいました。