特殊分配类

特殊分配类

在 HDD(硬盘)文件系统上使用 SSD(闪存)缓存时(使用或bcache),某些全局操作(可能是)所需的某些块可能会从缓存中过期,从而导致访问速度非常慢。这是因为典型的文件系统元数据访问模式是小规模的随机读取,而 HDD 的速度特别慢(比 SSD 慢 100 倍以上)。lvmcachedm-cachefind

通过设计强制将所有元数据(inode、位图、dentry、日志和可能的小文件)放在 SSD 上可能会解决访问速度慢且不可预测的问题,而将文件(可能大于某个阈值的文件)保存在 HDD 上使得该解决方案即使对于大型文件系统也有效。
(如果 SSD 和 HDD 都镜像,则不会增加数据丢失的风险。)

是否有任何 Linux 文件系统能够使用小型非旋转设备来存储元数据并使用大型旋转设备来存储文件数据?

虽然btrfs能够强制将一份元数据镜像到 SSD,但似乎无法强制将文件内容从 SSD 中移出。而且我不确定它是否只能从 SSD 读取元数据。(元数据是镜像的,因此也可以从 HDD 中获取,但该镜像元数据只能在 SSD 发生故障时使用。)

答案1

虚拟文件系统您可以使用特殊设备存储元数据、重复数据删除表以及可选的用户定义大小的小文件。

特殊分配类

特殊类中的分配专用于特定块类型。默认情况下,这包括所有元数据、用户数据的间接块以及任何重复数据删除表。该类还可以配置为接受小文件块。

池必须始终至少有一个正常(非重复数据删除/特殊)vdev,然后才能将其他设备分配给特殊类。如果特殊类已满,则分配给它的资源将溢出到正常类中。

https://openzfs.github.io/openzfs-docs/man/8/zpoolconcepts.8.html#Special_Allocation_Class

因此,这可用于加速使用 SSD 磁盘的磁盘访问。您可以选择镜像多个元数据设备以实现冗余,或者仅使用 SSD 作为唯一的元数据存储。据我所知,当该特殊设备已满时,元数据将存储在主存储中,因此一切将正常工作

特殊 VDEV 类

在 ZFS 0.8 及更高版本中,可以配置特殊 VDEV 类以优先存储文件系统元数据,以及可选的数据重复数据删除表 (DDT) 和小型文件系统块。例如,这允许在快速固态存储上创建特殊 VDEV 来存储元数据,而常规文件数据存储在旋转磁盘上。这加快了元数据密集型操作(例如文件系统遍历、清理和重新镀银),而无需将整个文件系统存储在固态存储上。

https://en.wikipedia.org/wiki/ZFS#Special_VDEV_Class

ZFS 特殊设备

特殊设备可以提高由慢速旋转硬盘组成的池的速度,这些硬盘具有大量的元数据更改。例如,涉及创建、更新或删除大量文件的工作负载将受益于特殊设备的存在。ZFS 数据集还可以配置为将整个小文件存储在特殊设备上,这可以进一步提高性能。为特殊设备使用快速 SSD。

https://pve.proxmox.com/wiki/ZFS_on_Linux#sysadmin_zfs_special_device


如何设置的示例

将特殊 vdev 添加到现有 zpool

#implied stripe of mirrors, for this special device 
zpool add elbereth -o ashift=12 special mirror /dev/nvme0n1 /dev/nvme1n1 mirror /dev/nvme2n1 /dev/nvme3n1

设置小块大小:

# zfs set special_small_blocks=128K elbereth 

或者如果你有一个像我们这样的“视频”数据集:

# zfs set special_small_blocks=128K elbereth/videos 

ZFS 元数据特殊设备:Z

也可以看看

答案2

缓存

... Linux 内核块层缓存。它允许一个或多个快速磁盘驱动器(例如基于闪存的固态驱动器 (SSD))充当一个或多个较慢硬盘驱动器的缓存。

及其后代缓存文件,一种可与 Btrfs 和 ZFS 媲美的现代文件系统自 Linux 6.7 起可用,还支持多种目标设备类型:3个存储+1元数据目标

在 bcachefs 中,这些活动被归类为目标选项。存在四个目标选项,可在文件系统级别设置(在格式化时、挂载时或在运行时通过 sysfs 设置),或在特定文件或目录上设置:

  • 前台目标:正常前台数据写入,如果未设置元数据目标,则写入元数据
  • 元数据目标:btree 写入
  • 后台目标:如果设置,用户数据(不是元数据)将在后台移动到此目标
  • 提升目标:如果设置,则在读取时将向此目标添加缓存副本(如果不存在)

标签和目标选项

您可以指定特殊的元数据设备,例如这些例子

# bcachefs format /dev/sd[ab] --foreground_target /dev/sda --promote_target /dev/sda \
    --background_target /dev/sdb --metadata_target /dev/sda

# bcachefs format --compression=zstd \
    --encrypted \
    --replicas=2 \
    --label=hdd.hdd1 /dev/sdc \
    --label=hdd.hdd2 /dev/sdd \
    --label=hdd.hdd3 /dev/sde \
    --label=ssd.ssd1 /dev/sdl \
    --label=ssd.ssd2 /dev/sdm \
    --foreground_target=ssd \
    --promote_target=ssd \
    --background_target=hdd \
    --metadata_target=ssd

然而,仅将 SSD 用于元数据通常效率不高,因为元数据只占整个数据集的很小一部分,因此 512GB SSD 仅适用于 25600GB 或更大的巨型块设备

也可以看看

相关内容