/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 并将数据复制回来,或者只是保持原样 - 它不会对您造成伤害。