Lazy loaded image
TrueNAS SCALE 存储管理
Words 2646Read Time 7 min
2025-9-29
2025-11-10
date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Nov 10, 2025 10:02 PM
是否已更新
orginal_page
是否推荐
 
创建存储池(Pool)并添加数据集(dataset)
Zvol 与 dataset 的区别
  • 数据集(dataset)是数据存储池中的文件系统
    • 数据集可以包含文件、目录(子数据集),并具有单独的权限或标志
    • 数据集也可以使用池创建的加密或单独的加密配置进行加密
  • ZFS卷(Zvol)是代表块设备或虚拟磁盘驱动器的数据集
    • Truenas需要 Zvol 配置ISCSI共享
    • 添加虚拟机时会创建用于存储的 Zvol
(侧边栏)存储→创建池
  • 根据自身硬盘情况选择对应 raid-z 存储模式
  • (可选)配置用于缓存、日志(log)、备份、元数据查询、去重等功能的磁盘设备
(侧边栏)数据集→添加数据集或 Zvol
  • 选择不同的存储池作为数据集根目录,输入数据集名称
    • 系统会自动在对应目录下创建具有对应数据集名称的文件目录
    • (可选)配置是否同步、是否加密、压缩级别、ACL 权限等
添加用于 PVE 挂载的共享 NFS 数据集
创建 NFS 共享角色 nfs_pve
(侧边栏)用户凭证→用户→添加
  • 用户名 nfs_pve
  • 勾选禁用密码
    • NFS 原生通过 IP 地址/网络段限制和 UID/GID 映射来限制访问
  • 勾选创建新的主要组
  • 主目录改为 /nonexistent
    • 取消勾选创建用户主目录
  • 取消勾选 SMB 用户
创建 NFS 共享
(侧边栏)共享→UNIX(NFS)共享→添加
  • 选择某个存储池,创建数据集
  • 点击高级选项,显示隐藏的访问配置
    • 映射用户和映射组改为此前创建的 nfs_pve
选择开放共享的网段或主机,都为空则是全部开放
  • 网络选择本地网段
    • 如 192.168.1.0/24 代表对 192.168.1.1 到 192.168.1.255 开放共享
  • 主机则是特定 ip 地址或者主机名
    • 特定 ip 地址如 192.168.1.111
      • 无需子网掩码
    • 特定主机名如 pve.example.com
(侧边栏)数据集→修改数据集配置及权限
  • 修改配额为所需容量
  • 修改权限
    • 修改所有者及所有组为此前创建的 nfs_pve
    • 勾选递归应用权限
PVE 上添加 NFS 共享
  • (侧边栏)数据中心→存储→添加→NFS
    • ID 即为该存储记录的名称
    • 主机即为 Truenas 服务器的 ip 地址或主机名
    • Export 就是 nfs 共享路径
      • 如果 Export 没内容就是共享的网段或主机设置错误
      • 可以通过 showmount -e <truenas.ip> 确认
  • 挂载后在 /mnt/pve/<nfs_id> 可以找到
TrueNAS 配置 SMB 服务
(侧边栏)数据集→添加数据集,选择数据池并创建用于放置 SMB 共享文件的数据集
  • ACL 类型选择 SMB/NFSv4
(侧边栏)用户凭证→本地组/本地用户,分别创建 SMB 服务的群组和用户
  • 群组需要勾选 Samba 认证,其余默认
  • 用户设置刚创建的 SMB 群组为主用户组,勾选 Samba 认证,其余默认
    • 主目录可以用 /home/<usrname>
(侧边栏)系统设置→服务,启用 SMB 服务
  • 默认设置无需修改,启用即可
(侧边栏)共享→Windows (SMB) Shares,添加此前设置的数据集为 SMB 服务目录
  • 点击添加按钮,路径选择刚才创建的 SMB 数据集路径
  • 配置 ACL 权限,添加项目并设置刚才创建的 SMB 群组和用户为所有者,勾选递归应用并保存
客户端连接 SMB 共享文件夹
  • 打开我的电脑,右键单击→添加一个网络位置(\\<IP>\<数据集目录名>),输入用户名和密码即可
Windows 客户端修改已保存的 SMB 密码
  • win键+R 调出运行,输入 control panel 调出控制面板
  • 选择凭据管理器,选择 Windows 凭据
  • 根据对应 SMB 连接地址及用户名,修改对应凭据密码即可
