Debian

mdadm RAID - 在增長(收縮)重塑期間重新啟動 - 不工作(卡住)

  • March 8, 2016

我有一個 linux 軟體 Raid6 陣列 (mdadm)。我將它從 6x4TB 磁碟(16TB 可用)增加到 7x4TB(20TB 可用)。重塑很順利,但是當我執行 resize2fs 時,我遇到了眾所周知的 EXT4 16TB 文件系統限制問題。我檢查了一下,文件系統沒有 64 位標誌。因此,為了回收我剛剛添加到陣列中的額外驅動器,我這樣做了:

johnny@debian:~$ sudo resize2fs /dev/md0 16000G
johnny@debian:~$ sudo mdadm --grow /dev/md0 --array-size=16000G
johnny@debian:~$ sudo mdadm --grow /dev/md0 --raid-devices=6 --backup-file=/tmp/backup

注意備份文件的位置。馬上就會很重要,因為我在 Debian 上。

所以事情進展順利,緩慢但有效。進度達到了 3.7%,並且已經緩慢地爬行。我原以為這是因為我在同一時間重塑了其他幾個數組。當其他工作完成而這一項沒有加快時,我真的很擔心。由於它說需要數年才能完成,所以我決定我應該重新啟動,看看它是否會加速,所以我重新啟動了系統。

這是壞事開始發生的時候……

我在 Debian 上,據我了解,當系統啟動時 /tmp 文件夾已被清除,因此我的 reshape 備份文件失去了。另外,因為我的 /etc/fstab 文件試圖掛載 md0,但現在沒有組裝,系統幾次都無法啟動。我從一張 live cd 開始,修復了 fstab 文件,讓系統重新啟動。

一旦我解決了這個問題,系統就啟動了,那是我第一次看到 md0 沒有簡單地組裝自己並繼續重塑。恐慌在…

我沒有以下命令的輸出,但我設法找到了我輸入的命令。簡要說明接下來發生的事情……

johnny@debian:~$ sudo mdadm --assemble /dev/md0
johnny@debian:~$ sudo mdadm --assemble --force /dev/md0
johnny@debian:~$ sudo mdadm --assemble --force /dev/md0 --backup-file=/tmp/backup

第一個命令失敗,所以我嘗試了 –force 選項,它也失敗了,但是錯誤消息告訴我失敗是因為它需要 –backup-file 選項,所以我執行了第三個命令。我希望備份文件仍然存在,但它沒有,因為它在 /tmp 文件夾中並且已被刪除。但這似乎並沒有引起任何問題,因為陣列已組裝。

這是 md0 現在的樣子。請注意標記為“已刪除”的磁碟。我懷疑這是被移除的光碟,sdj1。

johnny@debian:~$ sudo mdadm --detail /dev/md0
/dev/md0:
       Version : 1.2
 Creation Time : Fri Jan 11 09:59:42 2013
    Raid Level : raid6
    Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
 Used Dev Size : 3906887168 (3725.90 GiB 4000.65 GB)
  Raid Devices : 6
 Total Devices : 6
   Persistence : Superblock is persistent

 Intent Bitmap : Internal

   Update Time : Sat Mar  5 20:45:56 2016
         State : clean, degraded, reshaping 
Active Devices : 6
Working Devices : 6
Failed Devices : 0
 Spare Devices : 0

        Layout : left-symmetric
    Chunk Size : 512K

Reshape Status : 3% complete
 Delta Devices : -1, (7->6)

          Name : BigRaid6
          UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
        Events : 4339739

   Number   Major   Minor   RaidDevice State
     11       8      224        0      active sync   /dev/sdo
      2       0        0        2      removed
      6       8       80        2      active sync   /dev/sdf
      7       8      176        3      active sync   /dev/sdl
     12       8       16        4      active sync   /dev/sdb
      8       8       32        5      active sync   /dev/sdc

      9       8      128        6      active sync   /dev/sdi

這是重塑的目前進展。請注意,它完全停留在 0K/秒。

johnny@debian:~$ cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] 
md0 : active raid6 sdo[11] sdi[9] sdc[8] sdb[12] sdl[7] sdf[6]
     15627548672 blocks super 1.2 level 6, 512k chunk, algorithm 2 [6/5] [U_UUUU]
     [>....................]  reshape =  3.7% (145572864/3906887168) finish=284022328345.0min speed=0K/sec
     bitmap: 5/30 pages [20KB], 65536KB chunk

unused devices: <none>

這是仍然在陣列中的各個光碟。

johnny@debian:~$ sudo mdadm --examine /dev/sd[oflbci]
/dev/sdb:
         Magic : a92b4efc
       Version : 1.2
   Feature Map : 0x5
    Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
          Name : BigRaid6
 Creation Time : Fri Jan 11 09:59:42 2013
    Raid Level : raid6
  Raid Devices : 6

Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB)
    Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
 Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB)
   Data Offset : 262144 sectors
  Super Offset : 8 sectors
  Unused Space : before=262064 sectors, after=688 sectors
         State : clean
   Device UUID : 99b0fbcc:46d619bb:9ae96eaf:840e21a4

