新手教程
🥏新手教程:Unraid 默认共享文件夹的作用以及分配方法的说明
00 分钟
2023-10-24
2023-12-31
type
status
date
slug
summary
tags
category
icon
password
由于 Unraid “聚合视图”功能的存在,用户共享文件夹(User Shares)是文件存储与管理的基本对象,文件在硬盘上的存储与读写会以共享文件夹的一些列属性为依据运作。本文将向读者介绍 Unraid 共享文件夹作用以及使用案例,方便新手朋友能更好的理解和使用 Unraid 。
关于 Unraid “聚合视图”功能的说明,读者可以参考博主的另一篇文章《为什么unRAID下载/拷贝文件时CPU占用高:详解FUSE-SHFS、I/O问题和解决办法》的第 2 章。

1、默认共享文件夹说明

在 Unraid 初始化时,会有以下 4 个默认的共享文件夹被创建:
notion image
  • appdata :Docker 容器应用配置文件默认存储目录。
  • domains :虚拟机虚拟硬盘默认存储问目录。
  • isos :系统安装镜像默认存放目录。
  • system :Docker 和虚拟机的虚拟 IMG 镜像默认存放位置。
实际上,这些文件夹并不是必要的,只是 Unraid 提供了一个初始化的文件夹给到用户使用,当你了解这些文件夹的作用之后,你就可以自定义本文所提到的相关文件的默认存储位置。
就好像 Windows 系统不一定就得安装在 C 盘一样,你也可以安装到 D 盘或其他盘。

1.2、appdata 文件夹说明

在 Unraid 上,appdata 文件夹默认用于 Docker 应用数据存储,当你从 CA 安装一个 Docker 应用时,这个应用的默认应用数据存储位置也是 appdata
CA - Jellyfin
CA - Jellyfin
你也可以将默认的应用数据配置存放目录进行更改:
notion image
根据图片上的提示,你可以将此文件夹存放到固态硬盘中,从而实现 Docker 应用的运行加速。

1.3、domains 文件夹说明

domains 文件夹用于存储虚拟机的虚拟硬盘,当你创建了一个虚拟机并且虚拟机添加了虚拟硬盘,那么这个虚拟硬盘就会存储到 domains 共享文件夹。
例如创建一个 Win 虚拟机并添加一个 10G 的虚拟硬盘:
notion image
可以看到默认情况下虚拟硬盘被存放到了 domains 文件夹中
可以看到默认情况下虚拟硬盘被存放到了 domains 文件夹中
但同样的,你不必一定需要将虚拟机的虚拟硬盘存储在此位置,如果你希望默认情况下存储在其他的文件夹,你可以在虚拟机服务的设置中将其指定到其他的文件夹:
notion image

1.4、isos 文件夹说明

isos 文件夹默认用于存储 ISO 镜像文件,与 domains 文件夹一样,你也可以在虚拟机设置中将 ISO 的默认存储路径指定到其他的文件夹:
ISO 是一种光盘镜像文件,一般以 .iso 为扩展名,是复制光盘上全部信息而形成的镜像文件,见的比较多的就是 Windows 的系统安装镜像,如 cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso
notion image
当安装虚拟机的时候,“操作系统安装 ISO” 中展开的文件列表就是 isos 文件夹内的所有 .iso 文件,如:
notion image

1.5、system 文件夹说明

system 文件夹用于存放 Docker 和虚拟机的虚拟 IMG 镜像,此文件夹下面有两个子文件夹,分别为:
notion image
  • docker 文件夹:存放 docker.img 镜像
  • libvirt 文件夹:存放 libvirt.img 镜像
Unraid 在 Docker 服务启动时将 docker.img 镜像文件进行挂载然后读取里面存储的相关数据,所以当你安装一个 Docker 应用时会将相关的镜像、相关参数存储到 docker.img 内,所以如果你不小心将 docker.img 文件删掉了,那么你所安装的所有 Docker 应用也将会消失(但只要你应用的配置文件还在,那么只需要重新安装即可)。libvirt.img 的作用跟 docker.img 也是一样的道理。
因此有时候如果你发现 Docker 服务和虚拟服务无法启动,并且系统日志里面也提示了关于 docker.imglibvirt.img 镜像文件的报错信息(例如无法挂载),那么你可以尝试将这两个 img 镜像文件删除(删除之后 Unraid 会自动创建新的)来解决此问题。 假如说你遇到了因 docker.img 镜像出问题而导致 docker 服务无法启动的情况,你可以参考这里的内容去处理 —— 《常见问题-8:Docker 服务无法启动/容器消失的解决办法》
notion image
notion image
不管是 Docker 还是虚拟机,这两个 .img 文件的默认存放位置也都是可以改变的:
设置 - Docker
设置 - Docker
设置 - 虚拟机管理
设置 - 虚拟机管理

2、共享文件夹分配方法说明

notion image

2.1、分配方法(Allocation method)说明

