2009年 7月4日

Opensolaris(2009.6) x86(amd64) のインストールと ZFS + iscsi Target を作って Windows XP で使用する

カテゴリー: Linux/UNIX — Quilva @ 2009/7/4 (土曜日) 19:42:44

USUGUMO 君に Opensolaris 2009.6 amd64 を入れる。
日本語が変だし、単なる作業ログなので読んでも全く面白くないと思います。

USUGUMO の性能は以下です。

名前 USUGUMO.quilva.jp
CPU Phenom 9950@2.8GHz
Memory DDR2 PC-6400 2GB*2=4GB 5-5-5-15
M/B Jetway HA7-ULTRA
NIC on-board RTL8111C
HDD WesternDigital WD32000AAKS-B3A (7200rpm 320GB)
HDD2 HGST P7K500
HDD3 Seagate Barracuda 7200.10 ST3500320AS (7200rpm 500GB)

このマシンの致命的な欠点は NIC でして Linux の場合は kernel のバージョンに関係なく負荷をかけると落ちます。 (NIC を認識しなくなります)
ドライバが R8169 なのでこれが原因の可能性がありますが、Realtek が提供している R8168 はインストール方法がイマイチわからなかったのであきらめた。

大学院は Linux よりも Solaris [8,9,10] のほうが触れる機会が多いので、今回は Opensolaris をインストールしてみる。
Opensolaris のバージョンは最新の 2009.6 です。

Opensolaris 2009.6 のダウンロード

自分のマシンは amd64 なので amd64 のイメージを探しましたがないようです。
どうやら、x86 のイメージは amd64 としても使えるようなので x86 のイメージを使用します。

ここからダウンロードできます。

Opensolaris 2009.6 Live iso ダウンロード

Opensolaris 2009.6 Live iso ダウンロード

CD-R に焼き付けます。

boot させると自動で X が立ち上がります。

USER jack PASSWORD jack、ROOT root PASSWORD opensolaris だったと思うので、それでログインして、デスクトップにある「install solaris」みたいなアイコンからインストールします。

できれば、ZFS の raidz 上にインストールしたかったのですが GUI のインストールからはできなさそうなのと、CUI のインストール方法が全くわからないのであきらめました。

IP アドレスを固定する

X と gnome が勝手に入ってしまうのですが、これは入っててもパフォーマンスが悪くなるくらいなのでとりあえずあきらめる。

IP アドレスは DHCP で取ってきてくれるようです。
SSH はデフォルトで有効になっています。

DHCP では困るので、IP アドレスを固定化します。

OpenSolaris 固定IP – @//メモ を参考にさせてもらいました。

nwam とかいうデーモンがネットワーク関係を管理してるようなのでこれを停止させて手動で設定できるようにします。

また、「svcadm disable svc:/network/physical:nwam」を実行したときネットワークが使えなくなるので SSH から作業しないほうがいいと思います。

# svcs svc:/network/physical
STATE          STIME    FMRI
disabled        0:00:00 svc:/network/physical:default
online          0:00:00 svc:/network/physical:nwam

# svcadm disable svc:/network/physical:nwam
# svcadm enable svc:/network/physical:default

# svcs svc:/network/physical
STATE          STIME    FMRI
disabled        0:00:00 svc:/network/physical:nwam
offline          0:00:00 svc:/network/physical:default

名前解決を DNS でさせる為に以下を実行します。

# cp /etc/nsswitch.conf /etc/nsswitch.conf.bak
# cp /etc/nsswitch.dns /etc/nsswitch.conf

DNS サーバを設定します。Linux と同じです。
自分の場合はルータが DNS キャッシュサーバなので 192.168.5.1 にしました。

エディタは vi か nano が入ってるようなので、これを使用します。この程度だったら nano のほうが楽かも。

# vi /etc/resolv.conf
domain quilva.jp
search quilva.jp
dnsserver 192.168.5.1

IP アドレスを指定します。
このファイルは自分の場合存在しなかったので、新規作成になります。

# vi /etc/hostname.rge0
192.168.5.10

この最後の rge0 というのはネットワークデバイスの名前です。
当たり前かもしれませんが以下より調べれます。

# /sbin/ifconfig -a
lo0: flags=2001000849 mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
rge0: flags=1000843 mtu 1500 index 2
        inet 192.168.5.10 netmask ffffff00 broadcast 192.168.5.255
        ether 0:30:18:**:**:**

ネットマスクを設定します。自分の場合は書き換え不要でした。

# vi /etc/netmasks
192.168.5.0 255.255.255.0

デフォルトゲートウェイを設定します。

# vi /etc/defaultrouter
192.168.5.1

これで、IP アドレスは固定になった。

ZFS pool を作る

Linux と比較してですが、パーティションの作成が非常に面倒に感じました。

現在 HDD は以下のようになってます。

c7t0d0 |     40GB(system)    |  260GB 開き領域   |
c7t1d0 |                  500GB 開き領域         |
c7t2d0 |                  500GB 開き領域         |

これを以下のようにします。

