歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux文件系統概述

Linux文件系統概述

日期:2017/2/28 14:54:16   编辑:Linux教程

以Linux 0.11為實例,個人總結,不保證正確性。。。

[文件系統]
磁盤上的數據以塊為單位進行讀寫,每一個塊稱為一個邏輯塊。在理解磁盤的邏輯視圖時,以邏輯塊為單位來理解。
磁盤上數據按照使用情況分,可以分成以下幾個部分:引導塊、超級塊、i節點位圖區、邏輯塊節點位圖區、i節點區、數據區
引導塊中是整個系統的啟動代碼,只有用於啟動的文件系統才有數據,其它的文件系統這個塊沒有數據(可以這樣理解)
超級塊中存放的是關於整個文件系統的布局描述的數據
i節點位圖區中存放的是i節點區中i節點的使用情況
邏輯塊節點位圖區中存放的是磁盤中邏輯塊的使用情況
i節點區中存放的是對應文件的i節點數據
數據區存放文件數據的部分


示意圖如下


[超級塊]
超級塊中含有描述整個文件系統分布的數據。相應的數據結構如下(fs.h)
struct d_super_block {
unsigned short s_ninodes; //i節點個數
unsigned short s_nzones; //磁盤上全部的邏輯塊的個數
unsigned short s_imap_blocks; //i節點位圖區所使用的邏輯塊的個數
unsigned short s_zmap_blocks; //邏輯塊位圖區所使用的邏輯塊的個數
unsigned short s_firstdatazone; //第一個數據塊的邏輯塊號
unsigned short s_log_zone_size;
unsigned long s_max_size; // 最大文件長度
unsigned short s_magic; //文件系統魔數
};
struct d_super_block是對磁盤上的超級塊的數據描述。


在內存中的超級塊的數據結構,除了要存放磁盤中相應的數據外,還要存放一些額外的信息。如讀寫標志、加鎖標志、該文件系統安裝的根節點、i節點位圖區的高速緩存、設備號等。內存中超級塊的數據結構描述如下


struct super_block {
unsigned short s_ninodes;
unsigned short s_nzones;
unsigned short s_imap_blocks;
unsigned short s_zmap_blocks;
unsigned short s_firstdatazone;
unsigned short s_log_zone_size;
unsigned long s_max_size;
unsigned short s_magic;
/* These are only in memory */
struct buffer_head * s_imap[8]; //i節點位圖區的高速緩存數組,8個邏輯塊的大小
struct buffer_head * s_zmap[8]; //邏輯塊位圖區的高速緩存數組,8個邏輯塊的大小
unsigned short s_dev; //設備號
struct m_inode * s_isup; //被安裝文件系統根目錄i節點
struct m_inode * s_imount; //該文件系統被安裝的i節點
unsigned long s_time; //修改時間
struct task_struct * s_wait; //等待在該超級塊上的進程
unsigned char s_lock; //加鎖標志
unsigned char s_rd_only; //只讀標志
unsigned char s_dirt; //內容是否已修改標志
};

Copyright © Linux教程網 All Rights Reserved