type
status
date
slug
summary
tags
category
icon
password
不少朋友在刚接触 Unraid 的时候都不太了解它是如何存储文件的,比如说不知道文件写入 Unraid 时会存储到哪个硬盘上,或者因为不了解存储逻辑而误将缓存池格式化,导致数据丢失。因此,本文将从 Unraid 的基础知识入手,帮助用户理解 Unraid 如何存储和管理文件。
1. 引言
Unraid 通过阵列功能组织物理存储,利用 SHFS 文件系统实现逻辑整合,并通过用户共享提供统一的存储入口。同时,缓存池的使用作为影响文件存储的重要因素,进一步提升了存储性能和管理效率.通过这些功能,Unraid 为用户提供了灵活且高效的数据管理方式。
本文将依次介绍以下内容:
- 阵列(Array):物理存储管理的基础功能,是实现存储池的最基本功能。
- SHFS 文件系统(Share Filesystem):逻辑存储管理,实现硬盘文件目录的整合。
- 用户共享(User Shares):存储的入口,是用户与存储打交道的最基本单位。
- 文件存储位置的决定因素:分配方法、硬盘选定与缓存池,共同决定了文件在写入的时候会存储在哪一个硬盘上。
1. 阵列:物理存储管理
需要说明的是,在将来的 7.X 新版本中,Unraid 的阵列不再是必选项,具体说明请看博主关于 7.0 版本的介绍:Unraid 7.0 前瞻 。
在当前版本的 Unraid 系统中,阵列(Array) 是用户添加、组建和管理物理存储空间的基础功能。用户可以在阵列中添加、修改或删除硬盘,从而对存储空间进行管理。
如下图(实验环境),博主一共添加了 4 个存储设备到阵列,这些存储设备的物理容量不一,将容量加总后,最终组成了 268G 大小的阵列存储空间:
在 Unraid 的阵列中,每个硬盘都是独立的,用户可以使用不同容量的磁盘组成存储池,甚至可以在不同时间添加或更换磁盘。
相比传统的 RAID 阵列,Unraid 阵列中的每个磁盘可以单独存取。这意味着如果某个磁盘出现故障,其他磁盘的数据不受影响;如果需要扩容存储池,只需替换容量更大的硬盘或额外添加新硬盘即可,操作十分简单便捷。
由于阵列中每一个磁盘都可以单独进行读写,因此每一个硬盘都可以使用独立的文件系统,所以在上面的图片中,你可以看到磁盘1
和磁盘4
使用了 xfs 文件系统,而磁盘2
和磁盘4
则是用了 btrfs 文件系统。
阵列同时也是 Unraid 上其他核心功能(如 Docker 和虚拟机服务)所依赖的基础。当阵列未启动时,Docker 和虚拟机服务将无法正常开启。
2. SHFS 文件系统:逻辑存储管理
在物理层面,阵列用于管理存储空间;而在逻辑层面,Unraid 使用 SHFS(Share Filesystem,用户共享文件系统) 来整合物理硬盘上的目录,为用户提供统一的共享视图。
2.1 什么是 SHFS ?
SHFS 是 Unraid 通过 FUSE(用户空间文件系统)实现的文件系统,它将多个物理硬盘上的同名文件夹整合成一个统一的网络共享目录。这样,用户无需关心文件实际存储在哪个硬盘上,只需通过共享目录即可访问所有相关文件。
如上图所示,假设你有三个硬盘,分别存储不同类别的媒体文件:
- 硬盘1:
/mnt/disk1/Movie
,/mnt/disk1/Docs
- 硬盘2:
/mnt/disk2/Photo
,/mnt/disk2/Movie
- 硬盘3:
/mnt/disk3/TV
,/mnt/disk2/Music
通过 SHFS,Unraid 会在
/mnt/user
下创建一个统一的共享目录:/mnt/user/Movie
/mnt/user/Docs
/mnt/user/Photo
/mnt/user/TV
/mnt/user/Music
用户只需访问这个路径即可浏览所有硬盘上的文件夹和文件,而不需要分别进入每个硬盘的文件夹。
2.2 SHFS 的工作原理
SHFS 创建了一个逻辑上的统一目录视图,这个视图覆盖了所有物理硬盘上对应的文件夹。比如,所有硬盘上的“TV”文件夹会在网络上显示为一个统一的“TV”共享目录。
虽然在网络上是一个统一的共享目录,但在实际存储时,文件仍然保存在各自的物理硬盘上。如果你通过操作系统直接访问硬盘,仍然可以看到每个硬盘上独立的文件夹和文件。
2.3 SHFS 的主要作用
- 统一视图:SHFS 最主要的作用就是实现文件目录的整合,你可以在 Unraid 管理界面上的“共享”中看到所有整合之后的共享目录。
- 集中管理文件:所有相关文件集中在一个共享目录中,方便备份、搜索和组织,无需担心文件存储在哪个具体硬盘上。对比 Win 系统,如果用户需要去查找一个文件,往往需要到对应的分区(C盘、D盘、E盘等)里面去查询,而 Unraid 由于通过 SHFS 对物理硬盘进行了逻辑整合,所以用户不需要关心文件具体存储在哪一个硬盘或哪一个分区,只需要知道文件存储在哪一个文件夹上面,这极大的提高了效率与用户体验。
- 透明操作:虽然多个硬盘的文件夹被整合在一起,但单个文件仍然只存储在一个硬盘上,不会分散到多个硬盘。这保证了数据的一致性和完整性。对于用户来说,访问和操作共享文件夹就像操作一个单一的文件夹一样,无需了解背后的多硬盘结构。
- 提高存储灵活性:可以轻松添加或移除硬盘,SHFS 会自动更新共享视图,无需手动调整共享设置。
2.4 相关参考文章
关于 SHFS 的更多内容,如果读者感兴趣,可以查看博主另一篇文章:为什么unRAID下载/拷贝文件时CPU占用高:详解FUSE-SHFS、I/O问题和解决办法 。这篇文章介绍了 SHFS 更具体的运作逻辑和相关的优缺点,了解之后会进一步理解 Unraid 的文件存储机制的运作原理。
另外,如果读者对于 Unraid 上面一些挂载目录的作用还不是很清楚,例如
/mnt/user
、/mnt/diskX
、/mnt/remotes
等,那么推荐阅读博主的这一篇文章:新手教程:unRAID 存储目录结构说明 。3. 用户共享:存储的入口
阵列和 SHFS 分别从物理层面和逻辑层面实现了存储管理,而用户共享(User Shares) 是用户实际使用存储的入口。
在系统初始化后,Unraid 默认创建四个用户共享文件夹(如下图),大多数用户会根据需要额外创建多个共享文件夹以存储不同类型的数据。例如,用户可以创建一个名为
photo
的共享文件夹,并通过 SMB 协议(或其他协议)在网络上访问和管理该文件夹。这四个默认共享文件夹的作用可以看博主的另一篇文章:新手教程:Unraid 默认共享文件夹的作用以及分配方法的说明 。
如上图所示,博主新建一个叫做
photo
的共享文件夹,相关的配置保持默认进行创建,随后开启 SMB 共享:以 Windows 为例,此时我们就可以通过在文件夹管理器上面输入 Unraid 的 IP 地址(或域名),借助 SMB 协议去增删改查文件了,这也是最常见的存储使用方式。
那么这时候就会引出一个问题,当用户往一个用户共享文件夹里面写入文件时,这个文件具体是存储在哪一个硬盘上面?
4. 文件存储位置的决定因素:分配方法、硬盘选定与缓存池
当用户将文件写入到某个用户共享文件夹中时,文件的存储位置由共享文件夹的分配方法(Allocation method)、硬盘选定和是否使用缓存池规则决定。
4.1 分配方法
如上图所示,每一个用户共享文件夹,都会通过分配方法用于确定在创建新文件或目录时,Unraid 如何选择要使用的磁盘,这一设置有三个可选项:
- High-water:默认选项,此项设置会通过划分“水位线”来判断文件应该往哪一个硬盘中写入。
- 填满:选择编号最小且可用空间仍高于当前最小可用空间设置的硬盘,这个设置需要配合共享文件夹设置中的”最小可用空间”来使用。
- 高可用:选择当前具有最大可用空间的硬盘进行写入。
关于上面这三个设置更具体的解释,请读者移步博主的另一篇文章:新手教程:Unraid 默认共享文件夹的作用以及分配方法的说明。
4.2 硬盘选定
除了上面的分配方法之外,另一个决定的因素是硬盘选定:
包含的硬盘
与 已排除的硬盘
。默认情况下,
包含的磁盘
默认选择为 全部
,也就是说当写入文件到这一个共享文件夹时,这个文件可以选择所有硬盘中的某一个硬盘进行存储;如果只勾选某几个硬盘,那么只会选择所勾选硬盘中的某一个进行存储。已排除的磁盘
作用同理。4.3 是否使用缓存池
缓存池是由较快的 SSD 组成的存储池,用于临时存储写入的数据,特别是当用户共享文件夹开启了缓存功能时,文件会先写入缓存池中,然后在预定的时间通过 Mover 任务移动到阵列中的物理硬盘。这种方式可以显著提升文件写入的速度,并减轻阵列硬盘的负载,从而提高系统整体性能。
关于缓存池更具体的内容,可以参考以下两篇文章:
当用户往一个用户共享文件夹中写入文件的时候,那么 Unraid 的 SHFS 文件系统会通过分配方法、硬盘选定和缓存池的使用来决定文件最终写入的位置。这样可以实现存储空间的均衡利用,确保写入效率和系统性能的优化。
5. 总结
本文介绍了 Unraid 中的阵列、SHFS 文件系统、用户共享以及缓存池的概念,帮助用户理解 Unraid 的文件存储逻辑。通过这些功能,用户可以更灵活和高效地管理数据存储,提高存储空间的利用率、写入效率和管理便捷性。