ZFS

2010年12月02日

このエントリーをはてなブックマークに追加

Native ZFS for Linux』を検証してみたい

fuse版『zfs-fuse』ではなく、Linuxカーネルモジュール版『Native ZFS for Linux』が利用可能になった。
まずは、LinuxにZFS環境を構築して行く。


▼検証環境

  • Ubuntu 10.04.1 LTS
  • Linux 2.6.35-22-server
ビルド前チェック
  1. ビルドに必要なパッケージはインストールされているか
    
    $ sudo apt-get -y install git-core gawk dpkg-dev alien uuid-dev zlib1g zlib1g-dev
    
    必要に応じてインストールする
  2. カーネルヘッダーモジュールはインストールされているか
    
    $ uname -r
    2.6.32-24-server
    $ dpkg -l | grep `uname -r` | grep header
    ii  linux-headers-2.6.32-24-server 2.6.32-24.39 Linux kernel headers for version 2.6.32 on x
    
  3. ビルド用カーネルバージョンと起動中カーネルバージョンは同じか
    
    $ dpkg -l | grep `uname -r` | grep header
    ii  linux-headers-2.6.32-24-server 2.6.32-24.39 Linux kernel headers for version 2.6.32 on x
    

Native ZFS on Linux環境構築

嬉しい事に、debパッケージが生成されるようになっている。
RHEL系であればrpmパッケージが生成されるようだ。

▼ZFSが依存するSPL(Solaris Porting Layer)


$ git clone git://github.com/behlendorf/spl.git
$ cd spl
$ ./configure
$ make pkg
$ make
$ cd ..

make pkgの後にmakeを実行しているのは、後述のZFS構築時にシンボルが必要となる為。
make pkgでは、cleanされた状態になるのでシンボルが削除されてしまう。

▼ZFS


$ git clone git://github.com/behlendorf/zfs.git
$ cd zfs
$ ./configure --with-spl=`pwd`/../spl/
$ make pkg
$ cd ..

▼パッケージをインストール

生成されたdebパッケージは下記の通り。


