Solaris,ZFSでいろいろ試してます

blogに書いたように、OpenSolaris 2009.06からOpenIndianaのimage-updateを行いましたが、
Gnomeまわりでトラブルがあり(metacityがcoreはいて落ちる等)、諦めてクリーンインストールの
形を取ることにしました。ただし、ディスク内のデータを消すわけにはいきませんので、
別のディスクにインストールして、そのROOTイメージをコピーする手法を取ります。

eSATAに接続した別のディスクにOpenIndiana Build 148を普通にインストールします。
特別なことは何もしません。その後、元々動いているOpenIndiana Build 148側で起動し、
インストールしたディスクを接続、名前を変えてimportします。
# zpool import
  pool: rpool
    id: 2464591733513819817
 state: ONLINE
status: The pool was last accessed by another system.
action: The pool can be imported using its name or numeric id
        the '-f' flag.
   see: http://www.sun.com/msg/ZFS-8000-EY
config:

        rpool       ONLINE
          c25d1s0   ONLINE
# zpool import -f 2464591733513819817 opool
cannot mount '/export': directory is not empty
cannot mount '/export/home': directory is not empty
# zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
opool    37G  7.40G  29.6G    19%  1.00x  ONLINE  -
rpool   149G   102G  46.7G    68%  1.00x  ONLINE  -^

opool側はoi_148で作成されたためZPOOL version 28なのですが、
rpoolはかなり前からupgradeせずにversion 13のままだったので
このままではzfs version 5のzfs snapshotをコピーできません。
以前のversionから起動できなくなりますが、rpoolをupgradeします。
また、念のためgrubも最新のものを書きこんでおきます。
# zpool upgrade rpool
This system is currently running ZFS pool version 28.

Successfully upgraded 'rpool' from version 13 to version 28

# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c23d0s0
stage2 written to partition 0, 275 sectors starting at 50 (abs 16115)
stage1 written to partition 0 sector 0 (abs 16065)
# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c24d0s0
stage2 written to partition 0, 275 sectors starting at 50 (abs 16115)
stage1 written to partition 0 sector 0 (abs 16065)

これで準備ができましたので、opool/ROOT/openindiana をrpoolにコピーします。
起動パーティション、ファイルシステムの確保を考えないでいいZFSだからできることです。
# zfs snapshot opool/ROOT/openindiana@snap0
# zfs list -r -t all opool/ROOT/openindiana
NAME                             USED  AVAIL  REFER  MOUNTPOINT
opool/ROOT/openindiana          3.47G  25.1G  3.45G  /
opool/ROOT/openindiana@install  18.3M      -  3.38G  -
opool/ROOT/openindiana@snap0        0      -  3.45G  -

# zfs send opool/ROOT/openindiana@install | zfs recv -v rpool/ROOT/openindiana
receiving full stream of opool/ROOT/openindiana@install into rpool/ROOT/openindiana@install
received 3.49GB stream in 340 seconds (10.5MB/sec)
# zfs send -I opool/ROOT/openindiana@install opool/ROOT/openindiana@snap0 | zfs recv -v rpool/ROOT/openindiana
receiving incremental stream of opool/ROOT/openindiana@snap0 into rpool/ROOT/openindiana@snap0
received 123MB stream in 20 seconds (6.14MB/sec)

# zfs set mountpoint=/ rpool/ROOT/openindiana
cannot mount '/': directory is not empty
property may be set but unable to remount filesystem

# zfs rename rpool/ROOT/openindiana rpool/ROOT/oi_148

/rpool/boot/grub/menu.lst を編集して、oi_148を追加しておきます。
これで、beadmで見えるようになります。もはや起動しないのがほとんどですが。
# beadm list
BE              Active Mountpoint Space  Policy Created
--              ------ ---------- -----  ------ -------
oi_148          -      -          3.49G  static 2011-07-30 16:18
openindiana-148 NR     /          15.71G static 2011-07-03 14:46
opensolaris     -      -          82.14M static 2009-02-13 22:27
opensolaris-1   -      -          14.10G static 2009-03-13 20:37
opensolaris-134 -      -          16.60M static 2011-07-03 00:11
opensolaris_111 -      -          2.20M  static 2009-10-25 00:10
snv_107         -      -          7.76G  static 2009-02-20 22:37

あとは今使っている環境に関するファイルをコピーしておきます。
# beadm mount oi_148 /mnt
# cd /etc
# cp passwd shadow group rtc_config nodename hosts defaultrouter  /mnt/etc/
# cp power.conf resolv.conf nsswitch.conf hostname.rge0 vfstab  /mnt/etc/
# cp -pr ssh /mnt/etc/
# cp -pr /root /mnt/
# beadm umount oi_148

これで完了です。beadm activate oi_148 でoi_148から起動しました。
タグ

管理人/副管理人のみ編集できます