Lvm

mdadm RAID5 隨機讀取錯誤。死盤?

  • September 11, 2020

首先長篇大論:

我在 Debian 9 上有一個帶有 mdadm 的 RAID5。該 Raid 有 5 個磁碟,每個 4TB 大小。其中 4 台是 HGST Deskstar NAS,後來出現的一台是東芝 N300 NAS。

在過去的幾天裡,我注意到該 Raid 中出現了一些讀取錯誤。例如,我有一個 10GB 的多部分 rar 存檔。當我嘗試提取時,某些部分出現 CRC 錯誤。如果我第二次嘗試,我會在其他部分得到這些錯誤。Torrents 和下載後的重新破解也會發生這種情況。

重新啟動後,我的 BIOS 發現 SATA 埠 3 上的 HGST 驅動器的 SMART 狀態不好。smartctl 對我說存在 DMA CRC 錯誤,但聲稱驅動器正常。

稍後再次重新啟動,我再也看不到 smart 中的 crc 錯誤了。但現在我得到了這個輸出

smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.9.0-4-amd64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: FAILED!
Drive failure expected in less than 24 hours. SAVE ALL DATA.
Failed Attributes:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
 5 Reallocated_Sector_Ct   0x0033   001   001   005    Pre-fail  Always   FAILING_NOW 1989

由於 HGST 不再適用於正常價格,我購買了另一台東芝 N300 來替換 HGST。兩者都標記為 4TB。我試圖製作一個完全相同大小的分區,但沒有奏效。分區程序聲稱我的數字太大(我用字節和扇區嘗試過)。所以我只是讓分區盡可能大。但是現在看起來大小一樣,我有點困惑。

sdc是舊的,sdh是新的

Disk /dev/sdc: 3,7 TiB, 4000787030016 bytes, 7814037168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 4CAD956D-E627-42D4-B6BB-53F48DF8AABC

Device     Start        End    Sectors  Size Type
/dev/sdc1   2048 7814028976 7814026929  3,7T Linux RAID


Disk /dev/sdh: 3,7 TiB, 4000787030016 bytes, 7814037168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 3A173902-47DE-4C96-8360-BE5DBED1EAD3

Device     Start        End    Sectors  Size Type
/dev/sdh1   2048 7814037134 7814035087  3,7T Linux filesystem

目前我已將新的磁碟添加為備用磁碟。RAID 仍在使用舊驅動器。我仍然有一些讀取錯誤,尤其是在大文件上。

這是我的 RAID 目前的樣子:

/dev/md/0:
       Version : 1.2
 Creation Time : Sun Dec 17 22:03:20 2017
    Raid Level : raid5
    Array Size : 15627528192 (14903.57 GiB 16002.59 GB)
 Used Dev Size : 3906882048 (3725.89 GiB 4000.65 GB)
  Raid Devices : 5
 Total Devices : 6
   Persistence : Superblock is persistent

 Intent Bitmap : Internal

   Update Time : Sat Jan  5 09:48:49 2019
         State : clean
Active Devices : 5
Working Devices : 6
Failed Devices : 0
 Spare Devices : 1

        Layout : left-symmetric
    Chunk Size : 512K

          Name : SERVER:0  (local to host SERVER)
          UUID : 16ee60d0:f055dedf:7bd40adc:f3415deb
        Events : 25839

   Number   Major   Minor   RaidDevice State
      0       8       49        0      active sync   /dev/sdd1
      1       8       33        1      active sync   /dev/sdc1
      3       8        1        2      active sync   /dev/sda1
      4       8       17        3      active sync   /dev/sdb1
      5       8       80        4      active sync   /dev/sdf

      6       8      113        -      spare   /dev/sdh1

而磁碟結構是這樣的

NAME                       MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                          8:0    0   3,7T  0 disk
└─sda1                       8:1    0   3,7T  0 part
 └─md0                      9:0    0  14,6T  0 raid5
   └─storageRaid          253:4    0  14,6T  0 crypt
     └─vg_raid-raidVolume 253:5    0  14,6T  0 lvm   /media/raidVolume
sdb                          8:16   0   3,7T  0 disk
└─sdb1                       8:17   0   3,7T  0 part
 └─md0                      9:0    0  14,6T  0 raid5
   └─storageRaid          253:4    0  14,6T  0 crypt
     └─vg_raid-raidVolume 253:5    0  14,6T  0 lvm   /media/raidVolume
sdc                          8:32   0   3,7T  0 disk
└─sdc1                       8:33   0   3,7T  0 part
 └─md0                      9:0    0  14,6T  0 raid5
   └─storageRaid          253:4    0  14,6T  0 crypt
     └─vg_raid-raidVolume 253:5    0  14,6T  0 lvm   /media/raidVolume
sdd                          8:48   0   3,7T  0 disk
└─sdd1                       8:49   0   3,7T  0 part
 └─md0                      9:0    0  14,6T  0 raid5
   └─storageRaid          253:4    0  14,6T  0 crypt
     └─vg_raid-raidVolume 253:5    0  14,6T  0 lvm   /media/raidVolume
sdf                          8:80   1   3,7T  0 disk
└─md0                        9:0    0  14,6T  0 raid5
 └─storageRaid            253:4    0  14,6T  0 crypt
   └─vg_raid-raidVolume   253:5    0  14,6T  0 lvm   /media/raidVolume
sdh                          8:112  1   3,7T  0 disk
└─sdh1                       8:113  1   3,7T  0 part
 └─md0                      9:0    0  14,6T  0 raid5
   └─storageRaid          253:4    0  14,6T  0 crypt
     └─vg_raid-raidVolume 253:5    0  14,6T  0 lvm   /media/raidVolume

我有點困惑,備用磁碟(sdh)已經在加密卷中。

問題:

mdadm 在什麼條件下會說磁碟發生故障?

隨機讀取錯誤可以來自一個損壞的磁碟嗎?

當磁碟發送錯誤數據時,不會檢測到 raid 嗎?

當備用磁碟的大小不完全相同時,手動將磁碟標記為故障是否危險?

在我看來,MD raid 在淘汰磁碟方面過於保守。我總是在 syslog/dmesg 中觀察 ATA 異常(我設置 rsyslog 來通知我這些異常)。

我必須說我很驚訝您在應用程序級別遇到錯誤。RAID5 應該使用奇偶校驗資訊來檢測錯誤(編輯,顯然,它沒有;僅在驗證期間)。話雖如此,磁碟是否是原因,它是壞的。近 2000 個重新分配的扇區真的很糟糕。

分區可以更大,否則您也無法將它們添加為備用,但為了確保一切正常,您可以使用 fdisk、sfdisk 和 gdisk 複製分區表。你有 GPT,所以讓我們使用它的備份功能。如果這樣做gdisk /dev/sdX,您可以使用b將分區表備份到磁碟。然後,在新磁碟上gdisk /dev/sdY,您可以使用r恢復選項,然後l載入備份。然後你應該有一個相同的分區,所有mdadm --manage --add命令都應該工作。(您需要在更改分區表之前從陣列中取出新磁碟)

我實際上傾向於將這些備份分區表保留在伺服器上。它可以快速更換磁碟。

最後一條建議:不要使用 RAID5。具有如此巨大磁碟的 RAID5 很不穩定。您應該能夠添加磁碟並動態遷移到 RAID6。不知道我怎麼想的,但你可以穀歌一下。

引用自:https://serverfault.com/questions/947708