国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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
    +關注

    關注

    88

    文章

    11760

    瀏覽量

    219033
  • 文件系統
    +關注

    關注

    0

    文章

    302

    瀏覽量

    20977

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    明晚8點|睿擎文件系統實戰:從開發到發布全流程解析

    文件操作到鏡像發布,一次直播掌握完整開發流程!在嵌入式系統開發中,文件系統是數據存儲、配置管理和資源訪問的核心基礎。然而在實際開發中,
    的頭像 發表于 11-11 11:53 ?643次閱讀
    明晚8點|睿擎<b class='flag-5'>文件系統</b>實戰:從<b class='flag-5'>開發</b>到發布全流程解析

    【直播預告】下周三晚8點|睿擎文件系統實戰:從開發到發布全流程解析

    文件操作到鏡像發布,一次直播掌握完整開發流程!在嵌入式系統開發中,文件系統是數據存儲、配置管理和資源訪問的核心基礎。然而在實際開發中,
    的頭像 發表于 11-06 18:05 ?1906次閱讀
    【直播預告】下周三晚8點|睿擎<b class='flag-5'>文件系統</b>實戰:從<b class='flag-5'>開發</b>到發布全流程解析

    睿擎派文件系統指南:從開發到發布全流程實踐 | 技術解析

    在嵌入式系統開發中,文件系統扮演著至關重要的角色,它負責數據的持久化存儲、配置文件管理和資源訪問等核心功能。睿擎平臺提供了一套完整的文件系統解決方案,從
    的頭像 發表于 11-05 18:13 ?8098次閱讀
    睿擎派<b class='flag-5'>文件系統</b>指南:從<b class='flag-5'>開發</b>到發布全流程實踐 | 技術解析

    文件系統,使用iar編譯報錯,gcc可以正常編譯,為什么?

    文件系統,使用iar編譯報錯,gcc可以正常編譯,為什么?
    發表于 09-23 06:54

    文件系統文件怎么循環覆蓋的寫入數據?

    請教一個文件系統數據寫入的問題。 比如我新建一個文件,test.txt,寫入數據超過512KB后,就從頭開始寫,后面的數據不刪除,從頭開始覆蓋。 比如原來寫了1000條數據,然后從頭開始循環覆蓋
    發表于 09-22 08:20

    如何在 nuc980 上切換到持久文件系統

    我遵循了“NUC980 Linux 4.4 BSP 用戶手冊EN.pdf”文檔,但當我嘗試取消選擇“初始 RAM 文件系統和 RAM 磁盤 (initramfs/initrd) 支持
    發表于 08-29 07:58

    技術貼|【RK3588】ELF 2開發板如何添加exFAT和NTFS文件系統格式

    基于RK3588設計的ELF2開發板在搭載Desktop22.04系統時,對TF卡的文件系統支持存在以下限制:不支持exFAT格式;支持NTFS格式,但需手動掛載;針對上述兼容性問題,本文將介紹
    的頭像 發表于 08-27 17:21 ?3529次閱讀
    技術貼|【RK3588】ELF 2<b class='flag-5'>開發</b>板如何添加exFAT和NTFS<b class='flag-5'>文件系統</b>格式

    Linux三大主流文件系統解析

    還在為選擇哪個文件系統而糾結?作為一名摸爬滾打多年的運維老鳥,我將用最接地氣的方式,帶你徹底搞懂 Linux 三大主流文件系統的奧秘。
    的頭像 發表于 08-05 17:37 ?1447次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-文件系統簡介

    /服務器上Linux的文件系統是一樣的,只是嵌入式Linux文件系統根據產品功能進行過裁剪,在內容多少和體積大小上不同。進行嵌入式Linux產品開發,構建一個合適的文件系統是不可或缺的
    發表于 06-19 17:22

    服務器數據恢復—重裝系統導致XFS文件系統分區丟失的數據恢復案例

    服務器數據恢復環境&故障: 一臺服務器上通過磁盤柜+RAID卡組建的riad5磁盤陣列,服務器上層安裝Linux操作系統,搭建XFS文件系統。服務器上層分配一個LUN,并劃分了兩個分區
    的頭像 發表于 06-12 11:20 ?799次閱讀
    服務器數據恢復—重裝<b class='flag-5'>系統</b>導致XFS<b class='flag-5'>文件系統</b>分區丟失的數據恢復案例

    服務器數據恢復—ocfs2文件系統被格式化為Ext4文件系統的數據恢復案例

    服務器存儲數據恢復環境&故障: 人為誤操作將Ext4文件系統誤裝入一臺服務器存儲上的Ocfs2文件系統數據卷上,導致原Ocfs2文件系統被格式化為Ext4文件系統
    的頭像 發表于 06-10 12:03 ?730次閱讀
    服務器數據恢復—ocfs2<b class='flag-5'>文件系統</b>被格式化為Ext4<b class='flag-5'>文件系統</b>的數據恢復案例

    Linux文件系統打包及鏡像制作,觸覺智能RK3562開發板演示

    本文介紹Linux開發文件系統打包及鏡像制作的方法,演示Linux文件系統打包及鏡像制作,適用于想將配置好的系統環境打包成鏡像批量燒錄。觸覺智能RK3562
    的頭像 發表于 04-28 16:45 ?1001次閱讀
    Linux<b class='flag-5'>文件系統</b>打包及鏡像制作,觸覺智能RK3562<b class='flag-5'>開發</b>板演示

    君正內核加載文件系統問題

    利用 mksquashfs root-uclibc-toolchain720-r519 uvc_fs.squashfs -comp xz -all-root制作了squashfs文件系統一開始燒錄可以,后面放了一些文件進去就出現圖片中的情況了,請各位大神指點迷津
    發表于 04-12 09:30

    如何正確選擇嵌入式文件系統

    Linux嵌入式系統中,文件系統和緩存機制常導致數據存儲穩定性問題。本文通過案例分析原因,對比不同文件系統特性,為開發者提供優化建議,助力提升數據穩定性和
    的頭像 發表于 03-17 11:35 ?1106次閱讀
    如何正確選擇嵌入式<b class='flag-5'>文件系統</b>?

    在stm32cubeprogrammer上燒錄時,取消勾選根文件系統,燒錄后發現sd卡上根文件系統的分區沒有了,為什么?

    在修改了linux內核后,我想只把bootfs燒錄到sd卡上,而不擦除根文件系統的分區。 我在stm32cubeprogrammer上燒錄時,取消勾選根文件系統,燒錄后發現sd卡上根文件系統的分區沒有了。
    發表于 03-07 06:38