Linux

每次啟動都必須手動建構 RAID 陣列,並且無法添加第三個驅動器 - MDADM

  • October 15, 2021

我有一個 RAID1 陣列,每次系統啟動很長時間時,我都必須手動重建它。從來沒有時間弄清楚為什麼。這是我每次啟動時用來重建它的命令: sudo mdadm --build /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sde1

這很好用,不會失去任何數據。然後我可以在需要的地方手動掛載 /dev/md0 (在這種情況下是 /mnt/plex)。但是,我剛剛在我的伺服器中安裝了第三個硬碟驅動器,我想升級到 RAID5。我使用 cfdisk 在我的驅動器上創建一個分區。

然後我將陣列升級到 RAID5:

sudo mdadm --grow /dev/md0 -l 5

然後,我將新驅動器添加到陣列中 sudo mdadm /dev/md0 --add /dev/sda1

最後,我嘗試將陣列增加到 3 個驅動器 sudo mdadm /dev/md0 --grow -n 3 ,此時出現以下錯誤:

mdadm: ARRAY line /dev/md0 has no identity information.
mdadm: /dev/md0: cannot get superblock from /dev/sda1

第一個錯誤出現了很多,這是導致問題的第二個錯誤。為什麼我不能將 /dev/sda1 添加到數組中?當我這樣做時,為什麼系統啟動時陣列不自動建構?

如果有幫助,這是我的驅動器/分區:

sda       8:0    0   3.7T  0 disk
+-sda1    8:1    0   3.7T  0 part
 +-md0   9:0    0   3.7T  0 raid5 /mnt/plex
sdb       8:16   0   3.7T  0 disk
+-sdb1    8:17   0   3.7T  0 part
 +-md0   9:0    0   3.7T  0 raid5 /mnt/plex
sdc       8:32   0 931.5G  0 disk
+-md1     9:1    0 931.4G  0 raid1 /mnt/nas
sdd       8:48   0 931.5G  0 disk
+-md1     9:1    0 931.4G  0 raid1 /mnt/nas
sde       8:64   0   3.7T  0 disk
+-sde1    8:65   0   3.7T  0 part
 +-md0   9:0    0   3.7T  0 raid5 /mnt/plex
sdf       8:80   0 149.1G  0 disk
+-sdf1    8:81   0   512M  0 part  /boot/efi
+-sdf2    8:82   0 148.6G  0 part  /

SDB 和 SDF 是正常執行的 RAID 成員。如果有幫助,這裡是來自 mdadm 的數組的詳細資訊

gradyn@hbi-server:~$ sudo mdadm --detail /dev/md0
mdadm: ARRAY line /dev/md0 has no identity information.
/dev/md0:
          Version :
    Creation Time : Thu Oct 14 22:19:50 2021
       Raid Level : raid5
       Array Size : 3906886464 (3725.90 GiB 4000.65 GB)
    Used Dev Size : 3906886464 (3725.90 GiB 4000.65 GB)
     Raid Devices : 2
    Total Devices : 3

            State : clean
   Active Devices : 2
  Working Devices : 3
   Failed Devices : 0
    Spare Devices : 1

           Layout : left-symmetric
       Chunk Size : 64K

Consistency Policy : resync

   Number   Major   Minor   RaidDevice State
      0       8       17        0      active sync   /dev/sdb1
      1       8       65        1      active sync   /dev/sde1

      2       8        1        -      spare   /dev/sda1

如果您需要發出mdadm --build組裝數組,則意味著您創建了一個“舊式”數組,沒有 superblock。換句話說,陣列幾何(和其他元數據)儲存在受影響的磁碟上,而是系統希望在命令行上提供這些資訊或在名為的配置文件中找到它們/etc/mdadm.conf

關於另一個問題(無法添加第三個活動磁碟),讓我們看看手冊頁中關於--build(無超級塊)陣列的內容:

與 –build 一起使用時,只有 linear、stripe、raid0、0、raid1、multipath、mp 和 faulty 有效。

如您所見,傳統陣列不允許使用 RAID5。通過發出第一個--grow命令,您強制系統進入意外情況,以下--add只能將新磁碟設置為備用磁碟。然後第二個--grow失敗,因為它在成員磁碟上找不到有效的超級塊。

我強烈建議您備份數據並重新創建一個包含超級塊和寫入點陣圖的 RAID5 陣列。為此,您只需使用mdadm預設設置。換句話說,作為

mdadm --create /dev/md0 -l 5 -n 3 /dev/sda1 /dev/sdb1 /dev/sde1

應該足夠了。請務必了解上述命令將從受影響的磁碟中刪除所有數據,因此請確保在發出之前進行確認備份。

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