首页 > 其他分享 >JuiceFS 用户必备的 6 个技巧

JuiceFS 用户必备的 6 个技巧

时间:2023-11-22 17:26:43浏览次数:37  
标签:技巧 -- 必备 文件系统 herald 挂载 JuiceFS juicefs

随着大数据、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/bash

juicefs 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/bash

juicefs 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

标签:技巧,--,必备,文件系统,herald,挂载,JuiceFS,juicefs
From: https://www.cnblogs.com/JuiceData/p/17849820.html

相关文章

  • 调试代码技巧记录
    1.webpack的完整sourcemap调试代码,要映射回原始文件,devtool的sourcemap模式是不行的,会丢失loader的映射信息,导致映射结果是一个半源码半编译的文件,cheap-module-source-map可以,cheap只需要行信息,module会关联loader的sourcemap,能拿到完整的sourcemap2.添加sourcemap文件后,要清......
  • 接口优化技巧
    大家好,最近看到京东云的一位大佬分享的接口优化方案,感觉挺不错的,拿来即用。建议收藏一波或者整理到自己的笔记本中,随时查阅!下面是正文。一、背景针对老项目,去年做了许多降本增效的事情,其中发现最多的就是接口耗时过长的问题,就集中搞了一次接口性能优化。本文将给小伙伴们分享一......
  • 史上最全!PMP实用应试技巧汇总!
    PMP®(ProjectManagementProfessional项目管理专业人士资格认证,由全球最大的项目管理专业组织机构——美国PMI®发起,目的是用来严格评估管理项目人员知识技能是否具有高品质的资格认证考试。给大家带来关于PMP®考试的实用应试技巧。  PMP®解题技巧有哪些?1.先自己想答案在回答......
  • Python爬虫技巧:百万级数据怎么爬取?
    前言在实际的爬取过程中,我们经常会遇到一些需要大量爬取数据的情况,比如爬取某个网站的所有用户信息或者某个行业的所有产品信息等等。在这些情况下,我们需要优化我们的爬虫策略,提高我们的数据爬取效率,同时需要注意避免被目标网站封禁。本文将分享一些Python爬虫处理百万级数据的技巧......
  • 【HarmonyOS】低代码平台组件拖拽使用技巧之页签容器
    ​【关键字】HarmonyOS、低代码平台、Tabs、TabContent、页签导航 1、写在前面前面几篇分别介绍了低代码平台中的堆叠容器、滚动容器、网格布局等三种容器的使用,实际开发中我们经常会有这样的需求,页面底部是三个Tab按钮点击时会分别切换不同的视图内容,本篇我们就来介绍低代码......
  • 【HarmonyOS】低代码平台组件拖拽使用技巧之列表
    ​【关键字】HarmonyOS、低代码平台、组件拖拽、列表、列表项 1、写在前面我们在日常开发中使用最多的组件可能就是列表组件了,现在几乎所有的应用都离不开列表,那么今天我们就来介绍一下如何利用低代码平台来实现列表的展示,列表实际上也是容器的一种,需要注意的是,列表是需要结......
  • 【HarmonyOS】低代码平台组件拖拽使用技巧之常用基础组件(上)
    ​【关键字】HarmonyOS、低代码平台、组件拖拽、常用基础组件、基础容器 1、写在前面之前是花了一些时间介绍了在低代码平台中滚动容器、网格布局、页签容器、列表这几种容器的拖拽技巧及使用方法,今天我会继续来介绍咱们在应用开发中可能会经常用到的一些基础容器和基础组件,......
  • 打工人必备!6个超级实用的办公软件,让你高效完成工作
    在现代职场中,办公软件已经成为我们工作中不可或缺的利器,能够让我们的工作变得更加高效和便捷。今天就给大家分享6个超级实用的办公软件,让你高效完成工作!1、滴答清单(待办事项软件)滴答清单是一款功能强大的待办事项软件,提供了清晰的界面和直观的操作方式,帮助用户轻松创建、安排和追踪......
  • 打工人必备!6个超级实用的办公软件,让你高效完成工作
    在现代职场中,办公软件已经成为我们工作中不可或缺的利器,能够让我们的工作变得更加高效和便捷。今天就给大家分享6个超级实用的办公软件,让你高效完成工作! 1、滴答清单(待办事项软件) 滴答清单是一款功能强大的待办事项软件,提供了清晰的界面和直观的操作方式,帮助用户轻松创建、......
  • PMP答题技巧(二)
    目录PMP答题技巧(二)快速提分攻略“干系”题型沟通问题PMI理念看到什么,选什么看到什么,找什么风险问题六大基本图表三大类工具PMP情景题答题套路变更批准之后风险的情景题进度情景题沟通问题相关方问题干系人问题与供应商有争议前一个项目(阶段)······,下一个项目(阶段)······......