Internal Bitmap : 8 sectors from superblock
 Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB)
 Delta Devices : -1 (7->6)

   Update Time : Sat Mar  5 20:45:56 2016
      Checksum : fca445bd - correct
        Events : 4339739

        Layout : left-symmetric
    Chunk Size : 512K

  Device Role : Active device 4
  Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdc:
         Magic : a92b4efc
       Version : 1.2
   Feature Map : 0x5
    Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
          Name : BigRaid6
 Creation Time : Fri Jan 11 09:59:42 2013
    Raid Level : raid6
  Raid Devices : 6

Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB)
    Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
 Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB)
   Data Offset : 262144 sectors
  Super Offset : 8 sectors
  Unused Space : before=262064 sectors, after=688 sectors
         State : clean
   Device UUID : b8d49170:06614f82:ad9a38a4:e9e06da5

Internal Bitmap : 8 sectors from superblock
 Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB)
 Delta Devices : -1 (7->6)

   Update Time : Sat Mar  5 20:45:56 2016
      Checksum : 5d867810 - correct
        Events : 4339739

        Layout : left-symmetric
    Chunk Size : 512K

  Device Role : Active device 5
  Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdf:
         Magic : a92b4efc
       Version : 1.2
   Feature Map : 0x5
    Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
          Name : BigRaid6
 Creation Time : Fri Jan 11 09:59:42 2013
    Raid Level : raid6
  Raid Devices : 6

Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB)
    Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
 Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB)
   Data Offset : 262144 sectors
  Super Offset : 8 sectors
  Unused Space : before=262064 sectors, after=688 sectors
         State : clean
   Device UUID : dd56062c:4b55bf16:6a468024:3ca6bfd0

Internal Bitmap : 8 sectors from superblock
 Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB)
 Delta Devices : -1 (7->6)

   Update Time : Sat Mar  5 20:45:56 2016
      Checksum : 59045f87 - correct
        Events : 4339739

        Layout : left-symmetric
    Chunk Size : 512K

  Device Role : Active device 2
  Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdi:
         Magic : a92b4efc
       Version : 1.2
   Feature Map : 0x5
    Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
          Name : BigRaid6
 Creation Time : Fri Jan 11 09:59:42 2013
    Raid Level : raid6
  Raid Devices : 6

Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB)
    Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
 Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB)
   Data Offset : 262144 sectors
  Super Offset : 8 sectors
  Unused Space : before=262064 sectors, after=688 sectors
         State : clean
   Device UUID : 92831abe:86de117c:710c368e:8badcef3

Internal Bitmap : 8 sectors from superblock
 Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB)
 Delta Devices : -1 (7->6)

   Update Time : Sat Mar  5 20:45:56 2016
      Checksum : dd2fe2d1 - correct
        Events : 4339739

        Layout : left-symmetric
    Chunk Size : 512K

  Device Role : Active device 6
  Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdl:
         Magic : a92b4efc
       Version : 1.2
   Feature Map : 0x5
    Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
          Name : BigRaid6
 Creation Time : Fri Jan 11 09:59:42 2013
    Raid Level : raid6
  Raid Devices : 6

Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB)
    Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
 Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB)
   Data Offset : 262144 sectors
  Super Offset : 8 sectors
  Unused Space : before=262064 sectors, after=688 sectors
         State : clean
   Device UUID : 8404647a:b1922fed:acf71f64:18dfd448

Internal Bitmap : 8 sectors from superblock
 Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB)
 Delta Devices : -1 (7->6)

   Update Time : Sat Mar  5 20:45:56 2016
      Checksum : 358734b4 - correct
        Events : 4339739

        Layout : left-symmetric
    Chunk Size : 512K

  Device Role : Active device 3
  Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdo:
         Magic : a92b4efc
       Version : 1.2
   Feature Map : 0x5
    Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
          Name : BigRaid6
 Creation Time : Fri Jan 11 09:59:42 2013
    Raid Level : raid6
  Raid Devices : 6

Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB)
    Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
 Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB)
   Data Offset : 262144 sectors
  Super Offset : 8 sectors
  Unused Space : before=262064 sectors, after=688 sectors
         State : clean
   Device UUID : d7e84765:86fb751a:466ab0de:c26afc43

Internal Bitmap : 8 sectors from superblock
 Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB)
 Delta Devices : -1 (7->6)

   Update Time : Sat Mar  5 20:45:56 2016
      Checksum : c3698023 - correct
        Events : 4339739

        Layout : left-symmetric
    Chunk Size : 512K

  Device Role : Active device 0
  Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing

這裡是 /dev/sdj1,它曾經是陣列中唯一不是“整個磁碟”成員的成員。這是在重塑期間從陣列中刪除的那個。我懷疑它仍然需要完成重塑,儘管它目前不是數組的成員,因為它具有重塑之前的數據。

johnny@debian:~$ sudo mdadm --examine /dev/sdj1
mdadm: No md superblock detected on /dev/sdj1.

