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

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

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

超全解析Linux文件系統(tǒng)之ext2路徑名查找

Linux閱碼場 ? 來源:Linux閱碼場 ? 作者:Linux閱碼場 ? 2021-05-28 17:51 ? 次閱讀

本文以ext2文件系統(tǒng)為例來剖析一個真實的文件系統(tǒng)如何查找文件,這對于深入理解文件系統(tǒng)至關(guān)重要。

1.準備文件系統(tǒng)鏡像

所用工具:dd、mkfs.ext2、hexdump、dumpe2fs、mount等工具

1)制作100k大小鏡像文件

$ dd if=/dev/zero of=ext2.img bs=1k count=100

記錄了100+0 的讀入

記錄了100+0 的寫出

102400 bytes (102 kB, 100 KiB) copied, 0.00125457 s, 81.6 MB/s

2)格式化為ext2文件系統(tǒng)格式

$ mkfs.ext2 ext2.img

mke2fs 1.44.1 (24-Mar-2018)

丟棄設備塊: 完成

創(chuàng)建含有 100 個塊(每塊 1k)和 16 個inode的文件系統(tǒng)

正在分配組表: 完成

正在寫入inode表: 完成

寫入超級塊和文件系統(tǒng)賬戶統(tǒng)計信息: 已完成

3)查看文件系統(tǒng)信息

$ dumpe2fs ext2.img

dumpe2fs 1.44.1 (24-Mar-2018)

Filesystem volume name: 《none》

Last mounted on: 《not available》

Filesystem UUID: 3680e1d5-7f58-4324-9cbd-c7d382f0c3df

Filesystem magic number: 0xEF53

Filesystem revision #: 1 (dynamic)

Filesystem features: ext_attr resize_inode dir_index filetype sparse_super large_file

Filesystem flags: signed_directory_hash

Default mount options: user_xattr acl

Filesystem state: clean

Errors behavior: Continue

Filesystem OS type: Linux

Inode count: 16

Block count: 100

Reserved block count: 5

Free blocks: 79

Free inodes: 5

First block: 1

Block size: 1024

Fragment size: 1024

Blocks per group: 8192

Fragments per group: 8192

Inodes per group: 16

Inode blocks per group: 2

Filesystem created: Wed May 26 15:23:33 2021

Last mount time: n/a

Last write time: Wed May 26 15:23:33 2021

Mount count: 0

Maximum mount count: -1

Last checked: Wed May 26 15:23:33 2021

Check interval: 0 (《none》)

Reserved blocks uid: 0 (user root)

Reserved blocks gid: 0 (group root)

First inode: 11

Inode size: 128

Default directory hash: half_md4

Directory Hash Seed: 5b0daa29-c2a0-4ab1-b09e-50992d3b070d

組 0:(塊 1-99)

主 超級塊位于 1,組描述符位于 2-2

塊位圖位于 3 (+2)

Inode 位圖位于 4 (+3)

Inode表位于 5-6 (+4)

79 個可用 塊,5 個可用inode,2 個目錄

可用塊數(shù): 21-99

可用inode數(shù): 12-16

這實際是是讀取文件系統(tǒng)的超級塊和塊組描述符信息。我們可以看的創(chuàng)建的文件系統(tǒng)的總體信息:

Filesystem magic number:0xEF53 表示為ext2文件系統(tǒng) Inode count: 16 表示文件系統(tǒng)inode個數(shù)為16 Block count: 100表示文件系統(tǒng)塊個數(shù)為100 Free blocks: 79 表示文件系統(tǒng)空閑塊個數(shù)為79 Free inodes: 5 表示文件系統(tǒng)空閑inode個數(shù)為5 First block: 1 第一個數(shù)據(jù)塊編號為1(編號0保留為引導塊) Block size: 1024 文件系統(tǒng)塊大小為1k Blocks per group: 8192每個塊組8192個塊 Inodes per group: 16每個塊組個inode Inode blocks per group: 2 每個塊組2個inode塊 First inode: 11 分配的第一個inode號為11(除根inode外,根inode號為2) Inode size: 128 inode大小為128字節(jié) 塊組的信息(這里只有一個塊組) 1 - 99號 超級塊塊編號為 1 塊組描述符塊編號為 2塊 位圖塊編號為 3 inode位圖塊編號為 4

inode表位于5和6塊

