JuiceFS 用户必备的 6 个技巧

随着大数据、AI 技术的发展,越来越多的企业、团队和个人开始使用 JuiceFS,本文整理了 6 个超实用的 JuiceFS 技巧,帮助大家提升 JuiceFS 的管理效率。

一、查看已挂载的文件系统

有时候你可能在一台机器上挂载了多个 JuiceFS 文件系统,或是在多台机器上使用不同的选项挂载了同一个文件系统,也可能二者兼有的在多台机器上挂载了多个文件系统。类似这样的情况,如何区分哪台机器上挂载的是哪个文件系统、设置了哪些调优选项是大家经常会问到的问题。

这里以 Linux 系统为例,提供几种简便的方法。

方法一:使用 ps 命令

ps aux | grep juicefs

运行这个命令会有类似下面的输出,可以看到前两条记录就是在后台挂载的两个文件系统。

herald     36290  0.2  0.1 800108 78848 ?        Sl   11:07   0:24 juicefs mount -d sqlite3:///home/herald/jfs/my.db /home/herald/jfs/mnt
herald     37190  1.3  0.1 3163100 106160 ?      Sl   11:11   2:12 juicefs mount -d badger:///home/herald/jfs/mydb /home/herald/jfs/mnt2
herald     68886  0.0  0.0 221812  2400 pts/0    S+   13:54   0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox juicefs

方法二:使用 pgrep 和 cat 命令

在 Linux 系统中,进程的信息通常可以在 /proc 文件系统中找到,以进程的 PID 为目录名访问。首先使用 pgrep 找到 juicefs 挂载进程的 PID:

pgrep juicefs

它会有输出所有的 PID,例如:

36290
37190

然后使用 cat /proc/PID/cmdline 分别打印各个进程的命令,例如:

cat /proc/36290/cmdline

它会有类似下面这样的输出:

juicefs mount -d sqlite3:///home/herald/jfs/my.db /home/herald/jfs/mnt

方法三:使用 Bash 脚本

我把方法二整合成了一个独立的 Bash 脚本程序并发布在了 Github Gist,你可以直接下载使用:

# 下载 Bash 脚本
curl -LO https://gist.githubusercontent.com/yuhr123/4e7a09653e833a083dae87ba76b7d642/raw/d8de5350955aa33a3bfafc7cf3756c5f8f3fa04d/proc# 赋予脚本执行权限
chmod +x proc# 运行脚本
./proc juicefs

它会有类似下面的输出:

PID: 36290, Command Line: juicefs mount -d sqlite3:///home/herald/jfs/my.db /home/herald/jfs/mnt
PID: 37190, Command Line: juicefs mount -d badger:///home/herald/jfs/mydb /home/herald/jfs/mnt2

二、利用 Bash 脚本简化管理

JuiceFS 客户端是命令行程序,虽然使用起来并不难,但是对于刚刚上手或是正在反复调整挂载选项调优性能的用户来说,直接在终端上输入命令势必会很繁琐,而且容易输错。对于这个问题,可以使用 Bash 脚本来管理各种命令。

用脚本创建文件系统

比如我会创建一个名为 format-myjfs.sh 的脚本来管理创建文件系统的命令:

#!/bin/bashjuicefs format --storage s3 \
--bucket xxx \
--access-key xxx \
--secret-key xxx \
redis://xxx.xxx.xxx/1 \
myjfs

运行脚本:

bash format-myjfs.sh

这个脚本的好处是方便随时查看这个文件系统是用哪个 bucket 和数据库组成的,缺点是里面可能需要写对象存储或数据库的访问密钥,所以要这么管理的话一定要妥善保管这个脚本,可以通过环境变量传递敏感信息,也可以在使用以后使用 gpg 对这个脚本做对称加密。

用脚本管理文件系统挂载

挂载文件系统是一个日常更频繁的管理动作,比如我会创建一个名为 mount-myjfs.sh 的脚本:

#!/bin/bashjuicefs mount \
--cache-dir /mnt/juicefs-cache \
--buffer-size 2048 \
--writeback \
--free-space-ratio 0.5 \
redis://xxx.xxx.xxx/1 \
/mnt/myjfs

