为了测试 Btrfs-RAID1 的稳定性,我想在 Virtualbox 中在两个 USB 记忆棒上安装 Ubuntu。
我想要实现的目标:
- 拥有一个基于 btrfs 的 RAID1 系统,可在任意一个 USB 驱动器上启动。我使用 15.04 amd64 映像。
我现在陷入困境的地方:
- 我可以在单个 USB 上顺利安装和启动它。每当我尝试添加第二个 USB 棒,在 Ubuntu 中将其添加到 btrfs 池并将冗余级别更改为 RAID1 时,系统就会无法启动,显示“BTRFS:open_ctree 失败”,随后显示“mount:正在安装 /dev/disk/by-uuid/唯一唯一标识符/root 失败:参数无效”。
我已经尝试了至少十几次来正确设置它,但都没有成功。我尝试过的事情
- 通过 USB 控制器传递 USB 记忆棒
- 将原始 USB 磁盘作为虚拟 vmdk 传递到 SATA 或 IDE 控制器上
- 使用整个磁盘作为单个 Btrfs 分区,带或不带分区表
- 在 btrfs 分区前设置 biosgrub 分区和/或 '/boot'-ext4 分区
- 仅使用“单一”冗余模式对一个存储棒进行分区,然后添加另一个存储棒
答案1
您具体使用了哪些命令?
通常,假设您的虚拟机中有两个可用的 USB 驱动器(大小相同),系统安装在第一个驱动器上,您可以执行以下操作:
启动实时系统,例如 Ubuntu 安装光盘。安装 Ubuntu 的第一个 USB 驱动器可能是 /dev/sda,第二个驱动器仍为空,可能是 /dev/sdb。我假设有一个单独的 /boot 分区 (sda1),并且您的 btrfs 文件系统位于 sda2 上,因此您想要创建一个与 RAID1 镜像相同的 sdb2。
将分区表复制到新的 USB 驱动器:dd if=/dev/sda of=/dev/sdb bs=512 count=1
新驱动器现在包含空分区,因此您有 /dev/sdb2。
sda (FIRST USB DRIVE) <- your Ubuntu installation
sda1 /boot <- your Ubuntu boot partition
sda2 / <- your Ubuntu root partition
sdb (SECOND USB DRIVE) <- new usb drive, to be used for mirror
sdb1 <- empty fake copy of boot partition
sdb2 (btrfs...) <- will be second device in sda2 mirror
创建一个新的 btrfs 文件系统:(如有必要,mkfs.btrfs /dev/sdb2
请使用。)-f
使用 挂载旧的 btrfs 文件系统(应该转换为镜像)mount /dev/sda2 /mnt
或重新启动实时系统并启动实际的 Ubuntu 系统(挂载点将是/
而不是/mnt
)。
将新分区作为第二个设备添加到您的 btrfs 文件系统:如果您已将其安装在其他地方(或者您已重新启动),btrfs device add /dev/sdb2 /mnt
请替换。 仔细检查(您应该获得 2 个分区的列表,sda2 和 sdb2 仍然是空的):/mnt
btrfs filesystem show /mnt
将您的 2 驱动器 btrfs 文件系统转变为镜像:btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
现在重新启动并查看会发生什么。btrfs fi show
再次运行以确认 sda2 和 sdb2 已被使用。
请注意,/dev/sdb1 是一个空分区,大小与 /dev/sda1(您的启动分区)相同,但只要您仍然可以从 sda 启动,就无需复制它。对于完整复制,如果您的第二个 USB 驱动器应替换第一个 USB 驱动器,您也应该将 sda1 复制到 sdb1(dd 命令,见上文)。