91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙輕內(nèi)核源碼分析:虛擬文件系統(tǒng) VFS

王程 ? 來(lái)源: jf_75796907 ? 作者: jf_75796907 ? 2024-02-18 14:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

VFS(Virtual File System)是文件系統(tǒng)的虛擬層,它不是一個(gè)實(shí)際的文件系統(tǒng),而是一個(gè)異構(gòu)文件系統(tǒng)之上的軟件粘合層,為用戶提供統(tǒng)一的類 Unix 文件操作接口。由于不同類型的文件系統(tǒng)接口不統(tǒng)一,若系統(tǒng)中有多個(gè)文件系統(tǒng)類型,訪問(wèn)不同的文件系統(tǒng)就需要使用不同的非標(biāo)準(zhǔn)接口。而通過(guò)在系統(tǒng)中添加 VFS 層,提供統(tǒng)一的抽象接口,屏蔽了底層異構(gòu)類型的文件系統(tǒng)的差異,使得訪問(wèn)文件系統(tǒng)的系統(tǒng)調(diào)用不用關(guān)心底層的存儲(chǔ)介質(zhì)和文件系統(tǒng)類型,提高開(kāi)發(fā)效率。本文先介紹下 VFS 的結(jié)構(gòu)體和全局變量,然后詳細(xì)分析下 VFS 文件操作接口。文中所涉及的源碼,均可以在開(kāi)源站點(diǎn) https://gitee.com/openharmony/kernel_liteos_m 獲取。

1、VFS 結(jié)構(gòu)體定義

在文件 componentsfsvfsfs_operations.h 中定義了 VFS 虛擬文件系統(tǒng)操作涉及的結(jié)構(gòu)體。⑴處的 struct MountOps 結(jié)構(gòu)體封裝了掛載相關(guān)的操作,包含掛載、卸載和文件系統(tǒng)統(tǒng)計(jì)操作。⑵處的 struct FsMap 結(jié)構(gòu)體映射文件系統(tǒng)類型及其對(duì)應(yīng)的掛載操作和文件系統(tǒng)操作,支持的文件類型包含 “fat” 和 “l(fā)ittlefs” 兩種,通過(guò)這個(gè)結(jié)構(gòu)體可以獲取對(duì)應(yīng)文件類型的掛載操作及文件系統(tǒng)操作接口。⑶處的 struct FileOps 封裝文件系統(tǒng)的操作接口,包含文件操作、目錄操作,統(tǒng)計(jì)等相應(yīng)的接口。

⑴  struct MountOps {
        int (*Mount)(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags,
            const void *data);
        int (*Umount)(const char* target);
        int (*Umount2)(const char* target, int flag);
        int (*Statfs)(const char *path, struct statfs *buf);
    };

⑵  struct FsMap {
        const char *fileSystemtype;
        const struct MountOps *fsMops;
        const struct FileOps *fsFops;
    };

⑶  struct FileOps {
        int (*Open)(const char *path, int openFlag, ...);
        int (*Close)(int fd);
        int (*Unlink)(const char *fileName);
        int (*Rmdir)(const char *dirName);
        int (*Mkdir)(const char *dirName, mode_t mode);
        struct dirent *(*Readdir)(DIR *dir);
        DIR *(*Opendir)(const char *dirName);
        int (*Closedir)(DIR *dir);
        int (*Read)(int fd, void *buf, size_t len);
        int (*Write)(int fd, const void *buf, size_t len);
        off_t (*Seek)(int fd, off_t offset, int whence);
        int (*Getattr)(const char *path, struct stat *buf);
        int (*Rename)(const char *oldName, const char *newName);
        int (*Fsync)(int fd);
        int (*Fstat)(int fd, struct stat *buf);
        int (*Stat)(const char *path, struct stat *buf);
        int (*Ftruncate)(int fd, off_t length);
    };

2、VFS 重要的內(nèi)部全局變量