运行脚本:

bash mount-juicefs.sh

使用这个脚本,可以更直观的调整挂载选项,用起来会方便很多。

三、查看有几个客户端同时挂载

云文件系统的一个关键特性是可以被位于不同网络的多客户端同时挂载,比如,将同一个文件系统在北京的机房和纽约的机房同时挂载,两地的服务器可以同时读写,JuiceFS 的事务机制会保证写入数据的一致性。

当你想查看一个文件系统当前有多少客户端在同时挂载时,可以使用 status 命令:

juicefs status redis://192.168.1.80/1

命令会以 JSON 格式输出类似下面的内容,其中的 Sessions 部分显示了当前挂载的客户端,它包括每个客户端的软件版本、主机名、IP 地址、挂载点、进程 ID 等。

{"Setting": {"Name": "myjfs","UUID": "520ae432-f355-43d2-a445-020787f325f4","Storage": "minio","Bucket": "http://192.168.1.80:9123/myjfs","AccessKey": "admin","SecretKey": "removed","BlockSize": 4096,"Compression": "none","EncryptAlgo": "aes256gcm-rsa","KeyEncrypted": true,"TrashDays": 1,"MetaVersion": 1,"MinClientVersion": "1.1.0-A","DirStats": true},"Sessions": [{"Sid": 2,"Expire": "2023-10-27T09:08:09+08:00","Version": "1.1.0+2023-09-04.08c4ae6","HostName": "homelab","IPAddrs": ["192.168.1.80",],"MountPoint": "/home/herald/jfs/mnt3","ProcessID": 173507},{"Sid": 4,"Expire": "2023-10-27T09:08:11+08:00","Version": "1.1.0+2023-09-04.08c4ae6","HostName": "HeralddeMacBook-Air.local","IPAddrs": ["192.168.3.102",],"MountPoint": "webdav","ProcessID": 20746}],"Statistic": {"UsedSpace": 4347064320,"AvailableSpace": 1125895559778304,"UsedInodes": 11,"AvailableInodes": 10485760}
}

四、开启或关闭回收站

顾名思义,回收站是一种数据安全机制,可以防止数据被误删。JuiceFS 文件系统默认开启回收站,删除的文件会在回收站保留 1 天,超过保留时间后,文件会从 .trash 目录中被彻底删除。

在对文件系统进行调优测试时,需要频繁写入和删除大量的临时文件,此时就有必要关闭回收站,让存储空间可以被及时释放。

应该使用 config 命令调整 --trash-days 的数值控制回收站,设置的数字代表回收站保留文件的天数,设置为 0 时表示关闭回收站,例如:

# 将回收站设置为保留 7 天  
juicefs config META-URL --trash-days=7  # 关闭回收站  
juicefs config META-URL --trash-days=0

五、彻底销毁一个文件系统

对于刚接触一种技术产品的人来说,除了会关注如何创建和使用,也会关注如何清理和删除。JuiceFS 文件系统的销毁与创建一样都是清清爽爽的,它包含一些必要的确认过程,然后就可以被干干静静地删除。首先,使用 status 命令找到要删除的文件系统的 UUID。

# juicefs status redis://192.168.1.80/1{"Setting": {"Name": "myjfs","UUID": "520ae432-f355-43d2-a445-020787f325f4","Storage": "minio","Bucket": "http://192.168.1.80:9123/myjfs",

然后,需要确认所有客户端已经停止使用该文件系统,正在挂载使用的文件系统是无法被销毁的。最后,使用 destroy 命令执行销毁。

juicefs destroy redis://192.168.1.80/1 520ae432-f355-43d2-a445-020787f325f4

六、元数据备份和还原

JuiceFS 文件系统是一种数据与元数据分离存储的架构,数据会被分块存储在对象存储,相关的元数据会存储在独立的数据库中。元数据记录了文件的名称、大小、位置、权限等信息,访问文件时必须先检索到元数据才能拿到实际的数据,可以说元数据对任何文件系统来说都是至关重要的。

