Nextcloud 外部存储

External Storage Support 应用可以把外部存储服务和设备挂载为 Nextcloud 的辅助存储,也可以允许用户挂载自己的外部存储。

启用

该功能由随 Nextcloud 自动安装的内置应用提供,默认关闭。在“应用”中启用即可。

在应用页面启用外部存储

配置

点击个人资料图标,在下拉菜单选择“设置”,然后在左侧“管理”区域选择“外部存储”,进入挂载配置。

**注意**

也可通过 occ 命令配置外部存储,参阅 occ 文档。

从 Add storage 下拉框选择可用后端,创建新挂载。不同后端所需选项不同,在配置字段中填写。

添加存储

每个后端可能支持多种身份验证方式,在 Authentication 下拉框选择。不同后端的机制不同,有些专属于后端,有些较通用,详见外部存储身份验证机制。

选择身份验证机制后,配置字段会相应变化。例如 SFTP 支持用户名和密码、登录凭据(保存在会话中)及 RSA 公钥。

SFTP 身份验证配置示例

必填字段以红色边框标出。填完全部必填项后自动保存。存储行旁绿色圆点表示可使用,红色或黄色图标表示无法连接,应检查配置及网络。

发生错误后,该存储会被标记为不可用十分钟。点击彩色图标或重新加载管理页可重新检查。

文件夹名称

Folder name 是该文件夹在 Nextcloud 内显示给用户的名称。

名称不能包含路径或子目录,因此不要包含斜杠。

在挂载路径中使用变量

外部存储挂载机制支持路径变量。

$user 自动替换为当前登录用户的用户名。

$home 自动替换为可配置的主目录变量,需要 LDAP;详见 LDAP 配置的特殊属性。

下例中,alice 登录后,挂载点解析为 /opt/userDirectories/alice/myPictures。

外部存储用户变量替换

用户和组权限

用户个人设置中配置的存储只对创建者可用。管理设置中配置的存储默认对所有用户可用,也可在 Available for 字段限制用户和组。

用户和组选择器

挂载选项

三点菜单显示设置与垃圾桶图标。垃圾桶删除挂载点;设置按钮可分别配置各挂载点:

– 加密。

– 预览。

– 启用共享。

– 文件系统检查频率:控制服务器收到外部路径的 WebDAV PROPFIND 请求时如何重新扫描。Once per direct access 每次直接访问只浅层扫描;Never 完全跳过。该设置不会让 Nextcloud 或桌面客户端自动轮询,详见下文。

– Mac NFD 兼容性。

– 只读。

仅启用 Encryption 应用时才显示加密选框。其他 Nextcloud 服务器作为外部存储时不支持服务端加密。

Enable Sharing 允许管理员对各挂载点启用或禁用共享。禁用时内部保留共享信息,以便重新启用后恢复。默认禁用共享。

挂载选项

使用自签名证书

挂载外部存储使用自签名证书时,必须将证书导入用户个人设置。详见原文链接的 Nextcloud HTTPS External Mount 说明。

可用存储后端

外部存储应用提供以下后端:

– Amazon S3。

– FTP/FTPS。

– 本地存储。

– Nextcloud。

– OpenStack Object Storage。

– SFTP。

– SMB/CIFS。

– WebDAV。

**注意**

这些后端需要不阻止访问或配置正确的 SELinux 环境,参阅 SELinux 配置。

允许用户挂载外部存储

勾选 Enable User External Storage,并选择允许的后端。注意,这可能使用户对网络中的其他服务建立任意连接!

用户外部存储选项

检测 Nextcloud 之外的修改

直接在外部存储上新增、修改或删除文件时,Nextcloud 不会立即得知。其内部索引 filecache 只有在 Nextcloud 扫描时才更新;扫描之前,索引过期,Nextcloud、桌面客户端和移动应用都看不到这些变化。

文件系统检查频率的工作方式

该挂载选项控制 WebDAV PROPFIND 请求访问外部存储路径时的服务端行为:

– Once per direct access:对某目录的 PROPFIND 请求触发该目录层级重扫,并更新 filecache。

– Never:PROPFIND 不触发重扫,始终返回内部索引内容。

它只控制 PROPFIND 期间的服务器行为,不触发后台轮询,也不改变桌面或移动客户端行为。

重扫依赖用户操作,例如在网页或移动端打开目录、客户端发出 PROPFIND,所以深层目录的变更检测仍然随机且不可靠。

桌面客户端为何遗漏深层变化

桌面同步客户端每轮只对同步目录根部发出 PROPFIND,扫描全树代价太高。它依赖 etag 传播:文件变化时,直至根目录的所有父目录 etag 都必须更新,客户端才能沿线找到变化。

Nextcloud 之外的修改不会更新 etag,客户端在根部看不到线索,也就不会追踪到变化文件。

可靠检测外部变化

按存储类型有两种方法:

A. SMB/CIFS:使用更新通知

files_external:notify 监听 SMB 服务器自身发送的变化事件。事件到达后,Nextcloud 重扫相关路径并把 etag 变化传播到根部,桌面客户端下一轮同步即可检测。

occ files_external:notify <mount_id>

设置细节、认证要求和降低同步延迟的方法见 SMB/CIFS 文档。

B. 其他存储:cron 定期重扫

不支持推送通知的存储,可建立 cron 任务,使用挂载 ID 定期扫描:

sudo -E -u www-data php occ files_external:scan <mount_id>

用 occ files_external:list 查找挂载 ID。完整 files_external:scan 用法见 occ 文档。常见间隔为十五分钟,可在及时性与服务器负载之间调整。

**注意**

Nextcloud AIO 对应命令为:

sudo docker exec --user www-data -i nextcloud-aio-nextcloud php occ files_external:scan <mount_id>

限制:无法可靠检测重命名

无论通过 cron 还是直接访问时的频率设置重扫,扫描器都不能可靠判断条目已重命名。它会把旧名称视为删除、新名称视为新建,导致原条目相关的共享、标签、评论和活动历史从数据库永久删除。

**警告**

用户直接在外部存储重命名文件或目录时,这种元数据丢失无法避免。要保留元数据,应通过 Nextcloud 重命名,或对 SMB 使用方案 A 的更新通知,通过变化事件流处理重命名。

排查文件名编码问题

使用外部存储时,含特殊字符的文件有时不显示,或显示却无法访问。

遇到此情况,运行文件扫描器,例如:

sudo -E -u www-data php occ files:scan --all

若扫描器报告文件编码问题,在挂载选项启用 Mac 编码兼容性,然后重扫外部存储。

**注意**

此模式有性能代价,因为 Nextcloud 检测文件时总要尝试两种编码。

Mac 文件名使用 NFD Unicode 规范化,与其他操作系统常用的 NFC 不同。Mac 用户可能直接上传 NFD 文件名;通过 Nextcloud 上传时,为保持一致性,始终规范化为 NFC。

建议让 Nextcloud 独占使用外部存储,避免此类问题。

亦可参阅原文所链接的 NFC 与 NFD 规范化技术说明。

—

原文:External Storage,Nextcloud 文档贡献者。本文为 Nextcloud 35 文档的中文翻译。原文与截图采用 CC BY 3.0,仓库许可。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容