TrueNAS
安装过程 - 安装前必看
将TrueNAS的镜像上传到local(pve)
存储上,然后配置相关虚拟机设置,直接开机安装,先不用管机械硬盘,一会儿再设置。
硬盘给8G就够了,不用给多;CPU给两个核即可;内存得8G起步,即8192MB;网络默认。
汉化在左侧的System->General
,还得选择对应的时区才行,参考一下直通SATA控制器直通一下SATA控制器后,接下来给TrueNAS添加SATA控制器直通启动即可。
完成后打个快照,随后添加一块8G的SSD磁盘,作为系统数据集,否则TrueNAS会默认以第一个建立的池为系统数据集,导致大量读写,影响磁盘速度寿命。
清理NFS3 无效会话
由于NFSv3是无状态的,因此只要客户端连接后,TrueNAS就会记录该客户端的所有的信息,在PVE中,可能随时创建并销毁虚拟机的情况下,这里的NFS Session就会显得特别多,需要手动删除。
从源码中看TrueNAS Scale的数据位于/var/db/system
,而NFSv3的记录是在nfs/rmtab
中,所以完整路径就是:/var/db/system/nfs/rmtab
.
直接编辑删除不必要的即可,全删也可以,在客户端连接时会自动再次记录。
如果支持最好使用NFSv4,尽量避免使用NFSv3.
NFSv4挂载
在系统 - 服务
中,编辑NFS共享,确保同时启用了NFSv3和NFSv4,域名可配可不配,取消勾选Kerberos认证选项:
配置完成后,挂载即可;挂载过程可见配置NFSv4挂载
ZFS加密数据集
加密数据集只需要在默认的基础上取消无加密即可,注意一定要使用密码,不要使用生成密钥:
使用生成密钥虽然也能加密数据集,但是不支持主动锁定和解锁。
使用密码可以主动解锁和锁定:
ZFS快照任务
注意划分的数据集就是一个挂载点,每个挂载点之间是相互独立的,如果懒可以在顶级的存储池设置快照任务,但是务必勾选递归,否则相当于一直在进行空快照任务:
最好还是对应每个数据集进行手动设置快照任务。
快照任务设定在每日22点对数据集进行快照。
建议勾选允许创建空快照,这样即使数据集在没有发生变更的时候也可以拍快照;方便按照时间段进行数据恢复回滚。
ZFS快照恢复
注意不是回滚,回滚简言之就是一键恢复支某个时间节点的数据集状态了,该操作没什么好记录的;这里的恢复是指,如果误删除某些文件需要恢复,但是又不想将整个数据集完整克隆出来时进行的操作。
在快照的具体页面里,TrueNAS不提供浏览快照文件的选项:
所选择的操作只有上面的克隆到新数据集、回滚、删除三个选项,如果我们只想恢复一个文件,使用UI显然是比较麻烦的。
最好的解决办法是通过.zfs
文件系统的快照挂载点(只读)去恢复,例如我这里的Personal Data/Work
的快照,则进入数据集的挂载点/mnt/Personal Data/Work
,然后再进入.zfs
:
如图,这样就可以进入到某一次快照的具体文件系统了,然后找到误删除的文件,拷贝出来即可。
新版S.M.A.R.T服务唤醒休眠磁盘Bug解决
这个问题暂时不知道在哪个版本后出现的,不过在目前使用的版本确实有这个问题;具体表现为磁盘被三十分钟唤醒一次,根据/var/log/syslog
可以发现实际是被smartd
服务唤醒的,主要操作是获取温度。
深入源代码查看:
def get_smartd_config(disk):
args = shlex.join(disk["smartctl_args"])
critical = disk['smart_critical'] if disk['disk_critical'] is None else disk['disk_critical']
difference = disk['smart_difference'] if disk['disk_difference'] is None else disk['disk_difference']
informational = disk['smart_informational'] if disk['disk_informational'] is None else disk['disk_informational']
config = f"{args} -n {disk['smart_powermode']} -W {difference}," \
f"{informational},{critical}"
config += " -m root -M exec /usr/local/libexec/smart_alert.py"
if disk.get('smarttest_type'):
config += f"\\\n-s {disk['smarttest_type']}/" + get_smartd_schedule(disk) + "\\\n"
return config
这里发现取了smart_powermode
的值,这个实际上是S.M.A.R.T
服务设置里的Power Mode,从这里可以知道,这里实际上组装了smartctl
的参数,-n
就是Power Mode,查看具体的参数说明:
-n MODE[,STATUS[,STATUS2]], --nocheck=MODE[,STATUS[,STATUS2]] (ATA, SCSI)
No check if: never, sleep, standby, idle (see man page)
说的很明白了,这里的-n
是在某种情况下不进行SMART检查,也就是说,将这里从Never
设置Standby
,那么磁盘休眠时就不会触发SMART检查了。
修改后再次查看日志,可以看到:
Jan 11 23:21:25 truenas smartd[2661]: Device: /dev/sdc [SAT], is in STANDBY mode, suspending checks
磁盘位于休眠状态,停止检查,说明这个解决方案是正确的。
在Windows 11中挂载SMB失败
用户名的问题,新版Win11不能直接输入用户名,用机器名\用户
这样的用户名就可以了:
注意这里的NetBIOS Name是TRUENAS,那么机器名就是TRUENAS,用TRUENAS\evalexp
登录即可。
无法使用apt
执行下面的命令后即可安装:
sudo install-dev-tools
注意:可能造成系统不稳定,除开安装qemu-guest-agent,不应该使用这个安装任何软件。这本身是通过打开开发者模式进行的,对于NAS的稳定性会造成一定影响。
清理数据集
注意如果没有按照规定安装系统,此时会出现一个问题——系统使用了机械磁盘作为数据存储位置也就是在根数据集下会有.system的数据集。
在UI中无法看到这个数据集的,需要自行删除。
譬如Personal Data/.system
数据集,这个数据集即便迁移了也还会留在磁盘上,为了不膈应自己,决定将其删除:
sudo su root # 切换root权限
zfs list
# 输出
NAME USED AVAIL REFER MOUNTPOINT
Personal Data/.system 9.07M 718G 696K legacy
Personal Data/.system/configs-ae32c386e13840b2bf9c0083275e7941 96K 718G 96K legacy
Personal Data/.system/cores 96K 1024M 96K legacy
Personal Data/.system/netdata-ae32c386e13840b2bf9c0083275e7941 7.89M 718G 7.89M legacy
Personal Data/.system/nfs 128K 718G 128K legacy
Personal Data/.system/samba4 192K 718G 192K legacy
可以看到这里的.system
下有非常多的数据集,接下来删除.system
数据集,递归删除子集:
zfs destroy -r "Personal Data/.system"
此时再列列表,应该就看不到这个数据集了。
FnOS服务备份
在FnOS中的服务,考虑到对机械硬盘的频繁唤醒,将服务都架设到了FnOS的固态上,数据自然也都存在了FnOS的固态上了。
然而有些数据还是比较宝贵,还是及时备份会比较好。
添加SSH连接
首先导出FnOS的SSH Key和密钥,然后在TrueNAS中添加它:
进入用户凭据→备份凭据→SSH密钥对,将私钥粘贴进去:
注意公钥可填可不填,公钥可以从私钥自动生成。
进入用户凭据→备份凭据→SSH连接,新建一个连接:
注意这里填完信息后,点一下发现远程主机密钥,否则可能由于没有接受远程主机密钥导致失败。
单类型数据备份
单个Docker容器且数据以持久化到当前目录。
以Gitea为例子,进入数据保护→同步任务,添加一个任务:
模式选择ssh,使用钥匙串,选择刚刚新建的连接,然后填入路径,通过拉取同步即可。
Gitea是sqlite3数据库,一起被备份了
其他的服务均可类似备份。
多类型数据备份
以Navidrome为例子,首先Navidrome的音乐被归类为Media,备份至Big Storage的Media Dataset,而Docker配置则应该备份至Personal Data的个人数据集中。
需要创建两个任务,第一个备份媒体文件:
第二个备份docker配置文件:
注意这里需要剔除掉媒体资源,也就Music文件夹,所以需要在附加参数中添加:--exclude "Music"
。
Nextcloud数据备份
由于Nextcloud提供WebDav协议的支持,所以同步起来非常方便。
进入用户凭据→备份凭据→云凭据,添加一个WebDav,类型选择Nextcloud:
注意地址后加:/remote.php/dav/files/USERNAME/
;验证成功后即可。
回到数据保护,添加一个云同步任务:
模式选择同步、方向拉取;填好基础信息,然后看下面的高级:
勾选遵循符号连接、传输改为高带宽;后脚本填入:
#!/bin/sh
chown -R evalexp:evalexp "/mnt/Personal Data/Evalexp/Backup/TrueNAS Auto Backup/Nextcloud(Only File)"
注意OCIS要替换为
chown -R evalexp:evalexp "/mnt/Personal Data/Evalexp/Backup/TrueNAS Auto Backup/OCIS(Only Files)"
之所以需要这个后脚本,是因为云同步任务不像同步任务一样可以选择本地用户,权限问题需要自行处理。
完成后点击立即开始即可开始从Nextcloud拉取文件同步了。
切换为OCIS的话,需遵从OCIS的webdav连接地址;当然也可以使用
/dav/files/USERNAME/
来进行同步,不过这样性能会稍微弱一丢丢,因为需要将username映射到Dav Space的UUID上,有额外的数据库查询浪费。