所以這是我的問題…

  1. 我無法完成重塑。

  2. 無法掛載陣列。當我嘗試時,我明白了。

johnny@debian:~$ sudo mount /dev/md0 /media/BigRaid6
mount: wrong fs type, bad option, bad superblock on /dev/md0,
      missing codepage or helper program, or other error

      In some cases useful info is found in syslog - try
      dmesg | tail or so.
johnny@debian:~$ sudo dmesg | tail
[42446.268089] sd 15:0:0:0: [sdk]  
[42446.268091] Add. Sense: Unrecovered read error - auto reallocate failed
[42446.268092] sd 15:0:0:0: [sdk] CDB: 
[42446.268093] Read(10): 28 00 89 10 bb 00 00 04 00 00
[42446.268099] end_request: I/O error, dev sdk, sector 2299575040
[42446.268131] ata16: EH complete
[61123.788170] md: md1: data-check done.
[77423.597923] EXT4-fs (md0): bad geometry: block count 4194304000 exceeds size of device (3906887168 blocks)
[77839.250590] EXT4-fs (md0): bad geometry: block count 4194304000 exceeds size of device (3906887168 blocks)
[78525.085343] EXT4-fs (md0): bad geometry: block count 4194304000 exceeds size of device (3906887168 blocks)

如果重塑完成,我相信安裝會成功,所以這可能是最重要的。僅供參考,這個陣列上的數據太大而無法備份,所以如果我失去它,數據就消失了。請幫忙!

編輯1:

我可以掏出 1000 美元(或更多)並獲得足夠的磁碟來複製所有內容,但我需要能夠安裝陣列才能使其工作。

另外,我剛剛注意到嘗試掛載陣列時收到的“錯誤幾何”錯誤消息中包含一些感興趣的資訊。

[146181.331566] EXT4-fs (md0): bad geometry: block count 4194304000 exceeds size of device (3906887168 blocks)

設備大小 3906887168 正好是 md0 數組大小 15627548672 的 1/4。來自“mdadm –detail /dev/md0”

Array Size : 15627548672 (14903.59 GiB 16002.61 GB)

我不知道 4194304000 數字是從哪裡來的……但這是否意味著陣列的大小適合這些磁碟?還是這些大小不考慮 mdadm 元數據?4194304000 可能包括元數據嗎?

我可以發誓我在重塑開始之前嘗試了幾次以獲得正確的尺寸,所以我認為一切都很好。也許我錯了。

您的錯誤已經出現在第一個命令中,16000GiB根本不是您在 6x4TB 磁碟上所擁有的,甚至16000GB可能是一個延伸,因為您失去了一些mdadm元數據等空間。最後一條錯誤消息與這種情況非常相似(bad geometry文件系統認為設備提供的更大,而文件系統絕對討厭這種情況)。

因此,您現在正在查看許多問題:

  • 你的文件系統太大
  • 你的收縮卡在中途
  • 至少有一個磁碟發生故障 ( /dev/sdk)
  • 您的備份文件失去了
  • 可能的文件系統不一致(顯然)

您的問題的解決方案不是使收縮以某種方式完成,而是在沒有損壞的情況下恢復到以前的狀態……這仍然可以實現,因為幸運的是收縮還沒有進展很遠。

在這種情況下,我會

  • 停止 RAID 並確保沒有其他東西啟動它(禁用udev自動組裝規則等)
  • 使用覆蓋文件將硬碟設為只讀 (需要額外的備用磁碟用於臨時儲存)
  • 嘗試使用所述覆蓋重新創建 RAID

一般來說,重新創建 RAID 是一個非常非常糟糕的主意,因為它幾乎總是出錯。但是,我認為在您的情況下,它可能比嘗試以任何其他方式扭轉收縮過程造成的損害更小。在 7 磁碟 RAID 6 中,該16GiB區域可能仍然保持不變……假設文件系統在 RAID 縮小時處於空閒狀態。否則你會看到更多的文件系統不一致。

重新創建 RAID 時,您必須正確設置所有變數:元數據版本、數據偏移量、raid 級別、raid 佈局、塊大小、磁碟順序……並且您必須通過將冗餘磁碟保留為失去來防止重新同步。

它可能是這樣的:

mdadm --create /dev/md0 --assume-clean \
   --metadata=1.2 --data-offset=128M --level=6 --layout=ls --chunk=512 \
   --raid-devices=7 missing missing /dev/mapper/overlay-{sdf,sdl,sdb,sdc,sdi}

沒有保修,我顯然沒有自己嘗試過。


一旦您確認它可以工作,您就可以將更改送出到磁碟(應用經過驗證的步驟以在沒有覆蓋的情況下工作)。然後這一次,resize2fs文件系統正確(14G應該可以工作),然後縮小 RAID 並希望它不會再次卡住。可能不需要備份文件mdadm --grow,如果您確實使用了備份文件,請確保不要失去它。

引用自:https://unix.stackexchange.com/questions/268072