79 個可用 塊,5 個可用inode,2 個目錄 (一個為根目錄一個為lost+found,存放壞塊) 可用塊數(shù):21-99 可用inode數(shù):12-16

4)掛載文件系統(tǒng)并創(chuàng)建文件

創(chuàng)建一個掛載點目錄:

$ mkdir root_dir

掛載:

$ sudo mount -t ext2 ext2.img root_dir

查看文件:

$ ls -la

總用量 17

drwxr-xr-x 3 root root 1024 5月 26 15:23 。

drwxrwxr-x 3 hanch hanch 4096 5月 26 15:28 。。

drwx------ 2 root root 12288 5月 26 15:23 lost+found

可以發(fā)現(xiàn)有三個目錄:

。

。。

lost+found

實際上是根目錄的數(shù)據(jù)塊的內(nèi)容(包含各個目錄項)。

下面我們來創(chuàng)建一個目錄,目錄下創(chuàng)建文件:

$ sudo mkdir dir

$ cd dir/

$ su

# echo hello 》 test.txt

現(xiàn)在目錄樹是這樣的:

$ tree

。

├── dir

│ └── test.txt

└── lost+found [error opening dir]

2 directories, 1 file

后面我們會通過解析文件系統(tǒng)鏡像來觀察如何查找 /dir/test.txt 文件的

現(xiàn)在關(guān)注一下相關(guān)的索引節(jié)點:

$ cd dir

$ ls -lai

總用量 3

12 drwxr-xr-x 2 root root 1024 5月 26 15:57 。

2 drwxr-xr-x 4 root root 1024 5月 26 15:56 。。

13 -rw-r--r-- 1 root root 6 5月 26 15:57 test.txt

可以發(fā)現(xiàn) /dir目錄下:當前工作目錄下索引節(jié)點為12(dir目錄的),上一級目錄的索引節(jié)點為2(根目錄),test.txt文件的所有節(jié)點為13。記住這幾個索引節(jié)點后面我們會通過解析文件系統(tǒng)鏡像來獲得。

2.解析文件系統(tǒng)鏡像

1)dump文件系統(tǒng)鏡像

$ hexdump -C ext2.img

00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |。。。。。。。。。。。。。。。。|

*

00000400 10 00 00 00 64 00 00 00 05 00 00 00 4f 00 00 00 |。。。.d.。。。。。.O.。。|

00000410 05 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |。。。。。。。。。。。。。。。。|

00000420 00 20 00 00 00 20 00 00 10 00 00 00 ae f8 ad 60 |。 。。。 。。。。。。。。。`|

00000430 ae f8 ad 60 01 00 ff ff 53 ef 00 00 01 00 00 00 |。。。`。。。.S.。。。。。。|

