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.startup为automatic
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; echocurl -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 样例
- Author:白鸟3
- URL:https://blog.kun2peng.top/operation/truenas_scale_storage
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
