Linux 文件系統與 Windows 文件系統的差異是什麼?

Linux 文件系統與 Windows 文件系統的差異:在規範方面的差異,以及許可權上的差異如何?Linux下的文件命名要求比 Windows 弱么?例如 Linux 下文件命名可以使用「:」等符號。


題主能不能先把錯字改改?

說正題,Linux和Windows文件系統基本沒有什麼是一樣的,所以差異就是所有的東西都不一樣,而且這樣比較沒有太大意義,兩者的設計目的都不一樣。

下面這個鏈接有比較所有文件系統的,包括文件名長度、名字空間、路徑長度、文件最大尺寸、分區最大尺寸、元數據屬性(比如支持多少種時間戳)、支持的功能(比如支持各種軟硬鏈接、CopyOnWrite等)、塊分配策略(是否支持稀疏文件、extents)等各種信息的比較:

Comparison of file systems

首先,說規範方面,因為就是兩種不同的東西,所以規範毫無相同點可言。但需要明確的一點是,Windows文件系統實際上也只有一個根,雖然用戶層面上看到的是C盤、D盤這些東西,這只是為了兼容的需要,在內核里,分區的組織結構如下圖:

定義盤符的Windows API叫DefineDosDevice,可見盤符其實是為了兼容性而保留的東西。

路徑的起點和布局並不屬於文件系統的規範的一部分,它屬於分區管理(或者Linux里的掛載點管理),同時NTFS和ext都支持動態的卷(掛載點)管理。

NTFS的可用字符集其實比ext還多,但是NTFS可用字符集是所有字元,實際使用中,它有一個名字空間的標識,所以能不能用「:」其實是上層決定的,文件系統驅動層是允許用一切符號的,應用層不允許用那麼多符號完全是因為兼容性的問題,如果你喜歡用內核API,完全可以建立一個文件名為「*」的文件。

順便說一句:NTFS如果使用POSIX名字空間,那麼它的字元限制就跟ext完全相同

關於許可權設置,Linux里一般使用drwxrwxrwx+UID+GID這種模式來定義,但NTFS許可權定義要複雜的多,NTFS的安全描述符(SECURITY_DESCRIPTOR)一個變長的,可以定義多組的屬性,如果比較擴展性來說,我個人認為NTFS的安全描述符擴展性更好一些。

現在說一些具體的兩個文件系統的區別:

1、文件名長度方面,NTFS和ext4相同,最大都是255個字元,但路徑長度ext4沒有限制,NTFS內核限制是路徑長度不宜超過65536個Unicode字元,但受到應用API限制,最長是255(可以繞過這個限制)

2、NTFS最大文件是16EB,最大分區是16EB,ext4最大文件是16TB,最大分區是1EB。

3、二者支持的時間戳都一樣,都支持記錄創建時間、訪問時間、修改時間。ext4部分支持ECC,而NTFS不支持,另外兩者記錄時間的精度不同,ext4的精度是1納秒,NTFS精度是100納秒。

4、ext4支持塊級的日誌,但默認關閉,NTFS不支持,但考慮到NTFS其實是把所有內容(包括元數據)都認為是文件(ext4則區分文件和元數據),所以NTFS沒有必要做塊級的日誌。

5、ext4不支持文件文件快照,NTFS支持,另外NTFS支持文件修改日誌。

6、NTFS原生支持數據加密,ext4需要在格式化時指定是否支持數據加密,格式化以後無法修改。

7、ext4似乎不支持Copy On Write,但從ext4的邏輯上看,不支持Copy On Write也可以理解,因為有日誌。NTFS支持。

8、NTFS在Windows Server版本上支持消除重複數據的功能(類似於網盤的秒傳)

9、ext4和NTFS都支持稀疏文件,其中NTFS還支持塊的再分配(把未完全使用的一個塊拆成多個塊再分配),ext4支持非同步分配(Allocate on flush,這個該怎麼翻譯最合適?),可以減少碎片。

能找到的信息基本就這些吧。


文件系統有很多,linux主要是ext系列,windows主要用fat系列和ntfs,但是都有辦法實現一定程度的互相兼容。

至於文件名……你去Linux下建個文件名不符合windows標準的文件然後在windows下查看,可以正常操作的。


LZ大標題的問題解釋起來要要費老勁了,這裡僅按照問題描述裡面的回答:

1.規範方面的差異

linux只有一個單獨的頂級目錄結構。所有一切都從 "root" 開始,用 "/" 代表, 並且延伸到子目錄。DOS/Windows有不同的分區,同時目錄都存於分區上。linux則通過 "載入" 的方式把所有分區都放置在 "根" 下制定的目錄里。windows下最接近於 "根" 的是c:。