TrueNAS 配置 iscsi 服务
参考资料
创建 iscsi 群组 iscsi_group
  • 只需要对应群组 id
(侧边栏)共享→块 (iSCSI) 共享,点击右上角进入 /ui/sharing/iscsi/targets 页面
  • 点击授权访问,点击添加
  • 群组ID 为之前创建的 GID
  • 发现认证为 CHAP
  • 用户为远程系统的用户凭据,后续在远程服务器上填写
    • 用户名 iscsi_share
    • 密钥即 password
(侧边栏)共享→块 (iSCSI) 共享,点击向导
  • 目标新建
  • 区块
    • 名称要求小写字母,选择 iscsi-share
    • 区块类型选择设备
    • 池/数据库新建数据集,名称为 iscsi_dataset
    • 大小 50GiB
    • 共享平台 VMWare
  • 协议选项
    • 门户新建
      • IP 地址 0.0.0.0 以允许所有主机发现
    • 启动器留空以允许所有启动程序主机名
      • 多个主机名按 Enter 分割
      • 如果需要限制可以后续点击修改
    • 身份验证方法选择 CHAP,组号选择之前创建的 GID
debian 挂载 iscsi 磁盘
  • 使用管理员账户挂载
  • apt install -y open-iscsi
编辑启动器名称和 CHAP 认证
vim /etc/iscsi/initiatorname.iscsi
  • 可选,修改启动器名称,如果限制了启动器
  • 修改后需要重启
    • systemctl restart iscsid
vim /etc/iscsi/iscsid.conf
  • 之前创建的用户凭据
  • 全局设置
如果需要手动设置 node CHAP 认证
  • iscsiadm -m node --targetname iqn.2005-10.org.freenas.ctl:<iscsi_name> -p <truenas_ip> --op new
  • iscsiadm -m node --targetname iqn.2005-10.org.freenas.ctl:<iscsi_name> -p <truenas_ip> --op update -n node.session.auth.authmethod -v CHAP
  • iscsiadm -m node --targetname iqn.2005-10.org.freenas.ctl:<iscsi_name> -p <truenas_ip> --op update -n node.session.auth.username -v iscsi_share
  • iscsiadm -m node --targetname iqn.2005-10.org.freenas.ctl:<iscsi_name> -p <truenas_ip> --op update -n node.session.auth.password -v <password>
发现 iscsi 目标
  • 需要服务器允许 SendTargets 自动发现
  • iscsiadm -m discovery -t sendtargets -p <truenas_ip>
    • 发现后会创建对应 iscsi node 记录设置
登录 iscsi 设备
  • iscsiadm --m node --targetname iqn.2005-10.org.freenas.ctl:<iscsi_name> -p <truenas_ip> --op show
    • 查看当前 iscsi node 记录设置
  • iscsiadm --m node --targetname iqn.2005-10.org.freenas.ctl:<iscsi_name> -p <truenas_ip> --login
  • iscsiadm -m session
    • 检查是否登录成功
  • lsblk
    • 查看是否新增 blk 设备,一般为 sd 开头
      • 假设设备标识符为 sdb
  • iscsiadm --mode node --targetname iqn.2005-10.org.freenas.ctl:<iscsi_name> -p <truenas_ip> --logout
    • 登出
    • 全部登出
      • iscsiadm --mode node --logoutall=all
格式化与挂载
  • mkfs.ext4 /dev/sdb
    • 首次使用的话需要格式化,格式化为 ext4 格式
  • mkdir -p /mnt/iscsi-share
  • mount /dev/sdb /mnt/iscsi-share
  • df -h | grep sdb
    • 检查挂载
设置开机自动登录 iscsi 设备和挂载
  • ls -al /var/lib/iscsi/nodes/<iqn_name>/<ip>/default
    • 对应 iscsi node 设置
    • 如果不存在则执行 --op new
      • iscsiadm -m node --targetname iqn.2005-10.org.freenas.ctl:<iscsi_name> -p <truenas_ip> --op new
  • iscsiadm -m node --targetname iqn.2005-10.org.freenas.ctl:<iscsi_name> -p <truenas_ip> --op update -n node.startup -v automatic
    • 更新 node.startupautomatic
  • systemctl enable iscsid
vim /etc/fstab
  • blkid /dev/sdb
    • 查看 UUID
  • 选项
    • _netdev 标识为网络设备
    • noatime 不记录访问时间