为了保证元数据的安全,JuiceFS 默认启用元数据自动备份机制,每小时都会备份一次元数据并保存到对象存储 Bucket 的 meta 目录中。

当元数据引擎发生了故障,就可以下载一份最新的备份,通过 load 命令进行元数据恢复。恢复元数据有两个注意事项:

  1. 只能恢复到全新的数据库;

  2. 需要重新设置对象存储的 Secret Key。

比如,我的文件系统是用 Redis 1 号数据库创建的,现在假设它损坏了,我要在2 号库上重建元数据。只要去对象存储的 meta 目录下载最新的备份,然后按照下面的步骤进行恢复即可。


# 将元数据备份导入全新的数据库
juicefs load redis://192.168.1.80/2 dump-2023-10-27-025129.json.gz# 更新对象存储 secret key
juicefs config --secret-key xxx redis://192.168.1.80/2

需要注意的是,自动备份与故障发生难免存在时间差,最近的一次备份后与故障发生前的期间产生的新数据是无法被恢复的。

极端状况毕竟是少数,平时更常见的需求是在不同的数据库之间迁移元数据。

这个操作也同样很简单,首先停掉文件系统的读写业务,然后使用 dump 命令导出元数据,最后在目标数据库上使用 load 命令导入即可。

# 导出元数据到 meta-dump.json 文件
juicefs dump redis://192.168.1.80/1 meta-dump.json# 将元数据导入到一个全新的 sqlite 数据库
juicefs load sqlite3://myjfs.db meta-dump.json# 更新对象存储 secret key
juicefs config --secret-key xxx sqlite3://myjfs.db

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/159277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

581. 最短无序连续子数组

581. 最短无序连续子数组 题目: 给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组,并输出它的长度。 示例&…

数字化非遗之光:十八数藏的文化保护之道

在当今数字化的时代,文化传承正经历着一场前所未有的转变,而十八数藏以其独特的方式成为数字化非遗的典范。这个项目不仅仅是数字技术的应用,更是一种文化的使命,一道保护非物质文化遗产的光芒。 十八数藏以数字化的手段保护非遗&…

五金零件经营小程序商城的效果如何

五金零件无论批发还是零售都有很高的需求度,传统消费者往往是线下门店寻找购买,但如今更多的客户选择线上消费,而商家们也选择线上开店拓展更广的客源及生意增长。 除了第三方平台进驻外,私域开店对商家来说也是一种方式。微信场…

git 时忽略某个文件或文件夹

//在当前 git 目录下新建文件 # touch .gitignore//将不需要提交的文件或文件夹写到 .gitignore 文档 ./vs ./project/x64

如何用惯性动作捕捉系统,快速创建数字人三维动画?

在动画制作领域,惯性动作捕捉技术已经逐渐成为一种重要的制作手段。通过动捕设备能够将动捕演员真实的动作转化为数字数据,然后在动画中再现这些动作。为了创造出逼真、流畅的数字人动画,惯性动作捕捉系统成为了一大工具。 根据采集方式的不…

Vulnhub 解决虚拟机网络问题

前言: 有的时候,我们从vulnhub官网下载ovf文件导入到虚拟机后,使用扫描器扫描存活的时候发现扫不到靶机的IP,这是因为虚拟机的网卡配置有问题。我们需要进安全模式修改一些配置。 1. 在虚拟机开机的时候按一下上下键,让…

vue.js中使用三元运算符设置动态样式

三元表达式设置style <p :style"{color: (a b ? #3d8cff:#BBBBBB)}">测试</p>三元表达式设置class <p :class"[ a b ? classA:classB]">测试</p>

Wagtail-基于Python Django的内容管理系统CMS如何实现公网访问

Wagtail-基于Python Django的内容管理系统CMS实现公网访问 文章目录 Wagtail-基于Python Django的内容管理系统CMS实现公网访问前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 前言 Wagtail是一个…

代码随想录二刷 | 链表 |链表相交

代码随想录二刷 &#xff5c; 链表 &#xff5c;链表相交 题目描述解题思路 & 代码实现 题目描述 160.链表相交 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 题目数据 保…

万界星空科技QMS质量管理系统功能

