在 Red Hat Enterprise Linux 9 上掛載 iSCSI 磁碟區

瞭解如何在 RHEL 9 上以多路徑 I/O 掛載 Block Storage for Classic 磁碟區,以進行冗餘、高效能的儲存存取。

按照教學在 Red Hat Enterprise Linux® 9 作業系統的 虛擬伺服器 上掛載 IBM Cloud® Block Storage for Classic 磁碟區。 您將會建立兩個連線,從主機的一個網路介面連到儲存空間陣列的兩個目標 IP 位址。

如果您使用的是其他 Linux® 作業系統,請參閱您所使用發行版的文件,並確認多路徑功能是否支援用於設定路徑優先順序的非對稱邏輯單元存取(ALUA)。

開始之前

  1. 請確認將存取 Block Storage for Classic 資料卷的主機已獲得授權。 有關更多信息,請參閱 在控制台中授權主機、從 CLI 授權主機以及使用 Terraform 授權主機

  2. 要存取 IBM Cloud 的私人網路並與多項服務互動,必須使用有效的 VPN 連線

  3. 與伺服器建立 SSH 連線。 在主控台中可以找到 IP 位址、使用者名稱和密碼。 從選單選擇“選單”圖標,點選基礎架構VPC 圖示 > 經典基礎架構 > 裝置。 然後,在清單中找到您的伺服器,按一下其名稱以顯示其詳細資訊。

如果多台主機掛載同一個 Block Storage for Classic 磁碟區,但沒有合作管理,您的資料就有損毀的風險。 如果多台主機同時對磁碟區進行變更,可能會發生磁碟區損毀。 您需要群集感知的共享磁碟檔案系統來防止資料遺失,例如 Microsoft Cluster Shared Volumes ( CSV )、Red Hat Global File System ( GFS2 )、VMware® VMFS 等。 如需更多資訊,請參閱您的作業系統說明文件。

更新作業系統,並安裝 iSCSI 和多重路徑公用程式

請確定您的系統已更新,並包含 iscsi-initiator-utilsdevice-mapper-multipath 套件。 使用下列指令安裝套件。

  1. 更新作業系統。

    sudo dnf update
    
  2. 安裝多重路徑公用程式

    sudo dnf -y install device-mapper-multipath
    

    套件安裝完成後,輸入 mpathconf --enable --user_friendly_names n 指令啟用。

  3. 安裝 ISCSI 公用程式

    sudo dnf -y install iscsi-initiator-utils
    

    套件安裝完成後,使用 systemctl start iscsid 指令啟動它。

更新 iSCSI 配置檔案

  1. 請使用 IBM Cloud® 控制台中的 IQN 來更新 /etc/iscsi/initiatorname.iscsi 檔案。

    1. 以下範例顯示如何檢查目前的啟動器名稱。
    [root@vsi4classic ~]# cat /etc/iscsi/initiatorname.iscsi
    InitiatorName=iqn.1994-05.com.redhat:7acdadcdc20
    
    1. 在文字編輯器中開啟該檔案:
    vi /etc/iscsi/initiatorname.iscsi
    
    1. 以下列格式輸入 IQN InitiatorName=<value-from-the-Portal>,如以下範例所示。 用您自己的 IQN 值取代。
    InitiatorName=iqn.2025-11.com.ibm:sl02su1414935-v154455886
    
    1. 儲存檔案 (:w),並退出 (:x)。
  2. 使用 IBM Cloud® 主控台中的使用者名稱和密碼,取消註解並更新 /etc/iscsi/iscsid.conf 中的下列項目。 對於 CHAP(Challenge-Handshake Authentication Protocol,挑戰握手驗證通訊協定)名稱,請使用大寫。

    node.session.auth.authmethod = CHAP
    node.session.auth.username = <Username-value-from-Portal>
    node.session.auth.password = <Password-value-from-Portal>
    discovery.sendtargets.auth.authmethod = CHAP
    discovery.sendtargets.auth.username = <Username-value-from-Portal>
    discovery.sendtargets.auth.password = <Password-value-from-Portal>
    

    請勿變更其他 CHAP 設定。IBM Cloud® 儲存只使用單向驗證。 請勿啟用 Mutual CHAP。

  3. 重新啟動 iscsid 服務。

    systemctl restart iscsid
    
  4. 針對 iSCSI 陣列執行 discovery,驗證設定是否正確。

    Block Storage for Classic 需要使用 SendTargets 方法進行動態目標偵測。 請勿使用靜態節點配置,因為此配置不具可擴展性,且當儲存裝置發生變更(例如對 LUN 進行主機授權或撤銷授權)時,可能會導致連線問題。 動態發現可確保您的主機自動偵測目標入口網站的任何變更。

    iscsiadm -m discovery -t sendtargets -p TARGET IP
    

    如果顯示 IP 位址資訊和存取詳細資訊,則表示發現成功。

    [root@vsi4classic ~]# iscsiadm -m discovery -t sendtargets -p 161.26.99.113
     161.26.99.113:3260,1034 iqn.1992-08.com.netapp:stfdal1006
     161.26.99.110:3260,1030 iqn.1992-08.com.netapp:stfdal1006
    