TrueNAS 配置 Garage 轻量级服务器提供 S3 存储
  • 较 minio 而言要轻量些
一些 Garage 配置项样例
  • Garage 自身的数据存放在 metadata
  • 创建数据集用于存放 S3 数据
安装 Garage 应用
  • S3 Region 默认为 garage
生成 token 并填入
  • openssl rand -base64 32
    • 填入到 admin token
    • 用于访问默认暴露于 30190 端口的 admin api
  • openssl rand -hex 32
    • 填入到 rpc secret
    • 用于访问 /metrics 端点
  • webui admin 账户密码自行生成
  • 可根据需要更改端口
data 存放到提前创建的主机数据集
  • 启用 ACL, 条目如下
    • Entry is for a USER
    • User 填入默认的 UID 568
    • Full control access
  • ACL 选项勾选 Force ACL
  • 其他数据文件夹使用 ixVolume 默认设置即可
  • 硬件配置 单核, 1G 即可
WebUI 只需访问 http://<truenas>:30186 即可
  • 默认端口 30186
  • 登入后在 Cluster 编辑 node 后 assign 即可启用对应 node 作为存储后端
  • 随后可以在 Buckets 创建存储桶, 在 Keys 部署访问密钥
    • 密钥需要在 permissions 中进行 allow 才能使用
命令行访问 s3 对象存储
s5cmd 为例
下载并安装二进制工具 s5cmd
  • tar zxf s5cmd_2.3.0_Linux-64bit.tar.gz
  • install s5cmd -D -t /usr/local/bin/
vim ~/.zshrc
  • 记得重新加载
  • s3 api 默认端口 30188
  • s5cmd --endpoint-url=$AWS_ENDPOINT ls
以 minio client 为例
下载并安装二进制工具 mc
  • curl -fsSL -o /tmp/mc "https://dl.min.io/client/mc/release/linux-amd64/mc"
  • chmod +x /tmp/mc
  • mv /tmp/mc /usr/bin/
  • mc --autocompletion
  • source ~/.zshrc
    • 目前补全在 zsh 上无效
vim ~/.mc/config.json
  • mc ls local
    • 显示 bucket 存储桶
web api 访问 s3 对象存储
  • curl -H 'Authorization: Bearer <admin_token>' http://<truenas_ip>:30190/v2/GetClusterStatus | jq
  • curl -H 'Authorization: Bearer <rpc_secret>' http://<truenas_ip>:30190/metrics
  • 后续可以结合 SFTPGo 或 Seafile 作为后端使用
使用 admin api 管理 garage
  • 没有提供终端,需要通过 admin api 管理
  • truenas garage admin 端口映射默认是 3903:30190
  • 配置时有 admin_token 的配置项,通过 header 添加至 bearer auth 可以认证
    • echo -n "admin token: " && read -s admin_token; echo
    • curl -H "Authorization: Bearer $admin_token" http://<truenas_hostip>:30190/v2/GetNodeInfo?node=*
garage 垃圾回收
元数据表异常分为三种情况
  • 删除对象后,底层版本可能仍然被保留
  • 删除对象版本后,底层数据块的引用可能仍然存在
  • 块引用计数与实际引用数量不一致
分别可以通过以下指令来修复
  • garage repair versions
    • 检查所有版本是否属于未删除的对象,并清除任何孤立版本
  • garage repair block-refs
    • 检查所有块引用是否属于未删除的对象版本,并清除任何孤立的块引用
    • 这部分执行垃圾回收
  • garage repair block-rc
    • 检查块的引用计数器是否与块引用表中未删除条目的实际数量同步
admin api 样例
  • curl -H "Authorization: Bearer $admin_token" http://<truenas_hostip>:30190/v2/GetNodeInfo?node=*
    • 获取 node id
  • S3_NODE_ID=<node-id>
  • curl -H "Authorization: Bearer $admin_token" \ -H "Content-Type: application/json" \ -d '{"repairType":"blockRefs"}' \ http://<truenas_hostip>:30190/v2/LaunchRepairOperation?node=$S3_NODE_ID
    • 其他 repairType 还有 tables, blocks, versions, blockRc
    • response 样例
 
上一篇
SQL OVER语句与窗口函数
下一篇
OpenSSH 工具和 SSH 服务器配置

Comments
Loading...