︿
Top

Q. Buffer I/O error on device sdd, logical block 0?

Error Message:
系統每隔一段時間便會出現如下錯誤訊息 (不知是什麼樣的動作才會觸發,原則上 10 ~ 20 分鐘內便會發生)。

 end_request: I/O error, dev sdd, sector 0
 Buffer I/O error on device sdd, logical block 0
 Buffer I/O error on device sdd, logical block 1
 Buffer I/O error on device sdd, logical block 2
 Buffer I/O error on device sdd, logical block 3
 Buffer I/O error on device sdd, logical block 4
 Buffer I/O error on device sdd, logical block 5
 Buffer I/O error on device sdd, logical block 6
 Buffer I/O error on device sdd, logical block 7
 Buffer I/O error on device sdd, logical block 8
 Buffer I/O error on device sdd, logical block 9
 Buffer I/O error on device sdd, logical block 10
 Buffer I/O error on device sdd, logical block 11
 Buffer I/O error on device sdd, logical block 12
 Buffer I/O error on device sdd, logical block 13
 Buffer I/O error on device sdd, logical block 14
 Buffer I/O error on device sdd, logical block 15


但奇怪的是系統並沒有使用到 sdd 這個裝置? 採用的伺服器硬體為 IBM x3850,而安裝的作業系統為 RHEL 4.8 AS (64bit, kernel 2.6.9-89.ELlargesmp),其中檔案系統列表如下:
/dev/sda: Local Disk (RAID1) (scsi0:channel2:id0:lun0)
/dev/sdb: LUN with DS4700 (scsi1:channel0:id0:lun0)
/dev/sdc: LUN with DS4700 (scsi1:channel0:id0:lun1)
/dev/sdd: ??? (scsi1:channel0:id0:lun31)

在儲存設備的部份,採用的是  IBM DS4700 (2 Controller 但只有 1 個 Controller 與 IBM 3850 對接,另 1 個 Controller 空的沒接任何東西),而在伺服器端為透過 HBA Card (FC-SAN) 直接連接至 IBM DS4700 (1 HBA Card),其中 HBA Card Driver 為 qla2400 (更新至 qla2xxx-v8.02.14_01-dist)。

下列為在 RHEL 4.8 AS 上執行 fdisk -l 指令後的結果,可以發現並沒有 /dev/sdd 裝置:
 # fdisk -l
 Disk /dev/sda: 145.9 GB, 145999527936 bytes
 255 heads, 63 sectors/track, 17750 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
 /dev/sda1   *        9853       17750    63440685   83  Linux
 /dev/sda2               1        3900    31326718+  83  Linux
 /dev/sda3            3901        7801    31334782+  83  Linux
 /dev/sda4            7802        9852    16474657+   5  Extended
 /dev/sda5            7802        9852    16474626   82  Linux swap
 Partition table entries are not in disk order
 Disk /dev/sdb: 1497.3 GB, 1497314099200 bytes
 255 heads, 63 sectors/track, 182038 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
 /dev/sdb1               1      182038  1462220203+  83  Linux
 Disk /dev/sdc: 1197.8 GB, 1197851279360 bytes
 255 heads, 63 sectors/track, 145630 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
 /dev/sdc1               1      145630  1169772943+  83  Linux




Ans:
原本懷疑是 RDACDevice-Mapper Multipath 套件沒安裝的問題,但發現此次的環境只有 1 HBA Card (1 Port) 接 1 Controller,所以排除了這個可能。簡述一下 RDAC 與 Multipath 的不同處,詳細內容可參考 Device Mapper MultipathによるSAN Boot環境構築 (RHEL5.1)

單純狀態
  • 本機: /dev/sda。
  • LUN: HBA1 (/dev/sdb)、HBA2 (/dev/sdc)。


RDAC
  • 本機: /dev/sda。
  • LUN: HBA1、HBA2:合併為 /dev/sdb


Multipath
  • 本機: /dev/sda。
  • LUN: HBA1 (/dev/sdb)、HBA2 (/dev/sdc) 合併為 /dev/mapper/mpath0。

後來在網路上找到了這篇 Deleting SCSI Device Paths For A Multipath SAN LUN - blog'o thnet 文章,將 /dev/sdd 給 delete 後目前錯誤訊息便不在出現,以下簡述治標及治本的解決步驟:

的方法 (在 RHEL 上手動下指令移除 /dev/sdd,但系統若重新開機仍會再次載入 LUN Mapping)
 # dmesg |grep lun            //確定目前機器上所有裝置及 ID 等相關資訊
 megasas: max_sectors : 0x280, cmd_per_lun : 0x80
 Attached scsi disk sda at scsi0, channel 2, id 0, lun 0
 Attached scsi disk sdb at scsi1, channel 0, id 0, lun 0
 Attached scsi disk sdc at scsi1, channel 0, id 0, lun 1
 Attached scsi disk sdd at scsi1, channel 0, id 0, lun 31  //了解 sdd 為 1:0:0:31
 # echo 1 > /sys/bus/scsi/devices/1\:0\:0\:31/delete   //將數值 1 餵給 delete (也就是啟用 delete)

的方法為安裝 Storage Manager 後將 Lun Mapping 內 /dev/sdd 刪除即可◦Document IBM System Storage DS4000 and Storage Manager V10.30

What is LUN 31?
今天請教了一位懂 DS4700 產品的人 LUN 31 是什麼? 回答這個問題以前這要先從管理 DS4700 的方式說起,管理 DS4700 有二種方式 IN-Band、Out-Of-Band 簡單來說差別如下:

  • IN-Band: 不直接連到 Storage 的 Ethernet 管理 Port 而是透過 Host Agent (有裝 HBA Card 的 Host) 以 Fibre Channel 來管理。
  • Out-Of-Band: 透過 Ethernet 管理 Port 連接至 Storage。

了解上述二種管理方式後再來就是 LUN 31 到底是什麼? LUN 31 為 Storage 預設劃分出來要存放 IN-Band 設定資料區塊,因此若沒用到 IN-Band 方式來管理 Storage 的話即可放心刪除它。
文章標籤: