折腾本腾
新手教程:详解 Unraid 缓存策略及应用案例 | JackieWu
00 分钟
2024-1-17
2024-3-2
type
status
date
slug
summary
tags
category
icon
password
URL
notion image
许多刚接触 Unraid 的用户对缓存策略感到困惑,尤其是今年6月份 Unraid 更新后对缓存策略做了调整,使得新手更加不解。为此,本文将深入介绍新旧版本的 Unraid 缓存策略,并提供应用案例与常见问题答疑,帮助读者更深入地理解缓存策略。

1、什么是缓存策略?

缓存策略指的是文件在迁移程序(Mover)作用下如何在阵列和缓存池之间转移的规则
在进行具体的讲解之前,需要说明的是,从 6.12 版本开始关于共享文件夹指定存储池的方式有了概念上的变化,因此缓存策略的使用也跟着有了相应的改变(但本质并没有变)。改动的效果我认为是正向的,逻辑上更清晰,也更符合使用上的直觉。
此改动始于
由于新版本的变化,本文在介绍缓存策略的使用时会分为两部分去做讲解,分别是系统版本 < 6.12 的使用方式和系统版本 ≥ 6.12 版本的使用方式。
使用缓存策略的前提是得先有缓存池,只有创建了缓存池的情况下才可以在共享文件夹的属性界面去指定缓存策略(点击共享文件夹名字即可进入属性界面)
下面的两张图是不同版本下的缓存策略配置参数界面:
notion image
系统版本 < 6.12 下的缓存策略
notion image
系统版本 ≥ 6.12 下的缓存策略
补充:关于缓存池(User-definded pool),官网上提供了一张动态图来说明其工作原理。
notion image
文件先写入到缓存池中,然后再借助相应的机制(Mover)将文件转移到阵列中的硬盘。

2、什么是迁移程序(Mover)

notion image
notion image
当你在 Unraid 的“主界面”最底部,点击了“移动”之后就会触发迁移程序 Mover其作用是将文件从缓存池转移到阵列,或者从阵列转移到缓存池,又或者不转移文件,最终的结果依据缓存策略而定
Mover 是系统的一个可执行程序,其路径为
也就是说,缓存策略影响的是 Mover 转移文件的最终结果,因此利用好缓存策略,我们可以将文件在缓存池和阵列池之间进行流转

3、缓存策略之间的区别

本章节来具体讲解不同缓存策略之间的区别。

3.1、旧版本下的缓存策略

旧版本下(< 6.12)的缓存策略有四个,除了第一个 之外,在你使用其余三个策略中的任意一个时,新写入的文件都会先写入到缓存池中,然后当 Mover 被触发时依据不同的策略将文件在阵列和缓存池之间进行流转(或者不流转)
notion image
系统版本 < 6.12 下的缓存策略
下面是除了 之外不同策略之间的区别:

(1)缓存策略:是(Yes)

当 Mover 被执行后,文件将会从缓存池 → 阵列。
notion image
notion image

(2)缓存策略:首选(Prefer)

当 Mover 被执行后,文件将会从阵列 → 缓存池。
跟策略
notion image
notion image

(3)缓存策略:仅(Only)

当 Mover 被执行后,文件不会进行转移(无事发生)
这种策略的目的是让文件保持在缓存池中,例如系统运行文件,这样就可以利用固态硬盘读写速度快的特性来加速系统服务的运行,在本文第 4 章应用案例一中介绍了这种策略的用途。
notion image
notion image

3.2、新版本下的缓存策略

由于 6.12 版本对共享文件夹指定存储空间的方式有了概念上的变更所以缓存策略的配置也有了逻辑上的变化(但本质不变)。
在新版本下(≥ 6.12),当你创建了一个共享文件夹之后,往往需要设置以下三个选项:
notion image
notion image
  1. 主存储空间( Primary storage ):顾名思义,是创建新文件和新文件夹时所使用的存储池。主存储空间只有两种类型的选择 —— 阵列和缓存池:
    1. notion image
      Cache 和 Zpool 分别是两个缓存池。
  1. 辅助存储( Secondary storage ):只有在主存储空间选择了缓存池之后,辅助存储才可能进行配置,并且只有两个固定选项 —— / 阵列
    1. notion image
      notion image
      notion image
      主存储空间选择了 阵列 的情况下辅助存储为不可设置
      notion image
      等价于在旧版本中选择了 否
  1. Mover 动作:只有主存储空间选择了缓存池,辅助存储选择了 阵列 的情况下,Mover 动作才可以进行配置,并且选项只有两个:Cache → 阵列阵列 → Cache
    1. notion image
      只有 ① + ② 才可能开启 ③ 的设置
      notion image
      如果主存储空间选择了缓存池,辅助存储设置为 无,那么等同于旧版本下的 仅 策略:
      notion image
      表示只使用缓存池
      notion image
      等同于在旧版本下的 仅 。
