Your SlideShare is downloading. ×
俺がSCSIだ -LIOのすすめ-
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply
We'd love to hear what you think

By taking this short survey, you'll help us make SlideShare better. It shouldn't take more than a few minutes.

Start Survey

俺がSCSIだ -LIOのすすめ-

0
views

Published on

* Open-iSCSIでiSCSIターゲットに接続 …

* Open-iSCSIでiSCSIターゲットに接続
* LIOでiSCSIターゲットを作成
* USB GadgetでiSCSIをUSBに変換
iSCSIで家に溢れるストレージを一元管理しよう

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
0
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 俺がSCSIだ - LIOのすすめ - Naomasa Matsubayashi
  • 2. SCSI
  • 3. コンピュータと周辺機器を接続するための規格 主に二次記憶装置の接続で用いられる SCSI イニシエータ ターゲット
  • 4. iSCSI
  • 5. TCP/IPにSCSIプロトコルを乗せて 遠く離れた所にあるターゲットを操作する iSCSI イニシエータ ターゲット
  • 6. iSCSI RFCで標準化されている RFC 3720 iSCSIの基本的な規格 RFC 3721 目的のターゲットを見つける方法 RFC 3722 イニシエータやターゲットの名前の書き方 RFC 3723 認証について RFC 3347 iSCSI対応機器が満たすべき要件について RFC 3783 iSCSIのコマンドの実行順序についての注意事項 RFC 3980 本家のSCSIの仕様が更新されたから追従するぜ RFC 4018 SLPv2でiSCSI探せるようにする拡張 他多数
  • 7. Open-iSCSI http://www.open-iscsi.org/ Linux環境でiSCSIターゲットをマウントしよう
  • 8. iSCSI Transport Attributesと iSCSI Initiator over TCP/IPを有効にする Linuxカーネルの Linux環境でiSCSIターゲットをマウントしよう
  • 9. Linux環境でiSCSIターゲットをマウントしよう $ iscsid Open-iSCSIのデーモンを起動 $ iscsiadm -m discovery -t st -p 192.168.152.1 -P 1! Target: iqn.2003-01.org.linux-iscsi.hahnela.x8664:sn.406262d1b87f! !Portal: 192.168.152.1:3260,1! !!Iface Name: iface0! Target: iqn.2003-01.org.linux-iscsi.hahnela.x8664:sn.f3d75f94ab5f! !Portal: 192.168.152.1:3260,1! !!Iface Name: iface0 ポータルに接続してターゲットを探す iSCSIポータルのホスト iSCSIターゲットの名前
  • 10. $ iscsiadm -m node --targetname ! iqn.2003-01.org.linux-iscsi.hahnela.x8664:sn.f3d75f94ab5f --login! Logging in to [iface: iface0, target: iqn.2003-01.org.linux- iscsi.hahnela.x8664:sn.f3d75f94ab5f, portal: 192.168.152.1,3260]! Login to [iface: iface0, target: iqn.2003-01.org.linux- iscsi.hahnela.x8664:sn.f3d75f94ab5f, portal: 192.168.152.1,3260] successful. iSCSIターゲットにログイン iSCSIターゲットの名前 Target: iqn.2003-01.org.linux-iscsi.hahnela.x8664:sn.406262d1b87f! !Portal: 192.168.152.1:3260,1! !!Iface Name: iface0! Target: iqn.2003-01.org.linux-iscsi.hahnela.x8664:sn.f3d75f94ab5f! !Portal: 192.168.152.1:3260,1! !!Iface Name: iface0 ポータルに接続してターゲットを探す
  • 11. iscsi.hahnela.x8664:sn.f3d75f94ab5f, portal: 192.168.152.1,3260] successful. iSCSIターゲットにログイン [776839.671781] scsi host10: iSCSI Initiator over TCP/IP! [776839.932116] scsi 10:0:0:0: Direct-Access LIO-ORG IBLOCK 4.0 PQ: 0 ANSI: 5! [776839.933116] sd 10:0:0:0: Attached scsi generic sg2 type 0! [776839.933865] sd 10:0:0:0: [sdc] 41943040 512-byte logical blocks: (21.4 GB/20.0 GiB)! [776839.933872] sd 10:0:0:0: [sdc] 4096-byte physical blocks! [776839.936005] sd 10:0:0:0: [sdc] Write Protect is off! [776839.936012] sd 10:0:0:0: [sdc] Mode Sense: 43 00 10 08! [776839.936422] sd 10:0:0:0: [sdc] Write cache: enabled, read cache: enabled, supports DPO and FUA! [776839.962054] sdc: unknown partition table! [776839.965261] sd 10:0:0:0: [sdc] Attached SCSI disk 新しいSCSIディスクが現れた!
  • 12. $ mount -t auto /dev/sdc /mnt/iscsi! $ mount|grep /mnt/iscsi! /dev/sdc on /mnt/iscsi type ext4 (rw) Linux環境でiSCSIターゲットをマウントしよう あとはローカルのディスクと同じように使える $ umount /dev/sdc! $ iscsiadm -m node --targetname ! iqn.2003-01.org.linux-iscsi.hahnela.x8664:sn.f3d75f94ab5f —logout! Logging out of session [sid: 7, target: iqn.2003-01.org.linux- iscsi.hahnela.x8664:sn.f3d75f94ab5f, portal: 192.168.152.1,3260]! Logout of [sid: 7, target: iqn.2003-01.org.linux- iscsi.hahnela.x8664:sn.f3d75f94ab5f, portal: 192.168.152.1,3260] successful. 要らなくなったらumountしてログアウト iSCSIターゲットの名前
  • 13. ユーザ空間 カーネル NFSとの違い NFSはファイルシステムのレベルで ファイル操作をTCP/IPに乗せる iSCSIはブロックデバイスのレベルで ブロックの読み書きをTCP/IPに乗せる ハードウェア ブロックデバイス ファイルシステム アプリケーション VFS md LVM
  • 14. NFSに対するiSCSIの利点 ローカルのファイルシステムで出来る操作は全て出来る クライアント側でmdやLVMに通すことができる SCSIテープやSCSI CD-ROMもネットワーク越しに使える 速い (後述)
  • 15. NFSに対するiSCSIの欠点 セッションが切れるとファイルシステムが破損しやすい 複数のクライアントから 同時に触るには特殊なファイルシステムが必要 Open-iSCSIの実装が雑 (後述)
  • 16. 速い $ dd if=/dev/zero of=./hoge.img bs=1024 count=500K! 512000+0 レコード入力! 512000+0 レコード出力! 524288000 バイト (524 MB) コピーされました、 9.79909 秒、 53.5 MB/秒 $ dd if=/dev/zero of=./hoge.img bs=1024 count=500K! 512000+0 レコード入力! 512000+0 レコード出力! 524288000 バイト (524 MB) コピーされました、 2.49186 秒、 210 MB/秒 NFSv4(async)+btrfsでシーケンシャルライト iSCSI+btrfsでシーケンシャルライト 53.5 MB/秒 210 MB/秒
  • 17. 速い $ time tar xf linux-3.19.3.tar! ! real! 4m3.048s! user! 0m0.835s! sys! 0m9.715s $ time tar xf linux-3.19.3.tar ! ! real 0m15.334s! user 0m0.454s! sys 0m3.097s NFSv4(async)+btrfsでファイルを沢山作成 iSCSI+btrfsでファイルを沢山作成 4分3秒 15秒
  • 18. Open-iSCSIの実装が雑 Open-iSCSIは そのままではmusl libcでビルドできない
  • 19. gcc -Wall -fno-strict-aliasing -I. -D_GNU_SOURCE -c -o server.o server.c! In file included from server.c:7:0:! isns.h:249:1: エラー: 不明な型名 ‘time_t’ です! extern time_t isns_object_last_modified(const isns_object_t *);! ^! isns.h:348:1: エラー: 不明な型名 ‘time_t’ です! extern time_t isns_db_expire(isns_db_t *);! ^! isns.h:377:1: エラー: 不明な型名 ‘time_t’ です! extern time_t isns_run_timers(void);! ^! isns.h:500:50: 警告: 仮引数リスト内で ‘struct timeval’ が宣言されています [デフォルト で有効]! extern isns_message_t * isns_recv_message(struct timeval *timeout);! ^! isns.h:500:50: 警告: そのスコープはこの定義または宣言のみです。これは多分希望したものでは ないでしょう [デフォルトで有効]! isns.h:671:1: エラー: 不明な型名 ‘time_t’ です! extern time_t isns_scn_transmit_all(void);! glibcでは他のヘッダからincludeされているヘッダを 自分でincludeしていない
  • 20. cc -O2 -g -fPIC -Wall -Wstrict-prototypes -I../../include -I../../usr - D_GNU_SOURCE -c -o prom_lex.o prom_lex.c! cc -O2 -g -fPIC -Wall -Wstrict-prototypes -I../../include -I../../usr - D_GNU_SOURCE -c -o prom_parse.tab.o prom_parse.tab.c! cc -O2 -g -fPIC -Wall -Wstrict-prototypes -I../../include -I../../usr - D_GNU_SOURCE -c -o fwparam_ppc.o fwparam_ppc.c! fwparam_ppc.c: 関数 ‘loop_devs’ 内:! fwparam_ppc.c:359:45: エラー: ‘__compar_fn_t’ が宣言されていません (この関数内での最 初の使用)! qsort(niclist, nic_count, sizeof(char *), (__compar_fn_t)nic_cmp);! ^! fwparam_ppc.c:359:45: 備考: 未宣言の識別子は出現した各関数内で一回のみ報告されます! fwparam_ppc.c:359:59: エラー: expected ‘)’ before ‘nic_cmp’! qsort(niclist, nic_count, sizeof(char *), (__compar_fn_t)nic_cmp);! ^! <builtin>: recipe for target 'fwparam_ppc.o' failed! make[1]: *** [fwparam_ppc.o] Error 1! make[1]: Leaving directory '/usr/src/open-iscsi-2.0-873.orig/utils/ fwparam_ibft'! Makefile:30: recipe for target 'user' failed! make: *** [user] Error 2 非標準の型を遠慮なく使っている
  • 21. $ iscsiadm -m discovery -t st -p 192.168.152.1 -P 1! iscsiadm: unrecognized character 'P' あらゆるオプションが未知のオプション扱いされる これらを修正して出来上がったバイナリを実行すると
  • 22. optopt = 0;! while ((ch = getopt_long(argc, argv, short_options,! long_options, &longindex)) >= 0) {! (略)! }! if (optopt) {! log_error("unrecognized character '%c'", optopt);! rc = ISCSI_ERR_INVAL;! goto free_ifaces;! } glibcではそのように動くが 特に規格で保証されているわけではない挙動に依存している getoptが失敗時に引数を書き込むグローバル変数optoptに 成功時には何も書き込まれないことを期待している (POSIXは成功時の値について何も規定していない)
  • 23. これらの修正をパッチにした Open-iSCSIプロジェクトに投げる前に gitのHEADにこのパッチを当ててみた
  • 24. gcc -DHAVE_CONFIG_H -I. -I../../.. -I../../../src/uip - I../../../src/unix -I../../../src/unix/libs -I../../../src/apps/ dhcpc -I../../../../include -I../../../../usr -g -O2 -O2 -Wall - MT bnx2x.o -MD -MP -MF .deps/bnx2x.Tpo -c -o bnx2x.o bnx2x.c! In file included from ../../../src/unix/nic.h:46:0,! from bnx2x.h:41,! from bnx2x.c:57:! /usr/include/netinet/if_ether.h:96:8: エラー: ‘struct ethhdr’ の 再定義です! struct ethhdr {! ^! In file included from /usr/include/linux/ethtool.h:17:0,! from bnx2x.c:45:! /usr/include/linux/if_ether.h:137:8: 備考: 元々はここで定義されました! struct ethhdr {! ^! Makefile:352: recipe for target 'bnx2x.o' failed! musl libcでOpen-iSCSIを使うのを諦めた
  • 25. イニシエータ ターゲット こっちは普通のLinux環境で良い こっちは?
  • 26. なんと! LinuxはSCSIターゲットになれる
  • 27. LIOTM http://linux-iscsi.org/wiki/LIO Linux環境をSCSIターゲットにしよう
  • 28. Generic Target Core Mod を有効にする
  • 29. $ targetcli! Warning: Could not load preferences file /root/.targetcli/prefs.bin.! targetcli GIT_VERSION (rtslib GIT_VERSION)! Copyright (c) 2011-2013 by Datera, Inc.! All rights reserved.! Created '/sys/kernel/config/target/loopback'.! Created '/sys/kernel/config/target/iscsi'.! Created '/sys/kernel/config/target/srpt'.! /> ls! o- / ................................................................... [...]! o- backstores ........................................................ [...]! | o- fileio ............................................. [0 Storage Object]! | o- iblock ............................................. [0 Storage Object]! | o- pscsi .............................................. [0 Storage Object]! | o- rd_dr .............................................. [0 Storage Object]! | o- rd_mcp ............................................. [0 Storage Object]! o- ib_srpt ..................................................... [0 Targets]! o- iscsi ....................................................... [0 Targets]! o- loopback .................................................... [0 Targets]! /> targetcliで設定
  • 30. 個々の設定はそれぞれのディレクトリにcdして行う lsで現在のディレクトリ以下にある設定項目を確認 /> ls! o- / ................................................................... [...]! o- backstores ........................................................ [...]! | o- fileio ............................................. [0 Storage Object]! | o- iblock ............................................. [0 Storage Object]! | o- pscsi .............................................. [0 Storage Object]! | o- rd_dr .............................................. [0 Storage Object]! | o- rd_mcp ............................................. [0 Storage Object]! o- ib_srpt ..................................................... [0 Targets]! o- iscsi ....................................................... [0 Targets]! o- loopback .................................................... [0 Targets]! /> 同じ名前のコマンドでもディレクトリによって機能が違う点に注意
  • 31. /> ls! o- / ................................................................... [...]! o- backstores ........................................................ [...]! | o- fileio ............................................. [0 Storage Object]! | o- iblock ............................................. [0 Storage Object]! | o- pscsi .............................................. [0 Storage Object]! | o- rd_dr .............................................. [0 Storage Object]! | o- rd_mcp ............................................. [0 Storage Object]! o- ib_srpt ..................................................... [0 Targets]! o- iscsi ....................................................... [0 Targets]! o- loopback .................................................... [0 Targets]! /> backstores 読み書きされるデータを保存しておく場所
  • 32. /> ls! o- / ................................................................... [...]! o- backstores ........................................................ [...]! | o- fileio ............................................. [0 Storage Object]! | o- iblock ............................................. [0 Storage Object]! | o- pscsi .............................................. [0 Storage Object]! | o- rd_dr .............................................. [0 Storage Object]! | o- rd_mcp ............................................. [0 Storage Object]! o- ib_srpt ..................................................... [0 Targets]! o- iscsi ....................................................... [0 Targets]! o- loopback .................................................... [0 Targets]! /> fileio ファイルにデータを保存する
  • 33. fileio create <ストレージ名> <ファイル名> <サイズ> [ <bufferd> ] /> cd /backstores/fileio! /backstores/fileio> create back0 /root/test.img 10M! Generating a wwn serial.! Not using buffered mode.! Created fileio back0.! /backstores/fileio> ls! o- fileio ................................................. [1 Storage Object]! o- back0 ...................................... [/root/test.img deactivated]! /backstores/fileio> createで新しいbackstoreを作成
  • 34. fileio delete <ストレージ名> /backstores/fileio> ls! o- fileio ................................................. [1 Storage Object]! o- back0 ...................................... [/root/test.img deactivated]! /backstores/fileio> delete back0! Deleted storage object back0.! /backstores/fileio> ls! o- fileio ................................................. [0 Storage Object]! /backstores/fileio> deleteでbackstoreを削除
  • 35. /> ls! o- / ................................................................... [...]! o- backstores ........................................................ [...]! | o- fileio ............................................. [0 Storage Object]! | o- iblock ............................................. [0 Storage Object]! | o- pscsi .............................................. [0 Storage Object]! | o- rd_dr .............................................. [0 Storage Object]! | o- rd_mcp ............................................. [0 Storage Object]! o- ib_srpt ..................................................... [0 Targets]! o- iscsi ....................................................... [0 Targets]! o- loopback .................................................... [0 Targets]! /> iblock ブロックデバイスにデータを保存する
  • 36. iblock create <ストレージ名> <デバイス名> /backstores/iblock> cd /! /> cd /backstores/iblock ! /backstores/iblock> create back0 /dev/sda4! Generating a wwn serial.! Created iblock storage object back0 using /dev/sda4.! /backstores/iblock> ls! o- iblock ................................................. [1 Storage Object]! o- back0 ........................................... [/dev/sda4 deactivated]! /backstores/iblock> createで新しいbackstoreを作成 deleteはfileioと同じ
  • 37. /> ls! o- / ................................................................... [...]! o- backstores ........................................................ [...]! | o- fileio ............................................. [0 Storage Object]! | o- iblock ............................................. [0 Storage Object]! | o- pscsi .............................................. [0 Storage Object]! | o- rd_dr .............................................. [0 Storage Object]! | o- rd_mcp ............................................. [0 Storage Object]! o- ib_srpt ..................................................... [0 Targets]! o- iscsi ....................................................... [0 Targets]! o- loopback .................................................... [0 Targets]! /> pscsi SCSIパススルー SCSIコマンドをLIOで解釈せずに 別のSCSIターゲットに丸投げする
  • 38. /> ls! o- / ................................................................... [...]! o- backstores ........................................................ [...]! | o- fileio ............................................. [0 Storage Object]! | o- iblock ............................................. [0 Storage Object]! | o- pscsi .............................................. [0 Storage Object]! | o- rd_dr .............................................. [0 Storage Object]! | o- rd_mcp ............................................. [0 Storage Object]! o- ib_srpt ..................................................... [0 Targets]! o- iscsi ....................................................... [0 Targets]! o- loopback .................................................... [0 Targets]! /> rd_dr/rd_mcp RAMにデータを保存する rd_mcp memcpyを使う手堅い実 rd_dr DMAを使う速い実装
  • 39. rd_dr/rd_mcp create <ストレージ名> <サイズ> /> cd /backstores/rd_mcp /backstores/rd_mcp> create back1 10M Generating a wwn serial. Created rd_mcp ramdisk back1 with size 10M. /backstores/rd_mcp> ls o- rd_mcp ................................................. [1 Storage Object] o- back1 ............................................. [ramdisk deactivated] /backstores/rd_mcp> createで新しいbackstoreを作成 deleteはfileioと同じ
  • 40. /> ls! o- / ................................................................... [...]! o- backstores ........................................................ [...]! | o- fileio ............................................. [0 Storage Object]! | o- iblock ............................................. [0 Storage Object]! | o- pscsi .............................................. [0 Storage Object]! | o- rd_dr .............................................. [0 Storage Object]! | o- rd_mcp ............................................. [0 Storage Object]! o- ib_srpt ..................................................... [0 Targets]! o- iscsi ....................................................... [0 Targets]! o- loopback .................................................... [0 Targets]! /> ストレージの見せ方
  • 41. /> ls! o- / ................................................................... [...]! o- backstores ........................................................ [...]! | o- fileio ............................................. [0 Storage Object]! | o- iblock ............................................. [0 Storage Object]! | o- pscsi .............................................. [0 Storage Object]! | o- rd_dr .............................................. [0 Storage Object]! | o- rd_mcp ............................................. [0 Storage Object]! o- ib_srpt ..................................................... [0 Targets]! o- iscsi ....................................................... [0 Targets]! o- loopback .................................................... [0 Targets]! /> SCSI RDMA Protocol ib_srpt InfinibandにSCSIプロトコルを乗せる
  • 42. /> ls! o- / ................................................................... [...]! o- backstores ........................................................ [...]! | o- fileio ............................................. [0 Storage Object]! | o- iblock ............................................. [0 Storage Object]! | o- pscsi .............................................. [0 Storage Object]! | o- rd_dr .............................................. [0 Storage Object]! | o- rd_mcp ............................................. [0 Storage Object]! o- ib_srpt ..................................................... [0 Targets]! o- iscsi ....................................................... [0 Targets]! o- loopback .................................................... [0 Targets]! /> loopback このホストに 新しいSCSIデバイスが接続されたように見える
  • 43. loopback create [<wwn>] createで新しいループバックターゲットを作成 /> cd /loopback ! /loopback> create! Created target naa.600140589cd08660.! /loopback> ls! o- loopback ....................................................... [1 Target]! o- naa.600140589cd08660 ............................. [naa.6001405cb9de14a5]! o- luns ......................................................... [0 LUNs]! /loopback>
  • 44. Logical Unit Number 1つのSCSIターゲットには 複数のストレージをぶら下げることができる /> cd /loopback ! /loopback> create! Created target naa.600140589cd08660.! /loopback> ls! o- loopback ....................................................... [1 Target]! o- naa.600140589cd08660 ............................. [naa.6001405cb9de14a5]! o- luns ......................................................... [0 LUNs]! /loopback>
  • 45. Logical Unit Number LUN0 LUN1 LUN2 LUN3 LUN4 いにしえのパラレルSCSIは ストレージを数珠つなぎにすることができた名残 SCSIターゲット 訂正: 発表中ではLUNはデイジーチェーンのデバイスを識別するの に用いるとしていましたが、その用途で用いられるのはターゲット IDでLUNとは別物でした。LUNは単一のデバイスが複数の機能を 提供している場合に、それらを識別する為に用いられます
  • 46. /> cd loopback/naa.600140589cd08660/luns /loopback/naa...9cd08660/luns> create /backstores/fileio/back0 Selected LUN 0. Successfully created LUN 0. /loopback/naa...9cd08660/luns> ls o- luns .............................................................. [1 LUN] o- lun0 ..................................... [fileio/back0 (/root/usb.img)] /loopback/naa...9cd08660/luns> Logical Unit Number create <ストレージ名> [<LUN>] createで指定したストレージで新しいLUNを作成
  • 47. /> saveconfig! WARNING: Saving Olivia.localnet current configuration to disk will overwrite your boot settings.! The current target configuration will become the default boot config.! Are you sure? Type 'yes': yes 設定を保存してターゲットが出来たか見てみよう
  • 48. 新しいディスクが出来てる! $ dmesg! (略)! [31290.708141] init_tag_map: adjusted depth to 256! [31290.708145] init_tag_map: adjusted depth to 256! [31290.708221] scsi 4:0:1:0: Direct-Access LIO-ORG FILEIO 4.0 PQ: 0 ANSI: 5! [31290.708952] sd 4:0:1:0: [sdb] 204800 512-byte logical blocks: (104 MB/100 MiB)! [31290.709000] sd 4:0:1:0: [sdb] Write Protect is off! [31290.709003] sd 4:0:1:0: [sdb] Mode Sense: 43 00 00 08! [31290.709274] sd 4:0:1:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA! [31290.709519] sdb: unknown partition table! [31290.709679] sd 4:0:1:0: [sdb] Attached SCSI disk
  • 49. $ mkfs.ext4 /dev/sdb ! mke2fs 1.42.12 (29-Aug-2014)! Creating filesystem with 102400 1k blocks and 25688 inodes! Filesystem UUID: 58d4ec84-a14a-4b9a-874d-cf3cc1b06331! Superblock backups stored on blocks: ! ! 8193, 24577, 40961, 57345, 73729! ! Allocating group tables: done ! Writing inode tables: done ! Creating journal (4096 blocks): done! Writing superblocks and filesystem accounting information: done ! ! $ mount /dev/sdb /mnt/loop/! $ df -h! ファイルシス サイズ 使用 残り 使用% マウント位置! (略)! /dev/sdb 93M 1.6M 85M 2% /mnt/loop! $ マウントできるよ!
  • 50. /> ls! o- / ................................................................... [...]! o- backstores ........................................................ [...]! | o- fileio ............................................. [0 Storage Object]! | o- iblock ............................................. [0 Storage Object]! | o- pscsi .............................................. [0 Storage Object]! | o- rd_dr .............................................. [0 Storage Object]! | o- rd_mcp ............................................. [0 Storage Object]! o- ib_srpt ..................................................... [0 Targets]! o- iscsi ....................................................... [0 Targets]! o- loopback .................................................... [0 Targets]! /> iSCSI TCP/IPネットワークにSCSIプロトコルを乗せる
  • 51. /> cd iscsi ! /iscsi> create! Created target iqn.2003-01.org.linux-iscsi.olivia.x8664:sn.7bb390f60a12.! Selected TPG Tag 1.! Successfully created TPG 1.! /iscsi> ls! o- iscsi .......................................................... [1 Target]! o- iqn.2003-01.org.linux-iscsi.olivia.x8664:sn.7bb390f60a12 ........ [1 TPG]! o- tpgt1 ....................................................... [enabled]! o- acls ....................................................... [0 ACLs]! o- luns ....................................................... [0 LUNs]! o- portals ................................................. [0 Portals]! /iscsi> iSCSI create [<wwn>] createで新しいiSCSIターゲットを作成
  • 52. /iscsi> cd iqn.2003-01.org.linux-iscsi.olivia.x8664:sn.7bb390f60a12/tpgt1/luns ! /iscsi/iqn.20...12/tpgt1/luns> create /backstores/fileio/back0 ! Selected LUN 0.! Successfully created LUN 0.! /iscsi/iqn.20...12/tpgt1/luns> ls! o- luns .............................................................. [1 LUN]! o- lun0 ..................................... [fileio/back0 (/root/usb.img)]! /iscsi/iqn.20...12/tpgt1/luns> Logical Unit Number create <ストレージ名> [<LUN>] createで指定したストレージで新しいLUNを作成 この部分はloopbackの場合と一緒
  • 53. /iscsi/iqn.20...0f60a12/tpgt1> cd portals ! /iscsi/iqn.20...tpgt1/portals> create 192.168.67.1! Using default IP port 3260! Successfully created network portal 192.168.67.1:3260.! /iscsi/iqn.20...tpgt1/portals> ls! o- portals ........................................................ [1 Portal]! o- 192.168.67.1:3260 ................................... [OK, iser disabled]! /iscsi/iqn.20...tpgt1/portals> Portals create <IPアドレス> [<ポート>] イニシエータからの接続を待ち受ける アドレスとポートを指定する デフォルトのポートは3260番
  • 54. /iscsi/iqn.20...12/tpgt1/acls> create iqn.2014-02.localnet.hahnela:openiscsi-5! bdbe8b0c609a2e4c0fa2a056ef7a686! Successfully created Node ACL for iqn. 2014-02.localnet.hahnela:openiscsi-5bdbe8b0c609a2e4c0fa2a056ef7a686! Created mapped LUN 0.! /iscsi/iqn.20...12/tpgt1/acls> ls! o- acls .............................................................. [1 ACL]! o- iqn.2014-02.localnet.hahnela:openiscsi-5bdbe8b0c609a2e4c0fa2a056ef7a686 [1 Mapped LUN]! o- mapped_lun0 ............................................... [lun0 (rw)]! /iscsi/iqn.20...12/tpgt1/acls> Access Control List create <イニシエータの名前> ログインを許可するイニシエータのリスト 認証方法やパスワードの設定もここでやる
  • 55. $ cat /etc/iscsi/initiatorname.iscsi! (略)! InitiatorName=iqn.2014-02.localnet.hahnela:openiscsi-5bdbe8b0c609a2e4c0fa2a056e! f7a686 Open-iSCSIの場合イニシエータの名前は /etc/iscsi/initiatorname.iscsi に書かれている GentooならOpen-iSCSIをemergeした時に 適当に生成されているはず
  • 56. /iscsi/iqn.20...12/tpgt1/acls> cd iqn.2014-02.localnet.hahnela:openiscsi-5bdbe8! b0c609a2e4c0fa2a056ef7a686/! /iscsi/iqn.20...a2a056ef7a686> set auth userid=foobar! Parameter userid is now 'foobar'.! /iscsi/iqn.20...a2a056ef7a686> set auth password=hogefuga! Parameter password is now ‘hogefuga'.! /iscsi/iqn.20...a2a056ef7a686> get auth! AUTH CONFIG GROUP! authenticate_target=0 [ro]! The authenticate_target auth_attr.! ! password=hogefuga! The password auth_attr.! ! password_mutual=! The password_mutual auth_attr.! ! userid=foobar! The userid auth_attr.! ! userid_mutual=! The userid_mutual auth_attr. ユーザ名とパスワードを設定しよう
  • 57. $ vim /etc/iscsi/iscsi.conf! (略)! # *************! # CHAP Settings! # *************! ! # To enable CHAP authentication set node.session.auth.authmethod! # to CHAP. The default is None.! node.session.auth.authmethod = CHAP ← CHAPによる認証を有効にする! # To set a CHAP username and password for initiator! # authentication by the target(s), uncomment the following lines:! node.session.auth.username = foobar ← ユーザ名! node.session.auth.password = hogefuga ← パスワード! ! # To set a CHAP username and password for target(s)! (略) イニシエータ側にもユーザ名とパスワードを設定しよう
  • 58. $ iscsiadm -m discovery -t st -p 192.168.67.1 -P 1! Target: iqn.2003-01.org.linux-iscsi.olivia.x8664:sn.7bb390f60a12! ! Portal: 192.168.67.1:3260,1! ! ! Iface Name: iface0! $ iscsiadm -m node --targetname iqn.2003-01.org.linux-iscsi.olivia.x8664:sn. 7bb390f60a12 --login! Logging in to [iface: iface0, target: iqn.2003-01.org.linux- iscsi.olivia.x8664:sn.7bb390f60a12, portal: 192.168.67.1,3260]! Login to [iface: iface0, target: iqn.2003-01.org.linux-iscsi.olivia.x8664:sn. 7bb390f60a12, portal: 192.168.67.1,3260] successful. イニシエータ側から接続してみよう
  • 59. [967161.130736] scsi host33: iSCSI Initiator over TCP/IP! [967162.523325] scsi 33:0:0:0: Direct-Access LIO-ORG FILEIO 4.0 PQ: 0 ANSI: 5! [967162.720618] sd 33:0:0:0: Attached scsi generic sg2 type 0! [967162.881617] sd 33:0:0:0: [sdc] 204800 512-byte logical blocks: (104 MB/100 MiB)! [967163.263347] sd 33:0:0:0: [sdc] Write Protect is off! [967163.263354] sd 33:0:0:0: [sdc] Mode Sense: 43 00 00 08! [967163.413784] sd 33:0:0:0: [sdc] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA! [967164.335413] sdc: unknown partition table! [967165.274567] sd 33:0:0:0: [sdc] Attached SCSI disk 新しいディスクが出来てる!
  • 60. この他にも色んな見せ方が出来る FibreChannel FibreChannelにSCSIプロトコルを乗せる FibreChannel over Ethernet FCoEにSCSIプロトコルを乗せる FireWire FireWire接続のディスクになりきる IBM vSCSI IBM Virtual I/OにSCSIプロトコルを乗せる iSER InfinibandでTCP/IP通信をしている場合に使える より効率の良いiSCSI USB Gadget USB接続のディスクになりきる virtio kvmのゲスト環境にSCSIディスクを提供する
  • 61. Open-iSCSIとLIOで ネットワーク越しに SCSIを繋ぎ放題!
  • 62. いままで
  • 63. これから
  • 64. ところで
  • 65. これにiSCSIターゲットを繋ぎたいんだが
  • 66. WiiUにBeagleBoneBlackを接続
  • 67. $ /etc/init.d/iscsid start! * Use of the opts variable is deprecated and will be! * removed in the future.! * Please use extra_commands, extra_started_commands or extra_stopped_commands.! * Checking open-iSCSI configuration ...! * Loading iSCSI modules ...! * Loading libiscsi ... [ ok ]! * Loading scsi_transport_iscsi ... [ ok ]! * Loading iscsi_tcp ... [ ok ]! * Starting iscsid ...! * Setting up iSCSI targets ...! iscsiadm: No records found! [ !! ]! BeagleBoneBlackでOpen-iSCSIを起動
  • 68. $ /etc/init.d/iscsid start! * Use of the opts variable is deprecated and will be! * removed in the future.! * Please use extra_commands, extra_started_commands or extra_stopped_commands.! * Checking open-iSCSI configuration ...! * Loading iSCSI modules ...! * Loading libiscsi ... [ ok ]! * Loading scsi_transport_iscsi ... [ ok ]! * Loading iscsi_tcp ... [ ok ]! * Starting iscsid ...! * Setting up iSCSI targets ...! iscsiadm: No records found! [ !! ]! $ iscsiadm -m discovery -t st -p 192.168.152.1 -P1! Target: iqn.2003-01.org.linux-iscsi.hahnela.x8664:sn.406262d1b87f! ! Portal: 192.168.152.1:3260,1! ! ! Iface Name: default! Target: iqn.2003-01.org.linux-iscsi.hahnela.x8664:sn.f3d75f94ab5f! ! Portal: 192.168.152.1:3260,1! ! ! Iface Name: default! Target: iqn.2003-01.org.linux-iscsi.hahnela.x8664:sn.aa5bd06b61e8! ! Portal: 192.168.152.1:3260,1! ! ! Iface Name: default! LIOが動いているサーバに接続
  • 69. * Please use extra_commands, extra_started_commands or extra_stopped_commands.! * Checking open-iSCSI configuration ...! * Loading iSCSI modules ...! * Loading libiscsi ... [ ok ]! * Loading scsi_transport_iscsi ... [ ok ]! * Loading iscsi_tcp ... [ ok ]! * Starting iscsid ...! * Setting up iSCSI targets ...! iscsiadm: No records found! [ !! ]! $ iscsiadm -m discovery -t st -p 192.168.152.1 -P1! Target: iqn.2003-01.org.linux-iscsi.hahnela.x8664:sn.406262d1b87f! ! Portal: 192.168.152.1:3260,1! ! ! Iface Name: default! Target: iqn.2003-01.org.linux-iscsi.hahnela.x8664:sn.f3d75f94ab5f! ! Portal: 192.168.152.1:3260,1! ! ! Iface Name: default! Target: iqn.2003-01.org.linux-iscsi.hahnela.x8664:sn.aa5bd06b61e8! ! Portal: 192.168.152.1:3260,1! ! ! Iface Name: default! $ iscsiadm -m node --targetname iqn.2003-01.org.linux- iscsi.hahnela.x8664:sn.aa5bd06b61e8 --login! Logging in to [iface: default, target: iqn.2003-01.org.linux- iscsi.hahnela.x8664:sn.aa5bd06b61e8, portal: 192.168.152.1,3260]! Login to [iface: default, target: iqn.2003-01.org.linux- iscsi.hahnela.x8664:sn.aa5bd06b61e8, portal: 192.168.152.1,3260] successful.! iSCSIターゲットにログイン
  • 70. ! ! Iface Name: default! Target: iqn.2003-01.org.linux-iscsi.hahnela.x8664:sn.aa5bd06b61e8! ! Portal: 192.168.152.1:3260,1! ! ! Iface Name: default! $ iscsiadm -m node --targetname iqn.2003-01.org.linux- iscsi.hahnela.x8664:sn.aa5bd06b61e8 --login! Logging in to [iface: default, target: iqn.2003-01.org.linux- iscsi.hahnela.x8664:sn.aa5bd06b61e8, portal: 192.168.152.1,3260]! Login to [iface: default, target: iqn.2003-01.org.linux- iscsi.hahnela.x8664:sn.aa5bd06b61e8, portal: 192.168.152.1,3260] successful.! $ dmesg|tail! [ 786.904712] iscsid (933): /proc/933/oom_adj is deprecated, please use /proc/ 933/oom_score_adj instead.! [ 865.973831] scsi0 : iSCSI Initiator over TCP/IP! [ 867.037208] scsi 0:0:0:0: Direct-Access LIO-ORG IBLOCK 4.0 PQ: 0 ANSI: 5! [ 867.042950] sd 0:0:0:0: [sda] 41943040 512-byte logical blocks: (21.4 GB/20.0 GiB)! [ 867.042999] sd 0:0:0:0: [sda] 4096-byte physical blocks! [ 867.047639] sd 0:0:0:0: [sda] Write Protect is off! [ 867.047698] sd 0:0:0:0: [sda] Mode Sense: 43 00 10 08! [ 867.049386] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, supports DPO and FUA! [ 867.088748] sda: unknown partition table! [ 867.104140] sd 0:0:0:0: [sda] Attached SCSI disk! /dev/sda登場
  • 71. USB Gadget API Framework LinuxのUSBデバイスコントローラ用ドライバ Linuxマシンが色んなUSBデバイスになりきる http://www.linux-usb.org/gadget/
  • 72. $ modprobe g_mass_storage file=/dev/sda BeagleBoneBlackには ホストにもデバイスにもなれるUSBコントローラが載っている USB Gadgetのmass storageドライバをロード バックストレージとして先程の/dev/sdaを指定 BeagleBoneBlackにiSCSIとUSBの変換をさせる
  • 73. WiiUがUSB外付けハードディスクとして認識してくれる
  • 74. iSCSI非対応デバイスでも ネットワーク越しに SCSIを繋ぎ放題!
  • 75. まとめ Open-iSCSIでiSCSIターゲットに接続 LIOでiSCSIターゲットを作成 USB GadgetでiSCSIをUSBに変換