linux的文件系統

来源:https://www.cnblogs.com/ivanlee717/archive/2022/06/02/16338220.html
-Advertisement-
Play Games

文件系統 操作系統就是處理各種數據的,這些數據在硬碟上就是二進位,人類肯定不能直接看懂這些二進位數據,要有一個翻譯器,將這些二進位的數據還原為人類能看懂的文件形式,這個工作就是由文件系統來完成的,文件系統的目的就是實現數據的查詢和存儲,由於使用場合、使用環境的不同,Linux 有多種文件系統,不同的 ...


文件系統

操作系統就是處理各種數據的,這些數據在硬碟上就是二進位,人類肯定不能直接看懂這些二進位數據,要有一個翻譯器,將這些二進位的數據還原為人類能看懂的文件形式,這個工作就是由文件系統來完成的,文件系統的目的就是實現數據的查詢和存儲,由於使用場合、使用環境的不同,Linux 有多種文件系統,不同的文件系統支持不同的體系。文件系統是管理數據的,而可以存儲數據的物理設備有硬碟、U 盤、SD 卡、NAND FLASH、NOR FLASH、網路存儲設備等。不同的存儲設備其物理結構不同,不同的物理結構就需要不同的文件系統去管理,比如管理 NAND FLASH 的話使用 YAFFS 文件系統,管理硬碟、SD 卡的話就是 ext 文件系統等等。

文件系統類型

Linux 下的文件系統主要有 ext2、ext3、ext4 等文件系統。Linux 還支持其他的 UNIX 文件系統,比如 XFS、JFS、UFS 等,也支持 Windows 的 FAT 文件系統和網路文件系統 NFS 等。主要講一下 Linux 自帶的 ext2、ext3 和 ext4 文件系統。

Linux 系統能夠支持的文件系統非常多,除 Linux 預設文件系統 Ext2、Ext3 和 Ext4 之外,還能支持 fat16、fat32、NTFS(需要重新編譯內核)等 Windows 文件系統。也就是說,Linux 可以通過掛載的方式使用 Windows 文件系統中的數據。Linux 所能夠支持的文件系統在 "/usr/src/kemels/當前系統版本/fs" 目錄中(需要在安裝時選擇),該目錄中的每個子目錄都是一個可以識別的文件系統。我們介紹較為常見的 Linux 支持的文件系統,如表所示。

文件系統 描 述
Ext Linux 中最早的文件系統,由於在性能和相容性上具有很多缺陷,現在已經很少使用
Ext2 是 Ext 文件系統的升級版本,Red Hat Linux 7.2 版本以前的系統預設都是 Ext2 文件系統。於 1993 年發佈,支持最大 16TB 的分區和最大 2TB 的文件(1TB=1024GB=1024x1024KB)
Ext3 是 Ext2 文件系統的升級版本,最大的區別就是帶日誌功能,以便在系統突然停止時提高文件系統的可靠性。支持最大 16TB 的分區和最大 2TB 的文件
Ext4 是 Ext3 文件系統的升級版。Ext4 在性能、伸縮性和可靠性方面進行了大量改進。Ext4 的變化可以說是翻天覆地的,比如向下相容 Ext3、最大 1EB 文件系統和 16TB 文件、無限數量子目錄、Extents 連續數據塊 概念、多塊分配、延遲分配、持久預分配、快速 FSCK、日誌校驗、無日誌模式、線上碎片整理、inode 增強、預設啟用 barrier 等。它是 CentOS 6.3 的預設文件系統
xfs 被業界稱為最先進、最具有可升級性的文件系統技術,由 SGI 公司設計,目前最新的 CentOS 7 版本預設使用的就是此文件系統。
swap swap 是 Linux 中用於交換分區的文件系統(類似於 Windows 中的虛擬記憶體),當記憶體不夠用時,使用交換分區暫時替代記憶體。一般大小為記憶體的 2 倍,但是不要超過 2GB。它是 Linux 的必需分區
NFS NFS 是網路文件系統(Network File System)的縮寫,是用來實現不同主機之間文件共用的一種網路服務,本地主機可以通過掛載的方式使用遠程共用的資源
iso9660 光碟的標準文件系統。Linux 要想使用光碟,必須支持 iso9660 文件系統
fat 就是 Windows 下的 fatl6 文件系統,在 Linux 中識別為 fat
vfat 就是 Windows 下的 fat32 文件系統,在 Linux 中識別為 vfat。支持最大 32GB 的分區和最大 4GB 的文件
NTFS 就是 Windows 下的 NTFS 文件系統,不過 Linux 預設是不能識別 NTFS 文件系統的,如果需要識別,則需要重新編譯內核才能支持。它比 fat32 文件系統更加安全,速度更快,支持最大 2TB 的分區和最大 64GB 的文件
ufs Sun 公司的操作系統 Solaris 和 SunOS 所採用的文件系統
proc Linux 中基於記憶體的虛擬文件系統,用來管理記憶體存儲目錄 /proc
sysfs 和 proc —樣,也是基於記憶體的虛擬文件系統,用來管理記憶體存儲目錄 /sysfs
tmpfs 也是一種基於記憶體的虛擬文件系統,不過也可以使用 swap 交換分區