c7t0d0 | p1 40GB(system)  |  p2 80GB raidz 用         |  p3 残り全部 largepool 用  |
c7t1d0 | p1 80GB raidz 用 |  p2 残り全部 largepool 用                              |
c7t2d0 | p1 80GB raidz 用 |  p2 残り全部 largepool 用                              |

コマンドは format コマンドからやるのが良いようです。
まず、c7t0d0 (320GB) からやります。ここは現在 OS 動いている HDD であるので特に慎重に作業します。

format コマンドを打つと以下のようなものがでてくるので 0 を選択します。

# format
earching for disks...done

AVAILABLE DISK SELECTIONS:
       0. c7t0d0
          /pci@0,0/pci1002,4391@11/disk@0,0
       1. c7t1d0
          /pci@0,0/pci1002,4391@11/disk@1,0
       2. c7t2d0
          /pci@0,0/pci1002,4391@11/disk@2,0

Specify disk (enter its number): 0

すると、以下のようなメニューがでてきます。ここで fdisk と入力します。

selecting c7t0d0
[disk formatted]
/dev/dsk/c7t0d0s0 is part of active ZFS pool rpool. Please see zpool(1M).

FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        fdisk      - run the fdisk program
        repair     - repair a defective sector
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        save       - save new disk/partition definitions
        inquiry    - show vendor, product and revision
        volname    - set 8-character volume name
        !     - execute , then return
        quit
format> fdisk

こんな画面になります。

             Total disk size is 38913 cylinders
             Cylinder size is 16065 (512 byte) blocks

                                               Cylinders
      Partition   Status    Type          Start   End   Length    %
      =========   ======    ============  =====   ===   ======   ===
          1       Active    Solaris2          1  5222    5222     13

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:

新しくパーティションを作るので、1 を選択して、あとは表示されてるメッセージを読みながら進めます。

Enter Selection: 1

Select the partition type to create:
   1=SOLARIS2  2=UNIX        3=PCIXOS     4=Other
   5=DOS12     6=DOS16       7=DOSEXT     8=DOSBIG
   9=DOS16LBA  A=x86 Boot    B=Diagnostic C=FAT32
   D=FAT32LBA  E=DOSEXTLBA   F=EFI        0=Exit?1
c
5223
8913

なんとか raidz 用の 80GB くらいのパーティション作成できました。

             Total disk size is 38913 cylinders
             Cylinder size is 16065 (512 byte) blocks

                                               Cylinders
      Partition   Status    Type          Start   End   Length    %
      =========   ======    ============  =====   ===   ======   ===
          1                  Solaris2          1  5222    5222     13
          2       Active    Solaris2       5223  14135    8913     23

続いて、largepool 用の残り全部を partition 3 に割り当てます。

特に「残り全部」という割り当て方がわからなかったので、シリンダサイズ(38913)から 14135 を引いた値よりさらに 1 ひいたものにしました。
完了するとこんなかんじになります。

             Total disk size is 38913 cylinders
             Cylinder size is 16065 (512 byte) blocks

                                               Cylinders
      Partition   Status    Type          Start   End   Length    %
      =========   ======    ============  =====   ===   ======   ===
          1                 Solaris2          1  5222    5222     13
          2                 Solaris2       5223  14135    8913     23
          3     Active    Solaris2       14136  38912    24777     64

ここが重要なところで、Active がPartition 3 に来ているので、
このまま fdisk を終了させると次回 Solaris が起動しないという悲しいことになりますので、
2. Specify the active partition を選択して、Partition 1 が Active になりようにします。

             Total disk size is 38913 cylinders
             Cylinder size is 16065 (512 byte) blocks

                                               Cylinders
      Partition   Status    Type          Start   End   Length    %
      =========   ======    ============  =====   ===   ======   ===
          1       Active    Solaris2          1  5222    5222     13
          2                 Solaris2       5223  14135    8913     23
          3                 Solaris2       14136  38912    24777     64

これでようやくパーティショニング完了です。この記事で一番めんどくさいところでした。

ZFS pool を作る

_・)Keep Smiling -微弱電波-: ZFSでRAID-Zを構築 を参考にさせてもらいました。

まず、raidz の ZFS pool を作ります。c7t1d0 というのが HDD で、p[0-9] がパーティションの番号です。

# zfs create raid raidz c7t0d0p2 c7t1d0p1 c7t2d0p1

完了です。ただし今回の記事で raidz のパーティションは使わないのでこれにて終了。

次に iscsi target 用の ZFS pool の largepool を作ります。

# zfs create largepool c7t0d0p3 c7t1d0p2 c7t2d0p2

zfs list や zpool list で確認して完了です。

ZFS で iscsi Target を作る

Solaris iSCSI Target/Initiator : やっぱり Sun がスキ! を参考にしました。
かなり丁寧にわかりやすく書かれてます。

まず、iscsi target が動いてるか確認します。

# svcs -a | grep iscsi
disabled       21:20:36 svc:/network/iscsi_initiator:default
disabled       21:20:48 svc:/system/iscsitgt:default

となるそうですが、自分の場合は以下のように何もでませんでした。
つまり、iscsi target が動いていないどころか iscsi target がインストールされてません。

