首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BTRFS的分层存储-它是如何完成的?

使用BTRFS的分层存储-它是如何完成的?
EN

Unix & Linux用户
提问于 2020-12-08 15:03:06
回答 3查看 3.9K关注 0票数 8

NETGEAR在其ReadyNAS操作系统中使用BTRFS,并在其最新版本中实现分层存储。它们只从ReadyNAS v6.9中的“元数据”层开始,然后在v6.10中添加“数据层”。系统使用SSD作为第0层,以加快对系统中较慢的HDD的访问。对系统的描述指出,在这两种情况下,元数据将驻留在SSD上,而在“数据层”情况下,新写入的数据也将首先转移到SSD,然后再定期迁移到HDD,或者当SSD层填充到指定的级别时。

ReadyNAS在其正常安装的RAID硬盘上使用BTRFS -例如,我的系统有一个由4个磁盘组成的RAID5,BTRFS将其视为一个单一的设备。

看看Tiering是如何实现的,看起来“元数据”和“数据层”设置都是通过向主HDD RAID数组中添加第二个RAID数组(仅由SSD组成)来完成的,并将初始的单设备BTRFS转换为多设备RAID。

我无法理解的是迁移是如何完成的,以及“元数据”案例是如何将元数据与数据分开的,因此只有元数据才能进入SSD?另外,“数据层”模式如何将写入完全指向SSD层?

有什么想法吗?

EN

回答 3

Unix & Linux用户

发布于 2020-12-31 01:19:16

您是说,Netgear已经找到了一种方法,可以在用户友好且非常简单的配置中完成MergerFS分层缓存允许您完成的任务:https://github.com/trapexit/mergerfs#tiered-caching

  1. 创建两个MergerFS池A),一个包含所有硬盘驱动器,包括SSD (“池”,tier0),并设置为写入设备的空闲空间最少(除非它有X的空闲空间)。B)第二个池(“池-存档”,tier1)只包含HDD。
  2. 您的用户和所有应用程序只使用第一个池的路径。
  3. 一个夜间脚本,它将在过去X天内从第一个池复制到第二个池(简单,因为驱动器是相同的,这只会导致SSD上的数据被复制)。这是唯一使用第二个池路径的项。

我就是这样建立我的家的。所有驱动器都是BtrFS格式的。我不能(用这个解决方案)使用Raid。

优点:

  1. 当驱动器发生故障时,您只会丢失该驱动器上的数据(我通过使用SnapRAID作为第一个备份系统来缓解这一问题)。您不会像使用BtrFS 0那样释放整个池。
  2. 这是非常容易设置。2坐骑在你的/etc/fstab中。BAM,分层缓存!
  3. 您总是首先使用SSD (除非它只剩下X个空闲空间)。给你最大的速度。

缺点是:

  1. 您不能在您的BtrFS池中使用MergerFS子卷(跨磁盘),因为MergerFS运行在用户空间中的文件系统之上。
  2. 这也意味着您不能在池中做子卷的快照。我希望在我的池中有像每个用户数据文件夹的快照这样的时间机器。

我非常喜欢MergerFS,因为它的简单性,但是con #2让我非常感兴趣的是网具是如何使用BTRFS攻击类似的解决方案的。

票数 5
EN

Unix & Linux用户

发布于 2020-12-13 02:30:40

好的,下面是我在周期性平衡过程中发现的情况:

在主机上启动了以下进程:

代码语言:javascript
复制
btrfs balance start -dsweep lt:/dev/md127:7 /data LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin DBUS_SESSION_BUS_ADDRESS=unix:path=/var/netatalk/spotlight.ipc TRACKER_USE_CONFIG_FILES=1 TRACKER_USE_LOG_FILES=1 XDG_DATA_HOME=/apps/.xdg/local/share XDG_CONFIG_HOME=/apps/.xdg/config XDG_CACHE_HOME=/apps/.xdg/cache

在/data是分层数据卷的地方,/dev/ my 127是用作缓冲区/缓存的SSD数组。

此过程将一直运行,直到SSD层的数据几乎完全移动到HDD层--例如,我看到的某个地方:

代码语言:javascript
复制
btrfs fi sh /data
Label: '0a44c6bc:data'  uuid: ed150b8f-c986-46d0-ada8-45ee219acbac
    Total devices 2 FS bytes used 393.14GiB
    devid    1 size 7.12TiB used 359.00GiB path /dev/md126
    devid    2 size 114.68GiB used 42.06GiB path /dev/md127

然后下降,直到SSD层的使用几乎为零。奇怪的是,到目前为止,我还不能手动运行这个命令。

我还是找不出“扫”平衡过滤器。

这就是-help所展示的:

代码语言:javascript
复制
# btrfs balance start --help
usage: btrfs balance start [options] <path>

    Balance chunks across the devices

    Balance and/or convert (change allocation profile of) chunks that
    passed all filters in a comma-separated list of filters for a
    particular chunk type.  If filter list is not given balance all
    chunks of that type.  In case none of the -d, -m or -s options is
    given balance all chunks in a filesystem. This is potentially
    long operation and the user is warned before this start, with
    a delay to stop it.

    -d[filters]    act on data chunks
    -m[filters]    act on metadata chunks
    -s[filters]    act on system chunks (only under -f)
    -v             be verbose
    -f             force reducing of metadata integrity
    --full-balance do not print warning and do not delay start
    --background|--bg
                   run the balance as a background process

但这并不能解释它如何映射到定期运行的命令的"lt:/dev/md127:7“部分:

代码语言:javascript
复制
btrfs balance start -dsweep lt:/dev/md127:7 /data

这里的意思是:一直运行到/dev/‘s 127数据使用率降到7%以下?!?

票数 2
EN

Unix & Linux用户

发布于 2020-12-09 01:13:26

它必须是一个定期运行并进行迁移的cron作业。

检查/etc/cron.d是否有可能这样做。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/623460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档