硬碟是用來存儲數據的,可以將其想象成柜子,只不過柜子是用來存儲衣物的。新買來的硬碟,通常要對其進行分區並格式化,分區就如同把一個大櫃按照要求分割成幾個小柜子(組合衣櫃);格式化就好比在每個小柜子中打入隔斷,決定每個隔斷的大小和位置,然後在櫃門上貼上標簽,標簽中寫清楚每件衣服保存的隔斷的位置和這件衣服的一些特性(比如衣服是誰的,衣服的顏色、大小等)。

很多初學者認為,對硬碟進行格式化,只是清除了硬碟中的數據,其實不然,格式化過程中還向硬碟中寫入了文件系統。因為不同的操作系統,管理系統中文件的方式也不盡相同(給文件設定的屬性和許可權也不完全一樣),因此,為了使硬碟有效存放當前系統中的文件數據,就需要將硬碟進行格式化,令其使用和操作系統一樣(或接近)的文件系統格式。

各操作系統使用的文件系統並不相同,例如,Windows 98 以前的微軟操作系統使用 FAT(FAT16)文件系統,Windows 2000 以後的版本使用 NTFS 文件系統,而 Linux 的正統文件系統是 Ext2。

既然格式化的真實目的是為了寫入文件系統,那麼,Linux 中的文件系統到底是什麼,又是如何運作的呢?

早期的 Linux 使用 Ext2 文件系統格式,CentOS 5.x 預設使用 Ext3,本教程中所用的 CentOS 6.x 預設使用 Ext4,而目前最新的 CentOS 7.x 預設使用 xfs 格式。

由於 xfs 文件系統不是這裡的重點,因為有關 xfs 文件系統,這裡不做深入介紹,感興趣的讀者可自行搜索相關資料。

Ext4 是 Ext3(Ext2) 文件系統的升級版,在性能、伸縮性和可靠性方面進行了大量改進,變化可以說是翻天覆地的,比如:

  • 向下相容 Ext3;
  • 最大 1EB 文件系統和 16TB 文件;
  • 無限數量子目錄;
  • Extents 連續數據塊概念;
  • 多塊分配、延遲分配、持久預分配;
  • 快速 FSCK、日誌校驗、無日誌模式、線上碎片整理、inode 增強、預設啟用 barrier 等;

不同的文件系統,其運作模式和操作系統的文件數據有關。拿 Linux 操作系統中的文件為例,文件數據不僅包括文件中的內容,還包含非常多的文件屬性,例如文件的 rwx 許可權以及文件所有者、所屬組、創建時間等。

通常情況下,文件系統會將文件的實際內容和屬性分開存放:

  • 文件的屬性保存在 inode 中(i 節點)中,每個 inode 都有自己的編號。每個文件各占用一個 inode。不僅如此,inode 中還記錄著文件數據所在 block 塊的編號;
  • 文件的實際內容保存在 block 中(數據塊),類似衣櫃的隔斷,用來真正保存衣物。每個 block 都有屬於自己的編號。當文件太大時,可能會占用多個 block 塊。
  • 另外,還有一個 super block(超級塊)用於記錄整個文件系統的整體信息,包括 inode 和 block 的總量、已經使用量和剩餘量,以及文件系統的格式和相關信息等。

