FreeBSD 10によるZFSベースiSCSIサービスの構築
転載先:http://www.2cto.com/os/201406/306422.html
概要
ZFSについてはずっと強くお勧めしています.本当に使いやすいからです.しかし、今でもOracleのSolarisとFreeBSDの2つのシステムでしか実行できません.他のシステムに共有するにはNASまたはSANでしか実行できません.
NASの方式は簡単で、私はずっとSambaで実現しています.もちろんNFSもできますが、SANの話はまだ試したことがありません.もちろんSANの方が使いやすいし、今はネットの速度も速いです.ストレージの場合、NASとSANは外部ストレージですが、クライアントの場合、NASはネットワークデバイスであり、SANはローカルデバイスとみなされることが主な違いです.なぜなら、NASはネットワーク層のプロトコルであり、SANはより下位のブロックデバイスプロトコルであるからである.
伝統的にSANは比較的大きく、光ファイバチャネル(FC)であるため、iSCSIという大救星ができた――iSCSIを使用するSANはIP-SANとも呼ばれた.さらにiSCSI以降、NASとSANの違いはそれほど明らかではありません.現在、一部のNASデバイスもiSCSIサポートを提供しているからです.
ただし、NASはネットワークプロトコルを実行しているだけに、クライアントにとって汎用的なネットワークファイルシステム方式でアクセスし、サービス側が具体的なファイルシステムを使用しているかに注目する必要はありません.これは、異なるシステムでNAS内のファイルを共有できることを意味します.例えば私は今、サービス側でZFS形式でファイルを保存し、SAMBAでLinux、Mac、Windowsに共有し、4つの全く異なるシステムで共有ファイルにアクセスしても問題ありません.しかし、SANは最下位のブロックデバイスプロトコルなので、クライアント専用であり、Linux用のtargetはWindowsと共用できず(フォーマットされたファイルシステムが異なる)、サービス側でも対応するtargetの具体的な内容を直接見ることはできません(サービス側のローカルInitiator接続後mountで指定されたファイルシステムに対して操作できますが、サービス側自身がサポートするファイルシステムフォーマットに限られます).
以前のバージョンのFreeBSDでもiSCSIはサポートされていましたが、ユーザーレベルのアプリで個人的には感じが悪かったので試したことがありませんでした.最新のFreeBSD 10でiSCSIがシステムに統合されていましたが、これは本当に嬉しいニュースで、最近試してみるといい感じです.
iSCSIに関する基本原理は、iSCSI自体がプロトコルであり、IPネットワーク上の仮想SCSI実装である.クライアントはiSCSI Initiatorを介してローカルのブロックデバイスをシミュレートすることができる(仮想SCSIハードディスクと理解できる)その後、iSCSI Initiatorが受信したSCSI命令をIPネットワークを介してサービス側に伝達し、サービス側の命令を実際のハードディスクに対する操作に変換する.
サービス側(すなわちストレージ側)には、いわゆるLUN(論理ユニット番号)として組織された物理的または論理的なハードディスクがある.ハードディスク、パーティション、RAIDのセット、ZFSなどの論理ボリュームとして理解できます.このストレージ側がこれらのLUNをiSCSIを通じて外部にストレージサービスを提供する場合、iSCSI targetと呼びます.同時に、ストレージ側では異なるIP、異なるNIC、異なるアイデンティティ認証方式など、さまざまな方法で外部にサービスを提供できます.など、各ルートをportalグループと呼びます.portalグループとtargetは、クライアントのさまざまなストレージ要件を満たすために自由に組み合わせることができます.
クライアントでは、前述のiSCSI Initiatorによって実現され、ローカルでは仮想ハードディスク(/devではデバイス名があるが、実際の物理デバイスはない)として表現され、そのすべての操作はiSCSIを通じて対応するiSCSI targetに伝達される.
iSCSI target
まず、targetのためにサービス側にZFSを作成します.
注意:iSCSI用に/dev/zvolで対応するブロックデバイスを作成するには、-Vパラメータが必要です.-VはZFSボリュームの作成を示し、-sは作成時にスペースを割り当てないことを示し、このパラメータを追加しないと実際に指定された容量を占有するボリュームが作成されます.-bは、ブロックサイズ(従来のセクタサイズ、一般的に4096または512)を指定します.
次に、/etc/rc.confにctld(iSCSIサービス)を有効にする次の行を追加します.
次にctldを構成し、/etc/ctl.confファイルを作成します.内容は次のとおりです.
これは最も簡単な構成で、targetが1つとportalグループが1つしかありません.ユーザー認証は使用されていません.テストとして十分です.
このtargetを起動することができます.
そのchmodの手順が必要であることに注意してください.そうしないと、グローバルに読み取り可能なプロファイルが安全ではないため、サービスは起動できません.
起動が完了したら、ログを見て、エラーがないことを確認します.
iSCSI initiator
一般的にFreeBSDをクライアントとして使用しないが、サービス側でtargetの構成をテストする必要がある場合があるため、FreeBSDの下のInitiatorを使用する可能性があるため、構成方法の添付を記録して参考にした.本節では実際のデスクトップ環境構成を例に挙げる.
私のデスクトップはLinux Mint 16です.以下を参考にします.しかし、Linuxのリリース版によってはほとんど差がないはずです.Macはビジネスソフトウェアのサポートが必要なようで、紹介できません.マイクロソフトはWindowsに関連するInitiatorソフトウェア(高バージョンWindowsに内蔵されています)を無料で提供しています.構成方法は添付されています.
まずソフトウェアをインストールする必要があります.
次に、サービスを開始します.
次にtargetを検索します.
結果には、以前に構成されたtargetが表示されます.
ログイン接続target:
今、システムのプリファレンス-ディスク(またはあなたのリリース版の関連ツール、またはコマンドラインでもいい)を開くと、新しいディスク(私のパソコンでは、デバイス名/dev/sdc)が表示され、ディスク名はFREEBSD CTLDISKと呼ばれ、フォーマットされていない状態にあります.EXT 4でフォーマットし、mountで本地盤のように直接使用することができます.
これで基本的なZFSベースのiSCSIサービスは構築が完了したとしても.
より複雑なアプリケーション
前述したtarget構成はフルオープンであり、ネットワークセグメント全体のすべてのクライアントが自由に接続できます.安全のため、ユーザー認証に参加する必要があります.
最も簡単な方法はtarget構成にユーザー名パスワードを追加することです.
パスワードはデフォルトで12ビット以上必要ですが、複数のユーザーが使用する必要がある場合は不便です.auth-groupを使用する必要があります.
Initiator側でも、接続するにはユーザー名パスワードを指定する必要があります.ただし、ユーザー名パスワードはコマンドラインに入力するのではなく、open-iscsiサービスに構成する必要があります./etc/iscsi/iscsid.confを変更し、次のようにします.
ここでnode.startupがautomaticに設定されているのは、initiatorを自動的に接続するためです.これは必須ではありません.デフォルト値はmanualです.つまり、targetを手動で接続する必要があります.automaticに設定すると、iscsiadmを手動で実行して接続する必要はありません.
Node.session.authのusernameとpasswordは、前に構成したtargetのユーザー名とパスワードです.同様にportalグループのユーザー認証が構成されている場合は、ここでdiscoveryのユーザー名とパスワードを構成することもできます.
次にopen-iscsiサービスを再起動します.
次に進みます.
接続targetにログインできます.接続後mountで使用できます.
前のようにnode.startupをautomaticに構成すると、起動後に自動的に接続され、直接mountまたは以下のように自動mountに構成するだけです.
先にUUIDを取得する:
または/dev/disk/py-path/方式のパスを使用してfstabに設定します(by-pathパスの例では、UUID方式でfstabのデフォルト構成を参照してください):
オプションに_netdevが1つ必要です.そうしないと、起動時にmountが長時間待機して失敗します.
ZFSを試してみる
前のステップでは、クライアントがtargetをフォーマットする必要があります.私はEXT 4フォーマットにフォーマットしています.では、サービス側のZFSは有効ですか.試してみてください.
まずmountの良いパスにファイルを作成し、サービス側にスナップショットを作成します.
その後、クライアントに戻り、関連するファイルを削除または変更し、umountを切断します(そうでなければ、サービス側ZFSを変更することはできません):
その後、サービス側でiSCSIサービスを停止しました.
次に、ロールバックスナップショットを試してみましょう.もちろん、クローンを作成してtargetをクローンに指定することもできます.ここでは、簡単なロールバック操作を例に挙げます.
再起動サービス:
クライアント再接続:
以前に修正または削除したファイルを見ても元の状態に戻ります.ZFSボリュームも同様にZFSの機能を実現することができ、EXT 4にフォーマットされたために失効することはありません.
附:FreeBSD下のInitiator構成
まずiscsidサービスを起動します.通常はテストするだけなので、iscsidコマンドで直接サービスを起動することができます.サービスコマンドで起動するとrc.confを構成する必要があり、直接起動してもサービスコマンドで停止することができます.
次にtargetを接続します.
次に、パラメータなしiscsictlで接続ステータスとデバイス名を確認します.注意:ステータスがWaiting for iscsid(8)と表示されている場合は、iscsidサービスが起動していないことを示します.
問題がなければ:
mount -t fstype/dev/da0/mnt/iscsi
ここでfstypeはファイルシステム名、da 0は接続後のデバイス名である.
附:WindowsのInitiator構成
Macが使えないので、気がふさいでWindowsの配置を見てみると、まだ簡単で、再起動する必要もありません.
まずマイクロソフトの公式サイトでダウンロードします:Microsoft iSCSI initiator
次にインストールします.MS DTCサービスを開始する必要があります.
インストール後に実行し、[Discovery]ページの[TargetPortals]欄に[Add]をクリックし、PortalのIPアドレスまたはDNS名を入力します.例えば、192.168.x.x.
決定後、[Targets]ページでサービス側構成のtargetsが表示されます.これを選択し、[Log On]をクリックすると、そのステータスがInactiveからConnectedに変わります.この場合、「Automatically restore this connection when the system boots」というオプションがあり、システム起動時に自動的に接続できます.
システム管理のディスク管理を開くと、システムにハードディスクが1つ増えたというプロンプトが表示され、FAT 32やNTFSなどのファイルシステムフォーマットを選択してフォーマットし、その後、通常のハードディスクのように使用することができます.
概要
ZFSについてはずっと強くお勧めしています.本当に使いやすいからです.しかし、今でもOracleのSolarisとFreeBSDの2つのシステムでしか実行できません.他のシステムに共有するにはNASまたはSANでしか実行できません.
NASの方式は簡単で、私はずっとSambaで実現しています.もちろんNFSもできますが、SANの話はまだ試したことがありません.もちろんSANの方が使いやすいし、今はネットの速度も速いです.ストレージの場合、NASとSANは外部ストレージですが、クライアントの場合、NASはネットワークデバイスであり、SANはローカルデバイスとみなされることが主な違いです.なぜなら、NASはネットワーク層のプロトコルであり、SANはより下位のブロックデバイスプロトコルであるからである.
伝統的にSANは比較的大きく、光ファイバチャネル(FC)であるため、iSCSIという大救星ができた――iSCSIを使用するSANはIP-SANとも呼ばれた.さらにiSCSI以降、NASとSANの違いはそれほど明らかではありません.現在、一部のNASデバイスもiSCSIサポートを提供しているからです.
ただし、NASはネットワークプロトコルを実行しているだけに、クライアントにとって汎用的なネットワークファイルシステム方式でアクセスし、サービス側が具体的なファイルシステムを使用しているかに注目する必要はありません.これは、異なるシステムでNAS内のファイルを共有できることを意味します.例えば私は今、サービス側でZFS形式でファイルを保存し、SAMBAでLinux、Mac、Windowsに共有し、4つの全く異なるシステムで共有ファイルにアクセスしても問題ありません.しかし、SANは最下位のブロックデバイスプロトコルなので、クライアント専用であり、Linux用のtargetはWindowsと共用できず(フォーマットされたファイルシステムが異なる)、サービス側でも対応するtargetの具体的な内容を直接見ることはできません(サービス側のローカルInitiator接続後mountで指定されたファイルシステムに対して操作できますが、サービス側自身がサポートするファイルシステムフォーマットに限られます).
以前のバージョンのFreeBSDでもiSCSIはサポートされていましたが、ユーザーレベルのアプリで個人的には感じが悪かったので試したことがありませんでした.最新のFreeBSD 10でiSCSIがシステムに統合されていましたが、これは本当に嬉しいニュースで、最近試してみるといい感じです.
iSCSIに関する基本原理は、iSCSI自体がプロトコルであり、IPネットワーク上の仮想SCSI実装である.クライアントはiSCSI Initiatorを介してローカルのブロックデバイスをシミュレートすることができる(仮想SCSIハードディスクと理解できる)その後、iSCSI Initiatorが受信したSCSI命令をIPネットワークを介してサービス側に伝達し、サービス側の命令を実際のハードディスクに対する操作に変換する.
サービス側(すなわちストレージ側)には、いわゆるLUN(論理ユニット番号)として組織された物理的または論理的なハードディスクがある.ハードディスク、パーティション、RAIDのセット、ZFSなどの論理ボリュームとして理解できます.このストレージ側がこれらのLUNをiSCSIを通じて外部にストレージサービスを提供する場合、iSCSI targetと呼びます.同時に、ストレージ側では異なるIP、異なるNIC、異なるアイデンティティ認証方式など、さまざまな方法で外部にサービスを提供できます.など、各ルートをportalグループと呼びます.portalグループとtargetは、クライアントのさまざまなストレージ要件を満たすために自由に組み合わせることができます.
クライアントでは、前述のiSCSI Initiatorによって実現され、ローカルでは仮想ハードディスク(/devではデバイス名があるが、実際の物理デバイスはない)として表現され、そのすべての操作はiSCSIを通じて対応するiSCSI targetに伝達される.
iSCSI target
まず、targetのためにサービス側にZFSを作成します.
zfs create -s -V 4G -b 4k tank/testtarget
注意:iSCSI用に/dev/zvolで対応するブロックデバイスを作成するには、-Vパラメータが必要です.-VはZFSボリュームの作成を示し、-sは作成時にスペースを割り当てないことを示し、このパラメータを追加しないと実際に指定された容量を占有するボリュームが作成されます.-bは、ブロックサイズ(従来のセクタサイズ、一般的に4096または512)を指定します.
次に、/etc/rc.confにctld(iSCSIサービス)を有効にする次の行を追加します.
ctld_enable="YES"
次にctldを構成し、/etc/ctl.confファイルを作成します.内容は次のとおりです.
portal-group san {
discovery-auth-group no-authentication
listen 192.168.x.x
}
target iqn.2014-05.com.example:target0 {
auth-group no-authentication
portal-group san
lun 0 {
path /dev/zvol/tank/testtarget
blocksize 4096
size 4G
}
}
これは最も簡単な構成で、targetが1つとportalグループが1つしかありません.ユーザー認証は使用されていません.テストとして十分です.
このtargetを起動することができます.
chmod 600 /etc/ctl.conf
service ctld start
そのchmodの手順が必要であることに注意してください.そうしないと、グローバルに読み取り可能なプロファイルが安全ではないため、サービスは起動できません.
起動が完了したら、ログを見て、エラーがないことを確認します.
tail /var/log/messages
iSCSI initiator
一般的にFreeBSDをクライアントとして使用しないが、サービス側でtargetの構成をテストする必要がある場合があるため、FreeBSDの下のInitiatorを使用する可能性があるため、構成方法の添付を記録して参考にした.本節では実際のデスクトップ環境構成を例に挙げる.
私のデスクトップはLinux Mint 16です.以下を参考にします.しかし、Linuxのリリース版によってはほとんど差がないはずです.Macはビジネスソフトウェアのサポートが必要なようで、紹介できません.マイクロソフトはWindowsに関連するInitiatorソフトウェア(高バージョンWindowsに内蔵されています)を無料で提供しています.構成方法は添付されています.
まずソフトウェアをインストールする必要があります.
sudo apt-get install open-iscsi open-iscsi-utils
次に、サービスを開始します.
sudo service open-iscsi start
次にtargetを検索します.
sudo iscsiadm -m discovery -t sendtargets -p 192.168.x.x
結果には、以前に構成されたtargetが表示されます.
ログイン接続target:
sudo iscsiadm -m node -T iqn.2014-05.com.example:target0 -p 192.168.x.x -l
今、システムのプリファレンス-ディスク(またはあなたのリリース版の関連ツール、またはコマンドラインでもいい)を開くと、新しいディスク(私のパソコンでは、デバイス名/dev/sdc)が表示され、ディスク名はFREEBSD CTLDISKと呼ばれ、フォーマットされていない状態にあります.EXT 4でフォーマットし、mountで本地盤のように直接使用することができます.
これで基本的なZFSベースのiSCSIサービスは構築が完了したとしても.
より複雑なアプリケーション
前述したtarget構成はフルオープンであり、ネットワークセグメント全体のすべてのクライアントが自由に接続できます.安全のため、ユーザー認証に参加する必要があります.
最も簡単な方法はtarget構成にユーザー名パスワードを追加することです.
target iqn.2014-05.com.example:target0 {
portal-group san
chap user password1234
lun 0 {
path /dev/zvol/tank/testtarget
blocksize 4096
size 4G
}
}
パスワードはデフォルトで12ビット以上必要ですが、複数のユーザーが使用する必要がある場合は不便です.auth-groupを使用する必要があります.
auth-group ag0 {
chap user1 password1234
chap user2 password1234
}
target iqn.2014-05.com.example:target0 {
auth-group ag0
portal-group san
lun 0 {
path /dev/zvol/tank/testtarget
blocksize 4096
size 4G
}
}
Initiator側でも、接続するにはユーザー名パスワードを指定する必要があります.ただし、ユーザー名パスワードはコマンドラインに入力するのではなく、open-iscsiサービスに構成する必要があります./etc/iscsi/iscsid.confを変更し、次のようにします.
node.startup = automatic
node.session.auth.authmethod = CHAP
node.session.auth.username = user
node.session.auth.password = password1234
ここでnode.startupがautomaticに設定されているのは、initiatorを自動的に接続するためです.これは必須ではありません.デフォルト値はmanualです.つまり、targetを手動で接続する必要があります.automaticに設定すると、iscsiadmを手動で実行して接続する必要はありません.
Node.session.authのusernameとpasswordは、前に構成したtargetのユーザー名とパスワードです.同様にportalグループのユーザー認証が構成されている場合は、ここでdiscoveryのユーザー名とパスワードを構成することもできます.
次にopen-iscsiサービスを再起動します.
sudo service open-iscsi restart
次に進みます.
sudo iscsiadm -m node -T iqn.2014-05.com.example:target0 -p 192.168.x.x -l
接続targetにログインできます.接続後mountで使用できます.
前のようにnode.startupをautomaticに構成すると、起動後に自動的に接続され、直接mountまたは以下のように自動mountに構成するだけです.
先にUUIDを取得する:
sudo blkid /dev/sdc
または/dev/disk/py-path/方式のパスを使用してfstabに設定します(by-pathパスの例では、UUID方式でfstabのデフォルト構成を参照してください):
/dev/disk/by-path/ip-192.168.x.x:3260-iscsi-iqn.2014-05.com.example:target0-lun-0 /mnt/iscsi ext4 _netdev,errors=remount-ro 0 1
オプションに_netdevが1つ必要です.そうしないと、起動時にmountが長時間待機して失敗します.
ZFSを試してみる
前のステップでは、クライアントがtargetをフォーマットする必要があります.私はEXT 4フォーマットにフォーマットしています.では、サービス側のZFSは有効ですか.試してみてください.
まずmountの良いパスにファイルを作成し、サービス側にスナップショットを作成します.
zfs snapshot tank/testtarget@test1
その後、クライアントに戻り、関連するファイルを削除または変更し、umountを切断します(そうでなければ、サービス側ZFSを変更することはできません):
sudo umount /dev/sdc
sudo iscsiadm -m node -T iqn.2014-05.com.example:target0 -p 192.168.x.x -u
その後、サービス側でiSCSIサービスを停止しました.
service ctld stop
次に、ロールバックスナップショットを試してみましょう.もちろん、クローンを作成してtargetをクローンに指定することもできます.ここでは、簡単なロールバック操作を例に挙げます.
zfs rollbak tank/testtarget@test1
再起動サービス:
service ctld start
クライアント再接続:
sudo iscsiadm -m node -T iqn.2014-05.com.example:target0 -l
sudo mount /dev/sdc /mnt/iscsi
以前に修正または削除したファイルを見ても元の状態に戻ります.ZFSボリュームも同様にZFSの機能を実現することができ、EXT 4にフォーマットされたために失効することはありません.
附:FreeBSD下のInitiator構成
まずiscsidサービスを起動します.通常はテストするだけなので、iscsidコマンドで直接サービスを起動することができます.サービスコマンドで起動するとrc.confを構成する必要があり、直接起動してもサービスコマンドで停止することができます.
次にtargetを接続します.
iscsictl -A -p 192.168.x.x -t iqn.2014-05.com.example:target0
次に、パラメータなしiscsictlで接続ステータスとデバイス名を確認します.注意:ステータスがWaiting for iscsid(8)と表示されている場合は、iscsidサービスが起動していないことを示します.
問題がなければ:
mount -t fstype/dev/da0/mnt/iscsi
ここでfstypeはファイルシステム名、da 0は接続後のデバイス名である.
附:WindowsのInitiator構成
Macが使えないので、気がふさいでWindowsの配置を見てみると、まだ簡単で、再起動する必要もありません.
まずマイクロソフトの公式サイトでダウンロードします:Microsoft iSCSI initiator
次にインストールします.MS DTCサービスを開始する必要があります.
インストール後に実行し、[Discovery]ページの[TargetPortals]欄に[Add]をクリックし、PortalのIPアドレスまたはDNS名を入力します.例えば、192.168.x.x.
決定後、[Targets]ページでサービス側構成のtargetsが表示されます.これを選択し、[Log On]をクリックすると、そのステータスがInactiveからConnectedに変わります.この場合、「Automatically restore this connection when the system boots」というオプションがあり、システム起動時に自動的に接続できます.
システム管理のディスク管理を開くと、システムにハードディスクが1つ増えたというプロンプトが表示され、FAT 32やNTFSなどのファイルシステムフォーマットを選択してフォーマットし、その後、通常のハードディスクのように使用することができます.