![如何使用 mdadm 设置 FakeRAID/SoftRAID 而不丢失数据?](https://linux22.com/image/838562/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20mdadm%20%E8%AE%BE%E7%BD%AE%20FakeRAID%2FSoftRAID%20%E8%80%8C%E4%B8%8D%E4%B8%A2%E5%A4%B1%E6%95%B0%E6%8D%AE%EF%BC%9F.png)
通过 Silicon Image 3132 SATA SoftRAID 控制器连接了 2 个驱动器的 RAID0。在 Windows 下,它被分区为一个具有 4 TB NTFS 卷的动态 GPT 磁盘。驱动器上有很多音乐和电影。我试图让它在 Ubuntu 下被视为单个磁盘,而不是 2 x 2 TB。
我尝试通过 dmraid 读取它,但没有成功,它没有显示在 中/dev/mapper
。还尝试配置内核,但没有发现任何可疑的东西,我的控制器的驱动程序已打开。还有一个来自制造商的驱动程序,但它仅适用于 RHEL 和 SLES。这里据报道,内核支持 SoftRAID,但显然不是完全支持。如果我将驱动器插入主板内置的 AMD 控制器,驱动器将被视为单个驱动器,但数据会丢失。我知道 mdadm 能够丢弃磁盘上的所有信息。那么,是否有可能以某种方式创建一个阵列,而无需实际记录所用驱动器的信息,并让系统稍后正确识别其中的部分?
阵列相关信息:
/dev/sdf - Disk 0
/dev/sdg - Disk 1
Array type: Stripe
Chunk Size: 64KB
/dev/md1
另外,使用命令创建设备mknod /dev/md1 b 9 1
答案1
不得不销毁我的数据,但找到了解决办法。该--build
命令实际上构造了一个现存的数组并运行它。我的完整命令如下:
sudo mdadm --build --verbose --chunk=64K /dev/md1 --level=0 --raid-devices=2 /dev/sdh /dev/sdi
我认为 chunk 和 level 选项不是必需的,但使用它们可以确保一切正常。而且我也不应该使用该--create
命令,因为它会破坏现有数组。
随着时间的推移,dmraid 得到了改进。现在,在 2017 年,它可以检测 Silicon Image SoftRAID 卷,所以我只需安装并运行即可dmraid -ay
。