btrfs:我可以创建一个 btrfs 文件系统,其中数据为 jbod,元数据为镜像吗

btrfs:我可以创建一个 btrfs 文件系统,其中数据为 jbod,元数据为镜像吗

我正在尝试构建一个服务器,它将是我的 NAS/媒体服务器以及 XBMC 前端。我计划使用带有 btrfs 的 Ubuntu 作为 NAS 部分。当前设置包括用于操作系统等的 1TB 硬盘和用于数据的两个 2TB 硬盘。我计划将 2TB 硬盘用作 JBOD btrfs 系统,这样我以后可以根据需要添加硬盘,基本上就是在线扩展文件系统。我设置文件系统进行测试的方式是在安装操作系统时只连接一个硬盘,并将 btrfs 安装为 /data。稍后将另一个硬盘添加到此文件系统。添加第二块磁盘时,btrfs 设置为 RAID 0,元数据为 RAID 1。但是,这带来了一个问题:即使其中一个磁盘发生故障,我也会丢失所有数据(主要是媒体)。此外,大多数情况下,服务器将在不进行任何磁盘访问的情况下运行,即 HDD 可以降速,当访问请求进入时,在当前 RAID 0 设置下,两个磁盘都会启动。如果我管理 JBOD,则只有包含文件的磁盘需要启动。这有望减少每个磁盘的 MTBF。因此,有没有办法可以设置 btrfs,使元数据被镜像,但数据仍保留在 JBOD 格式中

我还有一个问题,我了解 JBOD 中的整个驱动器故障将丢失驱动器上的数据,但是在所有驱动器上镜像元数据后,这是否有助于文件系统纠正可能出现的错误(例如位腐烂?)并且 btrfs 是否可以做到这一点。

答案1

您的问题似乎在这里可以得到最好的回答:

https://serverfault.com/a/438181/89037

基本上,是的,“单一”数据配置文件允许不同大小的磁盘并以 JBOD 方式组合它们。不要更改元数据,保留为 RAID1。

答案2

来自 Btrfs wiki

当前状态

Btrfs 可以在线添加和删除设备。在 mkfs 时添加设备可以最大程度地控制所使用的 raid 级别。

Btrfs 可以执行 raid0、raid1、raid10,并且可以在单个主轴上复制元数据。读入块时,会验证校验和,如果有任何错误,Btrfs 会尝试从备用副本读取。

请参阅 Gotchas 页面来了解在 RAID1 样式设置中使用具有多个不同大小卷的 btrfs 时出现的一些当前问题。

创建多设备 FS

mkfs.btrfs 将在命令行上接受多个设备。它具有控制数据和元数据的 raid 配置的选项。有效选项为 raid0、raid1、raid10 和 single。single 表示不进行元数据复制,这在使用硬件 raid 时可能是理想的选择。

所以,您不能对数据执行 JBOD(或者 Wiki 没有更新,Btrfs 正在大力开发中)。

我喜欢 Btrfs 对数据和元数据进行校验,它可以防止数据无声损坏(好吧,它会通知您,您的文件已损坏,但应该可以防止元数据损坏)。不过,我不会信任它来保存我想保留的东西。就我个人而言,我会选择 3 个磁盘和一个软件 RAID 5。您可以根据需要稍后扩展阵列。对于文件系统,我会选择更成熟的文件系统,例如 ext4 或 XFS。

如果您更关心磁盘的旋转而不是数据的持久性,则可以使用 LVM 从两个磁盘创建一个逻辑卷,并在其上创建 Btrfs 文件系统。LVM 允许线性模式,这可能会或可能不会导致仅相关驱动器旋转(如果数据和元数据都位于同一主轴上),但如果驱动器发生故障,您将丢失所有数据。

答案3

你可以运行如下命令:

mkfs.btrfs -L data /dev/sdc /dev/sdd

将 btrfs 跨多个磁盘。请确保使用正确的设备名称。请注意,使用这样的设置会失去冗余,并且数据不安全。

相关内容