00000440 75 f7 ad 60 00 00 00 00 00 00 00 00 01 00 00 00 |u.。`。。。。。。。。。。。。|

。。。

*

00018c00 0c 00 00 00 0c 00 01 02 2e 00 00 00 02 00 00 00 |。。。。。。。。。。。。。。。。|

00018c10 0c 00 02 02 2e 2e 00 00 0d 00 00 00 e8 03 08 01 |。。。。。。。。。。。。。。。。|

00018c20 74 65 73 74 2e 74 78 74 00 00 00 00 00 00 00 00 |test.txt.。。。。。。。|

00018c30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |。。。。。。。。。。。。。。。。|

*

00019000

根據(jù)之前dumpe2fs的信息我們知道:

鏡像文件中(均為16進制顯示)

00000000 開始的1k大小 保留的引導塊

塊1 00000400 開始的1k大小 保存磁盤的超級塊 (dumpe2fs的部分信息從這里獲得)

塊2 00000800 開始的1k大小 保存塊組描述符 (dumpe2fs的部分信息從這里獲得)

塊3 00000c00開始的1k大小 保存塊位圖

塊4 00001000 開始的1k大小 保存 Inode 位圖

塊5 塊6 00001400 開始的2k大小 保存 Inode表

剩下的為數(shù)據(jù)塊

磁盤中的文件系統(tǒng)對象結(jié)構(gòu)在內(nèi)核如下文件定義:

fs/ext2/ext2.h

磁盤超級塊:

struct ext2_super_block {

__le32 s_inodes_count; /* Inodes count */

__le32 s_blocks_count; /* Blocks count */

__le32 s_r_blocks_count; /* Reserved blocks count */

__le32 s_free_blocks_count; /* Free blocks count */

__le32 s_free_inodes_count; /* Free inodes count */

__le32 s_first_data_block; /* First Data Block */

__le32 s_log_block_size; /* Block size */

__le32 s_log_frag_size; /* Fragment size */

__le32 s_blocks_per_group; /* # Blocks per group */

__le32 s_frags_per_group; /* # Fragments per group */

__le32 s_inodes_per_group; /* # Inodes per group */

。。。

}

磁盤塊組描述符:

struct ext2_group_desc

{

__le32 bg_block_bitmap; /* Blocks bitmap block */

__le32 bg_inode_bitmap; /* Inodes bitmap block */

__le32 bg_inode_table; /* Inodes table block */

__le16 bg_free_blocks_count; /* Free blocks count */

__le16 bg_free_inodes_count; /* Free inodes count */

__le16 bg_used_dirs_count; /* Directories count */

__le16 bg_pad;

__le32 bg_reserved[3];

};

磁盤inode:

struct ext2_inode {

__le16 i_mode; /* File mode */

__le16 i_uid; /* Low 16 bits of Owner Uid */

__le32 i_size; /* Size in bytes */

__le32 i_atime; /* Access time */

__le32 i_ctime; /* Creation time */

__le32 i_mtime; /* Modification time */

__le32 i_dtime; /* Deletion Time */

__le16 i_gid; /* Low 16 bits of Group Id */

__le16 i_links_count; /* Links count */

__le32 i_blocks; /* Blocks count */

。。。

__le32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */

。。。

};

磁盤目錄項:

struct ext2_dir_entry_2 {

__le32 inode; /* Inode number */

__le16 rec_len; /* Directory entry length */

__u8 name_len; /* Name length */

__u8 file_type;

char name[]; /* File name, up to EXT2_NAME_LEN */

};

大家可以對照磁盤鏡像文件和磁盤數(shù)據(jù)結(jié)構(gòu)定義來解析出文件系統(tǒng)的超級塊和塊組描述符信息(可以發(fā)現(xiàn)和dumpe2fs工具顯示的是一致的,例如鏡像文件00000400 處四字節(jié)為10 00 00 00 是小端存儲,所以為0x00000010=16);

3.路徑名查找

下面開始我們的重頭戲:查找文件系統(tǒng)中的 /dir/test.txt 文件。

我們知道,使用文件系統(tǒng)給我最直觀也是最大的好處是:用戶可以通過一個路徑名來訪問文件,那么一個文件系統(tǒng)究竟如何來找到我們所需要的文件呢?下面我們詳細來看ext2文件系統(tǒng)如何查找指定的文件的?(實際的內(nèi)核中路徑名查找比較復雜,考慮很多情況,如dentry cache查找、解析軟鏈接文件、上級目錄、掛載點等,當然如果目錄分量是掛載點就會步進到相應文件系統(tǒng)的根目錄,后面文件系統(tǒng)掛載專題會講解,這里以簡單的路徑解析來讓大家有個深刻的認識)。

1)查找根目錄

萬事開頭難,對于訪問一個目錄上掛載的文件系統(tǒng),內(nèi)核路徑名查找會判斷并找到掛載的文件系統(tǒng)的根目錄,這個過程在文件系統(tǒng)掛載的時候,會從磁盤上讀取并在內(nèi)存構(gòu)建超級塊實例,然后進行的最重要的一步是讀取文件系統(tǒng)的根inode:

fs/ext2/super.c

ext2_fill_super

-》root = ext2_iget(sb, EXT2_ROOT_INO) //EXT2_ROOT_INO為2,系統(tǒng)定義好的

-》raw_inode = ext2_get_inode(inode-》i_sb, ino, &bh); //根據(jù)inode號查找磁盤inode

核心算法如下:

-》block_group = (ino - 1) / EXT2_INODES_PER_GROUP(sb) //獲得塊組 編號

gdp = ext2_get_group_desc(sb, block_group, NULL); //獲得塊組描述符

offset = ((ino - 1) % EXT2_INODES_PER_GROUP(sb)) * EXT2_INODE_SIZE(sb); //計算出在 塊組的 inode表中的inode偏移

block = le32_to_cpu(gdp-》bg_inode_table) + (offset 》》 EXT2_BLOCK_SIZE_BITS(sb)); //計算出在文件系統(tǒng)中的塊號

bh = sb_bread(sb, block)) //組合成submit_bh 讀取這個塊到bh

*p = bh; //賦值bh 用于返回

offset &= (EXT2_BLOCK_SIZE(sb) - 1); //計算出塊中偏移

return (struct ext2_inode *) (bh-》b_data + offset); //返回inode中位置

簡述ext2通過inode號找到并讀取磁盤inode核心算法:

1.根據(jù)inode號計算出所在的塊組block_group

2.根據(jù)inode號計算出塊組中的inode表中的字節(jié)偏移offset

3.根據(jù)inode號計算出磁盤inode在文件系統(tǒng)中的塊號block

4.根據(jù)塊號block 通過sb_bread讀取緩沖區(qū)塊到內(nèi)存

5.根據(jù)inode表中的字節(jié)偏移offset 計算出 磁盤inode在塊中偏移

6.通過讀取的緩沖區(qū)和磁盤inode在塊中偏移 最終返回磁盤inode結(jié)構(gòu)

我們已知:

每個塊組inode個數(shù):EXT2_INODES_PER_GROUP(sb) = 16

磁盤inode大?。篍XT2_INODE_SIZE(sb) = 128

塊大小的bit表示:EXT2_BLOCK_SIZE_BITS(sb) = 10

所以計算根inode塊號:

ino=2 跟inode時:

塊組編號: block_group = (ino - 1) / EXT2_INODES_PER_GROUP(sb) = (2 - 1) / 16 = 0

inode表中的根inode偏移 : offset = ((ino - 1) % EXT2_INODES_PER_GROUP(sb)) * EXT2_INODE_SIZE(sb

= ( 1 % 16 ) * 128 = 128 =0x80 (第2個inode 也就是0x1480處)

文件系統(tǒng)中的根inode所在塊號 : block = le32_to_cpu(gdp-》bg_inode_table) + (offset 》》 EXT2_BLOCK_SIZE_BITS(sb))

= 5 + (128 》》 10) = 5

根inode所在塊中偏移:offset &= (EXT2_BLOCK_SIZE(sb) - 1) = 128 = 0x80

inode中位置 = bh-》b_data + offset = 所在塊 + 0x80

所以:根inode所在的鏡像文件中偏移為:5 * 0x400 + 0x80 = 0x1400 + 0x80 = 0x1480

查看0x1480偏移處內(nèi)容如下(即是根目錄的磁盤inode內(nèi)容):

*

00001480 ed 41 00 00 00 04 00 00 54 ff ad 60 44 ff ad 60 |.A.。。。。.T.。`D.。`|

00001490 44 ff ad 60 00 00 00 00 00 00 04 00 02 00 00 00 |D.。`。。。。。。。。。。。。|

