UNRAID学习笔记
2023-07-06 15:43:28 23 举报
AI智能生成
UNRAID学习笔记
作者其他创作
大纲/内容
Boot Device启动盘(U盘)
Unraid系统安装
准备一个U盘<br>Unraid 的安装方式是通过U盘进行安装,且安装完成后,U盘将作为启动设备引导 Unraid 启动。需要注意,日后 Unraid 的激活需要U盘有唯一的 GUID (Globally Unique Identifier) 全局唯一标识符,而一些杂牌U盘很可能使用相同的 GUID 或者 GUID 是一串无意义的数字,这会导致系统无法激活。Unraid 官方推荐使用 2GB 以上大小的高质量品牌U盘,如 PNY, Lexar, SanDisk, Samsung, 同时在官方指南中提到不建议使用 USB3.0 的U盘。
制作启动盘<br>有两种方式制作 Unraid 启动盘<br>第一种使用官方提供的 USB Creator 工具<br>第二种需要手动下载系统镜像写入U盘。这里推荐使用官方的工具来制作启动盘。<br>
(1) 使用 USB Flash Creator 工具<br>下载 USB Flash Creator,下载地址:Unraid | Download Unraid Server OS<br>插入准备好的U盘<br>运行 USB Flash Creator,可以在软件界面选择安装的系统版本号,这里推荐使用 Stable 稳定版。<br>点击 Customize,可以自定义服务器的名称,IP地址。这里也可以先不设置。<br>是否 Allow UEFI Boot 需要根据个人的主板进行选择。<br>选择正确的U盘后,点击 Write 按钮,工具会自动下载系统镜像并写入。<br>写入完成后,关闭软件,拔出U盘。
(2) 手动制作启动盘<br>插入准备好的U盘,将其格式化成 FAT 文件系统。修改U盘卷标为 "UNRAID" 注意要求大写。<br>按照(1)中的方法到官方网站下载系统镜像,并解压压缩包内的所有文件到U盘根目录。<br>在U盘根目录的文件中找到 make_bootable 脚本,右击,选择以管理员身份运行。<br>耐心等待,直到出现 complete 提示后,制作完成,可以拔出U盘。
初始化 Unraid<br>在这里小刻使用一台组装好的电脑来安装 Unraid 系统,并作为 NAS 来使用。这台电脑需要至少安装一块硬盘用来初始化 Unraid 序列。<br>第一次初始化需要连上显示器,插入制作完成的启动U盘,插入网线、键鼠,开机。<br>进入 BIOS 界面修改启动设备为 USB 设备。保存并退出。<br>重启后不出意外的话会显示 Unraid 启动菜单。选择第一项 Unraid OS,启动系统。<br>等待系统载入完成后,会提示 IPv4 地址用于登录系统的管理后台。<br>至此 Unraid 初始化已经完成,记录下管理地址后,就可以拔掉显示器,使用局域网内的其他电脑来远程管理 Unraid 系统了。基本上所有的系统设置都可以通过 Unraid 网页端的界面来进行,是不需要外接显示器的。需要注意 Unraid 通过U盘引导,所以启动U盘可不能拔出来。
初步了解系统
Array Devices阵列盘(序列)<br>磁盘阵列,真正存储数据的介质<br>最多支持 24 块盘总容量为所有盘的大小总和<br>
关于 Array磁盘阵列 注意点<br>默认的分区文件系统是 xfs,如果硬盘本身就是 xfs 格式可以保留原来的数据加入 Array,不需要格式化,方便做硬盘数据迁移<br>每个数据盘都会被挂载为 /mnt/disk*,可以单独读取每个硬盘的数据,拔下来也可以直接插到其他 Linux 系统上访问读写<br>从上层文件管理来看,一个文件会被写入哪个盘,会有对应的配置规则,如无特殊需求,按照 unRAID 默认的策略即可(High-water 策略)<br>unRAID 的校验盘实际上等同软 raid,如果你要启用校验盘,一定要做好容量规划,后面升级校验盘的成本非常高,需要将全部硬盘的数据都读一遍<br>支持硬盘无访问自动休眠(SPINDOWN),且其存取机制也比较适配,对比 RAID 在存取速度上可能没优势,但是效率高、省电,不需要每读一个文件都所有磁盘都启动
High-water<br>系统将选择当前具有最小可用空间但仍高于某个最小值(称为 “高水位” 标记)的磁盘。其优点是,在短时间内写入一批文件,大多数时候只需要启用一个数据磁盘即可。更多说明见 unRAID Manual - Allocation method
unRAID Manual - Allocation method
unRAID 大部分功能都是基于存储阵列的,比如:<br>SHARE,文件共享<br>DOCKER,容器管理<br>VMS,虚拟机管理
share文件共享
默认创建初始目录
system 存放系统数据文件 系统默认存放<br>appdata 存储应用数据文件 系统默认存放<br>domains 存储虚拟机实例数据 建议存放,用户可选择<br>isos 存储系统镜像文件等 建议存放,用户可选择
共享场景配置
场景一<br>作为影音目录,希望局域网内所有人可见且不需要登录就可以访问来看电影等<br>但是必须登录之后,才允许写入新文件或删除已有的电影,类似于影音管理员角色<br>参数 推荐设置<br>Export(导出) Yes[是]<br>Security(安全) Security[安全]<br>点击 APPLY 之后,就可以选择控制哪些用户能够具体读写权限<br>除了指定拥有 Write/Read 读写权限的用户,其他用户(包括匿名用户)都是只读
场景二<br>作为工作目录,希望局域网内所有人可见,但必须登录后才能访问(禁止匿名)<br>同时,普通用户登录后只读,只有特定用用户菜可以读写<br>参数 推荐设置<br>Export(导出) Yes(是)<br>Security(安全) Private(私有)<br>点击 APPLY 之后,就可以选择哪些用户不允许访问,哪些用户可以读写、只读等
场景三<br>作为隐私目录,不希望被局域网内的用户看到有这个共享,<br>禁止匿名,且普通用户且必须登录后才能访问进行读写<br>参数 推荐设置<br>Export(导出) Yes(Hide)[是(隐藏)]<br>Security(安全) Private[私有]
大小写问题<br>unRAID 是基于 Linux 定制的,对文件名是大小写敏感的<br>medias、MEDIAS、Medias<br>这三种访问地址都能够在 Windows 上访问到对应的 Medias 用户共享目录<br>但是在 unRAID 上进行操作的时候,则必须使用 Medias 来定位该目录<br>如果使用 MEDIAS、medias,则会提示目录不存在
新建共享
Use cache pool<br>(对新文件/目录)使用缓存池<br>
设置该共享的缓存池机制,只有在序列中有缓存池时才会生效,上文已经介绍过 Unraid 缓存的四种机制,对于存放电影这类数据,文件体积大,不经常修改,并不需要使用缓存池,所以设置为 No 即可。如果创建的是一个需要经常读写的共享,比如存放文档类数据,可以设置为 Yes
Select cache pool<br>选择缓存池<br>
当 Use cache pool (对新文件/目录)使用缓存池 启用的时候才会生效,这个选项是用来设置该共享使用哪个缓存池的。小刻的序列里只有一个缓存池,如果有多个缓存池的话,可以在这里进行指定。
Enable Copy-on-write<br>启用写入时复制<br>
该选项只有在磁盘使用 btrfs 文件系统时才有效,而为了兼容性数据盘一般使用 xfs 文件系统。<br>此设置对非 btrfs 文件系统无效。<br>
Included or excluded<br>包含与排除
该选项只有在序列中有多个数据盘时才生效,它可以设置此共享使用哪几个数据盘的空间,或是不使用哪几个数据盘的空间。只需要设置其中一个即可。
Allocation method<br>分配方法<br>
有三个选项: High Water、Most Free(大部分可用)、Fill-Up(填满)。<br>其中 Fill-Up 是持续向一个硬盘写入直到填满,再向另一个磁盘写入;<br>Most Free 是每次写入都向剩余空间最多的那个磁盘写入;<br>High Water 是一种均匀各个磁盘剩余空间的写入方式,它基于序列中容量最大的磁盘,使用二分法创建多个“水位线”。<br>举个例子,容量 8TB 硬盘的水位线分别为 4TB, 2TB, 1TB, 512GB...使用 High Water 时,会依次将序列中的每个硬盘写入到剩余 4TB 的空间,然后再依次写入到剩余 2TB,1TB...<br><br>
如图所示,显示了序列中有 8TB, 3TB, 2TB 三个硬盘时,High Water 模式的磁盘写入方式:最开始只会在浅绿色区域进行存储,浅绿色区域存满后,继续在两个深绿色区域进行存储,以此类推。
在以上三种文件分配方法互有优劣,取决于所创建的共享具体要存放的文件类型和使用者的文件管理习惯。
Minimum free space<br>最小剩余空间
设置一个值,当共享所包含某个磁盘剩余容量低于该值时,就不向这个磁盘写入文件了,转而向共享包含的其他磁盘写入,当所有磁盘都无法写入时会报错。这个值一般设置为 0,如果使用者想要为某个磁盘保留一些空间的话,可以根据实际情况进行设置。
Split level<br>拆分级别
根据需要自动拆分任何目录<br>根据需要仅自动拆分顶层目录级别<br>根据需要仅自动拆分前两个目录级别<br>根据需要仅自动拆分前三个目录级别<br>根据需要仅自动拆分前四个目录级别<br>根据需要仅自动拆分前五个目录级别<br>手动-不自动拆分目录
可选 7 个层级,即 level-1 到 level-5,level-any,no。作为使用者可能很困惑这个分割层级是什么意思?有什么作用?官方的指南中对于 Split level 的解释很复杂,其实简单明了的解释是:Unraid 系统为了防止存放在共享的文件过于混乱地分散在各个磁盘而设置的限制。
举个栗子:小刻有两个冰箱(磁盘),冰箱 A 快满了但还没有完全满,冰箱 B 还有很多空间。一天小刻买来一盒蜜饼(文件),想把它们放到冰箱里,如果都放到 A 中,放不下。这时小刻可以选择把一部分蜜饼放进 A 冰箱,剩余的放到 B 里面;另一个选择是把所有蜜饼放到冰箱 B 里。<br><br>小刻的蜜饼是一个很实际的例子,考虑到数据完整性,很明显,小刻会选择第二种。而在 Unraid 中 Split level 就是来做这个选择的。当设置 level-1 (level-top) 时,只有根目录(1级目录)可以被分散在不同的磁盘,其子目录(2级目录)以及目录下的所有文件则必须存储在同一个磁盘上,Unraid 系统不会对 2 级目录进行分割。Split level 的其他几个选项以此类推,其中 level-any 代表数据可以被任意分割在不同磁盘上,no 代表 Unraid 不自动分割数据,而是需要使用者手动去设置,需要涉及命令行的操作,待进阶篇再去讲解。<br><br>Split level 的选择和共享中存放的数据类别有很大的关系,比如,本次创建的是用于存储电影文件的共享 "Movies",那么共享中的文件结构大概是图中这样,Movies 是 1 级目录,每部电影的文件存放在以电影名称命名的文件夹中,是 2 级目录。虽然因为聚合文件系统的关系,用户不需要知道文件存放在哪个磁盘,但实际上用户肯定不希望同一个电影文件夹中的电影文件被分散在不同的磁盘上。这种情况下,将 Split level 选项设置为 level-top(level-1) 就限制了 Unraid 不可以对 2 级以下的目录进行分割,电影文件就老老实实地存放在它自己的文件夹里了。如果对于 Split level 仍有困惑,可以参考官方说明文档:Manual/Shares - Unraid | Docs
Manual/Shares - Unraid | Docs
图示
当创建一个包含多个磁盘的共享目录时,通过聚合文件系统,共享目录下的文件可以跨磁盘存放,那么判断文件应该存放在哪个磁盘就需要 Minimum free space, Allocation method, Split level 这三个选项的设置来决定了。
docker容器管理
数据卷
为了方便管理,unRAID 创建了一个 loopback 文件系统:<br>/mnt/user/system/docker/docker.img
挂载到 /var/lib/docker 也就是 docker 的主路径,保存镜像文件、运行时文件等<br>总大小为 20G,所以在下载大文件时,一般会通过将外部共享目录挂载到容器中作为下载目录,以避免撑爆这个 loop 设备<br>使用的时 btrfs,方便后期进行扩容,同时也可以利用上该文件系统的一些特性,比如快照等<br>通过这种方式,unRAID 将 docker 相关的数据,都存放到这个 docker.img 文件中<br>所以我们可以通过备份这个 img 文件来实现备份 docker 配置,<br>在需要还原的时候,直接通过备份的 img 文件替换掉现有的文件来实现还原
配置目录
指的是 docker 中运行的应用软件的配置,比如 transmission 等<br>众所周知,在启动的容器中进行的文件变动,会随容器销毁而丢失<br>所以 unRAID 是建议将容器运行软件的配置写入挂载到容器中的配置目录以实现持久化:<br>/mnt/user/appdata
VMS,虚拟机管理
KVM隐藏
修改虚拟机参数的features部分<br><features><br> <acpi/><br> <apic/><br> <hyperv><br> <relaxed state='on'/><br> <vapic state='on'/><br> <spinlocks state='on' retries='8191'/><br> <vendor_id state='on' value='anything'/><br> </hyperv><br> <kvm><br> <hidden state='on'/><br> </kvm><br> <vmport state='off'/><br> <ioapic driver='kvm'/><br> </features><br>
Pool Devices缓存盘(cache)<br>一般使用 ssd,实现读写加速<br>支持 1 块或多块盘组成缓存池<br>
缓存盘的工作机制
一、否、是、优先/首选、仅/唯一,四种缓存模式(机制)的注意事项
1、No(否)。<br>不缓存,直接读写阵列中的文件夹,此时搬运功能无效。<br>新数据不使用缓存,直接写入数据盘,不涉及数据转移。<br>
1)、如果想从是改成否,首先运行转运,保证缓存里没有要转移的文件,才可以改成否,否则,没有转出的文件就常驻缓存了,因为你直接改成否,搬运功能失效,是不会帮你把之前缓存里没来及转运的文件自动回写到阵列的!
2)、如果想从优先、仅改成否,首先要改成是,再运行转运,然后才能改成否,道理和上面一样,直接改了否,转运机制失效,就丢在缓存里了。<br>当然,丢在缓存里,不影响你对文件的读写调用,就是看着好不舒服,而且对那些appdate domains system isos特殊文件,系统会报错,此时缓存无法清空,等于缓存丢失了一部分空间。
2、Yes(是)。<br>新数据优先写入缓存,满了则写数据盘,缓存移到数据盘并删除。<br>准确的含义是:文件会最终保存在阵列磁盘,缓存只是中转,如果不手动转运,系统会在设定的时间,对缓存的文件进行回写,回写到指定的阵列硬盘,如果在自动回写前,缓存满了会报错,无法继续工作继续存入,因为此时没有到设置的转运开始时间,缓存满了也不会自动写入磁盘阵列,系统出错将无法工作。<br>
3、Prefer(首选、优先)。<br>新数据优先写入缓存,满了则写数据盘,数据盘移到缓存并删除。<br>优先的含义是,文件只会存在于缓存中,所以你想设置优先,这个文件夹的容量就不能大于缓存盘整体的容量,设置后,这个文件夹就长驻缓存,超过缓存盘容量,多出的部分会存到阵列里。理论上你对这个文件夹的读写都是缓存盘的固态硬盘物理速度上,适合appdate domains system isos,还有一些你要实时编辑的文件。但!此时,除非你是在unraid内部调用(使用内部虚拟机、docker)这些设置了缓存优先的文件,调用速度会好过存在阵列盘上,因为大部分人的阵列盘是普通3.5机械硬盘,内部运行时读写速度没有做缓存的固态快。但是,如果你是通过外部终端共享读写这个文件,那你的速度还是要受限于unraid主机的网卡,交换机,你的终端的网卡。如果是千兆环境的话,那你设置了缓存优先,速度最高也只有120mb的网口实际速度,并不能跑出固态硬盘的读写速度,意义并不大,。结论:没有万兆网卡、光纤连接,对于smb文件共享,这个缓存的优先模式,甚至整个缓存盘机制,都是毫无意义的存在!<br>
4、Only(唯一、仅)。<br>新数据只会写入缓存盘,满了则写失败,不涉及数据转移。<br>和优先的含义一样,不同在于存满缓存以后,会停止工作,不会把多出的文件继续写到阵列磁盘里。<br>注意:选择仅之前,必须先选择成优先,再运行转运,让文件先转运到缓存后,再改成仅;直接从否、是,改成仅,转运机制此时默认关闭了,文件并不会移动到缓存。<br>
!!!基于上述四种缓存机制,大家遇到疑难问题时候,一定看看上面的注意事项,这个缓存的是否逻辑和我们的汉语语义逻辑并不一样!
关于这部分的参数,有一个小小的坑需要注意一下,就是 Prefer 与 Yes 的区别。<br>因为这两个参数值的字面意思与实际效果与我们正常认知可能有点差异:<br>Prefer,实际上是数据会更倾向于呆在缓存盘,只要缓存盘有空闲空间,在 mover 启动时就会把数据盘上的数据往缓存盘上转移<br>Yes,这个才是我们理想中的使用方式,数据写入会使用缓存,但并不完全依赖缓存,并且在启动 mover 时,会把缓存盘上的数据往数据盘上转移,以保证数据的持久存储安全<br>
关于数据转移机制(mover)有几个注意点:<br>mover 其实只是一个脚本,默认是每天凌晨 3:40 执行,支持调整时间以及定制脚本内容<br>如果 mover 启动时,文件正在被读写,则该文件不会被转移,只能等下次(隔天凌晨)<br>如果 mover 启动时,磁盘处于休眠状态,mover 不会主动唤醒磁盘,也就是不会执行数据转移<br>对于缓存盘根目录下以 . 开头的目录,mover 不会对其生效<br>对于缓存盘根目录下的文件,mover 不会对其生效<br>关于缓存盘更详细的介绍,有兴趣的可以翻阅官方文档
二、unraid的缓存盘存在的意义
1、如果你的unraid运行环境在万兆环境,缓存盘是有意义的,可以提高smb的文件共享读写速度。
2、如果你的unraid运行环境在千兆环境,对于smb的共享读写速度,没有实际意义,机械硬盘单盘读写速度完全满足千兆网络带宽。
3、如果你需要用unraid运行docker、虚拟机,那缓存盘是有意义的,效果相当于你把自己的主机从机械硬盘换成了固态硬盘,速度会提高不少,但是这样也不全是优点,毕竟缓存盘的容量有限,如果你设置缓存模式是:优先,如果虚拟机的硬盘设置不是raw,虚拟机存储超过缓存容量,超出部分,按照缓存规则,是有可能写到阵列的机械硬盘中的。而且设置缓存后,再更改不使用缓存,很大概率会出错,有些运行文件,将无法回写到阵列,留在缓存里,那真是不上不下,逼死强迫症。缓存盘同时还要作为阵列共享读写时的临时中转,使用频率高,难免崩坏,所以很多大神都是双缓存盘组成raid1,防止缓存崩坏带走虚拟机和docker。
三、不使用缓存盘,提高虚拟机、docker运行速度的配置
如果你的unraid运行环境是一个千兆网络,你还想运行虚拟机,不使用缓存盘也是可以的,可以在阵列中加入一个2.5固态硬盘,或有两个m2槽位的情况,直接把2.5固态或者1个m2指定为appdate domains system isos文件夹存储盘。<br>指定appdate domains system isos四个文件夹存在2.5固态或者m2就可以让虚拟机、docker运行在固态硬盘的速度上,当然实现这个还是离不开先有一个缓存盘(必须是四个文件夹将来存储的目标固态盘以外的固态!)
第一次启动docke、虚拟机组件,产生的四个文件夹不一定会正好生成在固态上,如果她们生成在机械硬盘上。你可以:<br>1、先停止阵列,设置一个缓存盘。<br>2、再启动后,把四个文件夹缓存机制改成优先,运行搬运,把四个文件夹先拉到缓存里。<br>3、更改四个文件夹缓存机制为是,存储位置选择固态硬盘盘符,再运行搬运,等四个文件夹回些到固态硬盘所在的阵列里,再把缓存机制改成否。<br>4、停止阵列,去掉缓存盘,产生新配置,再启动阵列。<br>这样操作,可以不使用缓存盘,你的虚拟机和docker也可以运行在固态硬盘里,相当于实现了固态硬盘直通给虚拟机和docer,这个固态硬盘除了存放虚拟机、docker,还可以存放一些需要实时读写的文件,这样设置,就不会被难懂的缓存逻辑整晕,也可以享受固态硬盘运行虚拟机和docker的高速。
一些设置实例:
1、appdate domains system isos四个文件夹使用缓存,模式为仅,不想使用缓存,直接改成否,文件夹并没有直接写回指定阵列,而是留在了缓存里,并且系统智能的报错,提示四个文件夹不在设定位置,应对方法,就是从仅先改为是,让这些文件先从缓存回到阵列,然后才可以改成否。
2、按照先设成是,再设置否,把存在缓存里的appdate domains isos都回写到了阵列中,但是sysrem还是固执的留在缓存里,没有回写,我想到也许是docker的设置问题,我就把docker、虚拟机都删了,但system还是待在缓存里,最后,我在smb共享里把system文件里的docker和ill文件夹都删了,这时候又尝试设置是移动system,这次终于成功了,system回写到了阵列里。啥原因我不懂,我猜system里的文件夹,看起来只有20多g,但是当时设置的虚拟硬盘是按需分配,实际是很大,而且反复安装,多个设置,系统认为文件大于要回写的阵列磁盘,所以一直回写失败,回写失败也没有提示,只能能看到system固执的留在缓存里,也许要学会看日志了。
Parity校验盘<br>条件允许下支持坏盘数据找回<br>支持 1-2 块校验盘<br>
校验盘的工作机制
Unassigned Devices未使用设备
收藏
0 条评论
下一页
为你推荐
查看更多