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.pswp.cn/web/37349.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37349.shtml
英文地址,請注明出處:http://en.pswp.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實現光照強度和煙霧濃度的多通道…