000014a0 00 00 00 00 01 00 00 00 07 00 00 00 00 00 00 00 |。。。。。。。。。。。。。。。。|

000014b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |。。。。。。。。。。。。。。。。|

*

對照ext2文件系統(tǒng)磁盤inode結(jié)構(gòu),可知i_block為磁盤inode結(jié)構(gòu)的偏移40B處,內(nèi)容即為0x07(ext2通過i_block來查找文件在磁盤中的位置)。

于是我們知道,根目錄數(shù)據(jù)塊的塊號 為0x7(鏡像中字節(jié)偏移為 0x400 * 7= 1c00),這個數(shù)據(jù)塊中保存的是根目錄中包含的所有目錄和文件的目錄項(我們知道這里為“?!薄ⅰ?。?!薄ⅰ癲ir”、“l(fā)ost+found”四個目錄項)。

根目錄數(shù)據(jù)塊的內(nèi)容:

*

00001c00 02 00 00 00 0c 00 01 02 2e 00 00 00 02 00 00 00 |。。。。。。。。。。。。。。。。|

00001c10 0c 00 02 02 2e 2e 00 00 0b 00 00 00 14 00 0a 02 |。。。。。。。。。。。。。。。。|

00001c20 6c 6f 73 74 2b 66 6f 75 6e 64 00 00 0c 00 00 00 |lost+found.。。。。。|

00001c30 d4 03 03 02 64 69 72 00 00 00 00 00 00 00 00 00 |。。。.dir.。。。。。。。。|

00001c40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |。。。。。。。。。。。。。。。。|

*

根據(jù)目錄項ext2_dir_entry_2 結(jié)構(gòu)我們可以查詢到文件名為dir的目錄項,從而獲取dir目錄的inode號,為0x0c(和我們之前通ls -lai顯示的dir目錄inode號12是一致)。