設定多重路徑

您使用 mpathconf 公用程式設定 DM Multipath,它會建立 multipath 配置檔案 /etc/multipath.conf。 有關 mpathconf 公用程式的詳細資訊,請參閱 mpathconf(8)man page

  1. 如果您還沒有這麼做,請輸入 mpathconf 指令,並加上 --enable 選項。

    mpathconf --enable --user_friendly_names n
    
  2. 使用 nano, vi,或您選擇的其他編輯器編輯 /etc/multipath.conf 檔案。

    sudo vi /etc/multipath.conf
    
  3. 請新增以下最低配置。

    defaults {
    user_friendly_names no
    find_multipaths on
    max_fds max
    flush_on_last_del yes
    queue_without_daemon no
    dev_loss_tmo infinity
    fast_io_fail_tmo 5
    }
    # All data in the following section must be specific to your system.
    blacklist {
    wwid "SAdaptec*"
    devnode "^hd[a-z]"
    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
    devnode "^cciss.*"
    }
    devices {
    device {
    vendor "NETAPP"
    product "LUN"
    path_grouping_policy group_by_prio
    features "2 pg_init_retries 50"
    no_path_retry queue
    prio "alua"
    path_checker tur
    failback immediate
    path_selector "round-robin 0"
    hardware_handler "1 alua"
    rr_weight uniform
    rr_min_io 128
    }
    }
    

    設定檔的初始預設值部分會設定系統,使多重路徑裝置的名稱格式為 /dev/mapper/mpath n,其中 mpath n 是裝置的 WWID (全球識別碼)。

  4. 儲存設定檔並關閉編輯器。

  5. 發出下列指令。

    systemctl start multipathd.service
    

    如果在啟動 multipath daemon 之後需要編輯 multipath 設定檔案,必須發出 systemctl reload multipathd.service 指令才能使變更生效。

發現儲存裝置並登入

iscsiadm 公用程式是一個命令列工具,用於發現和登入 iSCSI 目標,以及存取和管理 open-iscsi 資料庫。 如需詳細資訊,請參閱 iscsiadm(8)man page。 在此步驟中,請使用從 IBM Cloud® 控制台取得的目標 IP 位址來偵測裝置。

  1. 對 iSCSI 陣列執行探索。

    iscsiadm -m discovery -t sendtargets -p TARGET IP
    

    如果顯示 IP 位址資訊和存取詳細資訊,則表示發現成功。

  2. 登入 iSCSI 陣列。

    iscsiadm -m node --login
    
    [root@vsi4classic ~]# iscsiadm -m node --login
    Login to [iface: default, target: iqn.1992-08.com.netapp:stfdal1006, portal: 161.26.99.110,3260] successful.
    Login to [iface: default, target: iqn.1992-08.com.netapp:stfdal1006, portal: 161.26.99.113,3260] successful.
    

