如何将 mdadm raid1 转换为单个驱动程序并保留数据?

如何将 mdadm raid1 转换为单个驱动程序并保留数据?

/dev/nvme1n1p2我在和 的根分区中用 mdadm 创建了一个 raid1 /dev/nvme0n1p2,efi 启动分区位于 /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?

答案1

大部分情况下不能。因为分区表没有关于文件系统的记录。使用 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 处。这些超级块还定义了一个“数据偏移量”。这是设备起始位置和数据起始位置之间的间隙。这意味着 1.2 版的每个设备必须始终至少有 4K,尽管通常有几兆字节。这个空间可用于各种用途,通常是写入意图位图、坏块日志和重塑数组时的缓冲区空间。

因此文件系统块从分区的开头某处开始,而不是它应该在的位置。如果你在 mdadm 上使用 lvm,情况会更糟。

您可以尝试 testdisk 来检查它是否可以看到您的文件系统并为您修改分区表,或者手动找到文件系统的开头并手动更新分区表或复制数据,创建 fs 并将数据复制回来,或者只是保持原样 - 它不会对您造成伤害。

相关内容