2)查找dir目錄

和上面查詢根inode一樣的原理,計算過程如下:

dir目錄所在塊組編號: block_group = (ino - 1) / EXT2_INODES_PER_GROUP(sb) = (12 - 1) / 16 = 0

dir目錄所在inode表中的inode偏移 : offset = ((ino - 1) % EXT2_INODES_PER_GROUP(sb)) * EXT2_INODE_SIZE(sb

= ( 11 % 16 ) * 128 = 1408(0x580)

文件系統(tǒng)中的dir目錄的inode所在塊號 : block = le32_to_cpu(gdp-》bg_inode_table) + (offset 》》 EXT2_BLOCK_SIZE_BITS(sb))

= 5 + (1408 》》 10) = 5 +1 =6

dir目錄的inode所在塊號中偏移:offset &= (EXT2_BLOCK_SIZE(sb) - 1) = 1408(0x580)& (0x400 -1) = 0x180

inode中位置 = bh-》b_data + offset = 所在塊 + 0x180

所以:dir目錄inode所在的鏡像文件中字節(jié)偏移為:6 * 0x400 + 0x180 = 0x1800 + 0x180 = 0x1980

查看0x1980偏移處內(nèi)容如下(即是dir目錄的磁盤inode內(nèi)容):

*

00001980 ed 41 00 00 00 04 00 00 84 ff ad 60 66 ff ad 60 |.A.。。。。。。。。`f.。`|

00001990 66 ff ad 60 00 00 00 00 00 00 02 00 02 00 00 00 |f.。`。。。。。。。。。。。。|

000019a0 00 00 00 00 02 00 00 00 63 00 00 00 00 00 00 00 |。。。。。。。.c.。。。。。。|

000019b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |。。。。。。。。。。。。。。。。|

*

對照ext2文件系統(tǒng)磁盤inode結(jié)構(gòu),可知i_block為磁盤inode結(jié)構(gòu)的偏移40B處,內(nèi)容即為0x63。

于是我們知道,dir目錄數(shù)據(jù)塊的塊號 為0x63(偏移為 0x400 * 0x63= 0x18c00),這個數(shù)據(jù)塊中保存的是dir目錄中包含的所有目錄和文件的目錄項(我們知道這里為“?!薄ⅰ啊??!?、“test.txt”三個目錄項)。

dir目錄數(shù)據(jù)塊的內(nèi)容:

*

00018c00 0c 00 00 00 0c 00 01 02 2e 00 00 00 02 00 00 00 |。。。。。。。。。。。。。。。。|

00018c10 0c 00 02 02 2e 2e 00 00 0d 00 00 00 e8 03 08 01 |。。。。。。。。。。。。。。。。|

00018c20 74 65 73 74 2e 74 78 74 00 00 00 00 00 00 00 00 |test.txt.。。。。。。。|

00018c30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |。。。。。。。。。。。。。。。。|

*

對照目錄項ext2_dir_entry_2 結(jié)構(gòu),查找文件名為test.txt的inode號,即為0x0d(和我們之前通ls -lai顯示的dir目錄inode號13是一致)。

于是我們知道,test.txt文件的inode號為0x0d(13)。

2)查找test.txt文件

和上面查詢根inode一樣的原理,計算過程如下:

test.txt文件inode所在塊組 編號: block_group = (ino - 1) / EXT2_INODES_PER_GROUP(sb) = (13 - 1) / 16 = 0

test.txt文件inode在 inode表中的inode偏移 : offset = ((ino - 1) % EXT2_INODES_PER_GROUP(sb)) * EXT2_INODE_SIZE(sb

= ( 12 % 16 ) * 128 = 1536(0x600)

文件系統(tǒng)中的test.txt文件inode所在塊號 : block = le32_to_cpu(gdp-》bg_inode_table) + (offset 》》 EXT2_BLOCK_SIZE_BITS(sb))

= 5 + (1536 》》 10) = 5 +1 =6

test.txt文件inode所在塊號中偏移:offset &= (EXT2_BLOCK_SIZE(sb) - 1) = 1408(0x600)& (0x400 -1) = 0x200

inode中位置 = bh-》b_data + offset = 所在塊 + 0x200

所以:test.txt文件inode所在的鏡像文件中偏移為:= 6 * 0x400 + 0x200 = 0x1800 + 0x200 = 0x1a00

查看 0x1a00偏移處內(nèi)容如下(即是test.txt文件的磁盤inode內(nèi)容):

00001a00 a4 81 00 00 06 00 00 00 85 ff ad 60 66 ff ad 60 |。。。。。。。。。。。`f.。`|

00001a10 66 ff ad 60 00 00 00 00 00 00 01 00 02 00 00 00 |f.。`。。。。。。。。。。。。|

00001a20 00 00 00 00 01 00 00 00 15 00 00 00 00 00 00 00 |。。。。。。。。。。。。。。。。|

00001a30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |。。。。。。。。。。。。。。。。|

*

對照ext2文件系統(tǒng)磁盤inode結(jié)構(gòu),可知i_block為磁盤inode結(jié)構(gòu)的偏移40B處,內(nèi)容即為0x15。

于是我們知道,test.txt文件數(shù)據(jù)塊的塊號 為0x15(偏移為0x15 * 0x400 = 0x5400)。

查看 0x5400偏移處內(nèi)容如下(test.txt文件數(shù)據(jù)塊的內(nèi)容):

*

00005400 68 65 6c 6c 6f 0a 00 00 00 00 00 00 00 00 00 00 |hello.。。。。。。。。。。|

00005410 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |。。。。。。。。。。。。。。。。|

*

最終可以看到文件數(shù)據(jù)為“hello”。

4)查找過程圖解

