HarmonyOS开发实战:分布式文件系统-hmdfs

 分布式文件系统提供跨设备的文件访问能力,适用于如下场景:

  • 两台设备组网,A 设备可以无感读取和修改 B 设备的文件。

  • 边缘服务器可以自动同步组网中多个嵌入式设备中的文件数据。

hmdfs 在分布式软总线动态组网的基础上,为网络上各个设备结点提供一个全局一致的访问视图,支持开发者通过基础文件系统接口进行读写访问,具有高性能、低延时等优点。

其包括如下几个核心模块:

  • distributed_file_daemon:分布式文件管理常驻用户态服务,负责接入设备组网、数据传输能力,并负责挂载 hmdfs。

  • hmdfs(Harmony Distributed File System):分布式文件系统核心模块,是一种面向移动分布式场景的、高性能的、基于内核实现的、堆叠式文件系统。

约束

接口支持情况

分布式文件管理当前不支持或有限支持如下 VFS 系统调用:

  • symlink:不支持。
  • mmap:仅支持读。
  • rename:仅支持同目录操作。

规格

  • 最大目录层级

    与被堆叠文件系统,即 data 分区所用文件系统,如 ext4、f2fs 等保持一致。

  • 最大文件名长度

    取决于 680B 与被堆叠文件支持长度的最小值。f2fs 和 ext4 均为 255B。

  • 最大单文件大小

    取决于 264264B 与被堆叠文件系统支持最大单文件大小的最小值。ext4 单文件最大为 16TB,f2fs 单文件最大为 3.94TB。

环境约束

  • 运行环境的有线网卡名称必须是 eth0 ,无线网卡的名称必须是 wlan0 。可使用 ip a 命令查看当前环境的网卡名称,如果没有 eth0 或者 wlan0 的网卡,那么 softbus_server 会启动失败,功能失效。解决方案参考 常见问题。

  • openEuler 的内核版本需要是 5.10.x,可以通过使用 uname -r 查看内核版本。

  • openEuler 各个设备在同一个网段中,并且设备之间网络通畅,防火墙未拦截 softbus 的数据包。

说明

安装

说明:如果碰到步骤未成功执行,可参考后面 常见问题 进行解决。

  1. 完整地使用分布式文件系统,需要安装 hmdfs 和 filemanagement_dfs_service 两个软件包。使用以下命令安装:

    sudo dnf install hmdfs filemanagement_dfs_service
  2. 安装 hmdfs 文件系统。安装 hmdfs 之后会提供一个 hmdfs.ko 文件,其存放在 /lib/modules/$(uname -r)/hmdfs 目录下,需要插入该 ko 来安装 hmdfs 文件系统:

    cd /lib/modules/$(uname -r)/hmdfs
    insmod hmdfs.ko

    注意: 如果 /lib/modules/$(uname -r)/hmdfs/ 目录下没有 hmdfs.ko 文件,是因为 hmdfs 工程构建时依赖的内核版本和当前运行环境内核版本不一致,可以在 /lib/modules 其他内核版本目录下查找 hmdfs.ko 文件

配置

  1. 后续有服务启动依赖 libsec_shared.z.so 这个动态库,而在 openEuler 下这个动态库叫做 libboundscheck.so(由 libboundscheck 软件包提供),因此需要在 /usr/lib64 下软链接出一个 libsec_shared.z.so

    ln -s /usr/lib64/libboundscheck.so /usr/lib64/libsec_shared.z.so
  2. 配置每个设备的 SN 号。目前 softbus_sever 等服务获取设备的 udid 还是使用 /etc/SN 文件中设置的 SN 号,因此需要在每台 openEuler 设置 不同的 SN 号

    echo "111" > /etc/SN # 注意:不同设备设置不同的数值

使用

分布式文件系统的使用分为两块:挂载 hmdfs 目录 和 启动 distributed_file_daemon 服务。注意:以下步骤需要在每台 openEuler 设备下执行

挂载 hmdfs 目录
  1. 挂载 hmdfs 目录,可以直接使用 mount 命令进行挂载,保持 OpenHarmony 的目录结构一样,挂载 /data/service/el2/100/non_account 到 /mnt/hmdfs/100/non_account

    mkdir -p /data/service/el2/100/non_account
    mkdir -p /mnt/hmdfs/100/non_account
    sudo mount -t hmdfs -o merge,local_dst="/mnt/hmdfs/100/non_account" "/data/service/el2/100//non_account" "/mnt/hmdfs/100/non_account"

    挂载之后,可以使用 df -h 命令查看新增了挂载的目录,并且挂载目录下会有 device_view 和 merge_view 两个目录:

    ├── device_view
    │   └── local
    └── merge_view
启动 dfs_service 服务

