![RAID mdadm 虚拟磁盘太小](https://linux22.com/image/69327/RAID%20mdadm%20%E8%99%9A%E6%8B%9F%E7%A3%81%E7%9B%98%E5%A4%AA%E5%B0%8F.png)
sudo mdadm --build /dev/md0 --level=linear --raid-devices=3 /dev/loop0 /dev/sda1 /dev/sda2
运行上述命令后,/dev/md0
小于/dev/loop0
+ /dev/sda1
+ /dev/sda2
。为什么会发生这种情况,以及我怎样才能使它尺寸正确?/dev/sda1
是 Windows 7 分区所需的一个非常小的分区,/dev/sda2
以便 Windows 正常启动。/dev/loop0
是我使用以下命令创建的环回设备:sudo losetup /dev/loop0 boot.mbr
。 boot.mbr 是一个映像文件,它是/dev/sda
第一个分区 开始之前出现在磁盘开头的前 2048 个扇区的副本/dev/sda1
。这些扇区包含 Grub 引导加载程序。这是我运行来创建该图像文件的命令:dd if=/dev/zero of=boot.mbr count=2048
。它需要相同大小的原因是我试图设置/dev/md0
虚拟硬盘来模仿 Grub 引导加载程序和这 2 个分区的布局,但在尝试设置最后一个分区时我用完了字节,因为没有磁盘上有足够的字节/dev/md0
。如果您需要更多背景信息,这里是我的另一个问题的链接,它解释了我这样做的原因:https://superuser.com/questions/931645/with-linux-mint-as-main-os-dual-boot-windows-7-and-have-a-windows-7-virtual-mac/937491#937491
技术规格:
- Linux Mint 17.2 64 位与肉桂
- mdadm-v3.2.5
- dd(核心实用程序)8.21
更多细节:
fdisk 显示/dev/sda1
为 1572864000 字节。它显示/dev/sda2
为 229318000128 字节。我的文件系统显示 boot.mbr 为 1048576。因此,如果将这三个数字加在一起,/dev/md0
驱动器应至少为 230891912704 字节。但 fdisk 显示 /dev/md0 为 230891847680 字节。所以/dev/md0
不知怎的,65024 字节比它需要的要小。
推测:
我想问题可能出在环回设备上/dev/loop0
。但fdisk -l /dev/loop0
显示设备有 1048576 字节,因此它确实与图像文件的大小匹配。然而,fdisk 抱怨/dev/loop0
没有任何柱面。难道这就是问题所在吗?我只是在这里抓住救命稻草。
如果/dev/md0
是软件RAID创建的虚拟硬盘,那到底意味着什么?一方面,它的数据存储在哪里?也许我的内存或存储空间不足?
答案1
通常,Linux mdadm
RAID 设备总是比组件设备的大小(或者在 RAID 0 的情况下它们的总和)小一些,因为 MD 设备存储元数据。
在本例中,您使用了--build
,它调用不使用元数据的手动组装模式。然而,线性阵列可能小于组件设备的大小总和,因为 MD 设备使用块大小。请注意您应该从命令中获得的以下输出或类似输出:
mdadm: chunk size defaults to 64K
mdadm: array /dev/md0 started.
这意味着该数组可处理 65536 字节的块。例如,如果它是 RAID0 阵列(实际上不是),那么数据将在一个组件上交错 65536 字节,在下一个组件上交错 65536 字节,依此类推。
如果末尾有额外的字节不构成完整的块,则数组无法使用它们。
在线性模式下,我不确定 MD 是否会将每个组件的大小向下舍入到最接近的 65536 字节的倍数,或者仅向下舍入整个数组的大小。无论哪种方式,其中一个组件的大小如果不是 65536 字节的倍数(其他 2 个是),则会导致向下舍入 65024 字节 — 正是您所看到的差异。
显示块设备的确切大小的最佳方法是:
blockdev --getsize64 /dev/sda1
因此,如果您计算以下总和:
blockdev --getsize64 /dev/sda1
blockdev --getsize64 /dev/sda2
blockdev --getsize64 /dev/loop0
以及结果数组的可用大小,可以通过以下方式查看:
blockdev --getsize64 /dev/md0
顺便说一句,我认为您尝试在这里构建的数组非常奇怪并且可能很危险。由两个物理块设备和一个文件支持的虚拟块设备组成的阵列的用处很奇怪。更重要的是,你说:
/dev/sda1
是 Windows 7 分区所需的一个非常小的分区,/dev/sda2
以便 Windows 正常启动。
听起来确实会破坏 Windows 7,但如果您使用 Linux MD RAID 设备覆盖这些分区,那么 Windows 就无法再使用它了!