如何判断数据库和对象存储是否被 JuiceFS 使用?
随着使用 JuiceFS 的时间越来越长,一些用户已经用多种数据库和对象存储创建了很多的 JuiceFS 文件系统。有些是纯云端的,有些是纯本地的,有些则是本地与云端结合的。它们当中有一些是存储了文件的,而有一些则只是测试目的临时创建的。多个文件系统混合在一起使用难免会混淆,特别是在同一个数据库实例中创建多个文件系统时会更为明显。
比如在一个 Redis 实例的 0 号数据库和 1 号数据库都创建了文件系统,其中一个是正常使用的,另一个是测试用的,当需要删除测试用的文件系统时,就可能会误删正常使用的文件系统。
在这篇文章会分享一些解决类似问题的日常管理技巧,希望能够帮助到更多的 JuiceFS 用户。
前置知识
在开始之前,先介绍一些 JuiceFS 的基本概念,以便大家更好地理解这些技巧。
如下图,JuiceFS 采用的是一种数据与元数据分离存储的技术架构,数据存储在对象存储中,元数据存储在数据库中。

从管理的角度来说,这就涉及到数据库和对象存储两个部分的管理。
情景一:数据库被 JuiceFS 使用了吗?
如果你也像我一样喜欢尝试用不同的数据库作为 JuiceFS 的元数据引擎,那么你可能会遇到这样的情况:有很多数据库,但不确定哪个数据库被 JuiceFS 使用。
对于这种情况,无外乎两种判断方法:
- 用 JuiceFS 客户端执行检查;
- 用数据库客户端执行检查。
两种方法都能用来判断,只是有些数据库更适合用第一种方法,有些数据库更适合用第二种方法。
适合用 JuiceFS 客户端检查的数据库
对于 SQLite3、Badger 这样的单机数据库,直接用 JuiceFS 客户端检查更合适。因为一个数据库只对应一个 JuiceFS 文件系统,所以只要 JuiceFS 客户端能够连接到数据库,就能够检查出这个数据库是否被 JuiceFS 使用。
例如,在我本地电脑的某个目录中发现了一个名为 my.db 的文件,我现在不确定它究竟是 JuiceFS 文件系统的元数据,还是其他应用的数据库。这时,我可以使用 JuiceFS 客户端的 status 子命令来检查:
juicefs status sqlite3://my.db

从命令输出的 JSON 中,包含文件系统的名称、UUID、存储类型、对象存储等信息,可以确定这个数据库是一个 JuiceFS 文件系统的的元数据引擎。
如果没有输出 JSON 信息,并显示 database is not formatted,那么这个就不是 JuiceFS 使用的元数据引擎。

与 SQLite3 类似,Badger 也是一个单机数据库,但它的数据库不是单个文件,而是一个目录。
比如,我在本地发现一个名为 myjfs 的目录,时间久远已经不记得它究竟是一个普通的目录,还是 badger 数据库目录。这时,我可以使用 JuiceFS 客户端的 status 子命令来检查:
juicefs status badger://myjfs

适合用数据库客户端检查的数据库
虽然完全可以用 JuiceFS 客户端进行检查,但在数据库很多,以及记不得有哪些数据库的情况下,用数据库客户端检查网络数据库会更为直观方便。
Redis
默认情况下,一个 Redis 实例有编号为 0~15 共计 16 个数据库。如果之前没有在备忘本中明确记录每个数据库的用途,那么时间久了再次要用到的时候,就很难区分哪个数据库是 JuiceFS 使用的。
比如,我有以下 Redis 实例:
| 项 | 值 |
|---|---|
| 地址 | 192.168.1.88 |
| 端口 | 6379 |
| 密码 | password |
我不确定哪个数据库用于 JuiceFS,甚至不确定是否有数据库用于 JuiceFS。这时,最简单的办法就是使用 redis-cli 客户端连接到 Redis 实例,逐一对每个数据库执行检查:
# 连接到 Redis 实例
redis-cli -h 192.168.1.88 -p 6379 -a password
# 检查哪些数据库存储了数据
192.168.1.88> info keyspace

通过 info keyspace 命令,可以看当前实例的 db0、db1 和 db3 都存储了数据,接下来就可以依次对这些数据库执行 get setting 检查是否是 JuiceFS 使用的数据库。

