随着企业数据量的持续增长,存储容量需求日益增大。如何采用没有容量上限的云存储替换本容量有限的本地磁盘,已成为广泛的需求和共识。特别是在企业中常用的 Samba 和 NFS 共享,如果能够使用云存储作为底层存储,就能有效解决存储扩容和本地磁盘损坏导致的数据丢失问题。

本文将以 Linux 系统为例,介绍如何将 JuiceFS(云原生分布式文件系统)作为 Samba 和 NFS 的底层存储,为企业提供高度可扩展的无限云存储解决方案。

本文会分别介绍在命令行和图形界面中的使用方法,读者可以根据自己的使用习惯参考相应内容。

在命令行中使用

通过执行 juicefs mount 命令,可以将 JuiceFS 文件系统以 FUSE 接口的形式挂载为本地的用户态文件系统,与本地文件系统在形态和用法上无异。这样一来,可以直接使用 JuiceFS 挂载点或子目录创建 Samba 或 NFS 共享。

创建 Samba 共享

主流 Linux 发行版的包管理器都会提供 Samba,可以直接安装,比如 Debian/Ubuntu 可以这样安装:


sudo apt install samba

对于需要配置 AD/DC 的,还需要安装其他的软件包,详情参考 Samba 官方安装指南

根据 Samba 官方文档,通常建议使用支持扩展属性(xattr)的文件系统,JuiceFS 文件系统需要在挂载时使用 --enable-xattr 选项来启用扩展属性:


sudo juicefs mount -d --enable-xattr sqlite3://myjfs.db /mnt/myjfs

然后就可以使用 JuiceFS 挂载点或子目录创建共享,例如,创建一个名为 Media 的共享:


[Media]     path = /mnt/myjfs/media     guest ok = no     read only = no     browseable = yes

对 macOS 的扩展属性支持

如果 Samba 版本低于 4.9,且创建的 Samba 共享同时要提供给 macOS 用户使用,则需要在 Samba 的 [global] 全局配置部分添加 ea support = yes 选项来启用扩展属性支持,编辑配置文件 /etc/samba/smb.conf,例如:


[global]     workgroup = SAMBA     security = user     passdb backend = tdbsam     ea support = yes

Samba 4.9+ 默认开启了 ea support 选项,因此无需手动设置。

创建 NFS 共享

因为 NFS 是一种面向 Unix/Linux 系统的共享协议,不涉及对 xattr 扩展属性的要求,如果仅用于 NFS 共享,挂载时无需使用 --enable-xattr 选项,挂载点和子目录可直接用作 NFS 共享。

比如,将 JuiceFS 中的  media 目录通过 NFS 共享,在配置文件 /etc/exports 中添加:


"/mnt/myjfs/media" *(rw,sync,no_subtree_check,fsid=1)

NFS 共享配置的格式为:


<Share Path> <Allowed IPs>(options)

比如要将这个共享设置为仅允许 192.168.1.0/24 这个网段用户访问,则可以修改为:


"/mnt/myjfs/media" 192.168.1.0/24(rw,async,no_subtree_check,fsid=1)

共享选项:

  • rw - 代表允许读和写

  • async - 异步写入,速度快但会降低数据可靠性;也可以设置为 sync 写入速度慢但能提高数据可靠性。

  • no_subtree_check - 禁用子目录检查,这将允许客户端挂载共享目录的父目录和子目录,会降低一些安全性但能提高 NFS 的兼容性。也可以设置为 subtree_check 来启用子目录检查,这样仅允许客户端挂载共享目录和它的子目录。

  • fsid - 文件系统标识符,用于在 NFS 上标识不同的文件系统。在 NFSv4 中,NFS 的根目录所在的文件系统被定义为 fsid=0,其他文件系统需要在它之下且编号唯一。在这里,JuiceFS 就是一个外挂的 FUSE 文件系统,因此需要给它设置一个唯一的标识。

如果不熟悉或不喜欢在命令行管理 Samba 或 NFS 共享,可以使用图形化工具来简化这个过程,Cockpit 就是一个适用的开源工具。

图形化管理:在 Cockpit 中使用

Cockpit 是一个用于 Linux 服务器管理的 Web 界面工具,允许管理员在浏览器中直接执行各种管理任务,而无需使用命令行或其他复杂的工具。通过安装扩展程序,即可支持在图形化界面中管理 Samba 和 NFS 共享。