安装 filemanagement_dfs_service 及其依赖的软件包后,相关的可执行二进制会存放在 /system/bin/ 目录下,库文件会存放在 /system/lib64 下。

  1. 启动 dfs_service 分布式文件服务:

    cd /system/bin
    ./start_services.sh dfs
  2. 停止 dfs_service 分布式文件服务:

    cd /system/bin
    ./stop_service.sh dfs

功能使用

每台 openEuler 设备启动完 distributed_file_daemon 之后,可以在挂载的 /mnt/hmdfs/100/non_account 下看到远端设备的目录(示例是只有两台 openEuler 设备互联):

├── device_view
│   ├── fceda1e26c36d1dd0ba65c00d71c1ab619fcf088ad2adf33cd1e2f396dc70ee2
│   └── local
└── merge_view

⽬录下会有两个⽂件视图:device_view 是分设备的视图,local 是本地⽂件视图,另外⼀个是远端设备的⽂件视图;merge_view 是合并视图,多个设备的⽂件都在这⼀个⽬录。

后续需要跨设备进行⽂件操作,只需要操作 device_view 下⾯远端设备⽬录下的⽂件即可。

常见问题

  • 启动各个服务日志一直在报错 Binder Driver died

    原因:说明系统未开启 binder,可以查看 /dev/binder 文件是否存在,如果不存在则说明未开启 binder。

    解决办法:参考 communication_ipc 仓 openEuler-22.03-LTS-SP3 分支的 README 开启 binder。

  • 无法插入 hmdfs.ko 文件,报错 insmod: ERROR: could not insert module hmdfs.ko: Invalid parameters

    原因:hmdfs 编译时依赖的 kernel 版本和现在运行环境不一致或者当前系统未开启。

    解决方法一:编译一个和运行环境内核匹配的 hmdfs.ko,然后插入该 ko 文件使用。

    解决方法二:更换和 SP3 的 kernel 版本一致的 openEuler 版本。

  • 树莓派 22.03-LTS-SP3 openEuler版本下,无法插入 hmdfs.ko 文件,报错 insmod: ERROR: could not insert module hmdfs.ko: Invalid module format.

    原因:树莓派使用的 kernel 版本是树莓派特有版本,而 repo 源中 hmdfs 软件在工程构建时依赖的是服务器 22.03-LTS-SP3 版本的内核,所以无法插入。

    解决方法:使用 基于 22.03-LTS-SP3 raspberry-pi kernel 编译出来的 hmdfs.ko

  • softbus_server 服务未成功起来,报错 GetNetworkIfIp ifName:eth0 fail

    原因:使用命令 ip a 查看当前系统的网卡名称,查看是否有 eth0 有线网卡名。 因为 softbus_server 是通过 eth0 这个有线网卡名来获取 ip 等信息,如果没有 eth0 网卡则无法启动 softbus_server

    解决方法一:修改网卡名称为 eth0

    解决方法二:修改 softbus_server 源码,将依赖的有线网卡名称改成当前系统的网卡名。

  • 多台 openEuler 设备拉起 softbus_server 服务之后,但是在 distributed_file_daemon 服务的日志显示未发现上线设备。

    原因:设备之间的网络不通,或者开启了防火墙把 softbus 的数据拦截了。

    解决:检查网络是否通畅。(如果不影响业务,可通过 systemctl stop firewalld.service 暂时关闭防火墙进行测试)。

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

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

相关文章

Ubuntu添加系统字体

(2024.6.30) 系统字体保存路径在/usr/share/fonts下,如果此目录下缺少字体,则使用其他可视化api(如Python的pygame库)的默认配置时可能会出现乱码问题。 往Ubuntu中添加字体的方法 方法一:手…

Ant Design Vue:如何提升你的前端开发效率?

目录 1. Ant Design Vue 简介 1.1 特性概览 1.2 安装与配置 2. 常用组件及使用示例 2.1 Button 按钮 2.2 Form 表单 2.3 Table 表格 2.4 Modal 对话框 3. 常见问题及解决方案 3.1 组件无法渲染 问题描述 解决方案 3.2 表单验证失效 问题描述 解决方案 3.3 表格…

Python | 计算位涡平流项

写在前面 最近忙着复习、考试…都没怎么空敲代码,还得再准备一周考试。。。等考完试再慢慢更新了,今天先来浅更一个简单但是使用的python code 在做动力机制分析时,我们常常需要借助收支方程来诊断不同过程的贡献,其中最常见的一…

51单片机-点亮LED灯

目录 新建项目选择型号添加新文件到该项目设置字体和utf-8编码二极管如何区分正负极原理:CPU通过寄存器来控制硬件电路 用P2寄存器的值控制第一个灯亮进制转换编译查看P2寄存器的地址生成HEX文件把代码下载到单片机中 新建项目 选择型号 stc是中国生产的、这个里面…

token登录比密码登录有什么优势吗

token登录比密码登录有什么优势吗 使用令牌(Token)登录相比于密码登录具有一些优势,包括: 安全性:令牌通常采用加密技术,使得它们更难以被盗取或猜测。相比之下,密码存在被猜测、破解或被暴力攻…