在文件 componentsfsvfslos_fs.c 中有 2 個(gè)全局變量比較重要,⑴處定義的數(shù)組 g_fsmap 維護(hù)文件系統(tǒng)類型映射信息,數(shù)組大小為 2,支持 “fat” 和 “l(fā)ittlefs” 文件類型。⑵處的變量 g_fs 根據(jù)掛載的文件類型指向數(shù)組 g_fsmap 中的 FsMap 類型元素。⑶處的函數(shù) InitMountInfo () 會(huì)給數(shù)組 g_fsmap 進(jìn)行初始化賦值。第 0 個(gè)元素維護(hù)的 “fat” 文件類型的文件系統(tǒng)映射信息,第 1 個(gè)元素維護(hù)的 “l(fā)ittlefs” 文件類型的文件系統(tǒng)映射信息。涉及到的掛載操作、文件系統(tǒng)操作變量 g_fatfsMnt、g_fatfsFops、g_lfsMnt、g_lfsFops 在對(duì)應(yīng)的文件系統(tǒng)文件中定義。⑷處的函數(shù) MountFindfs () 用于根據(jù)文件類型從數(shù)組中獲取文件映射信息。

⑴  static struct FsMap g_fsmap[MAX_FILESYSTEM_LEN] = {0};
⑵  static struct FsMap *g_fs = NULL;

⑶  static void InitMountInfo(void)
    {
    #if (LOSCFG_SUPPORT_FATFS == 1)
        extern struct MountOps g_fatfsMnt;
        extern struct FileOps g_fatfsFops;
        g_fsmap[0].fileSystemtype = strdup("fat");
        g_fsmap[0].fsMops = &g_fatfsMnt;
        g_fsmap[0].fsFops = &g_fatfsFops;
    #endif
    #if (LOSCFG_SUPPORT_LITTLEFS == 1)
        extern struct MountOps g_lfsMnt;
        extern struct FileOps g_lfsFops;
        g_fsmap[1].fileSystemtype = strdup("littlefs");
        g_fsmap[1].fsMops = &g_lfsMnt;
        g_fsmap[1].fsFops = &g_lfsFops;
    #endif
    }

⑷  static struct FsMap *MountFindfs(const char *fileSystemtype)
    {
        struct FsMap *m = NULL;

        for (int i = 0; i < MAX_FILESYSTEM_LEN; i++) {
            m = &(g_fsmap[i]);
            if (m-?>fileSystemtype && strcmp(fileSystemtype, m->fileSystemtype) == 0) {
                return m;
            }
        }

        return NULL;
    }

3、VFS 相關(guān)的操作接口

在之前的系列文章《鴻蒙輕內(nèi)核 M 核源碼分析系列十九 Musl LibC》中介紹了相關(guān)的接口,那些接口會(huì)調(diào)用 VFS 文件系統(tǒng)中操作接口。對(duì)每個(gè)接口的用途用法不再描述,快速記錄下各個(gè)操作接口。

3.1 掛載卸載操作?

掛載卸載操作包含 LOS_FsMount、LOS_FsUmount、LOS_FsUmount2 等 3 個(gè)操作。⑴處在掛載文件系統(tǒng)之前,需要初始化文件系統(tǒng)映射信息,只會(huì)操作一次。⑵處根據(jù)文件系統(tǒng)類型獲取對(duì)應(yīng)的文件類型映射信息。從這里,可以獲知,LiteOS-M 內(nèi)核只能同時(shí)支持一個(gè)文件系統(tǒng),不能只支持 fat 又支持 littlefs。⑶處對(duì)應(yīng)對(duì)應(yīng)的文件系統(tǒng)掛載接口實(shí)現(xiàn)掛載操作。其他兩個(gè)函數(shù)同樣比較簡(jiǎn)單,自行閱讀代碼即可。