如果需要在本地长期稳定地提供 Samba 和 NFS 共享,可以考虑设置一个专用的服务器或虚拟机来实现。在专用主机上挂载 JuiceFS 文件系统,并使用 Cockpit 管理工具来配置和管理 Samba 和 NFS 共享,以便提供给本地网络中的计算机和业务系统使用。JuiceFS 负责将用户数据妥善上传到公有云对象存储或缓存到本地,进而提供一个近乎无限的存储空间。

硬件要求

Samba 和 NFS 都是基于网络的文件共享协议,它们的性能受硬件性能、网络带宽、客户端数量和文件访问模式等多种因素的影响。对于只有少量客户端的小规模网络,在较低配置的硬件上仍能很好的运行。

Samba 是面向 Windows 的共享协议,涉及到 Linux 与 Windows 之间的复杂转换,因此在客户端数量多且需要并发访问或涉及大量数据传输的场景,Samba 往往需要更多的 CPU 资源。在高负载环境下,NFS 可以提供更高的效率和吞吐量。

你需要根据实际情况灵活调整硬件和软件配置,请注意以下方面:

  • 准备充足的 SSD 存储:作为 JuiceFS 缓存盘,建议缓存盘容量大于预期热数据量;

  • 提高网络带宽:多客户端并发、大量数据传输时网络带宽可能成为性能瓶颈;

  • 满足 Linux 系统运行的基本配置:比如 4核 CPU、8GB 内存、20GB 系统盘。

系统建议

Cockpit 是红帽公司(Red Hat)赞助的自由软件项目,它在 RHEL 及衍生版中均有预装可以开箱即用,相比 Ubuntu、Debian 等系统兼容性要更好,小问题也会少一些。以下是几个可以优先考虑选用的操作系统:

  • Rocky Linux

  • Almalinux

  • Fedora

当然,也可以根据个人偏好选择 Ubuntu、Debian、Archlinux、openSUSE 等系统。

安装和启动 Cockpit

主流 Linux 发行版均支持安装 Cockpit,如果你使用的系统没有预装,可以参考 Cockpit 官网进行安装。

对于本文使用的 Almalinux 系统,直接在终端启用 Cockpit 服务即可:


sudo systemctl enable --now cockpit.socket

使用 Cockpit

服务启动以后,在浏览器中输入 https://<your-local-ip>:9090 打开 Cockpit 界面(请将 <your-local-ip> 替换成实际的 IP 地址)。

由于涉及对系统的管理,应该使用具有 sudo 权限的账号或 root 用户登陆。

Cockpit 自带 Web Shell(基于网页的终端),所有涉及命令行的操作可以直接在这里执行,相对 SSH 登陆要方便很多。

安装 File Sharing 插件

Cockpit 本身默认只提供了系统管理最基本的功能,通过安装插件来可以增加更多管理功能,查看 Cockpit 支持的插件

在插件列表中可以找到 File Sharing,这是一个由 45Drives 开发的第三方插件,作用是为 Cockpit 提供 Samba 和 NFS 共享管理界面。

访问 File Sharing 源码仓库,根据系统选择对应的软件包,在 Cockpit 终端执行命令进行下载(此处为示例,建议选择下载最新版):


curl -LO https://github.com/45Drives/cockpit-file-sharing/releases/download/v3.3.4/cockpit-file-sharing-3.3.4-1.el8.noarch.rpm

安装依赖的包和插件:


# 安装依赖的包 sudo dnf install fuse samba nfs-utils # 安装插件 sudo dnf install ./cockpit-file-sharing-3.3.4-1.el8.noarch.rpm

安装完毕刷新页面即可看到 File Sharing 插件菜单和界面。

安装 JuiceFS 客户端

在终端执行以下命令可以一键安装 JuiceFS 最新稳定版客户端:


curl -sSL https://d.juicefs.com/install | sh -

也可以参考 JuiceFS 安装文档 了解其他安装方式。

创建 JuiceFS 文件系统

一个 JuiceFS 文件系统由以下两个部分组成:

公有云对象存储大多涉及存储费用、下行流量费用和 API 调用请求费用,请根据实际需求进行评估和选择。部分云计算公司会针对对象存储各个计费项提供“资源包”,相比按量付费会有一定的优惠,可以按需选用。为了保证读写速度,建议在创建 Bucket 时选择与你物理距离更近的地域。另外,JuiceFS 虽然同时支持标准存储和低频存储,但由于低频存储涉及最低存储时间和取回费用,对于本文介绍的内网数据共享场景而言,建议选择标准存储,私有读写。

