[从 stackoverflow 接管,因为我认为这可能是错误的地方]
我目前正在测试 btrfs 作为运行 ZFS 的 NAS 的可能替代品。我创建了 4 个设备,每个设备 20GB,并使用该balance -dconvert=raid5
选项创建了一个 btrfs 文件系统。然后我开始使用 5GB 文件填充 FS(现在我有 9 个)。创建这些文件(使用dd
from dev/zero
)后,我开始了balance btrfs balance start
.一段时间后它会抛出错误error during balancing '.' - No space left on device
。系统日志显示此错误:btrfs: 4 enospc errors during balance
。
再次运行平衡-dusage=0
成功完成(如预期),但balance -dusage=90
或简单地balance
没有过滤器不起作用。我为什么这么关心这个?我测试了当您从 raid5 btrfs 卷中删除硬盘时会发生什么,以查看是否没有发生数据损坏。卸下硬盘后,我想添加另一个硬盘并删除出现故障的硬盘。该过程也由于enospc 错误而失败。
附加信息如下:
(FS的挂载点是/mnt/raid/
)
linux:/mnt/raid # btrfs filesystem show
Label: 'test_raid5' uuid: 8b137115-974e-4f91-a243-ec6239c34761
Total devices 4 FS bytes used 45.06GiB
devid 4 size 20.00GiB used 16.03GiB path /dev/sde
devid 3 size 20.00GiB used 17.00GiB path /dev/sdd
devid 2 size 20.00GiB used 17.00GiB path /dev/sdc
devid 1 size 20.00GiB used 16.04GiB path /dev/sdb
Label: none uuid: 69c33622-1c80-4dc3-9c01-24c27def730c
Total devices 1 FS bytes used 1.04GiB
devid 1 size 18.92GiB used 3.04GiB path /dev/sda2
linux:/mnt/raid # btrfs filesystem df /mnt/raid/
Data, RAID5: total=48.00GiB, used=45.01GiB
System, RAID1: total=32.00MiB, used=12.00KiB
System: total=4.00MiB, used=0.00
Metadata, RAID1: total=1.00GiB, used=53.69MiB
linux:/mnt/raid # btrfs version
Btrfs v0.20-rc1+20130701
linux:/mnt/raid # uname -a
Linux linux 3.11.6-4-default #1 SMP Wed Oct 30 18:04:56 UTC 2013 (e6d4a27) x86_64 x86_64 x86_64 GNU/Linux
linux:/mnt/raid # cat /etc/os-release
NAME=openSUSE
VERSION="13.1 (Bottle)"
VERSION_ID="13.1"
PRETTY_NAME="openSUSE 13.1 (Bottle) (x86_64)"
ID=opensuse
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:opensuse:13.1"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://opensuse.org/"
ID_LIKE="suse"
我不敢相信我必须为此添加更多空间才能重新平衡我的 btrfs 卷。对此有什么想法吗?
答案1
我决定为我的“NAS”走btrfs的道路,而不是zfs。我之前测试过两者,我不得不承认我发现 ZFS 的文档要好得多,我真的被它的命令行界面所吸引,所以对我来说 ZFS 是“更好”的选择。
但有一个令人震惊的问题:如果您在 RAID-5 中有 3 个用于 ZFS 的 2TB HDD,并且您想将它们增加到 4x TB HDD,那并不容易。如果您将 ZFS 池设置为 3HDD 并且想要添加新 HDD,则需要再添加 3 个 HDD:总共 6x 2TB。如果您有 6 个 HDD 并且想要增加 FS,则需要再添加 6 个,等等。我遇到的问题是我的 NAS 机箱无法容纳超过 4 个磁盘,而且我还买不起 4 个 HDD。在这方面,Btrfs 更加灵活。
然而,当我开始时,RAID-5/6 的支持确实很差。我像你一样做了一些测试,最终损坏了文件系统。我在 RAID-1 中做了同样的测试,没有问题!所以我决定在 RAID-1 中使用 Btrfs,而不是使用 Ubuntu LTS,我总是使用最新的 Ubuntu 版本来获取最新的内核和 btrfs-tools 包(我正在使用 Ubuntu 15.04 并准备切换)至 15.10)。一旦 Ubuntu 16.04 发布,我可能(经过测试)最终转向 RAID-5,并且可能会坚持下去。我在最近的内核变更日志中看到,RAID-5/6 的代码库更加成熟。
所以对于你的问题。如果您想尝试 Btrfs,特别是在 RAID-5 或 6 中,坚持使用最新的 Linux 发行版(例如Arch Linux、最新的Ubuntu、Fedora 等)。它们可能缺乏其他发行版的稳定性,但对于 Btrfs 来说它们可能要稳定得多。
关于您的“用例”的一个注释:与您放入的文件的大小相比,您的 Btrfs 文件系统相当小。它可能并不能很好地反映现实世界的场景。您应该创建大文件(视频)和小文件(照片、文档),并尝试将文件系统填满 80%。测试它的一种好方法是将许多文件放在文件系统上,然后运行文件系统基准测试,不是为了基准测试本身,而是为了它们带来的压力。您可以使用phoronix 测试套件为此(例如phoronix-test-suite benchmark pts/disk
)。