int LOS_FsMount(const char *source, const char *target,
                    const char *filesystemtype, unsigned long mountflags,
                    const void *data)
    {
        static int initFlag = 0;

⑴      if (initFlag == 0) {
            InitMountInfo();
            initFlag = 1;
        }

⑵      g_fs = MountFindfs(filesystemtype);
        if (g_fs == NULL) {
            errno = ENODEV;
            return FS_FAILURE;
        }

        if (g_fs->fsMops == NULL || g_fs->fsMops->Mount == NULL) {
            errno = ENOSYS;
            return FS_FAILURE;
        }

⑶      return g_fs->fsMops->Mount(source, target, filesystemtype, mountflags, data);
    }

    int LOS_FsUmount(const char *target)
    {
        if (g_fs == NULL) {
            errno = ENODEV;
            return FS_FAILURE;
        }
        if (g_fs->fsMops == NULL || g_fs->fsMops->Umount == NULL) {
            errno = ENOSYS;
            return FS_FAILURE;
        }
        return g_fs->fsMops->Umount(target);
    }

    int LOS_FsUmount2(const char *target, int flag)
    {
        if (g_fs == NULL) {
            errno = ENODEV;
            return FS_FAILURE;
        }
        if (g_fs->fsMops == NULL || g_fs->fsMops->Umount2 == NULL) {
            errno = ENOSYS;
            return FS_FAILURE;
        }
        return g_fs->fsMops->Umount2(target, flag);
    }

3.2 文件目錄操作?

VFS 封裝的文件目錄操作接口包含 LOS_Open、LOS_Close、LOS_Read、LOS_Write、LOS_Opendir、LOS_Readdir、LOS_Closedir 等等。對(duì)具體的文件類型的文件目錄操作接口進(jìn)行封裝,代碼比較簡(jiǎn)單,自行閱讀即可,部分代碼片段如下。

......

int LOS_Unlink(const char *path)
{
    if (g_fs == NULL) {
        errno = ENODEV;
        return FS_FAILURE;
    }
    if (g_fs->fsFops == NULL || g_fs->fsFops->Unlink == NULL) {
        errno = ENOSYS;
        return FS_FAILURE;
    }
    return g_fs->fsFops->Unlink(path);
}

int LOS_Fstat(int fd, struct stat *buf)
{
    if (g_fs == NULL) {
        errno = ENODEV;
        return FS_FAILURE;
    }
    if (g_fs->fsFops == NULL || g_fs->fsFops->Fstat == NULL) {
        errno = ENOSYS;
        return FS_FAILURE;
    }
    return g_fs->fsFops->Fstat(fd, buf);
}

......

int LOS_Mkdir(const char *path, mode_t mode)
{
    if (g_fs == NULL) {
        errno = ENODEV;
        return FS_FAILURE;
    }
    if (g_fs->fsFops == NULL || g_fs->fsFops->Mkdir == NULL) {
        errno = ENOSYS;
        return FS_FAILURE;
    }
    return g_fs->fsFops->Mkdir(path, mode);
}

DIR *LOS_Opendir(const char *dirName)
{
    if (g_fs == NULL) {
        errno = ENODEV;
        return NULL;
    }
    if (g_fs->fsFops == NULL || g_fs->fsFops->Opendir == NULL) {
        errno = ENOSYS;
        return NULL;
    }
    return g_fs->fsFops->Opendir(dirName);
}
......

3.3 隨機(jī)數(shù)文件?

文件 /dev/random 可以用于產(chǎn)生隨機(jī)數(shù)。在開(kāi)啟宏 LOSCFG_RANDOM_DEV 時(shí),LiteOS-M 支持隨機(jī)數(shù)文件。從⑴處可知隨機(jī)數(shù)依賴文件~/openharmony/base/security/huks/interfaces/innerkits/huks_lite/hks_client.h 和 hks_tmp_client.c,這些文件用來(lái)產(chǎn)生隨機(jī)數(shù)。⑵處定義的 RANDOM_DEV_FD 和 RANDOM_DEV_PATH 分別是隨機(jī)數(shù)文件的文件描述符和隨機(jī)數(shù)文件路徑。

