Opensuse

mdadm 拒絕將第二個相同的磁碟添加到陣列

  • December 11, 2020

我有一個處於降級狀態的 RAID 1 陣列,並且想要向其添加另一個驅動器。

# mdadm --detail /dev/md1 
/dev/md1:
       Version : 1.2
 Creation Time : Fri Mar 21 17:23:00 2014
    Raid Level : raid1
    Array Size : 488254464 (465.64 GiB 499.97 GB)
 Used Dev Size : 488254464 (465.64 GiB 499.97 GB)
  Raid Devices : 2
 Total Devices : 1
   Persistence : Superblock is persistent

 Intent Bitmap : Internal

   Update Time : Tue Jun  9 00:10:04 2015
         State : clean, degraded 
Active Devices : 1
Working Devices : 1
Failed Devices : 0
 Spare Devices : 0

          Name : mars:1  (local to host mars)
          UUID : 3458a3fd:a510d0a7:605d8cd5:9880c31e
        Events : 25816

   Number   Major   Minor   RaidDevice State
      0       8       17        0      active sync   /dev/sdb1
      2       0        0        2      removed

我正在嘗試使用與第一個相同的驅動器,格式相同以容納整個大小。但是,mdadm 拒絕添加它

# mdadm /dev/md1 --add /dev/sdc1 
mdadm: /dev/sdc1 not large enough to join array

分開的輸出表明兩個驅動器具有不同的扇區大小,但我不確定那是什麼以及是否可以糾正。如果不能,我有什麼選擇?

# parted /dev/sdb unit s print
Model: ATA SAMSUNG HD502HJ (scsi)
Disk /dev/sdb: 976773168s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End         Size        Type     File system  Flags
1      2048s  976773119s  976771072s  primary  ext4         raid, type=fd

# parted /dev/sdc unit s print
Model: ATA SAMSUNG HD502HJ (scsi)
Disk /dev/sdc: 976771055s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End         Size        Type     File system  Flags
1      2048s  976769023s  976766976s  primary               raid, type=fd

您的新磁碟比現有磁碟小 1MB 多一點。這可能是不同的型號(儘管具有相同的標識,但可能是在不同的工廠製造的,規格略有不同),或者在工廠測試期間可能發現了更多的缺陷扇區。

在 上sdb,您有一個sdb1跨越整個磁碟的分區,減去 1 個 MBR 扇區加上未使用的扇區以將分區對齊為 1MB(為了提高性能,建議這樣做)。數組跨越整個分區;它的大小是分區大小減去128MB,也就是reshape area

976771055 個扇區的大小sdc比數組 976771072 個扇區的大小小 17 個扇區。因此,您無法將陣列安裝在新磁碟上。

您可以使用相同的數據和更小的重塑區域創建一個數組。由於它幾乎適合,只需從 128MB 中減少 2MB 就足夠了。我認為不可能在現有陣列上調整重塑區域的大小,因此您必須備份它,創建一個新的,然後恢復數據。

我要做的是將陣列上的一個分區縮小 2MB。

無論如何,在我看來,最簡單的解決方案是創建一個新的 RAID-1 陣列,sdc1並將其作為唯一的活動卷。如果您想保持陣列上分區的大小,請傳遞--data-offset=126M以創建一個重塑區域,以使其全部適合。更好的是,創建一個跨越整個分區減去幾 MB 的數組作為安全邊際,以防此問題再次發生。然後將舊數組中的所有數據複製到新數組中。如果要縮小區域,請為要縮小的分區執行文件副本而不是分區副本,或者(如果您有多個分區)先執行該分區,然後再縮小它。最後擦除數組sdb1,然後添加sdb1到新數組。

或者,縮小現有數組的內容,使最後 2MB(至少)不分配給任何分區,然後用於mdadm /dev/md1 --grow --size=…縮小現有數組。

9767 6 6976 from/dev/sdb小於 9767 7 1072 from /dev/sdc

這不是一個相同的驅動器。

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