GTM-MML4VXJ
Skip to main content

まっちーの仮想化講座
第17回:UFSからZFSへの移行

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

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の状態確認

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は完了です。

ufsdump/ufsrestore

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にて、ハッシュタグ #fjsparcOpen a new window までお願いします。