官方解释如下:
When you create a new user share, or when any object (file or directory) is created within a user share, the system must determine which data disk the user share or object will be stored on. In general, a new user share, or object within a user share, is created on the data disk with the most free space. However, there are a set of configuration parameters available to fine-tune disk allocation. 创建新用户共享或在用户共享中创建任何对象(文件或目录)时,系统必须确定用户共 享或对象将存储在哪个数据磁盘上。一般来说,新用户共享或用户共享中的对象会创建在可用空间最大的数据磁盘上。不过,有一组配置参数可用于微调磁盘分配。
由于 Unraid 的用户共享(User Shares)具有“聚合视图”的功能,所以对于用户来说当写入数据到某一个共享文件夹时,用户不需要去考虑文件应该存储在阵列中的哪一个硬盘,因为共享文件夹会依据“分配方法(Allocation method)”中的规则自行决定文件应该写入到哪一个硬盘中。
notion image
分配方法有以下几种:
  • High-water :High-water 是默认的共享文件夹分配方法,大多数情况下我们保持此默认选项即可。
  • 填满(Fill-up)
  • 高可用(Most-free)

(1)High-water(高水位)

官方文档解释如下:
The High-water setting works with switch points based on continually halving the size of the largest drive in the array. It does multiple passes to fill each disk so at the end of each step there is equal free space left on each disk. This progressively fills each disk but without constantly going back and forth between disks each time new data is written. Most times, only a single disk will be needed when writing a series of files to the array so the array will only spin-up the needed disk. The high-water level is initially set equal to one-half of the size of the largest disk. A new high water level is again set to one-half of the previous high level once all the disks have less free space than the current high water level. High-water 设置的工作原理是将阵列中最大驱动器的大小持续减半。它会对每个磁盘进行多次填充,以便在每个步骤结束时,每个磁盘上剩余的可用空间相等。这样就能逐步填满每个磁盘,但在每次写入新数据时都不会在磁盘间来回切换。大多数情况下,向磁盘阵列写入一系列文件时只需要一个磁盘,因此磁盘阵列只会启动需要的磁盘。高水位最初设置为最大磁盘大小的二分之一。一旦所有磁盘的可用空间都小于当前的高水位,新的高水位又会被设置为前一个高水位的二分之一。
简单来说就是 High-water 方法会动态地划分出一条“高水位线”,以这条线为分界线去将数据写入到硬盘。高水位线由阵列中硬盘容量最大的那一个盘的存储容量除以 2 得到,然后随着阵列中硬盘可用空间的减少将会动态地计算出新的高水位线,而新的高水位线会以前一条高水位线的值除以二得到。
High-water(高水位)可以保证阵列中每一个硬盘的可用空间相等,避免写入数据时来回在多个硬盘间切换,这样可以保证大多数情况下只对某一个硬盘进行写入,而其他硬盘就可以进行休眠。
通过以下的例子你将明白具体的原理。
例如,下图中有三块硬盘组成了 Unraid 的阵列:一块 16T 硬盘、一块 6T 硬盘和一块 4T 硬盘,那么第一条高水位线的值通过将容量最大的那一个盘的总容量除以 2 得到 —— 16T / 2 = 8T 。
此时 High-water 的值为 8T
此时 High-water 的值为 8T
当此时往共享文件夹写入数据时,Unraid 将会以这条 8T 的高水位线为依据,去判断阵列中哪一个硬盘的可用空间大于 8T,也就是哪一个硬盘的可用空间在高水位线之上,然后就将数据写入到对应的硬盘中。如下图所以,由于高水位线的值为 8T,而这三个硬盘中只有 Disk1 硬盘的可用空间大于 8T,所以数据首先会写入到 16T 的硬盘中:
notion image
随着硬盘可用空间的越来越少,当所有硬盘的可用空间都小于高水位线时,将会在第一条高水位线的基础上再除以二得到第二条高水位线 —— 本例中就是 8T / 2 = 4T 。如下图所示,此时所有硬盘的可用空间都小于第一条高水位的值(8T),所以会选出新的高水位线(4T),并且此时有两个硬盘的可用空间都在新的高水位线之上 —— Disk1 和 Disk2 。由于 Disk1 和 Disk2 的可用空间都大于高水位线,此时会以硬盘的序号从小到大作为顺序去写入文件,而由于 Disk1 的序号比 Disk2 要小,所以写入数据时依然会先写入到 Disk1 :
notion image
而如果 Disk1 的可用空间小于高水位线了(< 4T),那么此时写入数据时就会写入到 Disk2 中而不继续再向 Disk1 写入数据了:
notion image
同样的,如果 Disk2 的可用空间也小于高水位线的值(< 4T),那么根据本例将会出现 3 个硬盘的可用空间都约等于 4T 的情况,此时就需要再重新计算出新的高水位线 —— 4T / 2 = 2T,如下图所示:
notion image
此时写入数据时依然是依据硬盘在阵列中的序号从小到大去写入数据到对应的硬盘中,整个过程再次重复。

(2)填满(Fill-up)