由于本文介绍的是类似“云存储网关”的场景,即 JuiceFS 运行在本地的独立主机上,通过 Samba 和 NFS 共享协议提供存储给内网用户和业务系统使用,在元数据引擎方面可以有更灵活的选择:

  • 如果只在一个内网中使用,可以选用 SQLite、BadgerDB 这样的单机数据库,也可以自行在内网部署 Redis、MySQL 等数据库使用。

  • 如果有多地、多局域网需要同时共享使用 JuiceFS 文件系统,则应使用能够通过互联网访问的数据库,这种场景选择云平台的 RDS 数据库或自行在云服务器上部署 Redis、MySQL、PostgreSQL 等会是更好的选择。

下面是一个使用 SQLite 单机数据库作为元数据引擎创建 JuiceFS 文件系统的示例:


juicefs format --storage oss \ --bucket https://myjfs.oss-cn-shanghai.aliyuncs.com \ --access-key your-access-key \ --secret-key your-secret-key \ sqlite3:///home/herald/myjfs.db \ myjfs

创建文件系统时有以下几个细节需要注意:

  • 不同的对象存储有相应的类型名,比如 AWS 为 s3,阿里云为 oss,腾讯云为 cos 等,更多类型请参考 JuiceFS 文档。

  • 如果平台分别提供了内网和外网 Bucket 地址,需要选择外网地址(因为需要从本地访问)。

  • Access Key 和 Secret Key 用于访问对象存储时的身份认证,请参考所选对象存储的文档了解如何创建。

  • 数据库地址支持绝对路径和相对路径,当配置开机自动挂载时需要使用绝对路径。

挂载 JuiceFS 文件系统

对于新创建的 JuiceFS 文件系统,可以先手动挂载一次,确认无误后再配置开机自动挂载,例如:


sudo juicefs mount --enable-xattr \ --cache-dir /your-ssd \ --cache-size 1024000 \ sqlite3:///home/herald/myjfs.db \ /mnt/myjfs

这是前台挂载,JuiceFS 客户端会实时输出关键的操作信息,你可以据此来排查解决警告和错误。

如果执行命令时提示 sudo: juicefs: command not found,请修改 /etc/sudoers 文件,修改 secure_path 天添加 /usr/local/bin,修改后类似这样:


Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

确认挂载没有问题,接下来配置 JuiceFS 开机自动挂载。使用快捷键 ctrl + c 结束程序,然后执行命令,创建一个名为 mount.juicefs 的客户端软连接:


sudo ln -s /usr/local/bin/juicefs /sbin/mount.juicefs

编辑 /etc/fstab 文件,另起一行填入 JuiceFS 的挂载信息,例如:


# <元数据引擎 URL> <挂载点> <文件系统类型> <挂载选项> sqlite3:///home/herald/myjfs.db /mnt/myjfs juicefs _netdev,max-uploads=50,writeback,cache-size=1024000,enable-xattr 0 0

其中涉及的挂载选项(请根据实际情况调整具体的值):

  • _netdev 指示系统在网络设备可用之前不要挂载文件系统,这对于需要网络访问的文件系统很重要。

  • max-uploads=50 挂载选项限制同时上传到文件系统的最并发数,有助于防止文件系统过载。

  • writeback 挂载选项用来开启写缓存,文件先写到本地缓存然后在后台上传到公有云对象存储。 可以提高性能,但写入数据时意外断电可能会导致数据丢失。

  • cache-size=1024000 挂载选项指定用于文件系统的缓存大小,以 MiB 为单位,这里设置了 1TB 缓存。

  • enable-xattr 挂载选项让 JuiceFS 启用 xattr 扩展属性支持。

因为 /etc/fstab 以 root 用户身份执行挂载,因此在挂载信息中无需添加 allow_other 挂载选项。

重启或执行以下命令挂载 JuiceFS:


# 重载 systemd 进程 sudo systemctl daemon-reload # 挂载全部文件系统 sudo mount -a

创建 Samba 共享

回到 File Sharing 插件界面

对于 Samba 版本低于 4.9 的用户,且需要在 macOS 中访问共享,请在 Samba 选项卡中展开 Global 的 Advanced Settings,添加 ea support = yes 启用面向苹果产品的扩展属性支持。