#ifdef LOSCFG_RANDOM_DEV
⑴  #include "hks_client.h"
⑵  #define RANDOM_DEV_FD  CONFIG_NFILE_DESCRIPTORS + CONFIG_NSOCKET_DESCRIPTORS
    #define RANDOM_DEV_PATH  "/dev/random"
    #endif

3.3.1 隨機(jī) LOS_Open 和 LOS_Close

該函數(shù)打開(kāi)一個(gè)文件,獲取文件描述符用于進(jìn)一步操作。⑴處表示對(duì)于隨機(jī)數(shù)文件,打開(kāi)的標(biāo)簽選項(xiàng)只能支持指定的這些,否則會(huì)返回錯(cuò)誤碼。⑵處獲取標(biāo)準(zhǔn)路徑,如果獲取失敗,返回錯(cuò)誤碼。⑶處比較獲取的標(biāo)準(zhǔn)路徑是否為 RANDOM_DEV_PATH,在確認(rèn)是隨機(jī)數(shù)路徑時(shí),⑷處開(kāi)始判斷。如果訪問(wèn)模式為只讀,返回錯(cuò)誤,如果打開(kāi)選項(xiàng)標(biāo)簽是目錄,返回錯(cuò)誤。如果不是上述錯(cuò)誤情形,返回隨機(jī)數(shù)文件描述符。⑸處如果獲取的標(biāo)準(zhǔn)路徑為 “/” 或 “/dev”,則根據(jù)不同的選項(xiàng),返回不同的錯(cuò)誤碼。

int LOS_Open(const char *path, int oflag, ...)
{
#ifdef LOSCFG_RANDOM_DEV
    unsigned flags = O_RDONLY | O_WRONLY | O_RDWR | O_APPEND | O_CREAT | O_LARGEFILE | O_TRUNC | O_EXCL | O_DIRECTORY;
⑴  if ((unsigned)oflag & ~flags) {
        errno = EINVAL;
        return FS_FAILURE;
    }

    size_t pathLen = strlen(path) + 1;
    char *canonicalPath = (char *)malloc(pathLen);
    if (!canonicalPath) {
        errno = ENOMEM;
        return FS_FAILURE;
    }
⑵  if (GetCanonicalPath(NULL, path, canonicalPath, pathLen) == 0) {
        FREE_AND_SET_NULL(canonicalPath);
        errno = ENOMEM;
        return FS_FAILURE;
    }

⑶  if (strcmp(canonicalPath, RANDOM_DEV_PATH) == 0) {
        FREE_AND_SET_NULL(canonicalPath);
⑷      if ((O_ACCMODE & (unsigned)oflag) != O_RDONLY) {
            errno = EPERM;
            return FS_FAILURE;
        }
        if ((unsigned)oflag & O_DIRECTORY) {
            errno = ENOTDIR;
            return FS_FAILURE;
        }
        return RANDOM_DEV_FD;
    }
⑸  if (strcmp(canonicalPath, "/") == 0 || strcmp(canonicalPath, "/dev") == 0) {
        FREE_AND_SET_NULL(canonicalPath);
        if ((unsigned)oflag & O_DIRECTORY) {
            errno = EPERM;
            return FS_FAILURE;
        }
        errno = EISDIR;
        return FS_FAILURE;
    }
    FREE_AND_SET_NULL(canonicalPath);
#endif
......
}

對(duì)于隨機(jī)數(shù)文件,關(guān)閉時(shí),直接返回成功,不需要額外操作。代碼片段如下:

int LOS_Close(int fd)
{
#ifdef LOSCFG_RANDOM_DEV
    if (fd == RANDOM_DEV_FD) {
        return FS_SUCCESS;
    }
#endif
......
}

3.3.2 隨機(jī) LOS_Read 和 LOS_Write