官方解释如下:
The fill-up allocation method attempts to fill each disk in order from the lowest numbered disk to the highest numbered disk. The fill-up allocation method must be used in conjunction with the minimum free space setting. Otherwise, Unraid will begin to give disk full errors and not allow any more transfers once the first disk gets close to being full. 填满分配法尝试按照从编号最低的磁盘到编号最高的磁盘的顺序填满每个磁盘。填满分配方法必须与最小可用空间设置一起使用。否则,一旦第一块磁盘接近填满,Unraid 就会开始提示磁盘已满错误,并不再允许任何传输。
High-water 的目标是向每个磁盘写入尽可能多的数据(以便最大程度地减少磁盘唤醒的频率),同时尝试在每个磁盘上保留相同数量的可用空间(以便在整个阵列上均匀分布数据)。
写入数据到阵列中时,填满(Fill-up)方法以阵列中的硬盘序号从小到大为顺序,将数据写入到硬盘序号最小的那一个盘,直到这个盘的可用空间小于所设置的“最小可用空间”的值之后才会继续向后写入到序号最小的那一个硬盘。
💡
使用填满方法必须同时设置共享文件夹的“最小可用空间”数值,否则一旦硬盘快满时 Unraid 将会开始提示磁盘已满的系统错误信息,并且无法再向共享文件夹写入任何的文件,即使其他的硬盘仍有足够的可用空间。
notion image
如下图所示,由于使用了 Fill-up 方法,并且“最小可用空间”设置为了 100G ,所以写入文件到阵列时会从 Disk1 - Disk3 按顺序写入,直到硬盘的可用空间小于“最小可用空间”所设置的值之后才会继续往下一个硬盘写入:
Disk1 和 Disk2 的可用空间都小于“最小可用空间”之后 ,才会继续写入到 Disk3 中。
Disk1 和 Disk2 的可用空间都小于“最小可用空间”之后 ,才会继续写入到 Disk3 中。

(3)高可用(Most-free)

官方解释如下:
The most free allocation method picks the disk with the most free space and writes the data to that disk. Each time a file is written Unraid will check the free space on the included disks and pick the one with the most free space. 最大可用空间分配法会选择可用空间最大的磁盘,并将数据写入该磁盘。每次写入文件时,Unraid 都会检查包含磁盘上的可用空间,然后选择可用空间最大的磁盘。
此方法的逻辑最为简单 —— 会选择可用空间最大的那一个盘进行写入。
一般很少会选择此方法进行使用,因为写入数据时可能会频繁的在多个硬盘之间来回写入数据,所以并不是一个比较理想的分配方法。

3、共享文件夹的相关使用案例

3.1、怎么让 unraid 系统,虚机,docker这些都运行在固态盘里?

此问题来源于 Unraid 论坛中文板块的一个提问,可能也是不少刚开始接触 Unraid 的用户所希望实现的一个效果,算是一个比较典型的需求,这里博主就此问题做相关的讲解。
notion image

(1)问题说明

首先需要说明的是,Unraid 系统自身是运行在内存中的,所以即使你使用的是固态硬盘来作为系统盘使用,到最后 Unraid 也只是运行在内存中,因此将 Unraid 自身的文件放到固态盘中意义不大。
其次,虚拟机和 Docker 的相关文件可以放到缓存盘中,这样可以实现 Docker 和虚拟机服务的加速运行,你可以将以下共享文件夹转移到缓存盘中进行使用:
  • appdata :Docker 容器应用配置文件默认存储目录,将此文件夹放到缓存中可以加速 Docker 应用读取其配置文件。
  • domains :虚拟机虚拟硬盘默认存储问目录,将虚拟硬盘放到固态盘中可以加速虚拟机的运行速度。
  • system :Docker 和虚拟机的虚拟 IMG 镜像默认存放位置,将此文件夹放到固态硬盘中可以实现 Unraid 上 Docker 服务和虚拟机服务的加速运行。

(2)转移方法

为了转移共享文件夹,你可以通过缓存策略 unBALANCE 插件实现。
1、缓存策略转移共享文件夹
这个方法的条件是你的固态盘是用作缓存盘来使用,如果你的固态硬盘并不是用作缓存盘那么请使用 unBALANCE 插件方法。
如果你还不是很清楚 Unraid 上的缓存策略,你可以先去了解博主的另一篇文章《新手教程:详解 Unraid 缓存策略及应用案例》
如果你的固态硬盘是用作缓存盘,那么你可以将上面提到的那三个共享文件夹的缓存策略设置为“首选(Prefer)”:
“首选(Prefer)”是 6.12 版本之前的缓存策略。
notion image
或者如下图所示的 6.12 版本开始的新缓存策略:
notion image
然后停止 Unraid 上的 Docker 服务和虚拟机服务:
notion image
notion image
然后执行“转移(Mover)”来让系统将这几个共享文件夹内的文件转移到缓存池中:
notion image
2、unBALANCE 插件转移
关于 unBALANCE 插件的具体使用方法,请参考博主的另一篇文章《unBALANCE 文件转移工具使用方法和应用案例介绍》,这里简单做一个介绍:
在 GATHER 配置界面分别勾选 appdata 、domains 和 system 文件夹并点击 NEXT 下一步
在 GATHER 配置界面分别勾选 appdata 、domains 和 system 文件夹并点击 NEXT 下一步
根据提示开始执行文件转移
根据提示开始执行文件转移
 

评论