由此我們可以推斷出,只要能找到文件 inode 所在的位置,自然就能知道這個文件存放數據的 block 號,從而找到文件的實際數據。

image-20220602163031976

[root@honey-master ~] df -Th
Filesystem          Type      Size  Used Avail Use% Mounted on
devtmpfs            devtmpfs   63G     0   63G   0% /dev
tmpfs               tmpfs      63G  176K   63G   1% /dev/shm
tmpfs               tmpfs      63G   66M   63G   1% /run
tmpfs               tmpfs      63G     0   63G   0% /sys/fs/cgroup
/dev/mapper/cl-root xfs       219G   50G  169G  23% /
/dev/sdb1           ext4      976M  155M  754M  18% /boot
/dev/sda            ext4      3.6T  129G  3.3T   4% /data
tmpfs               tmpfs      13G     0   13G   0% /run/user/0
overlay             overlay   219G   50G  169G  23% /var/lib/docker/overlay2/fff1390868eaaa40a4b9a60a208ac29827be7651d4d32bb781a47e0d57e1f09c/merged
overlay             overlay   219G   50G  169G  23% /var/lib/docker/overlay2/201e22c7ff5e538259c75f3d961073cc8a606d429cbe9adfe2cb20d14fe334b1/merged

本文來自博客園,作者:ivanlee717,轉載請註明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16338220.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 快速安裝 pip install matplotlib 折線圖 快速入門 import matplotlib.pyplot as plt import random x=range(10) # 定義x軸的數據 y=[random.uniform(15,35) for i in x] # 定義y軸的數 ...
  • 一、日誌文件輸出說明 日誌目錄: /nchome/nclogs/servername/ ,其中servername集群時目錄類似為master,ncMem01等。非集群時目錄為:server1(服務名) 模塊 輸出格式 說明 anonymous anony-log.log 業務日誌,如果沒有配置模塊 ...
  • 作者:代碼的色彩 鏈接:https://juejin.cn/post/7062662600437268493 1.前言 你是否對大廠展示的五花八門,花花綠綠的架構設計圖所深深吸引,當我們想用幾張圖來介紹下業務系統,是不是對著畫布不知從何下手?作為技術扛把子的筒子們是不是需要一張圖來描述系統,讓系統各 ...
  • 概念 棧(stack)是一種運算受限的線性表。棧只能從末尾插入或刪除數據。我們把這一端稱為棧頂,對應地,把另一端稱為棧底。 隊列(queue)是一種線性表。它允許在表的某一端進行插入操作,在另一端進行刪除操作。我們把進行刪除操作的一端稱作隊列的隊尾,把進行插入操作的一端稱作隊列的隊首。 實現 註:由 ...
  • Liunx安裝Nacos 一,準備安裝包 github下載點 同時請確認Linux已安裝jdk 二,在/usr/local/目錄下創建一個文件夾用於上傳和解壓Nacos cd /usr/local/ #這裡創建文件夾名字可隨意,解壓後會生成一個名為nacos的文件夾,後續會移動至/usr/local ...
  • 最近通過WPF開發項目,為了對WPF知識點進行總結,所以利用業餘時間,開發一個學生信息管理系統【Student Information Management System】。前三篇文章進行了框架搭建和模塊劃分,後臺WebApi介面編寫,以及課程管理模塊開發,本文在前三篇基礎之上,繼續深入開發學生信息... ...
  • 最近在看 C++ 的虛方法調用實現原理,大概就是說在 class 的首位置存放著一個指向 vtable array 指針數組 的指針,而 vtable array 中的每一個指針元素指向的就是各自的 虛方法,實現方式很有意思,哈哈,現在我很好奇 C# 中如何實現的。 一: C# 中的多態玩法 1. ...
  • OAuth2.0協議 在開始之前呢,需要我們對一些認證授權協議有一定的瞭解。 OAuth 2.0 的一個簡單解釋 http://www.ruanyifeng.com/blog/2019/04/oauth_design.html 理解 OAuth 2.0 https://www.ruanyifeng. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...