天天看點

Ceph 磁盤損壞現象和解決方法

Ceph 磁盤損壞現象和解決方法

Damaged disks

對于存儲系統,磁盤是消耗品,損壞是很常見的,是以這篇文章記錄一下 Ceph 中出現磁盤損壞時的現象,以及如何定位和更換損壞的磁盤。

1. 磁盤損壞

1.1 現象

工作環境中出現問題的 Ceph 的資料是雙備份的,OSD 35 所在的磁盤出現了壞道,表現出來的現象是 ceph 經常會報出存儲在 OSD 35 上的 pg 資料不一緻,以及報出 scrub error,以下是 ceph health detail 指令輸出新相關資訊。

$ ceph health detail
......
OSD_SCRUB_ERRORS 31 scrub errors
PG_DAMAGED Possible data damage: 5 pgs inconsistent
    pg 41.33 is active+clean+inconsistent, acting [35,33]
    pg 41.42 is active+clean+inconsistent, acting [29,35]
    pg 51.24 is active+clean+inconsistent, acting [35,43]
    pg 51.77 is active+clean+inconsistent, acting [28,35]
    pg 51.7b is active+clean+inconsistent, acting [35,46]
......
           

1.2 資料狀态

因為資料隻有雙備份,ceph 無法确定哪個備份中的資料是可用的,是以此時雖然顯示 pg 狀态是 active+clean,但有問題的資料其實是不可用的。

1.3 臨時解決方法

作為臨時的解決方案,可以執行 ceph pg repair 解決,此時由于磁盤壞道造成不可讀的資料會拷貝到其他位置。但這不能從根本上解決問題,磁盤損壞會持續報出類似的錯誤。

$ ceph pg repair 41.33
$ ceph pg repair 41.42
$ ceph pg repair 51.24
$ ceph pg repair 51.77
$ ceph pg repair 51.7b
           

2. 定位并檢查故障磁盤

知道 OSD 35 有問題,但我們現在還不知道對應的是具體哪塊磁盤。我們可以登入到對應到 OSD 伺服器上檢視 OSD 35 的目錄名稱,并檢視 PVS 的對應關系來解決。

$ ceph osd tree
ID CLASS WEIGHT    TYPE NAME      STATUS REWEIGHT PRI-AFF 
-1       127.09767 root default                           
-5       127.09767     host osd7                          
......
33   hdd   5.52599         osd.35     up  1.00000 1.00000 
......
           

通過這個指令,我們可以知道 OSD.35 是位于 OSD7 這台伺服器上。接下來,我們登入到 OSD7 上,并切換為 root 權限。

$ ssh osd7
$ sudo -i
           

然後進入到 OSD.35 的目錄裡。

# cd /var/lib/ceph/osd/ceph-35
           

再來檢視 PVS 資訊。

# pvs -o+pv_used
......
  PV         VG                                        Fmt  Attr PSize   PFree Used   
  /dev/sda5  ubuntu-vg                                 lvm2 a--  446.65g    0  446.65g
  /dev/sdc   ceph-320de131-5f26-48a7-aa64-c7f08f87cd85 lvm2 a--    5.46t    0    5.46t  
......
           

好,現在我們終于知道,/dev/sdc 就是 OSD.35

3. 擷取磁盤錯誤資訊

我們已經知道是哪個磁盤出錯,接下來就要向磁盤的提供商報修,或者聯系購買新磁盤了。如果是報修,對方必然要求提供磁盤出錯資訊,接下來咱們就看一下如何拿到這些資訊,這裡我們要用到的指令好工具是 SMART monitor tool,Debian 系的系統可以通過 APT 安裝:

$ sudo apt install -y smartmontools
           

RedHat 系的系統用 yum 安裝:

$ sudo yum install -y smartmontools
           

安裝完成後用如下指令擷取輸出資訊即可,這裡需要注意一下輸出中序列号這項資訊,這次磁盤的唯一辨別,後面會用到:Serial Number: 57J6KA41F6CD

$ sudo smartctl -a /dev/sdc
smartctl 6.5 2016-01-24 r4214 [x86_64-linux-4.4.0-121-generic] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Device Model:     TOSHIBA MG04ACA600E
Serial Number:    57J6KA41F6CD
LU WWN Device Id: 5 000039 7cb9822be
Firmware Version: FS1K
User Capacity:    6,001,175,126,016 bytes [6.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Form Factor:      3.5 inches
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   ATA8-ACS (minor revision not indicated)
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Tue Aug  7 14:46:45 2018 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
...
           

4. 點亮硬碟訓示燈

最後,存儲廠商同意保修,或者購買新硬碟進行更換,都需要知道磁盤具體插在哪個 PCIe 口上。雖然我們已經知道是哪個裝置了,本例中是 /dev/sdc,但這依舊不夠直覺,如果能讓壞掉的硬碟的訓示燈亮起,那麼就非常友善維修人員查找和更換了。這就需要用到 SAS-x integrated RAID configuration utility 了。

該檔案沒有提供 APT 和 YUM 源的下載下傳方式,隻能從網上找到 RPM 或可執行檔案,以下連結是該檔案的百度雲盤位址:

sas3ircu

下載下傳好後,先執行 display 指令,查找全部磁盤資訊。

$ sudo ./sas3ircu 0 display
......
Device is a Hard disk
  Enclosure #                             : 2
  Slot #                                  : 0
  SAS Address                             : 5003048-0-1867-f140
  State                                   : Ready (RDY)
  Size (in MB)/(in sectors)               : 5723166/11721045167
  Manufacturer                            : ATA     
  Model Number                            : TOSHIBA MG04ACA6
  Firmware Revision                       : FS1K
  Serial No                               : 57J6KA41F6CD
  Unit Serial No(VPD)                     : 57J6KA41F6CD
  GUID                                    : 50000397cb9822be
  Protocol                                : SATA
  Drive Type                              : SATA_HDD

......
           

從輸出結果來看,Serial No : 57J6KA41F6CD,和之前 smartctl 查詢到的結果一緻,那麼我們就知道這次磁盤的位置是

Enclosure #                             : 2
  Slot #                                  : 0
           

接下來執行下面的指令點亮對應硬碟的訓示燈:

sudo ./sas3ircu 0 locate 2:0 on
           

另外更換完畢後,自然還要執行該指令關掉訓示燈:

sudo ./sas3ircu 0 locate 2:0 off