论坛网站开发教程,丽江网站建设公司,网站开发图片加载慢,一个专做里番的网站随着大数据、AI 技术的发展#xff0c;越来越多的企业、团队和个人开始使用 JuiceFS#xff0c;本文整理了 6 个超实用的 JuiceFS 技巧#xff0c;帮助大家提升 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 --colorauto --exclude-dir.bzr --exclude-dirCVS --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:0908:00,Version: 1.1.02023-09-04.08c4ae6,HostName: homelab,IPAddrs: [192.168.1.80,],MountPoint: /home/herald/jfs/mnt3,ProcessID: 173507},{Sid: 4,Expire: 2023-10-27T09:08:1108:00,Version: 1.1.02023-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-days7 # 关闭回收站
juicefs config META-URL --trash-days0五、彻底销毁一个文件系统
对于刚接触一种技术产品的人来说除了会关注如何创建和使用也会关注如何清理和删除。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 命令进行元数据恢复。恢复元数据有两个注意事项 只能恢复到全新的数据库 需要重新设置对象存储的 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