可以簡單地說:Windows的目錄結構屬於分區而Linux分區 "載入" 於目錄結構。

windows在啟動時檢測不同的分區並被賦予一個分區字母。而在linux下除非你載入一個分區或設備,否則系統不會知道那個分區的存在。這看上去也許不是訪問分區或設備的最方便的方式,但是這種方式提供了偉大的機動性。 在linux中,windows的 c 是用類似 /c/windows/system 來表示的。

linux使用斜杠 "/" 作為目錄分隔符,而windows使用反斜杠 "" 作為目錄分隔符。

2.許可權上的差異如何

windows用戶分為兩類:admin和limited,在安裝一些軟體的時候才有有用戶的限制。

而linux用戶分為四類,超級管理員(也就是root許可權),普通用戶,同組用戶,其他用戶。root用戶可以擁有任何操作,普通用戶擁有自己的主目錄和文件並擁有文件分配許可權,可以對其他用戶授權,許可權分讀,寫和運行。linux可以對每一個文件進行授權,而用戶只能對自己有許可權的文件進行授權。

3.linux下的文件命名要求比window弱么?

windows文件命名規範:

NTFS 命名規則

文件和目錄的名稱長度最多可以為 255 個字元(包括任何擴展)。名稱保留大小寫,但是不區分大小寫。NTFS 不根據大小寫來區分文件名。名稱可以包含除下列字元以外的任何字元:

? " / &< &> * | :

目前,您只能從命令行上創建最多 253 個字元的文件名。

FAT 命名規則

FAT 使用傳統的 8.3 文件命名規則,所有文件名必須使用 ASCII 字符集創建。文件或目錄的名稱最多可為 8 個字元,之後是一個句點 (.) 分隔符,再加上最多 3 個字元的擴展。名稱必須以字母或數字打頭,其中可以包含除以下字元外的任何字元:

. " / [ ] : ; | = ,

使用上述字元可能會產生意外結果。名稱中不能包含空格。

下列名稱為系統保留名稱:

CON、AUX、COM1、COM2、COM3、COM4、LPT1、LPT2、LPT3、PRN、NUL

所有字元都將轉換為大寫。

linux文件命名規範:

Unix is rather flexible regarding file names. A valid Unix filename can contain any character other than "/". Most systems allow filenames of up to 256 characters in length. The filenames motd, motd.new and motd.backup are all valid in Unix. You could also have filenames like motd_new.backup. Unix does not attach any special significance to characters like "." or "_" in filenames; they are treated just like any other character. However, use of these characters can make filenames more meaningful to users.

Many compilers and other Unix programs do impose some restrictions on filenames. For instance, the C++ compiler expects that filenames for your programs should end in .h or .cpp. Thus Lab1.foo is not a valid name for a RESOLVE/C++ main program file, but Lab1.cpp is.

The same rules that apply to filenames also apply to directory names.

Important Note: The Unix system treats a directory as a special kind of file whose contents are the list of files and subdirectories within it. As a result, you"ll notice that many of the rules that apply to files also apply to directories.

也不能完全說linux文件命名就是弱命名,可以看到win的文件名不區分大小寫,而lin的系統是區分文件大小寫的,只是要求一般創建的文件夾和文件用小寫字母。


本來是在 @北極 評論中寫的,後來發現字數有點多而且跑偏(不再是「評論」),就單獨拉出來了=.=

「兩者的設計目的都不一樣」一句我百思不得其解:任何文件系統格式的設計都是爲了做文件系統的——用來管理文件——所以從何而來的「不同目的」?如果是說兩者設計的考量不一樣,那麼用「目的」這個說法未免過大了。

至少到前兩年上(據說),ext4是Linux下使用最爲廣泛的文件系統,這點沒什麼問題。

但實際上在使用的文件系統有很多,尤其是近兩年一些較廣爲人知的發行版中默認文件系統格式起了一些變化:例如RHEL 7上默認是XFS、openSUSE 13.2(想來SUSE的新版應該也一樣)上默認是btrfs。

不同文件系統之間區別不小,尤其是(理論上「官方」支持的)btrfs相比ext4新增許多特性。所以彼答主(是這麼叫吧?)的回答只是對NTFS和ext4進行了對比——雖然NTFS可謂是絕大多數意義上的「Windows文件系統」(畢竟Windows上這麼多年沒出新名稱的文件系統格式了【雖然NTFS也經歷了一些x.x版本】),但是ext4隻是「一個」而且正在逐步(自發地)被其他文件系統格式取代。