隨機(jī)數(shù)文件讀寫使用 LOS_Read 和 LOS_Write 接口。讀取時(shí),⑴處先對(duì)傳入?yún)?shù)進(jìn)行校驗(yàn),如果讀取字節(jié)數(shù)為 0,則返回 0;如果讀取的緩存地址為空,返回 - 1;如果讀的字節(jié)大于 1024,則使用 1024。⑵處調(diào)用 hks_generate_random () 產(chǎn)生隨機(jī)數(shù)。由于隨機(jī)數(shù)文件是只讀的,如果嘗試寫入會(huì)返回 - 1 錯(cuò)誤碼。

ssize_t LOS_Read(int fd, void *buf, size_t nbyte)
{
#ifdef LOSCFG_RANDOM_DEV
    if (fd == RANDOM_DEV_FD) {
⑴      if (nbyte == 0) {
            return FS_SUCCESS;
        }
        if (buf == NULL) {
            errno = EINVAL;
            return FS_FAILURE;
        }
        if (nbyte > 1024) { /* 1024, max random_size */
            nbyte = 1024; /* hks_generate_random: random_size must <= 1024 */
        }
        struct hks_blob key = {HKS_BLOB_TYPE_RAW, (uint8_t *)buf, nbyte};
⑵      if (hks_generate_random(&key) != 0) {
            errno = EIO;
            return FS_FAILURE;
        }
        return (ssize_t)nbyte;
    }
#endif
......
}