驗證組態

  1. 驗證 iSCSI 會話已建立。

    iscsiadm -m session -o show
    
  2. 驗證是否存在多個路徑。

    multipath -l
    

    這個指令會報告路徑。 如果設定正確,則每個磁碟區都有一個群組,其路徑數量等於 iSCSI 會話的數量。 可以使用單一路徑附加磁碟區,但重要的是在兩個路徑上都建立連線,以避免服務中斷。

    [root@vsi4classic ~]# multipath -l
    3600a0980383056716724514550666270 dm-0 NETAPP,LUN C-Mode
    size=20G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw
    |-+- policy='round-robin 0' prio=0 status=active
    | `- 2:0:0:0 sda 8:0  active undef running
    `-+- policy='round-robin 0' prio=0 status=enabled
      `- 3:0:0:0 sdb 8:16 active undef running
    

    如果 MPIO 未正確配置,則發生網路中斷時或 IBM Cloud® 團隊執行維護時,您的儲存裝置可能會中斷連線並顯示離線。 MPIO 在這些事件發生時提供額外的連線能力,並透過持續的讀寫操作維持與卷的連線。

  3. 列出連接裝置的磁碟分割表。

    fdisk -l | grep /dev/mapper
    

    預設情況下,儲存裝置會附加到 /dev/mapper/<wwid>。 當卷存在時,WWID 是持久性的。 該指令的輸出內容類似以下範例。

    [root@vsi4classic ~]# fdisk -l | grep /dev/mapper
    Disk /dev/mapper/3600a0980383056716724514550666270: 20 GiB, 21474836480 bytes, 41943040 sectors
    

    在範例中,字串 3600a0980383056716724514550666270 是 WWID。 您的應用程式應該使用 WWID。 也可以在 multipath.conf 中使用「user_friendly_names」或「alias」關鍵字來指定更容易閱讀的名稱。 如需詳細資訊,請參閱 multipath.conf man page

    磁區現在已裝載且可在主機上存取。 接下來您可以建立檔案系統。

建立檔案系統(選用)

請遵循這些步驟,以便在新裝載的磁區上建立檔案系統。 大部分應用程式都需要檔案系統,才能使用磁區。 請對小於 2 TB 的磁碟機使用 fdisk,而對大於 2 TB 的磁碟使用 parted

使用 fdisk 建立檔案系統

  1. 取得磁碟名稱。

    fdisk -l | grep /dev/mapper
    
    [root@vsi4classic ~]# fdisk -l | grep /dev/mapper
    Disk /dev/mapper/3600a0980383056716724514550666270: 20 GiB, 21474836480 bytes, 41943040 sectors
    
    [root@vsi4classic ~]# fdisk -l /dev/mapper/3600a0980383056716724514550666270
    Disk /dev/mapper/3600a0980383056716724514550666270: 20 GiB, 21474836480 bytes, 41943040 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 65536 bytes
    
  2. 在磁碟上建立分割區。 以下範例顯示以預設值建立磁碟分割。

    [root@vsi4classic ~]# fdisk /dev/mapper/3600a0980383056716724514550666270
    
    Welcome to fdisk (util-linux 2.37.4).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Device does not contain a recognized partition table.
    Created a new DOS disklabel with disk identifier 0x2aa2e16c.
    
    Command (m for help): n
    Partition type
      p   primary (0 primary, 0 extended, 4 free)
      e   extended (container for logical partitions)
    Select (default p): p
    Partition number (1-4, default 1): 1
    First sector (2048-41943039, default 2048): 2048
    Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): 41943039
    
    Created a new partition 1 of type 'Linux' and of size 20 GiB.
    
    Command (m for help): w
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Re-reading the partition table failed.: Invalid argument
    
    The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or partx(8).
    
  3. 在新的分割區上建立檔案系統。

    • 新磁碟分割與磁碟一起列出,類似於 XXXp1,接著是大小、類型 (83) 和 Linux®。記下磁碟分割名稱,下一步就需要它。 (XXXp1 代表分割區名稱。)

      [root@vsi4classic ~]# fdisk -l /dev/mapper/3600a0980383056716724514550666270
      Disk /dev/mapper/3600a0980383056716724514550666270: 20 GiB, 21474836480 bytes, 41943040 sectors
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 4096 bytes
      I/O size (minimum/optimal): 4096 bytes / 65536 bytes
      Disklabel type: dos
      Disk identifier: 0x2aa2e16c
      
      Device                                           Boot Start      End  Sectors Size Id Type
      /dev/mapper/3600a0980383056716724514550666270p1        2048 41943039 41940992  20G 83 Linu
      
    • 建立檔案系統:

      mkfs.ext3 /dev/mapper/XXXp1
      
      [root@vsi4classic ~]# mkfs.ext3 /dev/mapper/3600a0980383056716724514550666270p1
      mke2fs 1.46.5 (30-Dec-2021)
      Discarding device blocks: done
      Creating filesystem with 5242624 4k blocks and 1310720 inodes
      Filesystem UUID: 09e7f833-32b7-4c7f-ab68-8c6083cb8a63
      Superblock backups stored on blocks:
          32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
          4096000
      
      Allocating group tables: done
      Writing inode tables: done
      Creating journal (32768 blocks): done
      Writing superblocks and filesystem accounting information: done
      
  4. 為檔案系統建立裝載點,並裝載它。

    • 建立一個分割區名稱 PerfDisk,或您要裝載檔案系統的位置。

      mkdir /PerfDisk
      
    • 使用分割區名稱來裝載儲存空間。

      mount /dev/mapper/XXXp1 /PerfDisk
      
    • 確認您在清單中看到新的檔案系統。

      df -h
      
      [root@vsi4classic ~]# mkdir /PerfDisk
      [root@vsi4classic ~]# mount /dev/mapper/3600a0980383056716724514550666270p1 /PerfDisk
      [root@vsi4classic ~]# df -h
      Filesystem                                       Size  Used Avail Use% Mounted on
      devtmpfs                                         4.0M     0  4.0M   0% /dev
      tmpfs                                            469M     0  469M   0% /dev/shm
      tmpfs                                            188M   11M  177M   6% /run
      /dev/xvda2                                        24G  2.0G   21G   9% /
      /dev/xvda1                                       974M  320M  588M  36% /boot
      tmpfs                                             94M     0   94M   0% /run/user/0
      /dev/mapper/3600a0980383056716724514550666270p1   20G  156K   19G   1% /PerfDisk
      
  5. 若要啟用自動掛載 om 開機,請將新檔案系統新增至系統的 /etc/fstab 檔案。

    • 將下行附加至 /etc/fstab 的結尾(使用步驟 3 中的分割區名稱)。
    /dev/mapper/XXXp1    /PerfDisk    ext3    defaults,_netdev    0    1
    

    如需詳細資訊,請參閱 Linux /etc/fstab 檔案簡介

使用 parted 建立檔案系統

在 Red Hat Enterprise Linux® 9 上,parted 已預先安裝。 不過,如果需要的話,您可以透過執行以下指令來安裝它。

dnf install parted

若要使用 parted 來建立檔案系統,請遵循下列步驟。

  1. 啟動互動式 parted shell。

    parted
    
  2. 在磁碟上建立分割區。

    1. 除非另有說明,否則 parted 工具會使用您的主要磁碟機,在大多數情況下即為 /dev/sda 。 使用 select 指令,切換至您要分割的磁碟。 將 XXX 取代為新的裝置名稱。

      select /dev/mapper/XXX
      
    2. 執行 print 以確認您是否位於正確的磁碟上。

      print
      
    3. 建立分割表。

      mklabel gpt
      
    4. Parted 可以用來建立主要及邏輯磁碟分割區,涉及的步驟相同。 要建立分割區,此工具會使用 mkpart``。 您可以為它提供其他參數,如 primarylogical,視您想要建立的分割區類型而定。

      mkpart
      

      列出的單位預設為百萬位元組 (MB)。 若要建立 10 GB 分割區,請從 1 開始,並在 10000 結束。 想要的話,您也可以輸入 unit TB,將大小單位變更為兆位元組 (TB)。

    5. 使用 parted 來結束 quit

      quit
      
  3. 在新的分割區上建立檔案系統。

    mkfs.ext3 /dev/mapper/XXXp1
    

    執行此指令時,務必選擇正確的磁碟和分割區。 請列印分割區表格來驗證結果。 在「檔案系統」欄位下,您可以看到「ext3」。

  4. 為檔案系統建立裝載點,並裝載它。

    • 建立一個分割區名稱 PerfDisk,或您要裝載檔案系統的位置。
    mkdir /PerfDisk
    
    • 使用分割區名稱來裝載儲存空間。
    mount /dev/mapper/XXXp1 /PerfDisk
    
    • 確認您在清單中看到新的檔案系統。
    df -h
    
  5. 若要啟用自動掛載 om 開機,請將新檔案系統新增至系統的 /etc/fstab 檔案。

    • 將下行附加至 /etc/fstab 的結尾(使用步驟 3 中的分割區名稱)。
    /dev/mapper/XXXp1    /PerfDisk    ext3    defaults,_netdev    0    1
    

    如需詳細資訊,請參閱 Linux /etc/fstab 檔案簡介

管理使用者對已掛載磁碟區內容的權限

身為系統管理員,您可以管理掛載磁碟區上資料的存取權。 檔案系統就緒後,您可以使用 chownchmod 指令,為個別使用者和群組指定讀取、寫入和執行權限,從而完善存取控制。 如需詳細資訊,請參閱 Red Hat 的教學:如何管理 Linux 的使用者、群組及其他權限

驗證 MPIO 配置

如果 MPIO 未正確配置,則發生網路中斷時或 IBM Cloud® 團隊執行維護時,您的儲存裝置可能會中斷連線並顯示離線。 MPIO 在這些事件發生時提供額外的連線能力,並透過持續的讀寫操作維持與卷的連線。

  • 若要確認多路徑功能是否已偵測到裝置,請列出當前設定。 如果設定正確,則每個磁碟區都存在一個群組,其路徑數量等於 iSCSI 會話的數量。

    multipath -l
    
    root@server:~# multipath -l
    3600a09803830304f3124457a45757067 dm-1 NETAPP,LUN C-Mode
    size=20G features='1 queue_if_no_path' hwhandler='0' wp=rw
    |-+- policy='round-robin 0' prio=-1 status=active
    | `6:0:0:101 sdd 8:48 active ready running
    `-+- policy='round-robin 0' prio=-1 status=enabled
     `- 7:0:0:101 sde 8:64 active ready running
    

    範例中的字串 3600a09803830304f3124457a45757067 是磁碟區的唯一 WWID。 每個磁碟區都以其獨特的 WWID 識別,當磁碟區存在時,WWID 會持續存在。

  • 確認所有磁碟都在。 在正確的設定中,您可以預期輸出中會顯示兩個具有相同標識符的磁碟,以及具有相同標識符的相同大小的 /dev/mapper 列 表。 /dev/mapper 裝置是多路徑設定的裝置。

    fdisk -l | grep Disk
    
    • 正確配置的輸出範例。
    root@server:~# fdisk -l | grep Disk
    Disk /dev/sda: 500.1 GB, 500107862016 bytes Disk identifier: 0x0009170d
    Disk /dev/sdc: 21.5 GB, 21474836480 bytes Disk identifier: 0x2b5072d1
    Disk /dev/sdb: 21.5 GB, 21474836480 bytes Disk identifier: 0x2b5072d1
    Disk /dev/mapper/3600a09803830304f3124457a45757066: 21.5 GB, 21474836480 bytes Disk identifier: 0x2b5072d1
    

    WWID 包含在多重路徑建立的裝置名稱中。 建議您的應用程式使用 WWID。

    • 錯誤配置的輸出範例。 不存在 /dev/mapper 磁碟。
    root@server:~# fdisk -l | grep Disk
    Disk /dev/sda: 500.1 GB, 500107862016 bytes Disk identifier: 0x0009170d
    Disk /dev/sdc: 21.5 GB, 21474836480 bytes Disk identifier: 0x2b5072d1
    Disk /dev/sdb: 21.5 GB, 21474836480 bytes Disk identifier: 0x2b5072d1
    
  • 若要確認多重路徑裝置清單中沒有包含本機磁碟,請以動態等級 3 顯示目前的組態。 下列指令的輸出會顯示裝置,也會顯示哪些裝置已加入封鎖清單。

    multipath -l -v 3 | grep sd <date and time>
    
  • 如果在第二條路徑停機時已佈建並連接磁碟區,主機可能會在第一次執行發現掃描時看到單一路徑。 如果遇到這種罕見的現象,請檢查 IBM Cloud® 狀態頁,看看是否有影響主機存取儲存空間能力的事件正在發生。 如果沒有報告任何事件,請再次執行發現掃描,以確保正確發現所有路徑。 如果事件正在進行中,則可使用單一路徑連接儲存。 不過,活動結束後必須重新掃描路徑。 如果重新掃描後仍未發現這兩個路徑,請 建立支援個案,以便進行適當的調查。

卸載 Block Storage for Classic 磁區

  1. 卸載檔案系統。
    umount /dev/mapper/XXXp1 /PerfDisk
    
  2. 如果您在該目標入口網站中沒有任何其他磁區,可登出該目標。
    iscsiadm -m node -T <TARGET NAME> -p <PORTAL IP:PORT> --logout
    
  3. 如果您在該目標入口網站中沒有任何其他磁區,請刪除目標入口網站記錄,以防止未來的登入嘗試。
    iscsiadm -m node -o delete -T <TARGET IQN> -p <PORTAL IP:PORT>
    
    如需更多資訊,請參閱《 iscsiadm 》手冊