QMS质量管理系统结合质量决策、综合质量管理、过程质量控制三个层次要素&#xff0c;帮助企业实现产品全寿命周期质量数据的及时、灵活、准确和全面采集。 通过质量管理软件能够实现质量数据科学处理和应用&#xff0c;包括数据的系统化组织、结构化存贮、便捷式查询、定制化统…

高防服务器和普通服务器之间的区别有哪些

高防服务器和普通服务器之间的区别有哪些 何谓高防服务器&#xff1f;高防服务器主要是指独立单个硬防防御50G 以上的服务器&#xff0c;可以为单个客户提供安全维护&#xff0c;总体来看属于服务器的一种&#xff0c;根据各个IDC机房的环境不同&#xff0c;有的提供有硬防&…

什么是搜索相关性?AI如何驱动搜索相关性?

训练数据驱动机器学习&#xff0c;机器学习促进丰富的人机交互体验。在快速迭代的互联网时代&#xff0c;我们不断被各种广告铺盖&#xff0c;甚至经常细思极恐&#xff0c;“天呐&#xff0c;小红书怎么知道我面膜没了。”这都是算法和机器学习的鬼斧神工洞察着用户的搜索意图…

低代码:数字化转型趋势下的快速开发方式

目录 一、前言 二、低代码是什么&#xff1f; 三、低代码如何提高生产力 开发工具JNPF介绍 产品分析 1可视化应用开发 2流程管理 3整个平台源码合作 四、小结 一、前言 通常&#xff0c;开发一个大型的企业级系统&#xff0c;公司往往需要大量的人力做支持后盾&#xff0c;如需…

时态图根据时间轴动态播放热力图

效果图如下&#xff1a; <!DOCTYPE html> <html><head><title>时态图</title><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><!-- 引入样式 --&g…

【高级网络程序设计】Week3-2 Servlet

一、 What are servlets? 1. 定义 &#xff08;1&#xff09;Servlets are Java’s answer to CGI&#xff1a; programs that run on a web server acting as middle layer between HTTP request and databases or other applications.Used for client requests that cann…

Go语言中实现应用IP防火墙

简介 在公司里面经常会听到某应用有安全漏洞问题&#xff0c;没有做安全加固&#xff0c;IP防火墙就是一个典型的安全加固解决方案&#xff0c;只允许指定的ip段访问应用&#xff0c;一般是内网ip 本文主要讲解go语言如何实现ip防火墙 标准库实现 其实go的net包以及有相应的…

人工智能和AR/VR:AI在AR和VR中扮演什么角色?行业应用有哪些?

增强现实技术和虚拟现实技术&#xff08;AR/VR&#xff09;发展前景广阔&#xff0c;备受各大企业关注。事实上&#xff0c;近四分之三的行业领导者表示&#xff0c;他们预计这些沉浸式技术将于未来五年内成为主流。高盛公司报告称&#xff0c;到2025年&#xff0c;AR/VR行业值…

Golang版本处理Skywalking Trace上报数据

Tips: 中间记录了解决问题的过程&#xff0c;如不感兴趣可直接跳至结尾 首先去es里查询skywalking trace的元数据 可以拿到一串base64加密后的data_binary(直接解密不能用&#xff0c;会有乱码&#xff0c;可参考https://github.com/apache/skywalking/issues/7423) 对data_b…

图解系列--密钥,随机数,应用技术

密钥 1.生成密钥 1.1.用随机数生成密钥 密码学用途的伪随机数生成器必须是专门针对密码学用途而设计的。 1.2.用口令生成密钥 一般都是将口令输入单向散列函数&#xff0c;然后将得到的散列值作为密钥使用。 在使用口令生成密钥时&#xff0c;为了防止字典攻击&#xff0c;需要…

笔记本只使用Linux是什么体验?

笔记本只使用Linux是什么体验&#xff1f; 之后安了Windows双系统之后也不怎么想再进Windows了。 开发环境就不用说了&#xff0c;Linux下配各种开发环境都方便的多&#xff0c;当然你要用 vs 那还是乖乖回 Windows 吧。 最近很多小伙伴找我&#xff0c;说想要一些Linux的资…