Software-Raid

如何將 mdadm raid1 轉換為單個驅動程序並保留數據?

  • September 29, 2022

我有一個由 mdadm 在根分區上創建的 raid1,/dev/nvme1n1p2並且/dev/nvme0n1p2efi 引導分區在 /dev/nvme1n1p1 上。然後我按照一些命令刪除了其中一個磁碟並將其格式化以安裝在 /media 中。

mdadm /dev/md0 --fail /dev/nvme0n1p2 --remove /dev/nvme0n1p2 
mdadm --zero-superblock /dev/nvme0n1p2

目前 mdstat

mdadm --detail /dev/md0p1
/dev/md0p1:
          Version : 1.2
    Creation Time : Tue Sep 27 15:52:16 2022
       Raid Level : raid1
       Array Size : 438311936 (418.01 GiB 448.83 GB)
    Used Dev Size : 438313984 (418.01 GiB 448.83 GB)
     Raid Devices : 2
    Total Devices : 1
      Persistence : Superblock is persistent

    Intent Bitmap : Internal

      Update Time : Thu Sep 29 02:14:09 2022
            State : active, degraded
   Active Devices : 1
  Working Devices : 1
   Failed Devices : 0
    Spare Devices : 0

Consistency Policy : bitmap

             Name : ubuntu-server:0
             UUID : 765832c2:a4431240:90b2a7d7:69430147
           Events : 1679

   Number   Major   Minor   RaidDevice State
      0     259        5        0      active sync   /dev/nvme1n1p2
      -       0        0        1      removed

如何刪除md0並保留/dev/nvme1n1p2的根分區數據?我想我只需要重新啟動進入救援模式

umount /dev/md0p1
mdadm --stop /dev/md0p1
mdadm --zero-superblock /dev/nvme1n1p2

並編輯 fstab,將根分區從 /dev/md0p1 更改為 /dev/nvme1n1p2?

大多數情況下,你不能。因為分區表沒有關於您的文件系統的記錄。使用 fdisk 或 gparted 進行檢查。

https://raid.wiki.kernel.org/index.php/Partition_Types

https://raid.wiki.kernel.org/index.php/A_guide_to_mdadm#Array_internals_and_how_it_affects_mdadm

此外,超級塊版本 1.2 從設備啟動開始儲存 4K。這些超級塊還定義了“數據偏移”。這是設備開始和數據開始之間的間隙。這意味著 v1.2 必須始終具有每個設備至少 4K,儘管它通常是幾兆字節。該空間可用於各種用途,通常是寫入意圖點陣圖、壞塊日誌和重塑數組時的緩衝區空間。

所以文件系統塊從分區開始的某個地方開始,而不是它應該在的地方。如果你在 mdadm 之上使用 lvm 那就更糟了。

您可以嘗試 testdisk 來檢查它是否可以看到您的文件系統並為您修改分區表或手動查找文件系統的開始並手動更新分區表或複制數據、創建 fs 並複制數據或保持原樣 - 它沒有害處你。

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