如图所示,db0 没有 JuiceFS 的信息,说明它不是 JuiceFS 使用的数据库。db1 和 db3 都包含 JuiceFS 的信息,说明它们是 JuiceFS 使用的数据库。
Postgres、MySQL、MariaDB
对于这三种数据库,有很多图形化客户端工具可以直接使用,比如 pgAdmin、Adminer、Navicat 等,可以直观地显示数据库中的表、数据等信息。
笔者相对更喜欢使用 Adminer,它是一个非常轻量级的数据库管理工具,可以直接通过 Docker 部署,通过浏览器访问,同时支持上述三种数据库。
假设在本地电脑上已经安装了 Docker,那么可以通过以下命令来部署 Adminer:
docker run -d -p 8080:8080 --name adminer adminer
部署完成后就可以通过浏览器访问 http://localhost:8080 来使用 Adminer。

以 Postgres 数据库为例,连接到 Postgres 数据库后,可以看到数据库中的表、数据等信息。

在数据库列表中,如果不确定哪个数据库是 JuiceFS 使用的,可以逐一点击进入数据库,查看其中的表。
如下图,JuiceFS 的表名称通常是以 jfs_ 开头的。

MySQL、MariaDB 等数据库的操作类似,访问时只需要在 Adminer 登录界面中据实选择即可。
另外,JuiceFS 还支持其他数据库,比如 TiKV、etcd、FoundationDB 等,检查它们是否用于 JuiceFS 的方法都是类似的,这里不再赘述。
情景二:对象存储被 JuiceFS 使用了吗?
对于 JuiceFS 文件系统来说,元数据引擎记录着所有文件的信息,对象存储则是保存着所有实际的文件。二者相辅相成,缺一不可。
从管理的角度来说,只要能够确定 JuiceFS 文件系统的元数据引擎,就能够确定对应的对象存储。
也就是说,只要用 juicefs status 命令扫一下相应的数据库,就能找到这个文件系统关联的对象存储。

根据输出的信息,在 Bucket 部分可以找到它使用的对象存储。当然,如果你在同一个云平台上有多个账号,最好还是从云平台的文件管理器中逐一查看 Bucket 内容。

