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:
原本懷疑是 RDAC 或 Device-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 的話即可放心刪除它。