ssize_t LOS_Write(int fd, const void *buf, size_t nbyte)
{
#ifdef LOSCFG_RANDOM_DEV
    if (fd == RANDOM_DEV_FD) {
        errno = EBADF; /* "/dev/random" is readonly */
        return FS_FAILURE;
    }
#endif
......
}


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 文件系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    302

    瀏覽量

    20976
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    685

    瀏覽量

    31319
  • vfs
    vfs
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    5527
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2963

    瀏覽量

    45887
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    明晚8點(diǎn)|睿擎文件系統(tǒng)實(shí)戰(zhàn):從開(kāi)發(fā)到發(fā)布全流程解析

    文件操作到鏡像發(fā)布,一次直播掌握完整開(kāi)發(fā)流程!在嵌入式系統(tǒng)開(kāi)發(fā)中,文件系統(tǒng)是數(shù)據(jù)存儲(chǔ)、配置管理和資源訪問(wèn)的核心基礎(chǔ)。然而在實(shí)際開(kāi)發(fā)中,文件操作效率低下、鏡像打包流程復(fù)雜、
    的頭像 發(fā)表于 11-11 11:53 ?641次閱讀
    明晚8點(diǎn)|睿擎<b class='flag-5'>文件系統(tǒng)</b>實(shí)戰(zhàn):從開(kāi)發(fā)到發(fā)布全流程解析

    睿擎派文件系統(tǒng)指南:從開(kāi)發(fā)到發(fā)布全流程實(shí)踐 | 技術(shù)解析

    在嵌入式系統(tǒng)開(kāi)發(fā)中,文件系統(tǒng)扮演著至關(guān)重要的角色,它負(fù)責(zé)數(shù)據(jù)的持久化存儲(chǔ)、配置文件管理和資源訪問(wèn)等核心功能。睿擎平臺(tái)提供了一套完整的文件系統(tǒng)解決方案,從開(kāi)發(fā)階段的API調(diào)用到調(diào)試階段的
    的頭像 發(fā)表于 11-05 18:13 ?8095次閱讀
    睿擎派<b class='flag-5'>文件系統(tǒng)</b>指南:從開(kāi)發(fā)到發(fā)布全流程實(shí)踐 | 技術(shù)解析

    飛凌嵌入式ElfBoard-系統(tǒng)應(yīng)用編程之文件I/O

    字機(jī)制,用于不同進(jìn)程之間的通信。管道和套接字也被視為文件,并通過(guò)文件描述符進(jìn)行訪問(wèn)。虛擬文件系統(tǒng)(Virtual File System):虛擬文件系統(tǒng)是Linux
    發(fā)表于 10-24 08:57

    飛凌嵌入式ElfBoard-Vim編輯器之windows與ubuntu系統(tǒng)互傳文件

    如下,點(diǎn)擊菜單欄的“虛擬機(jī)”,選擇“設(shè)置”點(diǎn)擊“選項(xiàng)”,啟用“共享文件夾”,設(shè)置Windows主機(jī)上的共享目錄,點(diǎn)擊“確定”。虛擬機(jī)的文件共享設(shè)置完成后,將測(cè)試的所用的:
    發(fā)表于 10-20 08:46

    Linux三大主流文件系統(tǒng)解析

    還在為選擇哪個(gè)文件系統(tǒng)而糾結(jié)?作為一名摸爬滾打多年的運(yùn)維老鳥(niǎo),我將用最接地氣的方式,帶你徹底搞懂 Linux 三大主流文件系統(tǒng)的奧秘。
    的頭像 發(fā)表于 08-05 17:37 ?1445次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-文件系統(tǒng)常用命令之磁盤管理與維護(hù)常用命令

    :當(dāng)前系統(tǒng)在哪個(gè)設(shè)備的哪個(gè)分區(qū),其中tmpfs為虛擬文件系統(tǒng);Type:文件系統(tǒng)類型;Size:當(dāng)前系統(tǒng)的大小。1K-blocks對(duì)應(yīng)列的單位是1KB,可通過(guò)-h 或者-m 來(lái)改變單位
    發(fā)表于 06-24 11:26

    飛凌嵌入式ElfBoard ELF 1板卡-busybox構(gòu)建根文件系統(tǒng)文件系統(tǒng)驗(yàn)證

    至此,我們已經(jīng)完成了一個(gè)最小文件系統(tǒng)的構(gòu)建,現(xiàn)在我們使用nfs將其掛載為網(wǎng)絡(luò)文件系統(tǒng),進(jìn)行測(cè)試。開(kāi)發(fā)板啟動(dòng)之后,在uboot階段,修改bootargs環(huán)境變量。在mmcargs中進(jìn)行修改:=&
    發(fā)表于 06-23 16:10

    飛凌嵌入式ElfBoard ELF 1板卡-文件系統(tǒng)簡(jiǎn)介

    臨時(shí)的設(shè)備,例如網(wǎng)絡(luò)文件系統(tǒng)/proc一個(gè)虛擬文件系統(tǒng),為內(nèi)核提供向進(jìn)程發(fā)送信息的機(jī)制。操作系統(tǒng)運(yùn)行時(shí),進(jìn)程以及內(nèi)核信息存放路徑/sbin包
    發(fā)表于 06-19 17:22

    服務(wù)器數(shù)據(jù)恢復(fù)—ocfs2文件系統(tǒng)被格式化為Ext4文件系統(tǒng)的數(shù)據(jù)恢復(fù)案例

    服務(wù)器存儲(chǔ)數(shù)據(jù)恢復(fù)環(huán)境&故障: 人為誤操作將Ext4文件系統(tǒng)誤裝入一臺(tái)服務(wù)器存儲(chǔ)上的Ocfs2文件系統(tǒng)數(shù)據(jù)卷上,導(dǎo)致原Ocfs2文件系統(tǒng)被格式化為Ext4文件系統(tǒng)。
    的頭像 發(fā)表于 06-10 12:03 ?726次閱讀
    服務(wù)器數(shù)據(jù)恢復(fù)—ocfs2<b class='flag-5'>文件系統(tǒng)</b>被格式化為Ext4<b class='flag-5'>文件系統(tǒng)</b>的數(shù)據(jù)恢復(fù)案例

    Vsan數(shù)據(jù)恢復(fù)——Vsan分布式文件系統(tǒng)虛擬機(jī)不可用的數(shù)據(jù)恢復(fù)

    一臺(tái)采用VsSAN分布式文件系統(tǒng)的存儲(chǔ)設(shè)備由于未知原因關(guān)機(jī)重啟。管理員發(fā)現(xiàn)上層的虛擬機(jī)不可用,存儲(chǔ)內(nèi)的數(shù)據(jù)丟失。
    的頭像 發(fā)表于 05-15 17:42 ?572次閱讀
    Vsan數(shù)據(jù)恢復(fù)——Vsan分布式<b class='flag-5'>文件系統(tǒng)</b>上<b class='flag-5'>虛擬</b>機(jī)不可用的數(shù)據(jù)恢復(fù)

    君正內(nèi)核加載文件系統(tǒng)問(wèn)題

    利用 mksquashfs root-uclibc-toolchain720-r519 uvc_fs.squashfs -comp xz -all-root制作了squashfs文件系統(tǒng)一開(kāi)始燒錄可以,后面放了一些文件進(jìn)去就出現(xiàn)圖片中的情況了,請(qǐng)各位大神指點(diǎn)迷津
    發(fā)表于 04-12 09:30

    Linux內(nèi)核編譯失敗?移動(dòng)硬盤和虛擬機(jī)的那些事兒

    Linux內(nèi)核卻失敗了,這是咋回事?FAT和NTFS文件系統(tǒng)不能支持軟鏈接,在這寫格式的磁盤里編譯內(nèi)核會(huì)失敗,同樣也不能在這樣的磁盤里解壓內(nèi)核源碼
    的頭像 發(fā)表于 04-11 11:36 ?993次閱讀
    Linux<b class='flag-5'>內(nèi)核</b>編譯失???移動(dòng)硬盤和<b class='flag-5'>虛擬</b>機(jī)的那些事兒

    如何正確選擇嵌入式文件系統(tǒng)?

    Linux嵌入式系統(tǒng)中,文件系統(tǒng)和緩存機(jī)制常導(dǎo)致數(shù)據(jù)存儲(chǔ)穩(wěn)定性問(wèn)題。本文通過(guò)案例分析原因,對(duì)比不同文件系統(tǒng)特性,為開(kāi)發(fā)者提供優(yōu)化建議,助力提升數(shù)據(jù)穩(wěn)定性和
    的頭像 發(fā)表于 03-17 11:35 ?1103次閱讀
    如何正確選擇嵌入式<b class='flag-5'>文件系統(tǒng)</b>?

    虛擬化數(shù)據(jù)恢復(fù)—VMware虛擬化環(huán)境下重裝系統(tǒng)導(dǎo)致服務(wù)器數(shù)據(jù)丟失的數(shù)據(jù)恢復(fù)

    VMware虛擬化平臺(tái) vmfs文件系統(tǒng) 工作人員誤操作重裝操作系統(tǒng),服務(wù)器崩潰。 重裝系統(tǒng)會(huì)導(dǎo)致文件系統(tǒng)
    的頭像 發(fā)表于 03-13 10:33 ?780次閱讀
    <b class='flag-5'>虛擬</b>化數(shù)據(jù)恢復(fù)—VMware<b class='flag-5'>虛擬</b>化環(huán)境下重裝<b class='flag-5'>系統(tǒng)</b>導(dǎo)致服務(wù)器數(shù)據(jù)丟失的數(shù)據(jù)恢復(fù)

    在stm32cubeprogrammer上燒錄時(shí),取消勾選根文件系統(tǒng),燒錄后發(fā)現(xiàn)sd卡上根文件系統(tǒng)的分區(qū)沒(méi)有了,為什么?

    在修改了linux內(nèi)核后,我想只把bootfs燒錄到sd卡上,而不擦除根文件系統(tǒng)的分區(qū)。 我在stm32cubeprogrammer上燒錄時(shí),取消勾選根文件系統(tǒng),燒錄后發(fā)現(xiàn)sd卡上根文件系統(tǒng)
    發(fā)表于 03-07 06:38