色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何去自制文件系統?開發文件系統為什么難?

Linux愛好者 ? 來源:奇伢云存儲 ? 作者:奇伢云存儲 ? 2021-06-11 16:27 ? 次閱讀

我們這個自制文件系統,就是想從形意結合,讓讀者朋友能夠跟隨著筆者一起經歷一次文件系統由 0 到 1 的過程,構建好知識框架,后續的深造將會得心應手。

好,話不多說,我們先從什么是文件系統講起,簡單介紹一些探索文件系統的基礎知識。

1 查看現有文件系統實例

Linux 文件系統相比大家都使用過。大家在自己的 Linux 上機器上執行 mount 命令就能看到當前系統上掛載的所有文件系統:

mount

示例如下:

root@localhost:~# mount

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)

proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

。。。。

比如通過這一行信息我們能看出來:

sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)

信息拆解分析:

sysfs:文件系統名稱;

/sys :文件系統目錄掛載點;

sysfs:文件系統類型

(ro,nosuid,nodev,noexec,relatime):掛載參數

這里蘊含的重要信息:

同一個文件系統類型可以創建多個實例,掛載在不同的掛載點,就跟面向對象里的類和實例的關系;

掛載點必須是目錄;

其實,mount 這個命令很強大,不僅能 list 所有的文件系統,還能掛載文件系統。如下:

掛載文件系統命令:

# 把已經格式化好的 /dev/sdb1 盤掛到 /mnt 目錄上

mount -t ext4 /dev/sdb1 /mnt/

對應卸載文件系統命令:

# 卸載 /mnt 的掛載點

umount /mnt

2 查看目錄掛載的文件系統用量

mount 命令能看到所有的掛載列表,但是如果你想要看到所有文件系統的使用情況,則需要另一個命令:df。df 命令用來查看當前操作系統掛載的文件系統和使用情況:

df -Tha

-T 參數能夠讓你看到所有的文件系統實例的類型;

-h 參數能夠以更符合人類的友好的形式展示數據;

-a 參數展示所有的文件系統,包括 0 Blocks 的文件系統(默認是會過濾掉的);

示例如下:

root@localhost:~# df -ahT

Filesystem Type Size Used Avail Use% Mounted on

sysfs sysfs 0 0 0 - /sys

proc proc 0 0 0 - /proc

/dev/mapper/cl-root xfs 17G 11G 7.0G 60% /

。。。

注意,如果 df 沒有加 -a 參數,類似于上面 sysfs,proc 這種用量 0 的會被過濾掉。這也是 mount 和 df 兩個命令默認顯式信息的區別。

3 查看文件系統掛載配置

文件系統掛載可以通過 mount 命令直接掛載,但是 mount 命令掛載并沒有持久化,關機重啟就沒了。所以想要關機重啟之后,還能自動掛載到指定目錄,那么就要把掛載規則寫到 /etc/fstab 文件中,fstab 就是 fs table 的縮寫,很容易理解。

操作系統在啟動的時候,就會解析這個文件,并按照這個文件里的配置,自動掛載文件系統了。

如下:

root@localhost:~# cat /etc/fstab

/dev/mapper/cl-root / xfs defaults 0 0

UUID=600e3771-af4a-48ca-a557-02204c9a48a5 /boot ext4 defaults 1 2

/dev/mapper/cl-swap swap swap defaults 0 0

fstab 的文件格式:

《設備標識》 《掛載目錄》 《文件系統類型》 《掛載參數》 《dump選項》 《fsck選項》

從左到右參數拆解:

設備標識:能夠標識到唯一的文件系統所在的設備,這里可以是設備路徑,也可以是 LABEL,或者 UUID;

掛載目錄:文件系統掛載的目錄點;

文件系統類型:比如 ext4,ext2,xfs 之類的;

掛載參數:可以填 defaults,也可以精細化配置,比如只讀還是可寫(rw/ro),同步刷盤還是異步(async/sync),等等;