# svcs -a | grep iscsi

なので、iscsitadm をインストールします。
このブログの記事より、iscsitgt というのがそれっぽいので、そのパッケージをあてずっぽうでやったらインストールされたので、合っているようです。

# pkg install SUNWiscsitgt
かなり時間かかる

インストールすると、以下のようになりました。

# svcs -a | grep iscsi
disabled       21:20:48 svc:/system/iscsitgt:default

まだ、iscsi-initiator がないので、これもインストールします。
これもあてずっぽうで SUNWiscsi とやったら入ったので正解のようです。

# pkg install SUNWiscsi
かなり時間かかる

ようやく、以下の状況になりました。

# svcs -a | grep iscsi
disabled       21:20:36 svc:/network/iscsi_initiator:default
disabled       21:20:48 svc:/system/iscsitgt:default

これで、先ほどの丁寧にかかれている記事と Target 作成までは全く一緒なので割愛します。

ただし「1. 2G バイトのファイルを作成し、zfs 領域を作成」とありますが、
自分の場合は先ほど作成した largepool がそれにあたるので、こから 900GB 切り出して使用しました。

# zfs create -V 900gb largepool/vol
# zfs list
NAME                       USED  AVAIL  REFER  MOUNTPOINT
largepool                  900G  65.7G    19K  /largepool
largepool/vol              900G   957G  8.25G  -
iscsi Initiator を立ち上げる

Solaris iSCSI Target/Initiator : やっぱり Sun がスキ! の続きです。

iscsi initiator を有効化します。

# svcs -a | grep iscsi
disable       16:58:57 svc:/network/iscsi_initiator:default
online         16:59:11 svc:/system/iscsitgt:default

# svcadm enable iscsi_initiator
# svcs -a | grep iscsi
maintenance   16:58:57 svc:/network/iscsi_initiator:default
online            16:59:11 svc:/system/iscsitgt:default

なんじゃこりゃ、online にならずに maintenance という状態になりました。

iscsiadm list initiator-node を実行するとエラーになるので、困りました。

とりあえず再起動したら、online になりました。
再起動は shutdown -g0 -i6 -y とするそうです。shutdown -r now だとダメだった。

残りは先のわかりやすい記事どおりです。

Windows XP から iSCSI を使う

夜更かし日記 – iSCSIターゲット作成 , iSCSIイニシエータで接続テスト この記事を参考にさせてもらいました。

microsoft より iSCSI Initiator をダウンロードしてインストールします。
ダウンロードで手間取ることが個人的に結構あるので SS 載せます。

Windows iSCSI Initiator ダウンロード 1

Windows iSCSI Initiator ダウンロード 1

Windows iSCSI Initiator ダウンロード 1

Windows iSCSI Initiator ダウンロード 1

XP 32bit を使ってるので、x86 をダウンロードします。

Windows iSCSI Initiator ダウンロード 3

Windows iSCSI Initiator ダウンロード 3

あとは記事どおりやればすんなり iSCSI target を認識します。
なんだかすごい。

ベンチマーク

共有 HDD で NTFS は大丈夫なのか心配ですが、Windows からなら仕方ないので、NTFS でフォーマットします。

フォーマット

フォーマット

フォーマットして、ファイルを書き込んでたらやはりNIC が認識しなくなりました
RTL8111C やっぱりだめだねぇ。
ついでに書いておくと、コイル鳴きもかなりひどいです。ピシィピシィという音ががんがん響いてます。

一応遅いけど、各種ベンチマークを載せておく。

HdTune は以下。 SUN SOLARIS と出るのはかっこいいっす。
まぁ、ベンチ結果はアテになりません。実測書き込み 22MByte/s、実測読み込み 40MByte/s が上限っぽいので、HdTune のバーストレートは正しい気がする。

HDTune 1 回目

HDTune 1 回目

HDTune 2 回目

HDTune 2 回目

Crystal DiskMark は以下。これはもっとダメダメです。
テストがメインメモリのディスクキャッシュに納まるサイズなので、ほんとに意味ないです。
まぁ、書き込みはより悪くなってる。

iscsi-bench-crystaldiskmark

iscsi-bench-crystaldiskmark

まぁこんなもんですかねぇ。RTL8111C はどうしようもない。

Linux Samba だと RTL8111C が落ちるのを除いて、書き込み読み込みとも 500Mbps くらいは出たので性能で行くなら Samba ですねぇ。
iSCSI だとローカルディスクと全く同等に使えるのは非常に良いんですけどねぇ。

とりあえず、Opensolaris さっぱりわかなくて大変です。

1件のコメント »

  1. [...] 以前 Opensolaris で同様のことをしたときは書き込みが遅く、NIC が落ちるということで実用にはちょっと遠いものでした。 書き込みが遅いのは設定不足の可能性が高いですが、調べるのが大変なので OS を変えて試してみることにします。 [...]

    ピンバック by Debian で iSCSI Target を作って Windows XP で利用する « Quilva::ReJEC.NET BLOG — 2009年 7月10日 @ 16:56

このコメント欄の RSS フィード トラックバック URL

コメントをどうぞ

Powered by WordPress