上面之所以強調「自發地」,是因爲微軟爲了推廣NTFS(取代FAT32)做了一些手腳(例如限制FAT32分區最大32GB、Windows Vista起只能裝在NTFS上),人爲地擴大了FAT32的劣勢,所以屬於強制。

因爲我只較多用過ext4、btrfs以及LVM(而且幾乎只是家用),所以我說一下「我所知道的」彼回答中可以由另外兩個帶來的突破(相比ext4)。

(LVM不是一般意義上的文件系統格式,但在這裡提到它是因爲它可以和ext一同使用——「一同」是說LVM中某個卷可以被格式化成ext4,所以可以同時享有LVM和ext4的特性)

(標號維持原有)

2、btrfs支持16EB、16EB;

5、「ext4不支持文件文件快照」,但LVM支持;btrfs支持對子卷進行快照。(均支持ro或rw。)我沒仔細翻過NTFS快照相關說明,但是看起來好像只能針對整個文件系統?

6、ext4原生加密支持到4.1內核纔得到支持(2015年4月的事情,從時間上推算彼答中所說應該是後邊所說的方法),之前均沒有。在此之前,加密一般都是通過對整個塊設備(一般情況下可以直接理解爲「分區」)進行加密,然後再進行格式化完成的。ext4原生加密不需要預先進行,只要在需要時使用即可。

7、btrfs支持CoW,多種特性均配合CoW存在;

補充點沒有說到的地方:

1. NTFS支持透明壓縮,演算法貌似是叫LZNT1;btrfs支持透明壓縮,演算法目前有lzo、zlib且可自行根據需求選擇;ext4不支持;

2. NTFS和ext4不能跨設備(但可以使用LVM一類方式【windows上好像是「動態磁盤」】繞過);btrfs支持跨設備;

3. LVM和btrfs均支持軟RAID,而NTFS和ext4均需要其他工具實現;(雖然個人覺得在文件系統上實現RAID有些多餘)

4. btrfs對SSD特意進行優化,ext4後來也有一些,NTFS幾乎沒有;

5. btrfs支持子卷(subvolume)來進行更細的控制(例如單獨針對子卷進行快照、設置配額、掛載),NTFS、ext4均沒有。

最後對前邊所說的一個NTFS特性進行猜想,順便提出其等價做法(也就是說其可能並不是「NTFS的」特性,而是操作系統的特性):

8、個人猜測NTFS做到消除重複數據也是以文件爲單位的,那麼也就是說該做法等價於對所有文件進行hash然後對比,再然後將相同的部分進行hardlink(是的NTFS支持POSIX hardlink了)。

---修改

刪除特性猜想中第一條,因爲該特性和猜想不一樣(參照Linux 文件系統與 Windows 文件系統的差異是什麼? - 北極的回答。)原爲:

5、個人猜測所謂「NTFS支持文件修改日誌」其實是在文件修改前建立了一個快照(或是利用CoW保留原件),在需要時候進行恢復。這樣的話,任何支持快照(或CoW——如果是方法二)的文件系統應該都可以完成——只要內核對寫操作進行額外處理就行。


認真思考的才會提出這個問題,我來告訴題主,

windows系統,不存在子文件夾體積大於父文件夾的情況!(這裡存疑,有網友指出windows的盤符也可以掛載,姑且說一般的使用情況下是這樣的)

而linux就完全可以!

windows的文件樹,可以理解為與物理存儲的層級關係一致,

舉例來說,有兩塊硬碟A和B,電腦開機,在最根級的目錄裡邊,WINDOWS里,是A盤和B盤,他首先是按照物理存儲設備來為單位的,

而在linux里,是好幾個文件夾,而找不到你的硬碟,linux的文件系統純粹是一個抽象的規則,然後可以把某個文件夾掛在某個物理存儲器上,

看到了嗎,

windows是按照物理存儲來首先確定層級的,

而linux無論你有一百個硬碟,它默認都是那幾個文件夾,跟硬體沒關係,

所以你能發現兩個操作系統對文件的管理思維是不一樣,

linux更傾向業務邏輯,不讓你關注文件管理,為啥,因為它就是做多人用的分時多賬戶計算機,更有早先時代的風格。

而windows讓你感覺這台電腦就是我個人的,怎麼放文件和管理櫥櫃的感覺類似。


推薦閱讀:

為什麼Linux說 Mac文件系統很垃圾,Mac未來的文件系統是什麼樣的呢?win8有新的文件系統么?
SSD 是否需要使用特別的文件系統?
如何理解SSD的寫放大?
為什麼計算機中需要各種文件格式(即不同擴展名的文件)?
.DS_Store 文件是什麼?

TAG:A和B有什麼不同 | MicrosoftWindows | Linux | 文件系統 |