如图所示,JuiceFS 会在 Bucket 根目录下创建一个与文件系统同名的文件夹作为根目录。打开这个目录,可以看到名为 juicefs_uuid 的文件,它是识别 JuiceFS 文件系统的关键。
另外,在文件系统的根目录下,通常还会有 chunks 和 meta 两个目录,分别存储文件的数据块和元数据备份。通过这些特征,就可以判断一个 Bucket 是否属于 JuiceFS 文件系统。
总结
以上两个场景分别介绍了如何判断已有的数据库和对象存储是否被 JuiceFS 使用,掌握了这些技巧,相信读者可以更好地管理 JuiceFS 文件系统,避免误删、误操作等问题。
文章的最后再提供几个创建 JuiceFS 文件系统时的建议:
- 使用单机数据库作为元数据引擎时,数据库命名尽量有意义和简短。这样既方便识别,又方便后续使用;
- 预计会长期使用的文件系统,数据库和 Bucket 建议让 JuiceFS 独享,尽量不要与其他应用共享使用,避免潜在的误操作和使用冲突;
- 为文件系统定义一个容易识别的名称,有助于后续管理,比如在名称中添加 jfs 词缀 my-jfs、test-jfs 等。
如果你有其他问题,欢迎加入 JuiceFS 微信群进行提问,如果你有其他管理技巧,也欢迎分享给我们。
如何判断数据库和对象存储是否被 JuiceFS 使用?的更多相关文章
- 【巨杉数据库Sequoiadb】巨杉⼯具系列之一 | ⼤对象存储⼯具sdblobtool
近期,巨杉数据库正式推出了完整的SequoiaDB 工具包,作为辅助工具,更好地帮助大家使用和运维管理分布式数据库.为此,巨杉技术社区还将持续推出工具系列文章,帮助大家了解巨杉数据库丰富的工具矩阵. ...
- HDFS对象存储--Ozone架构设计
前言 如今做云存储的公司非常多,举2个比較典型的AWS的S3和阿里云.他们都提供了一个叫做对象存储的服务,就是目标数据是从Object中进行读写的,然后能够通过key来获取相应的Object,就是所谓 ...
- go语言实现分布式对象存储系统之单体对象存储
对象存储 基本概念 主流存储类型分为三种:块存储.文件存储以及对象存储 NAS(文件存储):Network Attached storage,提供了存储功能和文件系统的网络服务器,客户端可以访问NAS ...
- 云上大数据存储:探究 JuiceFS 与 HDFS 的异同
HDFS 作为 Hadoop 提供存储组件,已经成为大数据生态里面数据存储最常用的选择,通常在机房环境部署. JuiceFS 是一个基于对象存储的分布式文件系统,用户可以在云上快速地搭建按需扩容的弹性 ...
- runtime实现对象存储型数据库——LHDB
前言 最近在GitHub上看了一份关于基于runtime封装的对象存储型数据库的开源代码,觉得非常值得分享记录一下,在IOS中对数据库的操作一般通过CoreData和SQLite,CoreData 虽 ...
- 在ThinkPHP框架(5.0.24)下引入Ueditor并实现向七牛云对象存储上传图片同时将图片信息保存到MySQL数据库,同时实现lazyload懒加载
这是我花了很多天的时间才得以真正实现的一组需求. 文章后面有完整Demo的GitHub链接. 一. 需求描述 1. 应用是基于ThinkPHP5开发的: 2. 服务器环境是LNMP,PHP版本是7.2 ...
- java开发之阿里云对象存储OSS和云数据库Memcache的使用
web开发中标配:aliyun ECS(阿里云服务器),aliyun RDS(阿里云数据库),aliyun OSS(阿里云对象存储),aliyun Memcache(阿里云缓存数据库). 今天就介绍下 ...
- SQL Server IF Exists 判断数据库对象是否存在的用法
1 判断数据库是否存在Sql代码 if exists (select * from sys.databases where name = ’数据库名’) drop database [数据库名] ...
- t-sql判断数据库对象是否存在
1 系统表sys.sysobjects 在数据库中创建的每个对象(例如约束.默认值.日志.规则以及存储过程)都对应一行,详细介绍参考MSDN 2 OBJECTPROPERTY 返回当前数据库中架构范围 ...
- sql server如何判断数据库是否存在
如何判断数据库是否存在 执行下列的SQL,获得一张表,根据表的行数来判断. select * from master..sysdatabases where name=N'所查询的数据库名 ...
随机推荐
- Linux 中 uid、gid、euid、egid、groups 之间的关系
导航 1 权限匹配流程 2 五种身份变化 3 有效用户/组 4 特权对 Shell 脚本无效 5 Sudo 与 SUID/SGID 的优先级 6 SUID.SGID.Sticky 各自的功能 Linu ...
- FLUTTER 中 Isolate 的一个例子.
isolate 起因 最近看了一点isolate的东西, 自己写了一个例子. 普通的的 consummer-producer例子是只有前后两端的,实际上,会把前后两端再进行包装. 我这里这个例子,是把 ...
- MySql 安装详细步骤
一.官网下载 官网地址:https://dev.mysql.com/downloads/installer/ 二.开始安装 1.点击按装文件开始安装 2.只安装服务端就可以了,一直下一步 3. 4. ...
- MongoDB手稿
- 一套基于 Ant Design 和 Blazor 的开源企业级组件库
前言 今天大姚给大家分享一套基于Ant Design和Blazor的开源(MIT License).免费的企业级组件库(喜欢Ant Design风格的同学推荐使用):Ant Design Blazor ...
- oeasy教您玩转vim - 83 - # 表达式Expression
表达式 expression 回忆 关于 函数function ,我们回忆一下 可以查询 可以新建 可以调用 还可以删除 我想用 函数function 往 buffuer 里面写点东西 比如写一个 ...
- 第一节 线性数据结构 STL
vector 容器 迭代器 vector<int> v{1, 0, 0, 8, 6}; for(vector<int>::interator it = v.begin(); i ...
- Python 基于lxml.etree实现xpath查找HTML元素
基于lxml.etree实现xpath查找HTML元素 By:授客 QQ:1033553122 #实践环境 WIN 10 Python 3.6.5 lxml-4.6.2-cp36-cp36m-win_ ...
- .NET TCP、UDP、Socket、WebSocket
做.NET应用开发肯定会用到网络通信,而进程间通信是客户端开发使用频率较高的场景. 进程间通信方式主要有命名管道.消息队列.共享内存.Socket通信,个人使用最多的是Sokcet相关. 而Socke ...
- JAVA课后谈1
1.课程中动手动脑的问题 在本次课堂实验中,我暴露出了很多问题,尤其是逻辑思维方面,不能很好的处理数理运算问题.在实际生活中客户的要求千变万化,而我们作为一个合格的程序设计者应该顺应其要求,尽可能的去 ...