以下為 dir/test.txt查找過程:

已知根目錄inode號(ext2為2) -》 查找根目錄磁盤inode(文件系統(tǒng)掛載時查找) -》 查找根目錄的數(shù)據(jù)塊 -》 查找dir目錄的目錄項找到其inode號 (為12) -》 查找dir目錄的磁盤inode -》 查找dir目錄的數(shù)據(jù)塊 -》 查找test.txt文件的inode號(為13) -》 查找test.txt文件的磁盤inode -》 查找test.txt文件的數(shù)據(jù)塊

下面為查找圖解:

pIYBAGCwvaSAJcSfAAM-kimg0Ys390.png

4.總結(jié)

對于ext2文件系統(tǒng),路徑名查找中,實際上是解析路徑名的各個分量,查找每個分量的目錄項,然后通過目錄項找到inode號,通過inode號找到對應的磁盤inode,然后通過磁盤inode獲得目錄/文件的數(shù)據(jù)塊, 最終查找到對應目錄/文件的磁盤inode,而磁盤inode的i_block中保存著文件的邏輯塊號和磁盤的邏輯塊號映射關(guān)系,讀寫文件時就可以訪問到整個文件。

編輯:jq

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

    關(guān)注

    8

    文章

    6715

    瀏覽量

    88311
  • 磁盤
    +關(guān)注

    關(guān)注

    1

    文章

    355

    瀏覽量

    25093
  • 文件系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    280

    瀏覽量

    19831

