2013-07-05 57 views
0

什麼樣的宏對應於linux中的什麼樣的文件系統。 在ReadHat Linux的 這裏是一個連結[] http://lxr.free-electrons.com/source/include/uapi/linux/magic.h#L24什麼樣的宏對應於linux中的什麼樣的文件系統

Eg: 
#define EXT2_SUPER_MAGIC  0xEF53 
#define EXT3_SUPER_MAGIC  0xEF53 
#define EXT4_SUPER_MAGIC  0xEF53 
------------------------------> are file system EXT2/EXT3/EXT4 
what is the others?// HFS、NFS、XFS、JFS、Minix fs ...... 

謝謝!

+0

這可能會幫助,如果你退後一步,併發布了你正試圖解決的實際問題。您可能會發現「識別文件系統類型」對於解決您的問題並不重要。例如,你可以啓動UML並真正掛載你的文件嗎? (不需要特殊的燙髮。) – BraveNewCurrency

回答

1

您引用的magic.h文件不能真正用於通過其格式的幻數識別文件系統。首先,它爲某些文件系統提供了神奇的數字,但它並沒有說明文件系統的磁盤格式中的什麼位置來尋找它!例如,你爲ext *引用的0xef53魔術數字必須通過從文件系統的開頭查看偏移量0x438來找到,而XFS文件系統中的幻數在開始處找到(字節偏移量0),您可以查找reiserfs的偏移量爲0x10034的幻數。對於文件系統來說,通過幻數來標識它甚至是不必要的 - 這只是一個好習慣。因此,magic.h文件永遠不會完整無用。

如果你想識別不同類型的文件系統,我建議使用file。你可以看看filesystems magic file from its source code。它包含您提到的大多數文件系統類型的匹配規則。

注意:你也提到NFS。由於NFS是一個網絡文件系統,並沒有任何磁盤格式,它怎麼會有一個像其他人一樣的神奇數字?

0

這是一個老問題,但我會爲任何人提供我的觀點,因爲我一直在尋找爲什麼linux/magic.h看起來不完整的原因,我沒有看到XFS_SUPER_MAGIC的定義或值我相信它應該在任何系統頭文件中。

這取決於你想完成什麼。例如,如果您試圖從某些媒體上讀取您不知道Celada的格式正確的話,那麼您將需要有關該文件系統佈局的更多信息,並且在NFS等情況下可能會幻數沒有意義。但是,如果您正在使用statfs()系統調用來確定inode所在的文件系統的類型,則可能查看dirent條目或其他類型的文件系統,然後在linux/magic.h文件中標識文件系統相當好,據我所知。不幸的是,當我發現尋找XFS的時候,似乎存在差距。順便說一句似乎是從statfs()返回0x58465342。對於更好或更壞(可能更糟糕的是不幸),我現在有:

#include <linux/magic.h> 
#ifndef XFS_SUPER_MAGIC 
#define XFS_SUPER_MAGIC 0x58465342 
#endif 
相關問題