dump選項:讓你能控制文件系統備份的頻率,0 表示不備份;

fsck選項:讓你控制是否開機用 fsck 自檢,0 表示不要;

4 查看內核支持的文件系統

這個直接去看內核模塊即可:

ls /lib/modules/${kernel_version}/kernel/fs/

不同的 Linux 發行版略有不同,比如,centos 一般為:

ls -l /lib/modules/4.18.0-80.el8.x86_64/kernel/fs/

ubuntu 一般為:

ls -l /lib/modules/4.4.0-142-generic/kernel/fs/

在對應的目錄找到對應的 .ko 模塊,比如 ext4.ko ,如果想看內核已經加載的內核模塊,可以調用 lsmod 看到。

簡單普及一下 .ko 模塊的知識:

ko 其實是 kernel object 的縮寫,這類文件存在的意義其實和用戶態的 .so 庫類似,都是為了模塊化的編程實踐。內核把核心主干框架之外的功能拆解成模塊,需要的時候就加載 ko 模塊,不需要的時候卸載即可。這樣帶來的好處就是方便開發和使用,保持內核的核心代碼極度精煉。

類似于文件系統,硬件驅動等等,都是以這種形式來加載使用的。

開發文件系統為什么難?

為什么文件系統的開發大家會覺得非常難?原因其實不在于實現,而在于調試和排障,因為早期文件系統的開發只能在內核之中,這個帶來了非常高的門檻。

1 內核文件系統

因為在此之前我們看到了文件系統是位于內核之中, vfs 之下,塊存儲模塊之上的一個位置。對外呈現文件存儲實現,對下管理裸塊設備。劃重點,文件系統是位于內核的一個模塊,那就可以理解了,內核模塊的開發之所以艱難就是難在調試和排障,用戶態的程序你可以隨意 debug,出問題最多也就是 panic,coredump,內核態的程序出了文件就是宕機,所有現場都丟失,你只能通過日志,kdump 等手段來排查。并且內核態程序的編寫是要注意非常多的規范的,比如內存分配,比用戶態的要謹慎的多。

poYBAGDDH2uAPpurAACPSwcAWCA828.jpg

那怎么辦?我們本次的目標是要自制實現一個極簡的文件系統,但總不能帶大家趟一次內核開發的坑吧!那可是要嚇退 99% 的小伙伴。

有辦法的,內核開發者考慮到了這個問題,又考慮到文件系統的需求是千變萬化的,所以提供了一種手段,把 IO 路徑導向用戶態,由用戶態程序捕獲到 IO ,從而實現文件的存儲,這個機制就叫 FUSE 機制。

2 FUSE 文件系統

作為自制 FS 系列第一篇,我們不講 FUSE 的實現,而是通過一個動畫來演示 IO 的旅途:

pYYBAGDDH3WAGbrnAACf32rrssQ509.jpg

這里的路徑做了一些簡化,簡化了用戶態之上的邏輯處理,為什么路徑是這樣子?什么是 FUSE ?下篇專題解釋。

總結

本篇文章是為后續鋪墊一些基礎知識,從形的方面,系統介紹了一些命令,告訴你文件系統怎么配置,怎么掛載,怎么查看,怎么獲取到使用詳情。這些基礎知識在后面自制文件系統的時候,都要用上。這些 Linux 命令都是幫助我們從文件系統的外圍去用,去摸,去嗅,從而再去深入理解。

我們目標不止如此,我們是要親手做一個文件系統,動手做過一遍的東西,你對它理解也將會突飛猛進,更加深刻。

下面總結一下上面的基礎以上的知識:

mount 用來列舉查看當前所有文件系統實例,也能支持掛載命令(但 mount 掛載不會持久化,重啟就沒了),umount 用來卸載;

/etc/fstab 是用來配置文件系統掛載規則的,是持久化的配置,重啟不丟;

