6.9.0
版本 6.9.0 2021-02-27
新功能摘要
多个池
该功能允许您定义多达35个命名的池,每个池最多包含30个存储设备。池通过主页创建和管理。
- Note: A pre-6.9.0 cache disk/pool is now simply a pool named
"cache". When you upgrade a server which has a cache disk/pool
defined, a backup of
config/disk.cfgwill be saved toconfig/disk.cfg.bak, and then cache device assignment settings are moved out ofconfig/disk.cfgand into a new file,config/pools/cache.cfg. If later you revert back to a pre-6.9.0 Unraid OS release you will lose your cache device assignments and you will have to manually re-assign devices to cache. As long as you reassign the correct devices, data should remain intact.
创建用户共享或修改现有用户共享时,您可以指定与该共享关联的池。指定的池功能与当前缓存池操作相同。
需注意的是:当获取共享的目录列表时,Unraid 数组磁盘卷和所有包含该共享的池将按以下顺序合并。
分配给共享的池
disk1
:disk28
所有其他的池在 [strverscmp()](https://man7.org/linux/man-pages/man3/strverscmp.3.html) 顺序中。
A single-device pool may be formatted with either xfs, btrfs, or (deprecated) reiserfs. A multiple-device pool may only be formatted with btrfs. A future release will include support for multiple "Unraid array" pools, as well as a number of other pool types.
- Note: Something else to be aware of: Let's say you have a 2-device
btrfs pool. This will be what btrfs calls "raid1" and what most
people would understand to be "mirrored disks". Well, this is
mostly true in that the same data exists on both disks but not
necessarily at the block-level. Now let's say you create another
pool, and what you do is un-assign one of the devices from the
existing 2-device btrfs pool and assign it to this pool. Now you
have x2 single-device btrfs pools. Upon array Start user might
understandably assume there are now x2 pools with exactly the same
data. However, this is not the case. Instead, when Unraid OS
sees that a btrfs device has been removed from an existing
multi-device pool, upon array Start it will do a
wipefson that device so that upon mount it will not be included in the old pool. This of course effectively deletes all the data on the moved device.
额外的 btrfs 平衡选项
多个设备池仍然默认使用 btrfs raid1 配置文件创建。如果池中有 3 个或更多设备,您现在可以重新平衡到 raid1c3 配置文件(在不同设备上的 3 个数据副本)。如果您在一个池中有 4 个或更多设备,您现在可以重新平衡到 raid1c4(在不同设备上的 4 个数据副本)。我们还修改了 raid6 平衡操作,将元数据设置为 raid1c3(以前是 raid1)。
然而,我们注意到将其中一个平衡过滤器应用于完全空的卷后,会留下带有先前配置文件的数据区块。解决方案是简单地再次运行相同的平衡。我们认为这是一个btrfs错误,如果没有解决方案,我们将默认添加第二个平衡。目前,保持不变。
SSD 1 MiB 分区对齐
我们添加了另一种分区布局,其中分区1的开始对齐在1 MiB边界。这意味着,对于呈现512字节扇区的设备,分区1将从扇区2048开始;对于具有4096字节扇区的设备,从扇区256开始。这种分区类型现在用于格式化所有未格式化的非旋转存储(仅此)。
It is not clear what benefit 1 MiB alignment offers. For some SSD devices, you won't see any difference; for others, perhaps big performance difference. LimeTech does not recommend re-partitioning an existing SSD device unless you have a compelling reason to do so (or your OCD just won't let it be).
要重新分区SSD,必须先清除设备上的现有分区结构。当然,这将擦除设备上的所有数据。或许最简单的方法是,在阵列停止时,识别要清除的设备,并使用'blkdiscard'命令:
blkdiscard /dev/xxx # 例如 /dev/sdb 或 /dev/nvme0n1 等
警告:请确保您键入了正确的设备标识符,因为设备上的 所有数据将丢失!
在下次阵列启动时,设备将显示为未格式化,因为现在没有分区结构,Unraid OS 将创建它。
- 注意:如果您想要重新分区基于SSD的缓存磁盘/池并保留数据,请考虑在Unraid社区论坛上发帖,以获得对于您特定配置的帮助。同时参考在预发布版板块的这篇帖子。
SMART 处理和存储阈值警告
有一个名为config/smart-one.cfg的配置文件,其中存储了与SMART相关的信息,例如,提供给smartctl的控制器类型用于获取SMART信息。从这个版本开始,这些配置设置的处理方式有所不同。
在SMART配置的情况下,设置是按照设备ID保存的,而不是按槽位ID。这允许我们为未分配的设备管理SMART。它还允许SMART配置“跟随设备”,无论其被分配到哪个槽位。然而,这意味着您必须手动为所有与默认不同的设备重新配置SMART设置。
The volume warning and critical space threshold settings have been moved
out of this configuration file and instead are saved now in
config/disk.cfg (for the Unraid array) and in the pool configuration
files for each pool. The implication is that you must manually
reconfigure these settings for all volumes which vary from default.
升级后,您可能会收到通知,例如:注意 [TOWER] - 磁盘 1 返回到正常利用水平。如上所述,您所有的SMART配置设置均已重置为默认值。访问设置 -> 磁盘设置查看默认值,并在主页 -> 磁盘 X -> 设置上覆盖个别磁盘。
更好的模块/第三方驱动支持
请记住,我们将Linux模块和固件分发在独立的squashfs文件中,并在/lib/modules和/lib/firmware上以只读方式挂载。我们现在在每个挂载点上设置一个overlayfs,使得能够使用插件系统安装第三方模块,前提是这些模块针对当前运行的内核版本构建。此外,我们在USB闪存启动设备上定义了一个新目录config/modprobe.d,其内容在引导序列中的早期阶段复制到/etc/modprobe.d,在Linux内核加载任何模块之前。
这种技术用于安装 Nvidia 驱动程序(请参阅下文),社区开发人员也可使用它来提供一种更简便的方法来添加不包括在基本 Unraid OS 中的模块:无须构建自定义 bzimage、bzmodules、bzfirmware 和 bzroot 文件!
向模块传递参数
config/modprobe.d 中的 conf 文件可以用来指定选项并向模块传递参数。
举个例子:目前,我们没有UI支持指定哪个网络接口应该"主"用于bond;绑定驱动程序只是默认选择第一个成员。在某些配置中,可能需要指定一个明确的首选接口,例如,如果您有一个包含1Gbit / s(eth0)和10Gbit / sec(eth1)接口的bond。
由于设置绑定涉及加载绑定内核模块,您可以通过这种方法指定哪个接口设置为主接口:
在闪存上创建一个文件:config/modprobe.d/bonding.conf,其中包含这一行,然后重启:
options bonding primary=eth1
重启后,您可以通过键入此命令来检查它是否有效:
cat /proc/net/bonding/bond0
您应该可以看到选择的接口显示为 "主要从属设备"。
Nvidia 驱动程序
创建挂载在 /lib/modules 和 /lib/firmware 上的 squashfs 叠加层的目的是提供一个集成第三方驱动程序到 Unraid OS 的机制而无需定制 bz* 文件构建。最受欢迎的第三方驱动之一是 Unraid OS 所需的 Nvidia 的 GPU Linux 驱动程序。此驱动程序是 Docker 容器中转码能力所需的。作为 Unraid OS 插件提供此驱动程序需要设置开发环境、编译驱动程序和工具,然后解压 bzmodules,添加驱动程序,创建新的 bzmodules,最后替换到 USB 闪存根目录。这项工作由社区成员 [@chbmb](https://forums.unraid.net/profile/6219-chbmb/)、\[@bass_rock\](https://forums.unraid.net/profile/78406-bass_rock/) 和其他人完成。在他们的基础上,成员 [@ich777](https://forums.unraid.net/profile/72388-ich777/) 我们现在创建了与每个新的 Unraid OS 版本对应的独立 Nvidia 驱动程序包,但该包不直接包含在基本 bz* 分发版本中。
可以在此处下载描述支持每个内核版本的驱动程序版本的 JSON 文件:
https://s3.amazonaws.com/dnld.lime-technology.com/drivers/releases.json
每个驱动程序包包括Nvidia Linux GPU驱动程序和一组容器工具。容器工具包括:
nvidia-container-runtime
nvidia-container-toolkit
libnvidia-container
这些工具有助于在Docker容器中实现加速转码。感谢社区成员@ich777的帮助和提供这些工具。@ich777还提供了一个方便的插件,方便安装正确的驱动程序。
The inclusion of third-party modules into Unraid OS using the plugin system is still a work-in-progress. For example, another candidate would be to replace the Linux in-tree Intel ethernet drivers with Intel's custom Linux drivers.
Docker
现在可以为相同类型的多个容器选择不同的图标。此更改需要重新下载所有已安装的docker应用程序的图标。初次加载仪表板或Docker选项卡时可能会有延迟,这是预料之中的,直到容器显示出来。
我们还做出了一些更改以增加为Docker引擎分配存储的灵活性。这可以通过设置/ Docker设置/ Docker数据根设置来配置。这让您可以选择如何保留Docker永久状态(图像层):
- 在btrfs格式化的vdisk中,通过loopback挂载到/var/lib/docker。在这种情况下,图像文件的名称必须是'docker.img'。
- 在xfs格式化 的vdisk中,通过loopback挂载到/var/lib/docker。在这种情况下,图像文件的名称必须是'docker-xfs.img'。
- 在指定的目录中,通过bind挂载到/var/lib/docker。此外,该目录所在的文件系统必须是btrfs或xfs。
Docker 将在 btrfs 格式化的 vdisk/目录中使用 "btrfs" 存储驱动程序,或在 xfs 格式化的 vdisk/目录中使用 "overlay2" 存储驱动程序。
实现如下:首先,rc.docker将检测挂载在/var/lib/docker的文件系统类型。我们现在支持btrfs或xfs,并相应地设置docker存储驱动程序。
接下来,mount_image修改以支持通过环回文件格式化的文件,格式可以是btrfs或xfs,具体取决于环回文件名的后缀。例如,文件名以.img结尾,如docker.img,然后我们使用mkfs.btrfs。如果文件名以-xfs.img结尾,如docker-xfs.img,则我们使用mkfs.xfs。
此外,我们添加了将目录bind挂载的能力,而不是使用环回。如果文件名没有以.img结尾,那么代码假定这是一个目录的名称(可能在共享上)绑定到/var/lib/docker。例如,如果是/mnt/user/system/docker/docker,那么我们首先创建,在需要时,在用户分享的目录/mnt/user/system/docker/docker。如果该路径位于用户共享上,我们首先解除引用该路径以获得磁盘路径,然后绑定挂载到/var/lib/docker。例如,如果/mnt/user/system/docker/docker位于“disk1”上,我们将绑定挂载/mnt/disk1/system/docker/docker。注意:共享应为仅缓存或无缓存,以便“搬运工”不会试图移动目录,但脚本不检查此点。