然后开始创建共享,点击 Shares 部分的 + 开始创建 Samba 共享。

  • Share Name:共享名称,支持中文。
  • Share Description:可选的共享描述
  • Path:共享文件夹的路径,填写 JuiceFS 的挂载点或子目录。如果指定的目录不存在,可以点击下方的 Create now 进行创建。点击下方的 Edit Permissions 可以调整目录的权限。

其他选项可以根据需要自行调整

点击 Confirm 按钮完成创建。在 Windows 或 macOS 上通过文件管理器尝试访问,这里以 macOS 为例:

打开 Finder,使用快捷键 command + k,在地址栏输入 JuiceFS 所在主机的内网 IP 地址,例如:

输入用户名和密码验证身份,然后在弹出的共享目录中选择要打开 Samba 共享目录

如果打开共享发现没有访问权限,可以回到 File Sharing 找到对应的共享,通过 Edit Permissions 调整目录权限。

与此同时,还可以结合 Cockpit 的用户账户管理功能,根据用户和组来分配 Samba 共享的访问权限,从而实现灵活的多用户、多权限的共享访问和管理能力。

Samba 用户问题

Samba 有一套自己的用户数据库,它与操作系统用户之间是独立的,但是当在 Samba 数据库中创建了与系统相同的用户时,系统会自动进行映射,从而实现在 Samba 共享中显示用户 Home 目录的功能。

比如,我的系统账户是 herald,我可以这样为他创建 Samba 账户:


sudo smbpasswd -a herald

根据命令提示设置密码即可,Samba 账户可以设置与系统用户不同的密码。

你还可以安装 Cockpit Identities 插件,可以在图形化用户界面来管理系统账户和 Samba 账户。

创建 NFS 共享

与 Samba 共享的创建类似,在 File Sharing 中切换到 NFS 标签,在 Shares 中点击 + 添加共享:

  • Share Path:共享目录的路径,填写 JuiceFS 的挂载点或子目录。如果指定的目录不存在,可以点击下方的 Create now 进行创建。点击下方的 Edit Permissions 可以调整目录的权限。

  • Clients:用来设置 NFS 共享允许的客户端,Host 设置允许的主机地址,Settings 设置挂载参数。

Tips:如前述,JuiceFS 是外挂的 FUSE 文件系统,使用它作为共享目录,需要设置一个大于 0 的 fsid,例如:rw,async,no_subtree_check,fsid=1

然后使用任何有 NFS 客户端的主机挂载即可,例如:


sudo mount -t nfs 192.168.1.26:/mnt/myjfs/nfs mnt

macOS 挂载 NFS

macOS 支持挂载 NFS 共享,但执行挂载命令时会报错 Operation not permitted,可以使用 -o resvport 参数来解决这个问题,例如:


sudo mount -t nfs -o resvport 192.168.1.26:/mnt/myjfs/nfs mnt

总结

本文介绍了如何使用 JuiceFS 文件系统作为 NFS 和 Samba 的共享存储,实现一个面向内网且几乎没有容量上限的共享存储空间。通过引入 Cockpit 的图形化管理界面,让读者可以更方便地管理多用户、多权限的 Samba 和 NFS 共享。另外还分享了各种共享在挂载访问时常见的问题和解决方法,希望这篇内容能够对你有一些帮助,如果有其他疑问欢迎加入 JuiceFS 社区与大家共同交流。