df -aTh 用來查看每個文件系統掛載目錄的詳情,包括空間使用量,總量,掛載點等信息;

內核模塊的功能以 ko 文件的形式體現,在 /lib/modules/${kernel_version}/kernel/fs/ 目錄可以看到支持的內核文件系統模塊,lsmod 命令可以看到已經加載的內核模塊;

文件系統開發之所以難?是因為之前在內核中開發,內核開發最難的在于調試和排障手段不方便。那文件系統還有出路嗎?有,奇伢帶你自制一個極簡的文件系統,基于 Linux 系統使用純 Go 語言來做哦,敬請期待后續,自己動手,理解更深。

責任編輯:lq6

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11292

    瀏覽量

    209332
  • 文件系統
    +關注

    關注

    0

    文章

    284

    瀏覽量

    19904

原文標題:自制文件系統:文件系統的樣子

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    華納云:VFS在提升文件系統性能方面的具體實踐

    VFS(Virtual File System)通過提供統一的接口和抽象層,使得操作系統能夠以高效的方式管理和訪問不同的文件系統。以下是一些VFS在提升文件系統性能方面的具體實踐示例: 統一的
    的頭像 發表于 11-27 15:59 ?160次閱讀

    stm32單片機基于rt-thread 的 littlefs 文件系統 的使用

    簡介littlefs是ARM官方推出的,專為嵌入式系統設計的文件系統,相比傳統的文件系統,littlefs具有以下優點:1、自帶擦寫均衡2、支持掉電保護3、占用的
    的頭像 發表于 11-06 08:04 ?618次閱讀
    stm32單片機基于rt-thread 的 littlefs <b class='flag-5'>文件系統</b> 的使用

    Linux根文件系統的掛載過程

    Linux根文件系統(rootfs)是Linux系統中所有其他文件系統和目錄的起點,它是內核啟動時掛載的第一個文件系統
    的頭像 發表于 10-05 16:50 ?403次閱讀

    如何構建Linux根文件系統

    構建Linux根文件系統是一個涉及多個步驟和概念的過程,它對于Linux系統的啟動和運行至關重要。
    的頭像 發表于 10-05 16:47 ?293次閱讀

    小型文件系統如何選擇?FatFs和LittleFs優缺點比較

    01? 概述 文件系統在嵌入式系統中的作用不可或缺,它提供了對非易失性存儲設備(如閃存、SD卡等)上的數據進行有效組織和管理的能力。通過文件系統,嵌入式系統可以像在傳統計算機上一樣創建
    的頭像 發表于 09-29 16:14 ?1600次閱讀
    小型<b class='flag-5'>文件系統</b>如何選擇?FatFs和LittleFs優缺點比較

    想提高開發效率,不要忘記文件系統

    ?同學們都知道,開發過程中文件系統的重要性,同樣的,4G-Cat.1模組的文件系統也非常重要,它通常與數據傳輸速度、存儲效率,以及數據安全性等有非常重要的關系,在應用開發中也非常重要。
    的頭像 發表于 09-21 08:18 ?232次閱讀
    想提高<b class='flag-5'>開發</b>效率,不要忘記<b class='flag-5'>文件系統</b>

    如何更改Linux文件系統終端顯示顏色

    自己制作的簡單 Linux 文件系統,你會發現終端顯示為黑白色,很不好看
    的頭像 發表于 08-12 17:29 ?527次閱讀
    如何更改Linux<b class='flag-5'>文件系統</b>終端顯示顏色

    如何修改buildroot和debian文件系統

    本文檔主要介紹在沒有編譯環境的情況下,如何修改buildroot和debian文件系統方法,如在buildroot文件系統中添加文件、修改目錄等文件操作,在debian
    的頭像 發表于 07-22 17:46 ?458次閱讀
    如何修改buildroot和debian<b class='flag-5'>文件系統</b>

    Linux高級文件系統管理詳解

    階的文件系統就得要學習,本章我們會介紹磁盤陣列 (RAID),及邏輯卷軸文件系統 (LVM),這些工具都可以幫助你管理與維護使用者可用的磁盤容量.
    的頭像 發表于 07-16 16:31 ?353次閱讀

    linux--sysfs文件系統

    sysfs文件系統 sysfs,全稱為System Filesystem,是一個由Linux內核實現的虛擬文件系統。它扮演著一個橋梁的角色,將內核中的設備和驅動程序信息以文件的形式呈現給用戶空間
    的頭像 發表于 07-08 11:37 ?844次閱讀
    linux--sysfs<b class='flag-5'>文件系統</b>

    鴻蒙開發文件管理:【@ohos.statfs (statfs)】

    該模塊提供文件系統相關存儲信息的功能,向應用程序提供獲取文件系統總字節數、空閑字節數的JS接口。
    的頭像 發表于 06-13 09:46 ?278次閱讀
    鴻蒙<b class='flag-5'>開發文件</b>管理:【@ohos.statfs (statfs)】

    【嵌入式SD NAND】基于FATFS/Littlefs文件系統的日志框架實現

    文章目錄【嵌入式】基于FATFS/Littlefs文件系統的日志框架實現1.概述2.設計概要3.設計實現3.1初始化`init`3.2日志寫入`write`3.3日志讀取`read`3.4注銷
    的頭像 發表于 03-14 18:12 ?1156次閱讀
    【嵌入式SD NAND】基于FATFS/Littlefs<b class='flag-5'>文件系統</b>的日志框架實現

    Linux系統如何擴展文件系統

    當數據盤沒有創建分區,只在設備上創建了文件系統。或者格式化了硬盤,就直接mount上系統使用。
    的頭像 發表于 02-21 09:53 ?834次閱讀

    鴻蒙輕內核源碼分析:虛擬文件系統 VFS

    接口不統一,若系統中有多個文件系統類型,訪問不同的文件系統就需要使用不同的非標準接口。而通過在系統中添加 VFS 層,提供統一的抽象接口,屏蔽了底層異構類型的
    的頭像 發表于 02-18 14:50 ?806次閱讀

    教你在Ubuntu系統上定制文件系統

    開發板都需要去apt-get安裝,這樣會大幅增加工作量,很不便于批量化生產。 能不能把軟件一起打包到鏡像呢?這樣每次燒寫完就不用再去apt-get在線安裝了。答案當然是肯定的,這就涉及到文件系統的定制了
    發表于 12-26 16:33
    主站蜘蛛池模板: 国产午夜小视频| 国产人妻精品无码AV在线五十路 | 国产交换丝雨巅峰| 美女被爆插| 亚洲视频在线观看| 国产成人高清视频| 人妻插B视频一区二区三区| 在线视频免费观看| 黄色亚洲片| 亚洲AV人无码综合在线观看蜜桃| WWW国产精品内射熟女| 免费。色婬网站| 在线自拍综合亚洲欧美| 激情内射亚洲一区二区三区爱妻| 少妇伦子伦精品无码| 粉嫩小护士| 搡女人免费免费视频观看| 被黑人掹躁10次高潮| 嫩草影院久久精品| 97午夜伦伦电影理论片| 老奶奶50p| 最近2019中文字幕免费版视频| 久久视频在线视频| 专干老肥熟女视频网站300部| 久久久久免费视频| 91av电影在线观看| 男女又黄又刺激B片免费网站| 国产69精品久久久久观看软件| 精品少妇爆AV无码专区| 亚洲综合无码一区二区| 精品国产90后在线观看| 张津瑜的9分58秒7段免费| 老司机亚洲精品影院| CHINA学生白嫩| 丝袜诱惑qvod| 精品无人区麻豆乱码1区2| 正在播放一区二区| 欧美一区二区影院| 国产97精品久久久天天A片| 亚洲精品中文字幕在线| 狼人无码伊人AV啪啪|