上面的内容可能有些零碎,不好理解,但其实逻辑很简单,这里我做个总结:
  • 新版下多出了两个概念 —— 主存储空间和辅助存储,作用顾名思义。
  • 主存储空间可以选择阵列或者缓存池。选择 阵列 就表示新创建或新写入的文件都会存储到阵列中,也就表示不去使用缓存池,这就相当于在旧版本的缓存策略中选择
    • notion image
      主存储空间选择 阵列 。
  • 如果主存储空间选择了缓存池,那就意味着你可以去使用缓存策略,如果以旧版本的缓存策略为依照去对比,那会对应的逻辑如下:
    • 请读者体会设置上的逻辑,你会发现这其实是符合使用直觉的。
    • 是(Yes) :主存储空间选择缓存池,辅助存储选择 阵列 ,Mover 动作选择 Cache → 阵列
      • notion image
        首选(Prefer) :主存储空间选择缓存池,辅助存储选择 阵列 ,Mover 动作选择 阵列 → Cache 。
        notion image
        notion image
    • 仅(Only) :主存储空间选择缓存池,辅助存储选择
      • notion image
        其实可以看到,在新版本下存储池与缓存策略的设置都更人性化,逻辑上也更符合直觉。

4、应用案例

理论用于实际中才能更好的理解其含义,本章节作者将介绍几种不同场景下,使用缓存策略来实现文件目的的案例。

4.1、案例一:将系统运行文件放到缓存中进行加速

例如,我们可以将 Unraid 上的 appdatasystem 这两个文件夹放到缓存池中进行加速(其他文件夹同理)。
  • appdata 文件夹存储了 Docker 容器的配置文件,把此文件夹放到缓存池中可以为 Docker 容器的运行进行加速。
  • system 文件夹存储了 Docker 服务和虚拟机服务的 .img 镜像文件,放到缓存池同样可以提高系统的运行速度。
假设这两个文件夹目前都存储在阵列中,要将他们转移到缓存池里面就需要:
  • 在转移文件前,需要先把所有的 Docker 和虚拟机都停止运行,然后分别在“设置 - Docker”和“设置 - 虚拟机”中将 Docker 和虚拟机的服务都关闭。那是因为如果一个文件正在被占用,那么 Mover 程序是没办法将此文件进行转移的,关闭 Docker 和虚拟机的系统服务就是为了能够将这两个服务所使用的相关文件进行转移。
  • 旧版本( < 6.12 ):在 appdatasystem 共享文件夹的属性设置中,将缓存策略设置为 首选(Prefer)
  • 新版本( ≥ 6.12 ):主存储空间设置为缓存池,辅助存储设置为 阵列 ,Mover 动作选择 阵列 → Cache
最后,在主页面点击 移动 即可触发 Mover 程序的执行,来将 appdatasystem 文件夹转移到缓存池中。
当文件转移完成之后,你可以考虑将

4.2、案例二:我需要更换缓存盘,缓存盘里面的文件要怎么转移?

在这种去情况下,我们的目标是将缓存池里面的文件转移回阵列中,当缓存池的文件都转移走之后,我们就可以放心的把缓存盘换下来,替换上新的缓存盘。
这时候我们需要:
  • 停止相关的服务:例如把 Docker 和虚拟机都停掉(包括在设置中停止 Docker 和虚拟机服务),防止相关的文件被占用而无法转移。
  • 旧版本(< 6.12):将缓存池中对应的共享文件夹缓存策略设置为 是(Yes)
  • 新版本(≥ 6.12):主存储空间设置为缓存池,辅助存储设置为阵列,Mover 动作选择 Cache → 阵列
最后,在主页面点击 移动 即可触发 Mover 程序的执行,来将对应的共享文件夹内的文件转移到阵列中。
当文件都转移走之后,你就可以插上新的硬盘,然后还需要在“设置 - 新配置”中创建一个新的配置,最后在缓存池的硬盘选择列表中,将需要替换的那个盘更改为新的硬盘即可:

4.3、如何利用缓存盘为 BT / PT 下载提供加速?