$ ls -1 */*.deb
spl/spl_0.5.2-2_amd64.deb
spl/spl-modules_0.5.2-2_amd64.deb
spl/spl-modules-devel_0.5.2-2_amd64.deb
zfs/zfs_0.5.2-2_amd64.deb
zfs/zfs-devel_0.5.2-2_amd64.deb
zfs/zfs-modules_0.5.2-2_amd64.deb
zfs/zfs-modules-devel_0.5.2-2_amd64.deb
zfs/zfs-test_0.5.2-2_amd64.deb

パッケージをインストールする。


$ sudo dpkg -i spl/*.deb
$ sudo dpkg -i zfs/*.deb

パッケージの内容と状態を確認。今回は「0.5.2-2」となっている。


$ dpkg -l |grep zfs
ii  zfs                 0.5.2-2   ZFS Library and Utils
ii  zfs-devel           0.5.2-2   ZFS File System User Headers
ii  zfs-modules         0.5.2-2   ZFS File System
ii  zfs-modules-devel   0.5.2-2   ZFS File System Headers and Symbols
ii  zfs-test            0.5.2-2   ZFS File System Test Infrastructure

ZFS有効化

▼modprobeでモジュールを組み込む


$ sudo modprobe zfs

▼lsmodでモジュールの状態を確認


$ lsmod |grep zfs
zfs                   862477  0
zcommon                40316  1 zfs
znvpair                47453  2 zfs,zcommon
zavl                    6891  1 zfs
zlib_deflate           21834  1 zfs
zunicode              323374  1 zfs
spl                   106714  5 zfs,zcommon,znvpair,zavl,zunicode

これで無事にzfsが認識された。

▼zfsコマンド, zpoolコマンドを実行確認


$ sudo zfs list
no datasets available

$ sudo zpool list
no pools available

エラーが出ないことを確認出来た。
後はプールを作成するなり、ファイルシステムを作成するなり、可能状態。

検証準備は完了。次回へ続く…?

続きを読む


編集
@hansode at 15:05|PermalinkComments(0)TrackBack(0)

2010年05月06日

このエントリーをはてなブックマークに追加

EBS Backed domUを構築しよう

iSCSIのおかげで手軽にデバイスをattach/detach可能になった。

環境を構築する場合、S3 BackedよりはEBS Backedが便利だ。
そこで、EBS BackedのdomUを構築し、複製から復元を行う。

▼戦略

  1. dom0
    1. iSCSIデバイスに対し、ファイルシステム構築
    2. iSCSIデバイス内に最小構成環境を構築
    3. domUの仮想デバイスとしてiSCSIデバイスを指定し、起動
  2. domU-1
    1. ログイン
    2. ホスト名を記録したファイルを生成
  3. zfs
    1. 起動中domUのVolumeからsnapshotを作成
    2. 作成したsnapshotから、cloneして新規Volume作成
    3. cloneしたVolumeを、iSCSIターゲットとして公開
  4. dom0
    1. cloneして生成したiSCSIターゲットに接続
    2. 新iSCSIデバイスを仮想デバイスとして指定し、新たにdomUを起動
  5. domU-2
    1. ログイン
    2. clone元domUとは違うdomUである事を確認

複製元domU環境

▼domUの種イメージ用ツリーを作成


dom0$ cd /tmp
dom0$ git clone git://github.com/hansode/vmbuilder.git
dom0$ sudo /tmp/vmbuilder/xen/redhat/make-domu-tree.sh --dist=fedora --ver=8 --arch=i386

▼iSCSIデバイスにファイルシステムを構築し、ツリーの内容を同期


dom0$ sudo mkfs.ext3 /dev/sdc
dom0$ sudo /dev/sdc /mnt
dom0$ sudo rsync -avx /tmp/fedora-8_i386/ /mnt/
dom0$ sudo umount /mnt

▼domU-1起動準備


dom0$ cd /home/xen/domu
dom0$ sudo mkdir fc8-ebs-backed-sdc
dom0$ cd fc8-ebs-backed-sdc
dom0$ sudo vi ebs-backed.cfg

▼domU-1用cfg作成


name        = 'fc8-ebs-backed-sdc'
memory      = '256'
vcpus       = 1
bootroader  = '/usr/bin/pygrub'
root        = '/dev/xvda ro'
vfb         = [ ]
disk        = [ 'phy:/dev/sdc,xvda,w' ]
vif         = [ '' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

▼domU-1起動


dom0$ sudo xm create -c ./ebs-backed.cfg
...(省略)...

▼domU-1にログイン


login: root
domU-1# touch `hostname`

/root/`hostname`として識別可能


domUを量産

▼起動中インスタンスのVolumeからスナップショット作成


zfs$ time pfexec zfs snapshot rpool/ebs/vol-001@`date +%Y-%m-%d-%H:%M:%S`
zfs$ zfs list -t snapshot |grep rpool/ebs
rpool/ebs/vol-001@2010-04-28-18:35:29             0      -   793M  -
zfs$ pfexec zfs clone rpool/ebs/vol-001@2010-04-28-18:35:29 rpool/ebs/vol-001.ebs-backed.clone
zfs$ zfs list |grep rpool/ebs/
rpool/ebs/vol-001                   1.81G   206G   793M  -
rpool/ebs/vol-001.ebs-backed.clone      0   205G   793M  -

▼iSCSIターゲット設定


zfs$ pfexec zfs set shareiscsi=on rpool/ebs/vol-001.ebs-backed.clone
zfs$ iscsitadm list target rpool/ebs/vol-001.ebs-backed.clone
Target: rpool/ebs/vol-001.ebs-backed.clone
    iSCSI Name: iqn.1986-03.com.sun:02:5a2e64d3-ef9b-4404-ed53-90fa4a0b83ae
    Connections: 0
a

▼iSCSI接続


dom0# iscsiadm -m discovery -t sendtargets -p 192.168.1.21
192.168.1.21:3260,1 iqn.1986-03.com.sun:02:8353afa5-f355-61f2-84ee-fac93b2e3eb7
192.168.1.21:3260,1 iqn.1986-03.com.sun:02:5a2e64d3-ef9b-4404-ed53-90fa4a0b83ae
dom0# iscsiadm -m node -l -T iqn.1986-03.com.sun:02:5a2e64d3-ef9b-4404-ed53-90fa4a0b83ae
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:5a2e64d3-ef9b-4404-ed53-90fa4a0b83ae, portal: 192.168.1.21,3260]
Login to [iface: default, target: iqn.1986-03.com.sun:02:5a2e64d3-ef9b-4404-ed53-90fa4a0b83ae, portal: 192.168.1.21,3260]: successful

▼iSCSIデバイス名を確認


dom0# ls -la /dev/disk/by-path/ | grep iqn.1986-03.com.sun:02:5a2e64d3-ef9b-4404-ed53-90fa4a0b83ae
lrwxrwxrwx 1 root root   9 Apr 28 18:44 ip-192.168.1.21:3260-iscsi-iqn.1986-03.com.sun:02:5a2e64d3-ef9b-4404-ed53-90fa4a0b83ae-lun-0 -> ../../sdd
項目内容
IQNiqn.1986-03.com.sun:02:5a2e64d3-ef9b-4404-ed53-90fa4a0b83ae
デバイス名/dev/sdd

▼domU-2起動準備


dom0# cd /home/xen/domu
dom0# mkdir fc8-ebs-backed-sdc
dom0# cd fc8-ebs-backed-sdd
dom0# sudo vi ebs-backed.cfg

▼domU-2用cfg作成


name        = 'fc8-ebs-backed-sdd'
memory      = '256'
vcpus       = 1
bootroader  = '/usr/bin/pygrub'
root        = '/dev/xvda ro'
vfb         = [ ]
disk        = [ 'phy:/dev/sdd,xvda,w' ]
vif         = [ '' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

▼起動前のdomU一覧確認


dom0# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  3773     4     r-----    330.9
fc8-ebs-backed-sdc                           2   256     1     -b----     16.1

domUが1つ起動している事が分かる

▼domU-2を起動


dom0# xm create -c ./ebs-backed.cfg

▼domU-2にログイン


login: root
domU-2# 

▼clone元のdomU-1で生成したファイルの存在を確認


domU-2# ls
node184.shinjuku.axsh.intra

▼domU-2のホスト名を確認


domU-2# hostname
node189.shinjuku.axsh.intra

別物出ある事を確認

▼ログイン記録を確認してみると


domU# last
root     xvc0                          Wed Apr 28 18:47   still logged in
reboot   system boot  2.6.21-2950.fc8x Wed Apr 28 18:47          (00:02)
root     xvc0                          Wed Apr 28 18:36 - crash  (00:10)
reboot   system boot  2.6.21-2950.fc8x Wed Apr 28 18:31          (00:17)

wtmp begins Wed Apr 28 18:31:12 2010

起動中にcloneすると、crash扱いされている。



あと書き

以上の様に、あっさり手軽にdomUを複製出来る事が分かる。

今回は起動中domUのVolumeからsnapshot、cloneした。
あらかじめ種Volumeを作っておき、種Volumeをcloneして行けばdomUを手軽に量産可能だ。

まだまだ手作業が多い。
今後は手順を単純化して行く。

続きを読む


編集
@hansode at 15:50|PermalinkComments(0)TrackBack(0)

2010年04月27日

このエントリーをはてなブックマークに追加

続・Amazon EBSに対する基本操作をしてみる

▼戦略

  1. zfs
    1. domUにattach済volumeからsnapshot作成
    2. 作成したsnapshotからcloneを作成
    3. 作成したcloneからvolumeを作成
    4. volumeをiSCSIターゲット化
  2. dom0
    1. iSCSIイニシエータからiSCSIターゲットにログイン
    2. iSCSIデバイスをdomUにattach
  3. domU
    1. domUからattach済volumeをマウント
    2. ファイルシステムの内容確認

snapshot作成

▼snapshot作成前の状態確認


zfs$ zfs list | grep rpool/ebs
rpool/ebs                 1.03G   206G    21K  /rpool/ebs
rpool/ebs/vol-001         1.03G   207G  78.8M  -

この時はvol-001のみ存在している

▼snapshotを作成


zfs$ pfexec zfs snapshot rpool/ebs/vol-001@`date +%Y-%m-%s-%H:%M:%S`

▼作成したsnapshotの状態を確認


zfs$ zfs list -t snapshot |grep rpool/ebs
rpool/ebs/vol-001@2010-04-1272361747-18:49:07      0      -  78.8M  -

「rpool/ebs/vol-001@2010-04-1272361747-18:49:07」が作成された


snapshotからvolume作成

▼snapshotからcloneによりvolumeを作成


zfs$ pfexec zfs clone rpool/ebs/vol-001@2010-04-1272361747-18:49:07 rpool/ebs/vol-001.clone

▼clone後のvolumeの状態を確認


zfs$ zfs list | grep rpool/ebs
rpool/ebs                 1.11G   206G    21K  /rpool/ebs
rpool/ebs/vol-001         1.11G   207G  78.8M  -
rpool/ebs/vol-001.clone       0   206G  78.8M  -

「rpool/ebs/vol-001.clone」が作成された


dom0にiSCSIデバイスを割り当て

▼cloneされたvolumeをiSCSIターゲットに追加


zfs$ pfexec zfs set shareiscsi=on rpool/ebs/vol-001.clone

▼iSCSIターゲットの状態を確認


zfs$ iscsitadm list target
Target: rpool/ebs/vol-001
    iSCSI Name: iqn.1986-03.com.sun:02:8353afa5-f355-61f2-84ee-fac93b2e3eb7
    Connections: 1
Target: rpool/ebs/vol-001.clone
    iSCSI Name: iqn.1986-03.com.sun:02:54f28b67-e6c0-ed9c-e40c-a45aa81c4efa
    Connections: 0

「rpool/ebs/vol-001.clone」がiSCSIターゲットにエントリされている
IQNは「iqn.1986-03.com.sun:02:54f28b67-e6c0-ed9c-e40c-a45aa81c4efa」

▼iSCSIイニシエータからiSCSIターゲットを確認


dom0# iscsiadm -m discovery -t sendtargets -p 192.168.1.21
192.168.1.21:3260,1 iqn.1986-03.com.sun:02:8353afa5-f355-61f2-84ee-fac93b2e3eb7
192.168.1.21:3260,1 iqn.1986-03.com.sun:02:54f28b67-e6c0-ed9c-e40c-a45aa81c4efa

▼iSCSIターゲットに接続


dom0# iscsiadm -m node -l
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:8353afa5-f355-61f2-84ee-fac93b2e3eb7, portal: 192.168.1.21,3260]
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:54f28b67-e6c0-ed9c-e40c-a45aa81c4efa, portal: 192.168.1.21,3260]
iscsiadm: Could not login to [iface: default, target: iqn.1986-03.com.sun:02:8353afa5-f355-61f2-84ee-fac93b2e3eb7, portal: 192.168.1.21,3260]:
iscsiadm: initiator reported error (15 - already exists)
Login to [iface: default, target: iqn.1986-03.com.sun:02:54f28b67-e6c0-ed9c-e40c-a45aa81c4efa, portal: 192.168.1.21,3260]: successful

ログインに成功

▼iSCSIデバイスを確認


dom0# ls -la /dev/disk/by-path/ | grep iqn.1986-03.com.sun:02:54f28b67-e6c0-ed9c-e40c-a45aa81c4efa
lrwxrwxrwx 1 root root   9 Apr 27 19:04 ip-192.168.1.21:3260-iscsi-iqn.1986-03.com.sun:02:54f28b67-e6c0-ed9c-e40c-a45aa81c4efa-lun-0 -> ../../sdd

「/dev/sdd」にマッピングされた


domUにvolumeを割り当て

▼domUに割り当てる


dom0# xm block-attach fc8-001 phy:/dev/sdd xvdd w

/dev/sddを/dev/xvdとして割り当てる

▼domUのデバイスを確認


domU# dmesg |grep xvdd
 xvdd: unknown partition table
domU# fdisk -l /dev/xvdd

Disk /dev/xvdd: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Disk /dev/xvdd doesn't contain a valid partition table

domUにてブロックデバイスとして認識されている

▼マウント前の状況確認


domU# mount |grep /dev/xvd
/dev/xvda on / type ext3 (rw)
/dev/xvdc on /mnt type ext3 (rw)

/dev/xvddはマウントされてない

▼/dev/xvddをマウント


domU# mkdir /mnt2
domU# mount /dev/xvdd /mnt2/

/dev/xvddを/mnt2へマウント

▼マウント後の状態確認


domU# mount |grep /dev/xvd
/dev/xvda on / type ext3 (rw)
/dev/xvdc on /mnt type ext3 (rw)
/dev/xvdd on /mnt2 type ext3 (rw)

/dev/xvddが/mnt2へマウントされた

▼ファイルシステムの内容を確認


domU# ls -la /mnt2
total 30781
drwxr-xr-x  3 root root     4096 Apr 27 18:32 .
drwxr-xr-x 22 root root     1024 Apr 27 19:16 ..
-rw-r--r--  1 root root 10485760 Apr 27 18:32 10m.img
-rw-r--r--  1 root root 20971520 Apr 27 18:32 20m.img
drwx------  2 root root    16384 Apr 27 18:30 lost+found

domU# ls -la /mnt
total 30781
drwxr-xr-x  3 root root     4096 Apr 27 18:32 .
drwxr-xr-x 22 root root     1024 Apr 27 19:16 ..
-rw-r--r--  1 root root 10485760 Apr 27 18:32 10m.img
-rw-r--r--  1 root root 20971520 Apr 27 18:32 20m.img
drwx------  2 root root    16384 Apr 27 18:30 lost+found

domU# ls -la /mnt | md5sum
1722eb2df6ced256bc63506f8f9d195e  -
domU# ls -la /mnt2 | md5sum
1722eb2df6ced256bc63506f8f9d195e  -

/mntと/mnt2の内容が同じ事を確認

▼新volumeに対してファイル操作


domU# cd /mnt2/
domU# time dd if=/dev/zero of=30m.img bs=1M count=30
30+0 records in
30+0 records out
31457280 bytes (31 MB) copied, 0.17256 s, 182 MB/s

real    0m0.238s
user    0m0.000s
sys     0m0.136s

domU# ls -la
total 61537
drwxr-xr-x  3 root root     4096 Apr 27 19:20 .
drwxr-xr-x 22 root root     1024 Apr 27 19:16 ..
-rw-r--r--  1 root root 10485760 Apr 27 18:32 10m.img
-rw-r--r--  1 root root 20971520 Apr 27 18:32 20m.img
-rw-r--r--  1 root root 31457280 Apr 27 19:20 30m.img
drwx------  2 root root    16384 Apr 27 18:30 lost+found

30m.imgが新規生成された。

▼/mntと/mnt2の状態確認


domU# ls -la /mnt | md5sum
1722eb2df6ced256bc63506f8f9d195e  -
domU# ls -la /mnt2 | md5sum
567c65c8a4c6992be86491afadf58f63  -

domU# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/xvda               416484    382754     12226  97% /
tmpfs                   134484         0    134484   0% /dev/shm
/dev/xvdc              1032088     64852    914808   7% /mnt
/dev/xvdd              1032088     95608    884052  10% /mnt2

/mntと/mnt2が別物出ある事を確認出来る


これにより、Amazon EBSの基本操作まで確認出来た。
今後の作業後は、手順を簡略化して行く。

続きを読む


編集
@hansode at 19:30|PermalinkComments(0)TrackBack(0)

2010年04月26日

このエントリーをはてなブックマークに追加

Amazon EBSに対する基本操作をしてみる

そろそろ外堀から内堀へ攻め入る。

▼戦略

  1. dom0
    1. domUを起動
    2. domUに対し、iSCSIデバイスをattach
  2. domU
    1. デバイスを確認
    2. ファイルシステムを構築
    3. マウント
    4. ddでファイルを新規作成
  3. zfs
    1. dedupの変化を観察
  4. domU
    1. デバイスをアンマウント
  5. dom0
    1. iSCSIデバイスをdetach

※attachとdetachの検証だけなら、iSCSIは不用であるが、そこは議論の対象外。



暫定的に最小構成domUを用意

▼サンプルdomU用意ディレクトリ準備


dom0# mkdir -p /home/xen/domu
dom0# cd /home/xen/domu/
dom0# mkdir fc8-001
dom0# cd fc8-001/

▼Fedra Core 8のイメージを用意


dom0# cp /path/to/mntpool/sdc2/fc8_i386_420mb.img ./.

※イメージ構築方法は本題から逸れるので、今回は省略する

▼cfg生成


name        = 'fc8-001'
memory      = '256'
vcpus       = 1
bootroader  = '/usr/bin/pygrub'
root        = '/dev/xvda ro'
vfb         = [ ]
disk        = [ 'tap:aio:/home/xen/domu/fc8-001/fc8_i386_420mb.img,xvda,w' ]
vif         = [ '' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

「/」パーティションのみの最小構成domU

▼domU起動


dom0# xm create ./fc8_i386_420mb.cfg
dom0# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  3773     4     r-----     40.0
fc8-001                                      1   256     1     -b----     17.7

▼domUへログイン


domU# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/xvda               416484    382680     12300  97% /
tmpfs                   134484         0    134484   0% /dev/shm

サンプルdomUが起動した



インスタンスに対してEBS Volumeのような操作を行う

▼dom0のiSCSIデバイスをdomUへattach


dom0# xm block-attach fc8-001 phy:/dev/sde xvde w

▼domUでデバイス確認


domU# dmesg | grep xvde
 xvde: unknown partition table

domU# fdisk -l /dev/xvde

Disk /dev/xvde: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Disk /dev/xvde doesn't contain a valid partition table

fdiskの出力結果から、/dev/xvdeとして認識され、1Gである事が分かる。

▼attachしたデバイスにファイルシステム構築


domU# mkfs.ext3 /dev/xvde
mke2fs 1.40.2 (12-Jul-2007)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
131072 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

▼/dev/xvdeを/mntへマウント


domU# mount /dev/xvde /mnt
domU# mount
/dev/xvda on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/xvde on /mnt type ext3 (rw)

iSCSIデバイス/dev/sdeは、domUにて、/dev/xvdeが/mntへマウントする所まで成功



domUから操作し、dedupの変化を観測してみる

▼作業前のpool状態


zfs$ zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
rpool   230G  17.9G   212G     7%  1.00x  ONLINE  -

DEDUPは 1.00x

▼/dev/zeroから10Mイメージを生成


domU# cd /mnt/
domU# time dd if=/dev/zero of=10m.img bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.017983 s, 583 MB/s

real    0m0.021s
user    0m0.000s
sys     0m0.016s

▼iSCSIターゲットにてpoolの状態確認


zfs$ zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
rpool   230G  17.9G   212G     7%  1.69x  ONLINE  -

DEDUPは1.69x

▼/dev/zeroから20Mイメージを生成


domU# time dd if=/dev/zero of=20m.img bs=1M count=20
20+0 records in
20+0 records out
20971520 bytes (21 MB) copied, 0.093933 s, 223 MB/s

real    0m0.114s
user    0m0.000s
sys     0m0.096s

zfs$ zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
rpool   230G  18.0G   212G     7%  2.08x  ONLINE  -

dedupの数値に変化がある事を観測

▼DEDUPの変化履歴

  1. 1.00x
  2. 1.69x
  3. 2.08x

▼detachするため、umount


domU# cd /
domU# umount /mnt

▼domUからVolumeをdetach


dom0# xm block-detach fc8-001 xvde

▼domUからデバイスが取り外された事を確認


domU# ls -la /dev/xvd*
brw-r----- 1 root disk 202, 0 Apr 26 20:50 /dev/xvda

/dev/xvdeが無い事を確認。つまり、detachされた。


次回はSnapshot

続きを読む


編集
@hansode at 21:30|PermalinkComments(0)TrackBack(0)
このエントリーをはてなブックマークに追加

Amazon EBSもどきの基礎固め

ZFSのボリュームをデバイスファイル扱いする為、iSCSIを利用する。

▼論理構成

  • iSCSIターゲット: OpenSolaris
  • iSCSIイニシエータ: Linux(CentOS)
    • iSCSIイニシエータはXen dom0を兼ねる

▼戦略

  1. iSCSIターゲット構築
    1. ZFS Volume作成
    2. iSCSIターゲット化
  2. iSCSIイニシエータ構築
    1. iSCSIターゲットにログイン
    2. IQNとデバイスファイルとの対応状況確認

Xen dom0からiSCSIデバイスを利用する所まで作業を勧める。


iSCSIターゲット:OpenSolaris(snv_134)

▼サービス確認


$ svcs -a |grep iscsi
$ pfexec svcadm enable iscsitgt
svcadm: Pattern 'iscsitgt' doesn't match any instances

iSCSIパッケージが不足している

▼iSCSIパッケージインストール


$ pfexec pkg install SUNWiscsi SUNWiscsitgt
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                              655/655       29/29      1.5/1.5

PHASE                                        ACTIONS
Removal Phase                              5872/5872
Install Phase                                124/124

▼iSCSIサービス有効化と確認


$ pfexec svcadm enable iscsitgt
$ svcs -a |grep iscsi
online         16:29:17 svc:/network/iscsi/initiator:default
online         16:30:20 svc:/system/iscsitgt:default

iSCSIサービスが起動した


$ pfexec svcadm disable initiator
$ svcs -a |grep iscsi
disabled       17:36:16 svc:/network/iscsi/initiator:default
online         17:36:29 svc:/system/iscsitgt:default

initiatorは不用なので無効化

▼検証用ZFS Volumeを生成


$ pfexec zfs create -V 1g rpool/ebs/vol-001
$ pfexec zfs create -V 1g rpool/ebs/vol-002
$ pfexec zfs create -V 1g rpool/ebs/vol-003

ここでは1Gで生成

▼ZFS VolumeをiSCSIターゲットとして公開


$ pfexec zfs set shareiscsi=on rpool/ebs/vol-001
$ pfexec zfs set shareiscsi=on rpool/ebs/vol-002
$ pfexec zfs set shareiscsi=on rpool/ebs/vol-003

▼iSCSIターゲットの公開用ベースディレクトリを設定


$ pfexec iscsitadm modify admin -d /rpool/ebs
$ pfexec iscsitadm show admin
iscsitadm:
    Base Directory: /rpool/ebs
    CHAP Name: Not set
    RADIUS Access: Not set
    RADIUS Server: Not set
    iSNS Access: Not set
    iSNS Server: Not set
    iSNS Server Status: Not applicable
    Fast Write ACK: Not set

▼iSCSIターゲットを確認


$ pfexec iscsitadm list target
Target: rpool/ebs/vol-001
    iSCSI Name: iqn.1986-03.com.sun:02:bebaaaa0-6bb8-67c0-bfd8-8605542386f6
    Connections: 0
Target: rpool/ebs/vol-002
    iSCSI Name: iqn.1986-03.com.sun:02:adb08b5a-6e10-c3d6-f484-997f3edcda00
    Connections: 0
Target: rpool/ebs/vol-003
    iSCSI Name: iqn.1986-03.com.sun:02:7d558ccf-b1c6-c21f-c1a9-9859728b3dd8
    Connections: 0
iSCSIイニシエータ:Linux(CentOS-5.4)

▼iscsi-initiator-utilsをインストール


# yum install iscsi-initiator-utils
# chkconfig --list iscsi
iscsi           0:off   1:off   2:off   3:on    4:on    5:on    6:off
# /etc/init.d/iscsi start

▼iSCSIターゲットを検索


# iscsiadm -m discovery -t sendtargets -p 192.168.1.21
192.168.1.21:3260,1 iqn.1986-03.com.sun:02:adb08b5a-6e10-c3d6-f484-997f3edcda00
192.168.1.21:3260,1 iqn.1986-03.com.sun:02:bebaaaa0-6bb8-67c0-bfd8-8605542386f6
192.168.1.21:3260,1 iqn.1986-03.com.sun:02:7d558ccf-b1c6-c21f-c1a9-9859728b3dd8

iSCSIターゲットを発見

▼iSCSIターゲットにログイン


# iscsiadm -m node -T iqn.1986-03.com.sun:02:adb08b5a-6e10-c3d6-f484-997f3edcda00 -l
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:adb08b5a-6e10-c3d6-f484-997f3edcda00, portal: 192.168.1.21,3260]
Login to [iface: default, target: iqn.1986-03.com.sun:02:adb08b5a-6e10-c3d6-f484-997f3edcda00, portal: 192.168.1.21,3260]: successful

# iscsiadm -m node -T iqn.1986-03.com.sun:02:bebaaaa0-6bb8-67c0-bfd8-8605542386f6 -l
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:bebaaaa0-6bb8-67c0-bfd8-8605542386f6, portal: 192.168.1.21,3260]
Login to [iface: default, target: iqn.1986-03.com.sun:02:bebaaaa0-6bb8-67c0-bfd8-8605542386f6, portal: 192.168.1.21,3260]: successful

# iscsiadm -m node -T iqn.1986-03.com.sun:02:7d558ccf-b1c6-c21f-c1a9-9859728b3dd8 -l
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:7d558ccf-b1c6-c21f-c1a9-9859728b3dd8, portal: 192.168.1.21,3260]
Login to [iface: default, target: iqn.1986-03.com.sun:02:7d558ccf-b1c6-c21f-c1a9-9859728b3dd8, portal: 192.168.1.21,3260]: successful

3ターゲットにログイン成功

▼iSCSIターゲットとデバイスファイルのマッピングを確認


# ls -la /dev/disk/by-path/ | grep iqn.
lrwxrwxrwx 1 root root   9 Apr 26 19:51 ip-192.168.1.21:3260-iscsi-iqn.1986-03.com.sun:02:7d558ccf-b1c6-c21f-c1a9-9859728b3dd8-lun-0 -> ../../sdf
lrwxrwxrwx 1 root root   9 Apr 26 19:50 ip-192.168.1.21:3260-iscsi-iqn.1986-03.com.sun:02:adb08b5a-6e10-c3d6-f484-997f3edcda00-lun-0 -> ../../sdd
lrwxrwxrwx 1 root root   9 Apr 26 19:51 ip-192.168.1.21:3260-iscsi-iqn.1986-03.com.sun:02:bebaaaa0-6bb8-67c0-bfd8-8605542386f6-lun-0 -> ../../sde

▼マッピング情報

IQNデバイスファイル
iqn.1986-03.com.sun:02:adb08b5a-6e10-c3d6-f484-997f3edcda00/dev/sdd
iqn.1986-03.com.sun:02:bebaaaa0-6bb8-67c0-bfd8-8605542386f6/dev/sde
iqn.1986-03.com.sun:02:7d558ccf-b1c6-c21f-c1a9-9859728b3dd8/dev/sdf

これ以降、SCSIデバイスとして扱える。
fdiskコマンド、mkfsコマンド、そしてmountコマンドにより利用可能状態へ持って行ける。

続きを読む


編集
@hansode at 20:10|PermalinkComments(0)TrackBack(0)
このエントリーをはてなブックマークに追加

重複排除を体験した

ZFSの目玉機能の1つ「deduplicate」。

検証用ファイルシステム作成

▼検証用にファイルシステムを作成


$ pfexec zfs create rpool/ebs

▼作成したファイルシステムの容量確認


$ df -h /rpool/ebs/
Filesystem            Size  Used Avail Use% Mounted on
rpool/ebs             207G   21K  207G   1% /rpool/ebs

できたてホヤホヤ

▼poolの状態を確認


$ zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
rpool   230G  17.9G   212G     7%  1.00x  ONLINE  -

DEDUPに着目。1.00xとなっている事を覚えておく。

内容が重複するように/dev/zeroからファイルを生成

▼5Gのイメージファイルを生成


$ cd /rpool/ebs/
$ time pfexec dd if=/dev/zero of=5gb.img bs=1M count=5000
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB) copied, 29.9339 s, 175 MB/s

real    0m29.942s
user    0m0.006s
sys     0m2.002s

▼ファイル生成後の状態確認


$ df -h /rpool/ebs/
Filesystem            Size  Used Avail Use% Mounted on
rpool/ebs             212G  4.8G  207G   3% /rpool/ebs
$ zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
rpool   230G  17.9G   212G     7%  1.00x  ONLINE  -

確認項目

  • ディスク使用済サイズ: 4.8G
  • FREE: 212G
  • DEDUP: 1.00x
dedupの機能検証

▼いよいよ、ファイルをコピーしてdedup具合を確認してみる


$ time pfexec cp 5gb.img 5gb.img-dup

real    0m22.665s
user    0m0.034s
sys     0m6.124s

▼コピー後の状態を確認


$ df -h /rpool/ebs/
Filesystem            Size  Used Avail Use% Mounted on
rpool/ebs             216G  9.4G  207G   5% /rpool/ebs
$ zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
rpool   230G  17.9G   212G     7%  55494.25x  ONLINE  -

確認項目

  • ディスク使用済サイズ: 9.4G
  • FREE: 212G
  • DEDUP: 55494.25x

DEDUPの数値が増加した。

  • dfコマンドによるディスク使用量は増加
  • zpool listコマンドによる使用量は微増程度

…と言う所で、dedup検証は一旦終了。
「あってよかった」と思うのは、しばらくしてからなのだろう。

続きを読む


編集
@hansode at 16:10|PermalinkComments(0)TrackBack(0)
このエントリーをはてなブックマークに追加

失敗を乗り越えろ

▼いざ、dedupをonへ!


$ pfexec zfs set dedup=on rpool
cannot set property for 'rpool': pool and or dataset must be upgraded to set this property or value

おや…?

▼versionを確認


$ zpool get version rpool
NAME   PROPERTY  VALUE    SOURCE
rpool  version   14       local

うわぉ…。ZFS pool versionが14と言う事か。
dedupをonにするには、ZFS pool version 21以降が必要。


poolをアップグレード

ZFS 環境をアップグレードする方法を参考に、アップグレード作業。

▼作業前のpoolバージョン情報


$ pfexec zpool upgrade
This system is currently running ZFS pool version 22.

The following pools are out of date, and can be upgraded.  After being
upgraded, these pools will no longer be accessible by older software versions.

VER  POOL
---  ------------
14   rpool

Use 'zpool upgrade -v' for a list of available versions and their associated
features.

▼アップグレード


$ pfexec zpool upgrade -a
This system is currently running ZFS pool version 22.

Successfully upgraded 'rpool'

▼作業後のpoolバージョン情報


$ pfexec zpool upgrade
This system is currently running ZFS pool version 22.

All pools are formatted using this version.

ZFS pool version 22来た!

改めてdedupを有効化

▼改めてdedupを有効化…


$ pfexec zfs set dedup=on rpool

おー。警告なく、完了したぞ。

▼dedupの状態を表示


$ zfs get dedup rpool
NAME   PROPERTY  VALUE          SOURCE
rpool  dedup     on             local

「on」となった。成功だ。

続きを読む


編集
@hansode at 14:40|PermalinkComments(0)TrackBack(0)
このエントリーをはてなブックマークに追加

build#128以上にしたい

ZFSのdedupを利用するには、「snv_128」以降が必要となる。
2009.06のリリース版だと「snv_111」だ。

OpenSolarisユーザーから最新版を使う事を勧められたので、最新版へアップグレードする。


作業内容

OpenSolaris Development Release Packaging Repositoryより


$ pfexec pkg set-publisher -O http://pkg.opensolaris.org/dev opensolaris.org
$ pfexec pkg image-update

何度かアップグレードに失敗。
失敗を再現させるのも難しく、本題では無いので、別の機会に追求する事にする。

▼再起動後にバージョン確認


$ uname -v
snv_134

2010/04/26時点の最新「snv_134」へアップグレードされた。

続きを読む


編集
@hansode at 10:45|PermalinkComments(0)TrackBack(0)

2010年04月21日

このエントリーをはてなブックマークに追加

続・はじめてのOpenSolaris

▼インストール後作業:ネットワーク

  1. 手動設定
  2. nsswitch.conf修正
    • 手動設定した場合は、hostsエントリにに「dns」を追加しないとDNSによる名前解決が出来ない
      > hosts:         files   dns
  3. SSH起動サービス対象
    • $ pfexec svcadm enable ssh

名前解決出来ない問題は、今までの経験で/etc/nsswitch.confにたどり着いたので修正してみた。
この対応しかないのだろうか…?

これでSSH接続による操作が可能になった。




編集
@hansode at 18:15|PermalinkComments(0)TrackBack(0)
このエントリーをはてなブックマークに追加

はじめてのOpenSolaris

▼検証環境

  • OpenSolaris 2009.06(x86_64版) ※2010/04/21現在、2009.06が最新
  • CPU: 64bits
  • KBD: 日本語106

▼インストール準備作業

  1. ISOイメージをダウンロード
  2. ISOイメージからCD-Rを作成
  3. BIOS設定からboot順番設定し、CD-Rの優先度を上げておく

VMwareなどを利用する場合は、ISOイメージファイルだけで良い。
一度目のインストール作業検証ではVMware Workstationを使用してみた。


▼インストール作業:インストーラ起動まで

  1. OpenSolaris 2009.06 LiveCDでboot
  2. GRUBのbootメニュー選択
    • 「text console」を選択
    • こでは初回の検証環境がVMware Workstaionだったので、「text console」を選択した
  3. キーボード選択
    • 20. Japanese
    • DELLのPS2キーボードは 20 だった。選択を間違えると、X起動に失敗する。
  4. 言語選択
    • 6. English
  5. ログイン
    • user: jack
    • pass: jack
  6. X起動
    $ startx
  7. インストーラ起動
    $ pfexec /usr/bin/gui-install

▼インストール作業:GUIインストーラー操作

  1. パーティション
    • Use the whole diskを選択
  2. タイムゾーン
    • Region: Asia
    • Location: Japan
    • Timezone: Japan
  3. ローケール
    • Japan
  4. ユーザー
    • rootパスワード
    • 作業用ユーザー名とパスワード: axsh
    • ホスト名: vianca

しばらく待つと、インストールが完了。
インストール完了後、システム再起動してログイン確認して終了。

続きを読む


編集
@hansode at 12:25|PermalinkComments(0)TrackBack(0)