实现无限存储:基于JuiceFS 创建 Samba 和 NFS 共享的更多相关文章

  1. 配置samba和NFS共享服务

                            配置samba和NFS共享服务 1案例1:配置SMB文件夹共享 1.1问题 本例要求在虚拟机server0上发布两个共享文件夹,具体要求如下: 此服务器 ...

  2. Linux:SAMBA共享、NFS共享、Autofs自动挂载

    SAMBA.NFS共享区别 NFS开源文件共享程序:NFS(NetworkFile System)是一个能够将多台Linux的远程主机数据挂载到本地目录的服务,属于轻量级的文件共享服务,不支持Linu ...

  3. 在 Linux 客户端配置基于 Kerberos 身份验证的 NFS 服务器

    在这篇文章中我们会介绍配置基于 Kerberos 身份验证的 NFS 共享的整个流程.假设你已经配置好了一个 NFS 服务器和一个客户端.如果还没有,可以参考 安装和配置 NFS 服务器[2] - 它 ...

  4. AI场景存储优化:云知声超算平台基于 JuiceFS 的存储实践

    云知声是一家专注于语音及语言处理的技术公司.Atlas 超级计算平台是云知声的计算底层基础架构,为云知声在 AI 各个领域(如语音.自然语言处理.视觉等)的模型迭代提供训练加速等基础计算能力.Atla ...

  5. 基于catalog 创建RMAN存储脚本

    --============================== -- 基于catalog 创建RMAN存储脚本 --============================== 简言之,将rman的 ...

  6. 金山云:基于 JuiceFS 的 Elasticsearch 温冷热数据管理实践

    01 Elasticsearch 广泛使用带来的成本问题 Elasticsearch(下文简称"ES")是一个分布式的搜索引擎,还可作为分布式数据库来使用,常用于日志处理.分析和搜 ...

  7. 无限存储之胖文本数据库TTD(Thick Text Database)

    无限存储之胖文本数据库TTD(Thick Text Database) 阅读:  评论:  作者:Rybby  日期:  来源:rybby.com 所谓的“胖”就是多.大.丰富的意思,像我们平时看到的 ...

  8. 百亿级小文件存储,JuiceFS 在自动驾驶行业的最佳实践

    自动驾驶是最近几年的热门领域,专注于自动驾驶技术的创业公司.新造车企业.传统车厂都在这个领域投入了大量的资源,推动着 L4.L5 级别自动驾驶体验能尽早进入我们的日常生活. 自动驾驶技术实现的核心环节 ...

  9. 如何使用 JuiceFS 创建 WebDAV 共享

    WebDAV 是一种基于 HTTP 的文件共享协议,最初被设计用于多用户文档协作编辑的场景,也被广泛应用在基于互联网的文件存储.数据同步等网盘类应用场景. 手机端和 PC 端有大量的应用内置了对 We ...

  10. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制

    在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...

随机推荐

  1. 一个好用的java图片缩放及质量压缩方法

    本文中代码来自:http://blog.csdn.net/liuhuanchao/article/details/50527856由于网站需要对上传的图片进行宽度判断缩放和质量压缩,以提升整体加载速度 ...

  2. 2022-02-19:安装栅栏。 在一个二维的花园中,有一些用 (x, y) 坐标表示的树。由于安装费用十分昂贵,你的任务是先用最短的绳子围起所有的树。只有当所有的树都被绳子包围时,花园才能围好栅栏。

    2022-02-19:安装栅栏. 在一个二维的花园中,有一些用 (x, y) 坐标表示的树.由于安装费用十分昂贵,你的任务是先用最短的绳子围起所有的树.只有当所有的树都被绳子包围时,花园才能围好栅栏. ...

  3. 2021-10-10:杨辉三角 II。给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。力扣119。

    2021-10-10:杨辉三角 II.给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行.在「杨辉三角」中,每个数是它左上方和右上方的数的和.力扣119. 福大大 答案20 ...

  4. 【Qt 6】读写剪贴板

    剪贴板是个啥就不用多介绍了,最直观的功能是实现应用程序之间数据共享.就是咱们常说的"复制"."粘贴"功能. 在 Qt 中,QClipboard 类提供了相关 A ...

  5. Windows server 2012 r2 激活方法

    slmgr /ipk W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9 slmgr /skms kms.03k.org slmgr /ato

  6. flask目录结构

  7. Redash 可视化BI系统部署安装及简单使用

    这篇文章主要为介绍一下Redash的使用和安装 概览 Redash 主要使用的语言为 Python 和 TypeScript 这个安装主要是基于Docker 来安装的,官网教程基本没有不是基于Dock ...

  8. 领福利 | 腾讯千帆HR数字化专场,教你数字时代的技术招聘秘笈

    HR难,做技术招聘的HR难上加难 技术部门急需用人,收到的简历却寥寥无几? 推了简历,却被用人部门告知完全不合适? 候选人过了面试,却鸽了offer? 桥豆麻袋! 腾讯千帆联合ShowMeBug举办 ...

  9. ENVI指定像元数量(行数与列数)裁剪栅格图像

      本文介绍基于ENVI软件,实现栅格遥感影像按照像元行列号与个数进行指定矩形区域裁剪的方法.   一般的,如果我们需要裁剪某个具体的行政区域,按照对应区域的矢量图层裁剪即可:如果需要裁剪某个大致的区 ...

  10. htop 和 bashtop 的一些不足

    htop 和 bashtop 都是 Linux 资源监视器中非常好用的工具,尤其对于展示当前 Linux 操作系统的处理器.内存.硬盘.网络和进程等各项资源的使用情况与状态.但它们都有一个问题,就是当 ...