解决浏览器兼容性问题的方法

解决浏览器兼容性问题的方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨如何解决网页开发中常见的浏览器兼容性问题。随着互联网技术的发展&…

java中输入输出流的继承关系

在 Java 中,输入输出流的继承关系主要围绕两个抽象基类展开:字节流基类 InputStream 和 OutputStream,以及字符流基类 Reader 和 Writer。这些类形成了 Java I/O 系统的基础,提供了丰富的子类以适应不同的输入输出需求。 字节流 字节流用于处理原始的二进制数据。 Input…

利用Linked SQL Server提权

点击星标,即时接收最新推文 本文选自《内网安全攻防:红队之路》 扫描二维码五折购书 利用Linked SQL Server提权 Linked SQL server是一个SQL Server数据库中的对象,它可以连接到另一个SQL Server或非SQL Server数据源(如Oracle&a…

初学者轻松搞定19个经典的Python程序以及代码演示

Python的经典程序展示了Python语言基本特性和功能的简单示例,这些程序在学习和理解Python编程语言的过程中起着至关重要的作用. 一些常见的经典Python程序及其在学习Python时的功能: 1.Hello, World! print("Hello, World!")解释:这是Python的基本输出…

primeflex overflow样式类相关的用法和案例

文档地址&#xff1a;https://primeflex.org/overflow 案例1 <script setup> import axios from "axios"; import {ref} from "vue";const message ref("frontend variable") axios.get(http://127.0.0.1:8001/).then(function (respon…

【Flink】Flink SQL

一、Flink 架构 Flink 架构 | Apache Flink 二、设置TaskManager、Slot和Parallelism 在Apache Flink中&#xff0c;设置TaskManager、Slot和Parallelism是配置Flink集群性能和资源利用的关键步骤。以下是关于如何设置这些参数的详细指南&#xff1a; 1. TaskManager 设置 …

【漏洞复现】致远互联FE协作办公平台——SQL注入

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 致远互联FE协作办公平台是一个专注于协同管理软件领域的数智化运…

关于内存和外存文件不同字符集下占用空间大小问题

关于内存和外存不同字符集下文件占用空间大小问题 存储&#xff08;外存&#xff09;的文件中的字符&#xff1a; ASCII&#xff1a;每个字符占用1个字节&#xff0c;用来存储英文字符和常用标点符号。ISO-8859-1&#xff1a;每个字符占用1个字节&#xff0c;向下兼容ASCII。G…

DS18B20单总线数字温度传感器国产替代MY18E20 MY1820 MY18B20Z MY18B20L(一)

前言 DS18B20是全球第一个单总线数字温度传感器&#xff0c;推出时间已经超过30年&#xff0c;最早由美国达拉斯半导体公司推出&#xff0c;2001年1月&#xff0c;美信以25亿美元收购达拉斯半导体&#xff08;Dallas Semiconductor&#xff09;&#xff0c;而美信在2021年8月被…

DM达梦数据库存储过程

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

RDMA通信2:RDMA基本元素和组成 通信过程元素关系解析 视频教程

哈哈哈&#xff0c;今天我们把下面这张图理解了&#xff0c;我们的任务就完成了&#xff01; 视频教程在这&#xff1a;1.2 RDMA基本元素和组成 通信过程元素关系解析_哔哩哔哩_bilibili 一、WQ和WQE 工作队列元素(work queue element,WQE)&#xff1a;是软件下发给硬件的任务…

Apache Ranger 2.4.0 集成Hive 3.x(Kerbos)

一、解压tar包 tar zxvf ranger-2.4.0-hive-plugin.tar.gz 二、修改install.propertis POLICY_MGR_URLhttp://localhost:6080REPOSITORY_NAMEhive_repoCOMPONENT_INSTALL_DIR_NAME/BigData/run/hiveCUSTOM_USERhadoop 三、进行enable [roottv3-hadoop-01 ranger-2.4.0-hive…

什么是TOGAF架构框架的ADM方法?

ADM是架构开发方法&#xff08; Architecture Development Method&#xff09;&#xff0c;为开发企业架构所要执行的各个步骤以及它们质检的关系进行详细的定义&#xff0c;它是TOGAF规范中最为核心的内容。 ADM的具体步骤&#xff1a; 预备阶段&#xff08;Preliminary Phas…

求职刷题力扣 DAY38动态规划 part04

1. 1049. 最后一块石头的重量 II 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能…

STM32第十三课:DMA多通道采集光照烟雾

文章目录 需求一、DMA&#xff08;直接存储器存取&#xff09;二、实现流程1.时钟使能2.设置外设寄存器地址3.设置存储器地址4.设置要传输的数据量5.设置通道优先级6.设置传输方向7.使通道和ADC转换 三、数据处理四、需求实现总结 需求 通过DMA实现光照强度和烟雾浓度的多通道…