2013年4月16日
待望の新UNIXサーバ SPARC M10が販売開始されました。SPARC M10には様々な新しい機能や特長があります。詳細はこちらをご覧ください。
さて、SPARC M10はOracle Solaris 10とOracle Solaris 11をサポートしていますが、最新OSであるOracle Solaris 11を使用していただくと、SPARC M10が持つ機能を最大限に活用することができます。
Oracle Solaris 11のファイルシステムは、ZFSが基本になりますが、これまでのシステムではUFSを使われることが多かったと思います。ファイルシステムを移行するのは難しく思えるかも知れませんが、ZFSにはUFSからZFSへ移行するための機能が用意されています。
そこで今回は、Oracle Solaris 10 UFSからOracle Solaris 11 ZFSへデータを移行する方法を2つご紹介したいと思います。
なお、今回ご紹介する環境は、Oracle VM Server for SPARCを用いたゲストドメイン上に構築しています。
そのため、ディスクにはターゲットID(tX)が表示されません。これはOracle VM Server for SPARCの仕様です。
shadow migrationは、NFS経由で既存ファイルシステムをZFS上に移行できる機能です。移行対象のファイルシステムをread onlyにする必要がありますが、サーバそのものは稼働した状態で移行することができます。
今回の移行対象はUFSですが、ZFSからZFSの場合でも使用可能です。
ここでは/ufs1というファイルシステムを移行します。予め移行に必要となる容量を確認します。
Solaris 10# ls -l /ufs1
合計 1390130
-rw-r--r-- 1 root root 11 3月 28日 17:23 file1
drwx------ 2 root root 8192 3月 28日 17:04 lost+found
-rw-r--r-- 1 root root 711372800 3月 28日 17:15 sol-11_1-text-install-sparc.iso
Solaris 10# df -k /ufs1
ファイルシステム kbytes 使用済み 使用可能 容量 マウント先
/dev/dsk/c0d1s0 7261181 702274 6486296 10% /ufs1
まずは移行するファイルシステムをread onlyでマウントし直します。
Solaris 10# umount /ufs1
Solaris 10# mount -F ufs -o ro /dev/dsk/c0d1s0 /ufs1
Solaris 10# mount | grep ufs1
/ufs1 on /dev/dsk/c0d1s0 read only/setuid/devices/intr/largefiles/logging/xattr/onerror=panic/dev=28c0008 on (金) 3月 29 09:49:27 2013
次にこの領域をNFSでshareします。shareする際もread onlyにします。
Solaris 10# share -F nfs -o ro,anon=0 /ufs1
Solaris 10# share
- /ufs1 ro,anon=0 ""
移行元での作業はここで終了です。次からは移行先での作業になります。
shadow migrationを実行するためには移行先システムに「shadow-migration」パッケージが必要になります。このパッケージがインストールされているかどうか確認して、インストールされていなかったら、リポジトリサーバからパッケージをインストールします。
Solaris 11# pkg list shadow-migration
pkg list: no packages matching 'shadow-migration' installed
Solaris 11# pkg install shadow-migration
Packages to install: 1
Create boot environment: No
Create backup boot environment: No
Services to change: 1
DOWNLOAD PKGS FILES XFER (MB) SPEED
Completed 1/1 14/14 0.2/0.2 141k/s
PHASE ITEMS
Installing new actions 39/39
Updating package state database Done
Updating image state Done
Creating fast lookup database Done
Solaris 11# pkg list shadow-migration
NAME (PUBLISHER) VERSION IFO
system/file-system/shadow-migration 0.5.11-0.175.1.0.0.24.2 i--
pkg listコマンドのINFO欄に「i」と表示されると、そのパッケージがインストールされていることを表します。
パッケージをインストールしたら、サービスを有効にします。
Solaris 11# svcs shadowd
STATE STIME FMRI
disabled 9:55:37 svc:/system/filesystem/shadowd:default
Solaris 11# svcadm enable shadowd
Solaris 11# svcs shadowd
STATE STIME FMRI
online 9:57:00 svc:/system/filesystem/shadowd:default
移行するZFSファイルシステムを設定します。今回はすでに作成されているファイルシステム「tank1/zfs1」に移行します。
Solaris 11# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 5.35G 9.17G 73.5K /rpool
・・・省略・・・
tank1 185K 14.6G 33K /tank1
tank1/zfs1 44.5K 14.6G 44.5K /tank1/zfs1
tank1/zfs2 31K 14.6G 31K /tank1/zfs2
zfs setコマンドでshadowプロパティを設定します。プロパティ値として、移行元ファイルシステムを指定します。shadowプロパティを設定すると、この時点でshadow migrationが開始します。
Solaris 11# zfs set shadow=nfs://192.168.1.10/ufs1 tank1/zfs1
Solaris 11# zfs get -r shadow tank1/zfs1
NAME PROPERTY VALUE SOURCE
tank1/zfs1 shadow nfs://192.168.1.10/ufs1 -
shadow migrationの状態は、shadowstatコマンドで確認することができます。マイグレーション実行中は、移行したデータ容量、残りのデータ容量(今回は移行するデータが小さいため表示されていません)、エラー数、経過時間が表示され、マイグレーションが完了すると、「No migrations in progress」と表示されます。
Solaris 11# shadowstat
EST
BYTES BYTES ELAPSED
DATASET XFRD LEFT ERRORS TIME
tank1/zfs1 - - - 00:01:02
tank1/zfs1 - - - 00:01:12
tank1/zfs1 - - - 00:01:22
tank1/zfs1 11 - - 00:01:32
・・・省略・・・
tank1/zfs1 11 - - 00:03:32
No migrations in progress
また、マイグレーションが完了すると、shadowプロパティのVALUEが「none」と変わります。
Solaris 11# zfs get -r shadow tank1/zfs1
NAME PROPERTY VALUE SOURCE
tank1/zfs1 shadow none -
では、移行したデータを確認してみましょう。ファイルのサイズやタイムスタンプが移行元と同一であることを確認してください。
Solaris 11# ls -l /tank1/zfs1
total 1331180
-rw-r--r-- 1 root root 11 3月 28日 17:23 file1
drwx------ 2 root root 2 3月 28日 17:04 lost+found
-rw-r--r-- 1 root root 711372800 3月 28日 17:15 sol-11_1-text-install-sparc.iso
これでshadow migrationは完了です。
UFSのバックアップリストアのコマンドとしておなじみのufsdump/ufsrestoreですが、ufsdumpコマンドで取得したアーカイブをufsrestoreコマンドでZFS上にリストアすることができます。
ufsdumpコマンドでバックアップを取得する前に、移行元システムをシングルユーザモードに移行します。
Solaris 10# shutdown -y -g0 -i0
Shutdown started. 2013年03月29日 (金) 10時15分28秒 JST
・・・省略・・・
{0} ok boot -s
・・・省略・・・
Root password for system maintenance (control-d to bypass):
ファイルシステムをマウントします。
Solaris 10# mountall -l
/dev/rdsk/c0d0s7 is clean
/dev/rdsk/c0d1s0 is clean
/dev/rdsk/c0d1s1 is clean
ここでは/ufs2というファイルシステムを移行します。予め移行に必要となる容量を確認します。
Solaris 10# ls -l /ufs2
合計 5260306
-rw-r--r-- 1 root root 11 3月 28日 17:24 file2
drwx------ 2 root root 8192 3月 28日 17:05 lost+found
-rw-r--r-- 1 root root 2691940352 3月 28日 17:42 sol-11_1-ips_pre-upgrade-repository.iso
Solaris 10# df -k /ufs2
ファイルシステム kbytes 使用済み 使用可能 容量 マウント先
/dev/dsk/c0d1s1 7261181 2637362 4551208 37% /ufs2
ufsdumpコマンドでバックアップを取得していきます。今回は移行先システムにNFSマウントして、移行先システムに直接バックアップを取得します。
Solaris 10# mount -F nfs 192.168.1.11:/tank1/share /mnt
Solaris 10# df -k /mnt
ファイルシステム kbytes 使用済み 使用可能 容量 マウント先
192.168.1.11:/tank1/share
12056834 31 12056803 1% /mnt
また、バックアップ取得前には対象となるファイルシステムをアンマウントします。
Solaris 10# umount /ufs2
では、ufsdumpコマンドでバックアップを取得します。
Solaris 10# ufsdump 0uf /mnt/dumpfile /dev/rdsk/c0d1s1
DUMP: このレベル 0 ダンプの日付: 2013年03月29日 (金) 10時24分48秒
DUMP: 最終レベル 0 ダンプの日付: 基準時間
DUMP: /dev/rdsk/c0d1s1 をダンプ中: ダンプ先: /mnt/dumpfile
DUMP: マップ中 (パス I) [通常のファイル]
DUMP: マップ中 (パス II) [ディレクトリ]
DUMP: 32K バイトのレコードを書き込んでいます
DUMP: 概算値: 5268576 ブロック (2572.55MB)。
DUMP: ダンプ中 (パス III) [ディレクトリ]
DUMP: ダンプ中 (パス IV) [通常のファイル]
DUMP: 5268542 ブロック (2572.53MB)、1 ボリューム 13778 K バイト/秒で
DUMP: ダンプが完了しました
DUMP: レベル 0 を 2013年03月29日 (金) 10時24分48秒 上にダンプ
Solaris 10# ls -l /mnt
合計 5272639
-rw-------+ 1 root root 2697494528 3月 29日 10:27 dumpfile
移行元での作業はこれで終了です。以降は移行先での作業になります。
移行先のファイルシステムを確認します。ここでは「tank1/zfs2」ファイルシステムにリストアします。
Solaris 11# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 5.35G 9.17G 73.5K /rpool
・・・省略・・・
tank1 3.15G 11.5G 35K /tank1
tank1/share 2.51G 11.5G 2.51G /tank1/share
tank1/zfs1 650M 11.5G 650M /tank1/zfs1
tank1/zfs2 31K 11.5G 31K /tank1/zfs2
リストアする前にダンプファイルも確認しておきます。
Solaris 11# ls -l /tank1/share
total 5272639
-rw------- 1 root root 2697494528 3月 29日 10:27 dumpfile
では、ダンプファイルをZFS上にリストアします。
リストアするディレクトリに移動してから、ufsrestoreコマンドでリストアします。
Solaris 11# cd /tank1/zfs2
Solaris 11# ufsrestore rf /tank1/share/dumpfile
ufsrestoreが終わったら、指定したファイルシステムに移行されているか確認してみましょう。
Solaris 11# ls -l /tank1/zfs2
total 5263425
-rw-r--r-- 1 root root 11 3月 28日 17:24 file2
drwx------ 2 root root 2 3月 28日 17:05 lost+found
-rw------- 1 root root 839132 3月 29日 10:31 restoresymtable
-rw-r--r-- 1 root root 2691940352 3月 28日 17:42 sol-11_1-ips_pre-upgrade-repository.iso
restoresymtableファイルは、増分バックアップをリストアする際に必要となります。ZFSへの移行の場合には不要となりますので、削除します。
Solaris 11# rm /tank1/zfs2/restoresymtable
Solaris 11# ls -l
total 5261628
-rw-r--r-- 1 root root 11 3月 28日 17:24 file2
drwx------ 2 root root 2 3月 28日 17:05 lost+found
-rw-r--r-- 1 root root 2691940352 3月 28日 17:42 sol-11_1-ips_pre-upgrade-repository.iso
移行したファイルのサイズやタイムスタンプが移行元と同一であることを確認します。
ZFSなのにufsrestoreコマンドでリストアするのは不思議な気もしますが、ちゃんとリストアできていますね。
今回はUFSからZFSへ移行する2つの方法をご紹介しました。
それぞれの特長としては、shadow migrationはサーバを稼働した状態でファイルシステムを移行することができます。対して、ufsdump/ufsrestoreを用いる方法は、バックアップ前にサーバを停止する必要がありますが、オペレーションはUFS上でのufsdump/ufsrestoreと変わりませんので、慣れた操作で移行できると思います。また、すでにテープ装置などにバックアップを取得しているのであれば、それを用いてZFS上にリストアすることもできます。
みなさんの環境に合わせて、これらの機能を活用してください。
また、今回の内容を手順書としてまとめていますので、こちらも合わせてご活用ください。
応援メッセージはtwitterにて、ハッシュタグ #fjsparc までお願いします。