原文標題:深入理解Linux文件系統(tǒng)之ext2路徑名查找

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    [2K300適配OpenharmonyV4.1]根文件系統(tǒng)制作請教

    文件系統(tǒng)rootfs.img燒錄到2k300上,燒錄失敗。對比2k300開源資料中的Openharmony 文件系統(tǒng),該文件系統(tǒng)
    發(fā)表于 09-11 11:18

    Linux磁盤操作基礎(chǔ)命令

    fat32類型 [ubuntu@book:~]$ sudo mkfs.fat /dev/sdc1 mkfs.ext2/3/4 格式化文件系統(tǒng)類型為 Linux EXT類型。
    發(fā)表于 09-02 10:47

    ubuntu刪除的文件怎么恢復

    : Ubuntu文件系統(tǒng)概述 Ubuntu是一個基于Linux的操作系統(tǒng),其文件系統(tǒng)與Windows系統(tǒng)有所不同。在Ubuntu中,
    的頭像 發(fā)表于 08-30 15:10 ?317次閱讀

    如何更改Linux文件系統(tǒng)終端顯示顏色

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

    Linux高級文件系統(tǒng)管理詳解

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

    linux--sysfs文件系統(tǒng)

    sysfs文件系統(tǒng) sysfs,全稱為System Filesystem,是一個由Linux內(nèi)核實現(xiàn)的虛擬文件系統(tǒng)。它扮演著一個橋梁的角色,將內(nèi)核中的設備和驅(qū)動程序信息以文件的形式呈現(xiàn)
    的頭像 發(fā)表于 07-08 11:37 ?447次閱讀
    <b class='flag-5'>linux</b>--sysfs<b class='flag-5'>文件系統(tǒng)</b>

    虛擬機數(shù)據(jù)恢復—EXT4文件系統(tǒng)下KVM虛擬機數(shù)據(jù)恢復案例

    發(fā)行版本中。KVM使用Linux自身的調(diào)度器進行管理。 本案例中的服務器操作系統(tǒng)Linux,文件系統(tǒng)EXT4。操作
    的頭像 發(fā)表于 04-17 14:22 ?268次閱讀
    虛擬機數(shù)據(jù)恢復—<b class='flag-5'>EXT</b>4<b class='flag-5'>文件系統(tǒng)</b>下KVM虛擬機數(shù)據(jù)恢復案例

    Linux系統(tǒng)如何擴展文件系統(tǒng)

    當數(shù)據(jù)盤沒有創(chuàng)建分區(qū),只在設備上創(chuàng)建了文件系統(tǒng)?;蛘吒袷交擞脖P,就直接mount上系統(tǒng)使用。
    的頭像 發(fā)表于 02-21 09:53 ?696次閱讀

    如何配置只讀屬性的文件系統(tǒng)(Colibri iMX7為例)

    由于存儲介質(zhì)不同,Nand Flash 上通常采用如 jffs2、UBI 等格式文件系統(tǒng)。Toradex 的 Linux 系統(tǒng)使用 UBI 文件系統(tǒng)
    的頭像 發(fā)表于 12-07 09:31 ?897次閱讀
    如何配置只讀屬性的<b class='flag-5'>文件系統(tǒng)</b>(Colibri iMX7為例)

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

    由于工作人員的誤操作,將Ext4文件系統(tǒng)誤裝入到存儲中Ocfs2文件系統(tǒng)數(shù)據(jù)卷上,導致原Ocfs2文件系
    的頭像 發(fā)表于 12-04 10:49 ?352次閱讀
    服務器數(shù)據(jù)恢復—ocfs<b class='flag-5'>2</b><b class='flag-5'>文件系統(tǒng)</b>被誤格式化為<b class='flag-5'>Ext</b>4<b class='flag-5'>文件系統(tǒng)</b>的數(shù)據(jù)恢復案例

    i.MX6ULL——ElfBoard ELF1板卡 文件系統(tǒng)目錄的介紹

    文件系統(tǒng)通常提供目錄或文件夾用于記錄文件,在很多系統(tǒng)中目錄本身也是文件,在這些系統(tǒng)中,目錄是管理
    發(fā)表于 11-24 09:59

    Linux文件系統(tǒng)層的主要結(jié)構(gòu)

    Linux 文件系統(tǒng)體系結(jié)構(gòu)是一個對復雜系統(tǒng)進行抽象化的有趣例子。通過使用一組通用的 API 函數(shù),Linux 可以在許多種存儲設備上支持許多種文件
    的頭像 發(fā)表于 11-10 10:37 ?462次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>文件系統(tǒng)</b>層的主要結(jié)構(gòu)

    Linux文件系統(tǒng)特點

    Linux文件系統(tǒng)特點 文件系統(tǒng)要有嚴格的組織形式,使得文件能夠以塊為單位進行存儲。 文件系統(tǒng)中也要有索引區(qū),用來方便
    的頭像 發(fā)表于 11-09 14:48 ?977次閱讀
    <b class='flag-5'>Linux</b>的<b class='flag-5'>文件系統(tǒng)</b>特點

    linux查找文件的命令

    Linux中,可以使用以下命令來查找文件: find 命令:可以在指定目錄及其子目錄中查找文件,支持根據(jù)文件名、文件類型、
    的頭像 發(fā)表于 11-08 14:24 ?1057次閱讀

    移植Linux內(nèi)核ramfs和ramdisk文件系統(tǒng)

    在移植Linux內(nèi)核早期時,如果flash等存儲設備的驅(qū)動還沒寫好,可以將文件系統(tǒng)放到內(nèi)存中運行。 此時可以使用 ramfs 和 ramdisk ,即將內(nèi)存的一部分用作文件系統(tǒng)。 ramfs
    的頭像 發(fā)表于 10-04 14:41 ?897次閱讀
    移植<b class='flag-5'>Linux</b>內(nèi)核ramfs和ramdisk<b class='flag-5'>文件系統(tǒng)</b>