none
[分享]一個自動在 Windows 掛載 iSCSI 磁盤的批處理腳本 RRS feed

  • 常规讨论

  • 1.  iSCSI target 在本文中是一臺 CentOS 6.7 的 tgtd 實現, 傳輸方式 TCP.
      啓用了 iSCSI 發起程序的單向 CHAP 驗證.
      傳輸過程並沒有使用任何機制加密.
      這段說明除了 CHAP 外, 其他僅爲一般說明.
      至於其他軟件 iSCSI target, 諸如 CentOS 7 的 targetcli, Windows Server 自帶的, 並無特殊要求.
      批處理腳本核心調用的外部命令爲

      iscsicli
      diskpart

    2. 首次在 Windows 客戶端添加 iSCSI 存儲, 這裏依然建議用 

      iscsicpl

      雖然用命令版

      iscsicli

      但相比 GUI 的要繁瑣些. 此腳本也是簡單調用了一下 iscsicli.
      當存儲連接完成後, 用

      diskpart

      或

      diskmgmt.msc

      完成卷的格式化, 需要注意要爲卷設置唯一的卷名.
      卷名不應太長, 否則在 diskpart 中不能完整顯示.
      至於掛載點是盤符, 還是空白 NTFS 目錄, 不做強制要求.
      腳本依賴的是卷的索引.

    3. 下面即爲批處理腳本的完整代碼

      腳本名暫定爲: online-iscsi.bat

      以下爲代碼

      
    @echo off
    
    setlocal enabledelayedexpansion
    
    echo !DATE! !TIME! > !WINDIR!\temp\iscsi.start
    
    set /a i=0
    set /a COUNT=10
    set TARGETNAME=iqn.2017-06.contoso.com:c67-test02
    set USER=dc00
    set PASS=EMPTY
    set LABEL=c67
    set DISKPART=!WINDIR!\temp\diskpart.instruction
    
    :loop
    sc query msiscsi | find /i "running" 1> nul 2> nul
    if !ERRORLEVEL! equ 0 (goto start)
    set /a i=!i!+1
    if !i! geq !COUNT! (goto exit)
    timeout -t 3 -nobreak 1> nul 2> nul
    goto loop
    
    :start
    iscsicli qlogintarget !TARGETNAME! "!USER!" "!PASS!"
    
    chcp 437
    
    echo. > !DISKPART!
    for /f "tokens=2" %%d in ('echo list disk ^| diskpart ^| find /i "offline"') do (
      echo select disk %%d >> !DISKPART!
      echo online disk >> !DISKPART!
    )
    
    diskpart -s !DISKPART!
    
    echo.
    echo.
    echo.
    chcp 936
    
    set vol=
    for /f "tokens=2" %%n in ('echo list volume ^| diskpart ^| find "!LABEL!"') do (
      set vol=%%n
      goto break
    )
    
    :break
    if not defined vol (goto exit)
    
    echo !DISKPART!
    echo select volume !vol! > !DISKPART!
    echo attribute disk clear readonly >> !DISKPART!
    echo attribute volume clear readonly >> !DISKPART!
    echo exit >> !DISKPART!
    
    diskpart -s !DISKPART!
    
    echo !DATE! !TIME! > !WINDIR!\temp\iscsi.end
    
    :exit
    endlocal



      以上爲代碼

      自動掛載實現, 可以通過開機啓動的任務計劃實現.
      對於提交 CHAP 憑據的方式, 是通過 iscsicli 命令行方式顯式提交.
      如果服務器同時存在能夠本地或遠程桌面方式登錄的普通用戶, 請慎重考慮使用此腳本.
      由於如果 iSCSI 磁盤被設置爲 offline, 那麼不能在 diskpart 通過

      list volume
       
      列出要找的卷. 加之沒有除了磁盤索引外的方法, 能夠直接找到想要找的磁盤, 所以此腳本的方法
      是簡單粗暴把所有設置 offline 的磁盤都 online, 然後在找卷.
      如果確實有希望 offline 的磁盤, 可以考慮在找到指定卷後, 獲取卷的磁盤索引,
      把其他不是的磁盤索引, 統統 offline. 
      或者如果確認服務器不會添加磁盤, 那麼硬編碼磁盤索引.
      如果在生產環境中使用, 請務必先進行完整測試, 以確保腳本能夠滿足成功執行的必要條件.

    Folding@Home


    • 已编辑 repl 2017年6月14日 8:28
    2017年6月14日 8:25