星期一, 5月 17, 2010

iSCSI 研讀小記

Notes
  • iSCSI default port 3260
  • Protocol Data Unit ( PDU ): 用來溝通 iSCSI target and initiator
  • iSCSI Qualified Name ( IQN ): assigned to an iSCSI node using the follow syntax:
    • iqn.year-month.TLD.Internet_domain:string
    • 例如 iqn.2010-05.com.mydomain:target1
  • LUN: 在iSCSI 等於傳統的 iSCSI disk, An iSCSI target hosts one or more LUNs.
  • iSCSI Target
    • 設定檔( iSCSI Target) /etc/ietd.conf , 可以以下列三種形式產生
      • LV
      • Disk / Partition
      • File
  • iSCSI initiator 
    • three discover methods
      • SendTargets
      • iSNS
      • SLP
    • 套件 open-iscsi / yast-iscsi-client
      • /etc/init.d/open-iscsi
      • /etc/init.d/boot.open-iscsi
      • 設定檔 /etc/iscsid.conf  ( /etc/iscsi/iscsid.conf)
    • 驗證的密碼會存放於 /etc/iscsi/send_targets/iSCSI Target主機IP,Port/裝置名稱/default
    • onboot 與 automatic 的差別為 onboot 是啟動open-iscsi 以及 boot.open-iscsi 兩個服務但是沒有登入 iscsi  的裝置, 但是automatic 是會啟動服務且登入iSCSI的裝置
    • 名稱由 /etc/iscsi/initiatorname.iscsi 設定檔來自動產生, 也可以手動設定,語法為
      • iqn.yyyy-mm.top_level_domain.domain:n1:n2
  • iSNS 伺服器 預設port 3205

    Lab: iSCSI

    iSCSI Target:

    1.安裝相關套件
    #yast2 iscsi-server
    • 會提示要安裝 iscsitarget 套件
    • 選取開機時啟動
    • 開啟Firewall --> 點選完成
    2.建立一個 Partition 
    ( 不需要格式化) 這邊使用 4GB來測試
    或是
    一個檔案來測試, 例如
    #mkdir   /iscsi
    #dd  if=/dev/zero  of=/iscsi/first   bs=1M  count=1024

    3.建立相關設定
    #yast2  iscsi-server
    • 點選 Global 全域  頁面
    • 點選 目標 Target 頁面
      • 刪除預設的 Target, 點選刪除 --> 點選 繼續
      • 點選新增按鈕 --> LUN 名稱會自動產生
      • 點選 新增 按鈕 --> 輸入或是選取路徑 ( 例如 /dev/sdb1) --> 點選確定
      • 將要納入 iSCSI Target 的檔案或是Partition 都納入
      • 點選下一步 
      • 取消勾選 無驗證
      • 點選 新增 ( 內送驗證 ), 輸入使用者名稱以及密碼 ( 建議要 12 個字元以上才符合 CHAP 限制, 以免Windows 那邊連線有問題 ) --> 確定
      • 點選 完成 並重新啟動服務
    設定完成之後觀察 /etc/ietd.conf 內容
    IncomingUser root novell
    Target iqn.2010-05.com.digitalairline:f166a8b0-4644-4ea1-a888-a9c399f9d275
    Lun 0 Path=/dev/sdb1,Type=fileio
    Lun 1 Path=/iscsi/first-device,Type=fileio

    觀察相關資訊
    # cat /proc/net/iet/volume 
    tid:1 name:iqn.2010-05.com.digitalairline:f166a8b0-4644-4ea1-a888-a9c399f9d275
    lun:0 state:0 iotype:fileio iomode:wt path:/dev/sdb1
    lun:1 state:0 iotype:fileio iomode:wt path:/iscsi/first-device

    # cat /proc/net/iet/session 
    tid:1 name:iqn.2010-05.com.digitalairline:f166a8b0-4644-4ea1-a888-a9c399f9d275


    **iSCSI Initiator**

    建立之前觀察一下裝置

    # ls /dev/disk/by-path/
    pci-0000:00:02.5-scsi-0:0:0:0
    pci-0000:00:02.5-scsi-0:0:0:0-part1
    pci-0000:00:02.5-scsi-0:0:0:0-part2
    pci-0000:00:02.5-scsi-1:0:0:0


    安裝相關套件
    #yast2  iscsi-client
    如果被提示要安裝open-iscsi套件, 就點選安裝

    • 點選開機時啟動 When Booting
    • 點選 探查的目標 Discovered Targets 頁面
      • 點選 探查 Discovery
      • 輸入 iSCSI Target 的IP位址
      • 點選下一步 開始Discover
      • 這個時候會找到分享出來的裝置,  點選 登入
      • 取消 無驗證
      • 勾選 外送驗證 ( 因為在 iSCSI Target 那邊是設定 內送驗證 )
      • 輸入 帳號 還有密碼, 點選 下一步
      • 這個時候會觀察到 已連線 ( Connected )的欄位 就會顯示為 真(True)
    • 點選 已連線目標 頁面
      • 確認 啟動(Start-up)欄位 設定為 onboot ( 如果沒有, 點選切換啟動 Toggle Startup)
        • onboot 與 automatic 的差別為 onboot 是啟動open-iscsi 以及 boot.open-iscsi 兩個服務但是沒有登入 iscsi  的裝置, 但是automatic 是會啟動服務且登入iSCSI的裝置
      • 點選 完成
    觀察相關資訊
    # lsscsi 
    [0:0:0:0]    disk    ATA      ST380011A        3.06  /dev/sda
    [1:0:0:0]    cd/dvd  SONY     DVD-ROM DDU1622  AS72  /dev/sr0
    [3:0:0:0]    disk    IET      VIRTUAL-DISK     0     /dev/sdb
    [3:0:0:1]    disk    IET      VIRTUAL-DISK     0     /dev/sdc

    # ls /dev/disk/by-path/
    ip-192.168.123.201:3260-iscsi-iqn.2010-05.com.digitalairline:f166a8b0-4644-4ea1-a888-a9c399f9d275-lun-0
    ip-192.168.123.201:3260-iscsi-iqn.2010-05.com.digitalairline:f166a8b0-4644-4ea1-a888-a9c399f9d275-lun-1
    pci-0000:00:02.5-scsi-0:0:0:0
    pci-0000:00:02.5-scsi-0:0:0:0-part1
    pci-0000:00:02.5-scsi-0:0:0:0-part2
    pci-0000:00:02.5-scsi-1:0:0:0

    使用  iscsiadm 觀察 iSCSI Target

    # iscsiadm  -m discovery  -t  st  -p 192.168.123.201

    • -m 為模式 discovery 為探查
    • -t 為 discovery 的方式 st 為SendTargets 或是也可以使用 isns
    • -p  為iSCSI Target 的IP與port ( IP_Address:port)
    使用 iscsiadm 登出
    #iscsiadm  -m  node  -T   iqn.2010-05.com.digitalairline:f166a8b0-4644-4ea1-a888-a9c399f9d275  -u
    • -m 為模式 採取 node 模式
    • -T 為指定Target  名稱 ( iqn)
    • -u 為登出 ( 一旦登出之後  /etc/iscsi/send_targets/iSCSI Target主機IP,Port/裝置名稱/default 檔案就會被刪除, 登入驗證相關資訊就要重新建立 )

    列出找到的 iSCSI Targets
    #iscsiadm -m node
    192.168.123.201:3260,1 iqn.2010-05.com.digitalairline:f166a8b0-4644-4ea1-a888-a9c399f9d275

    刪除找到的 iSCSI Targets ( 前提是沒有 Session 在使用)


    # iscsiadm -m node -o delete


    列出目前的 session

    # iscsiadm -m session
    tcp: [5] 192.168.123.201:3260,1 iqn.2010-05.com.digitalairline:f166a8b0-4644-4ea1-a888-a9c399f9d275

    列出目前所有 session 的統計資訊
    # iscsiadm -m session -s
    Stats for session [sid: 5, target: iqn.2010-05.com.digitalairline:f166a8b0-4644-4ea1-a888-a9c399f9d275, portal: 192.168.123.201,3260]

    iSCSI SNMP:
    txdata_octets: 9500
    rxdata_octets: 1732356
    noptx_pdus: 0
    scsicmd_pdus: 121
    tmfcmd_pdus: 0
    login_pdus: 0
    text_pdus: 0
    dataout_pdus: 0
    logout_pdus: 0
    snack_pdus: 0
    noprx_pdus: 0
    scsirsp_pdus: 121
    tmfrsp_pdus: 0
    textrsp_pdus: 0
    datain_pdus: 280
    logoutrsp_pdus: 0
    r2t_pdus: 0
    async_pdus: 0
    rjt_pdus: 0
    digest_err: 0
    timeout_err: 0
    iSCSI Extended:
    tx_sendpage_failures: 0
    rx_discontiguous_hdr: 0
    eh_abort_cnt: 0

    列出某一個session 的詳細資訊  -r 後面接 session ID
    # iscsiadm -m session -r 5
    node.name = iqn.2010-05.com.digitalairline:f166a8b0-4644-4ea1-a888-a9c399f9d275
    node.tpgt = 1
    node.startup = onboot
    iface.hwaddress = default
    iface.ipaddress = default
    iface.iscsi_ifacename = default
    iface.net_ifacename = default
    iface.transport_name = tcp
    iface.initiatorname =
    node.discovery_address = 192.168.123.201
    node.discovery_port = 3260
    node.discovery_type = send_targets
    node.session.initial_cmdsn = 0
    node.session.initial_login_retry_max = 8
    node.session.cmds_max = 128
    node.session.queue_depth = 32
    node.session.auth.authmethod = CHAP
    node.session.auth.username = root
    node.session.auth.password = ********
    node.session.auth.username_in =
    node.session.auth.password_in =
    node.session.timeo.replacement_timeout = 120
    node.session.err_timeo.abort_timeout = 15
    node.session.err_timeo.lu_reset_timeout = 20
    node.session.err_timeo.host_reset_timeout = 60
    node.session.iscsi.FastAbort = Yes
    node.session.iscsi.InitialR2T = No
    node.session.iscsi.ImmediateData = Yes
    node.session.iscsi.FirstBurstLength = 262144
    node.session.iscsi.MaxBurstLength = 16776192
    node.session.iscsi.DefaultTime2Retain = 0
    node.session.iscsi.DefaultTime2Wait = 2
    node.session.iscsi.MaxConnections = 1
    node.session.iscsi.MaxOutstandingR2T = 1
    node.session.iscsi.ERL = 0
    node.conn[0].address = 192.168.123.201
    node.conn[0].port = 3260
    node.conn[0].startup = onboot
    node.conn[0].tcp.window_size = 524288
    node.conn[0].tcp.type_of_service = 0
    node.conn[0].timeo.logout_timeout = 15
    node.conn[0].timeo.login_timeout = 15
    node.conn[0].timeo.auth_timeout = 45
    node.conn[0].timeo.noop_out_interval = 5
    node.conn[0].timeo.noop_out_timeout = 5
    node.conn[0].iscsi.MaxRecvDataSegmentLength = 131072
    node.conn[0].iscsi.HeaderDigest = None
    node.conn[0].iscsi.DataDigest = None
    node.conn[0].iscsi.IFMarker = No
    node.conn[0].iscsi.OFMarker = No





    8 則留言:

    Hunter 提到...
    作者已經移除這則留言。
    Hunter 提到...

    您好:
    看到您寫的iSCSI文章對我幫助非常大。謝謝您!但我有一個問題跟您請教,當我設定好iSCSI initiator並且也已使用yast format完成了。但當我重新開機時系統無法自動mount起來。發現是在開機時iSCSI還未啟動。有什麼設定可以將iSCSI的Partiton在開機時自動mount起來?
    OS Version:sles11
    謝謝~

    Max 提到...

    hello, Hunter
    這個要看您建立 iscsi 的時候是使用檔案還是 Partition的方式來建立
    實務上面發現如果是以 檔案的方式來建立, Windows 7 的確沒有自動帶起來. 以Partition 的方式就沒有這個問題.

    另外 iScsi 的Target 也要選取 automatic

    ^__^

    Nice to see you reply

    Hunter 提到...
    作者已經移除這則留言。
    Max 提到...

    oh?
    How about /etc/fstab ?

    Hunter 提到...

    你好:
    我是用SLES 11去連iSCSI的Storage,用yast2切Partition..因為會寫入fstab導致在開機時無法mount..所以是否有方法可以解?
    PS:因為我現在是先在fstab中將該Partition設為noauot,開完機後再mount..但總覺得這個方法不好.
    謝謝~

    Max 提到...

    無法 mount 的 error messages 為?

    晚上回去, 手上有機器在幫你測試一下?

    Unknown 提到...

    老師您好:目前設定均已成看也看的到目標磁碟,但卻老是在連線時發生BUG最後顯示錯誤訊息無法連線到目標,在防火牆部分已經允許iSCSI啟動器了。

    作業系統:win7 & SLES11