相信大多数 NAS 用户都会用到 qBittorrent 或者 Transmission 等下载工具,由于 P2P 下载的特性,固态硬盘在这种使用场景下要比机械硬盘更能胜任此工作。
多数时候,固态硬盘的容量要比机械硬盘小得多,因此随着下载任务的增加,缓存池的空间往往会消耗的比较快,所以我们这时候就需要定期的将缓存池的文件转移回阵列中,以此来腾出空间给其他的任务进行下载,保证缓存池永远有一定的可用空间来实现下载加速。
💡
注意 前面提到过,如果一个文件正在被占用,那么 Mover 程序是没办将这个文件进行转移的。对应到这里的 P2P 下载场景中,假设一个种子文件正在下载或者正在做种,那么 Mover 程序将无法转移此文件。解决办法很简单,那就是暂停需要转移文件的下载任务或者做种任务,然后再执行 Mover 程序进行转移。当然这种办法并不便捷,后续博主会更新另一篇文章来介绍如何通过脚本去暂停 QB 的特定任务并调用 Mover 去转移种子文件。
在这种情况下:
  • 旧版本(< 6.12):将用于下载的共享文件夹缓存策略设置为 是(Yes)
  • 新版本(≥ 6.12):主存储空间设置为缓存池,辅助存储设置为阵列,Mover 动作选择 Cache → 阵列
  • 设置计划任务,定时执行 Mover 来将文件从缓存池转移到阵列中:

5、常见问题

Q:如果缓存池满了,那么写入文件时会发生什么?

A:假如缓存池满了,那么往设置了缓存策略的共享文件夹中写入新文件时,文件会直接写入到阵列中。
但需要注意的是,如果共享文件夹的策略设置为了 Only (对应到新版本:主存储空间设置为缓存池,并且不设置辅助存储),那么当写入新文件时会提示存储空间不足而无法写入文件。

Q:为什么我执行了 Mover 程序,文件还是没有转移?

A:很大概率是因为文件正在被占用,因此无法转移。
这种情况下就需要检查是哪些程序占用了文件,例如是否是 QB 或者 Transmission 正在下载文件或者在做种导致无法转移,找到对应的程序后把程序停止,然后再去转移即可。
为了保险起见,可以将所有 Docker 和虚拟机都关闭之后再去转移文件。

Q为什么会有个别文件没有转移?

A:可能是因为缓存池与阵列中同时存在同名文件。
假设你发现大部分文件都转移了的情况下,仍有个别文件依然没有进行转移,那么很可能是因为这个文件同时存在阵列和缓存池中,也就是说可能有两份一摸一样的文件分别存在阵列和缓存池中,这样导致了文件没有“转移”的错觉。
当然也有可能这两个文件因为是同名的关系而无法转移,这时候就需要你去判断这两个文件是不是同一个文件,还是说一个是新的一个是旧的,然后你就需要删掉旧的那一个来让新的那一个得到转移。

Q:我没有缓存盘,我如何将阵列中某个硬盘的文件转移到另一个硬盘中?

A:这种情况下你可以使用一个叫做 unBALANCE 的插件。
具体的使用方法请看博主的另一篇文章《unBALANCE 文件转移工具使用方法和应用案例介绍》
  • Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts
Comments
昵称
邮箱
网址
<div _="@=1251,dis=none"><div pseudo="-webkit-input-placeholder" id="placeholder" style="display: block !important;" _="@=1252,dis=none,[@=1253]">评论时填上邮箱可以接收博主的回复信息</div><div _="@=1254,dis=none"></div></div>0/500
3 条评论
10N99 2023-12-04
1 1
我想请问一下,有什么办法可以让一个共享文件夹一直存在缓存盘,又同时备份到阵列中去呢?我想要提高读写效率,又需要阵列里校验盘的保护。
macOS Catalina
Chrome 119.0.0.0
sergio07 2023-12-06
回复 @10N99 :
个人看法。unraid的“缓存”一词给人内存的感觉,好像应该存储易灭失的数据。其实无论文件在阵列还是在缓存,都是只有单份。缓存上的数据和阵列上的数据同等重要。二者是“高速存储”和“低速存储”的关系,并列的。要在高速存储上的存重要数据,必须要组raid1才能防止数据丢失。否则不可以把重要数据放上来。
Windows 10
Chrome 119.0.0.0
fliclumsy 2023-10-30
请问是不是可以把需要24小时运行的文件转移到 cache,这样机械硬盘就可以正常休眠了?
macOS Catalina
Microsoft Edge 118.0.2088.76
上一篇
RustDesk 开源远程桌面服务部署 | JackieWu
下一篇
unBALANCE 文件转移工具使用方法和应用案例介绍 | JackieWu

评论
Loading...