自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux下常見文件系統(tǒng)的對(duì)比

系統(tǒng) Linux
本文將對(duì)Linux下常見的幾種文件系統(tǒng)進(jìn)行對(duì)比,包括ext2、ext3、ext4、XFS和Btrfs,希望能幫助大家更好的選擇合適的文件系統(tǒng)。

本文將對(duì)Linux下常見的幾種文件系統(tǒng)進(jìn)行對(duì)比,包括ext2、ext3、ext4、XFS和Btrfs,希望能幫助大家更好的選擇合適的文件系統(tǒng)。

內(nèi)容來自于網(wǎng)上找的資料以及自己的一些經(jīng)驗(yàn),能力有限,錯(cuò)誤在所難免,僅供參考

歷史

文件系統(tǒng) 創(chuàng)建者 創(chuàng)建時(shí)間 最開始支持的平臺(tái)
ext2 Rémy Card 1993 Linux,Hurd
XFS SGI 1994 IRIX, Linux, FreeBSD
ext3 Dr. Stephen C. Tweedie 1999 Linux
ZFS Sun 2004 Solaris
ext4 眾多開發(fā)者 2006 Linux
Btrfs Oracle 2007 Linux

從創(chuàng)建時(shí)間可以看出他們所處的不同時(shí)代,因?yàn)锽trfs的實(shí)現(xiàn)借鑒自ZFS,所以這里也將ZFS列出來作為參考。

大小限制

文件系統(tǒng) ***文件名長(zhǎng)度 ***文件大小 ***分區(qū)大小
ext2 255 bytes 2 TB 16 TB
ext3 255 bytes 2 TB 16 TB
ext4 255 bytes 16 TB 1 EB
XFS 255 bytes 8 EB 8 EB
Btrfs 255 bytes 16 EB 16 EB

***文件和分區(qū)大小受格式化分區(qū)時(shí)所采用的塊大小(block size)所影響,塊越大,所支持的***文件和分區(qū)越大,也越可能浪費(fèi)磁盤空間,上表列出的數(shù)據(jù)基于4K的塊大小。

代碼規(guī)模

從代碼規(guī)??梢钥闯鑫募到y(tǒng)的功能豐富程度以及復(fù)雜度,下面列出的數(shù)據(jù)來自于kernel-4.1-rc8,只是簡(jiǎn)單的用wc -l來統(tǒng)計(jì),沒有過濾空行、注釋等。

文件系統(tǒng) 源文件(.c) 頭文件(.h)
ext2 8363 1016
ext3 16496 1567
ext4 44650 4522
XFS 89605 15091
Btrfs 105254 7933
  • Btrfs還在快速的開發(fā)過程中,代碼行數(shù)可能還有比較大的變化
  • XFS和Btrfs都使用了B-tree

ext2

ext的優(yōu)點(diǎn)是比較簡(jiǎn)單,文件比較少時(shí)性能較好,比較適合文件少的場(chǎng)景,主要缺點(diǎn)如下

  • inode的數(shù)量是固定不變的,在格式化分區(qū)的時(shí)候可以指定inode和數(shù)據(jù)塊所占空間的比例,但一旦格式化好,后續(xù)就沒法再改變了
  • 當(dāng)塊大小為4K時(shí),單個(gè)文件大小不能超過2TB,分區(qū)大小不能超過16TB(目前硬盤大小一般都只有幾TB,所以也不是什么大問題,)
  • 一個(gè)目錄下最多只能有32000個(gè)子目錄
  • 由于目錄里面存儲(chǔ)的文件和子目錄都是以線性方式來組織的,所以遍歷目錄效率不高,尤其當(dāng)目錄下文件個(gè)數(shù)達(dá)到10K以上規(guī)模的時(shí)候,速度會(huì)明顯的變慢
  • 當(dāng)?shù)讓拥拇疟P分區(qū)空間變大時(shí)(使用LVM時(shí)很常見),ext2沒法動(dòng)態(tài)的擴(kuò)展來使用增加的空間
  • 沒有日志(Journal)功能,所以數(shù)據(jù)的安全性不高

ext3

ext3在ext2的基礎(chǔ)上實(shí)現(xiàn)了下面幾個(gè)功能,其它的都保持不變,即ext2的缺點(diǎn)ext3也有

  • 支持日志(Journal)功能,數(shù)據(jù)的安全性較ext2有很大的提高
  • 當(dāng)?shù)讓拥姆謪^(qū)空間變大時(shí),ext3可以自動(dòng)擴(kuò)展來使用增加的空間
  • 使用HTree來組織目錄里面的文件和子目錄,使目錄下的文件和子目錄數(shù)不再受性能限制(數(shù)量超過10K也不會(huì)有性能問題)

ext4

ext4借鑒了當(dāng)前成熟的一些文件系統(tǒng)技術(shù),在ext3上增加了一些功能,并且對(duì)性能做了一些改進(jìn),主要變化如下

  • 當(dāng)塊大小為4K時(shí),支持的***文件和***分區(qū)大小分別達(dá)到了16TB和1EB
  • 不再受32000個(gè)子目錄數(shù)的限制,支持不限數(shù)量的子目錄個(gè)數(shù)
  • 支持Extents,提高了大文件的操作性能
  • 內(nèi)部實(shí)現(xiàn)上支持一次分配多個(gè)數(shù)據(jù)塊,較ext3的性能有所提高
  • 支持延時(shí)分配(即支持fallocate函數(shù))(fallocate是libc的函數(shù),在不支持該功能的文件系統(tǒng)上,libc會(huì)創(chuàng)建一個(gè)占用磁盤空間文件)
  • 支持在線快速掃描
  • 支持在線碎片整理(單個(gè)文件或者整個(gè)分區(qū))
  • 日志(Journal)支持校驗(yàn)碼(checksum),數(shù)據(jù)的安全性進(jìn)一步提高
  • 支持無日志(No Journaling)模式(ext3不支持該功能),這樣就和ext2一樣,消除了寫日志對(duì)性能的影響
  • 支持納秒級(jí)的時(shí)間戳
  • 記錄了文件的創(chuàng)建時(shí)間,由于相關(guān)的應(yīng)用層工具還不支持,所以只能通過debug的方式看到文件的創(chuàng)建時(shí)間

這里是一個(gè)查看文件/etc/fstab創(chuàng)建時(shí)間的例子(文件存在/dev/sda1分區(qū)上):

  1. dev@ubuntu:~$ ls -i /etc/fstab 
  2. 10747906 /etc/fstab 
  3. dev@ubuntu:~$ sudo debugfs -R 'stat <10747906>' /dev/sda1 
  4. Inode: 10747906   Type: regular    Mode:  0644   Flags: 0x80000 
  5. Links: 1   Blockcount: 8 
  6. ctime: 0x5546dc54:6e6bc80c -- Sun May  3 22:41:24 2015 
  7.  atime: 0x55d1b014:8bcf7b44 -- Mon Aug 17 05:57:40 2015 
  8.  mtime: 0x5546dc54:6e6bc80c -- Sun May  3 22:41:24 2015 
  9. crtime: 0x5546dc54:6e6bc80c -- Sun May  3 22:41:24 2015 
  10. Size of extra inode fields: 28 
  11. EXTENTS: (0):46712815  

Extents: 在最開始的ext2文件系統(tǒng)中,數(shù)據(jù)塊都是一個(gè)一個(gè)單獨(dú)管理的,inode中存有指向數(shù)據(jù)塊的指針,文件占用了多少個(gè)數(shù)據(jù)塊,inode里面就有多少個(gè)指針(多級(jí)),想象一下一個(gè)1G的文件,4K的塊大小,那么需要(1024 * 1024)/4=262144個(gè)數(shù)據(jù)塊,即需要262144個(gè)指針,創(chuàng)建文件的時(shí)候需要初始化這些指針,刪除文件的時(shí)候需要回收這些指針,影響性能。現(xiàn)代的文件系統(tǒng)都支持Extents的功能,簡(jiǎn)單點(diǎn)說,Extent就是數(shù)據(jù)塊的集合,以前一次分配一個(gè)數(shù)據(jù)塊,現(xiàn)在可以一次分配一個(gè)Extent,里面包含很多數(shù)據(jù)塊,同時(shí)inode里面只需要分配指向Extent的指針就可以了,從而大大減少了指針的數(shù)量和層級(jí),提高了大文件操作的性能。

inode數(shù)量固定: 在ext2/3/4系列的文件系統(tǒng)中,inode的數(shù)量都是固定的,壞處是如果存很多小文件的話,有可能造成inode被用光,但磁盤還有很多剩余空間無法被使用的情況,不過它也有一個(gè)好處,就是一旦磁盤損壞,恢復(fù)起來要相對(duì)簡(jiǎn)單些,因?yàn)閿?shù)據(jù)在磁盤上布局相對(duì)要固定簡(jiǎn)單。

xfs

和ext4相比,xfs不支持下面這些功能

  • 不支持日志(Journal)校驗(yàn)碼
  • 不支持無日志(No Journaling)模式
  • 不支持文件創(chuàng)建時(shí)間
  • 不支持?jǐn)?shù)據(jù)日志(data journal),只有元數(shù)據(jù)日志(metadata journal)

但xfs有下面這些特性

  • 支持的***文件和分區(qū)都達(dá)到了8EB
  • inode動(dòng)態(tài)分配,從而不受inode數(shù)量的限制,再也不用擔(dān)心存儲(chǔ)大量小文件導(dǎo)致inode不夠用的問題了。
  • 更大的xattr(extended attributes)空間,ext2/3/4及btrfs都限制xattr的長(zhǎng)度不能超過一個(gè)塊(一般是4K),而xfs可以達(dá)到64K
  • 內(nèi)部采用Allocation groups機(jī)制,各個(gè)group之間沒有依賴,支持并發(fā)操作,在多核環(huán)境的某些場(chǎng)景下性能表現(xiàn)不錯(cuò)
  • 提供了原生的dump和restore工具,并且支持在線dump

btrfs

btrfs是一個(gè)和ZFS類似的文件系統(tǒng),支持的功能非常多,據(jù)說將來會(huì)替換ext4成為L(zhǎng)inux下的默認(rèn)文件系統(tǒng)。這里列舉一些重要的功能

  • 支持的***文件和分區(qū)達(dá)到了16EB
  • 支持COW(copy on write)
  • 針對(duì)小文件和SSD做了優(yōu)化
  • inode動(dòng)態(tài)分配
  • 支持子分區(qū)(Subvolumes),子分區(qū)可以單獨(dú)掛載
  • 支持元數(shù)據(jù)和數(shù)據(jù)的校驗(yàn)(crc32)
  • 支持壓縮,去重
  • 支持多個(gè)磁盤和分區(qū),可動(dòng)態(tài)擴(kuò)展
  • 支持LVM,RAID的功能(有了btrfs,就不再需要lvm和軟raid了)
  • 增量備份和恢復(fù)
  • 支持快照
  • 將ext2/3/4轉(zhuǎn)換成btrfs(反過來不行)

btrfs***的缺點(diǎn)就是由于其COW的實(shí)現(xiàn)方式,導(dǎo)致碎片化問題比較嚴(yán)重,不太適合頻繁寫的場(chǎng)景,比如數(shù)據(jù)庫(kù)、虛擬機(jī)的磁盤文件等。不過大部分場(chǎng)合不需要擔(dān)心,btrfs有在線的碎片整理工具。

如何選擇

下表僅供參考

文件系統(tǒng) 適用場(chǎng)景 原因
ext2 U盤 U盤一般不會(huì)存很多文件,且U盤的文件在電腦上有備份,安全性要求沒那么高,由于ext2不寫日志(journal),所以寫U盤性能比較好。當(dāng)然由于ext2的兼容性沒有fat好,目前大多數(shù)U盤格式還是用fat
ext3 對(duì)穩(wěn)定性要求高的地方 有了ext4后,好像沒什么原因還要用ext3,ext4現(xiàn)在的問題是出來時(shí)間不長(zhǎng),還需要一段時(shí)間變穩(wěn)定
ext4 小文件較少 ext系列的文件系統(tǒng)都不支持inode動(dòng)態(tài)分配,所以如果有大量小文件需要存儲(chǔ)的話,不建議用ext4
xfs 小文件多或者需要大的xttr空間,如openstack swift將數(shù)據(jù)文件的元數(shù)據(jù)放在了xttr里面 xfs支持inode動(dòng)態(tài)分配,所以不存在inode不夠的情況,并且xttr的***長(zhǎng)度可以達(dá)到64K
btrfs 沒有頻繁的寫操作,且需要btrfs的一些特性 btrfs雖然還不穩(wěn)定,但支持眾多的功能,如果你需要這些功能,且不會(huì)頻繁的寫文件,那么選擇btrfs

另外,ext系列文件系統(tǒng)內(nèi)部結(jié)構(gòu)相對(duì)簡(jiǎn)單一些,出問題后恢復(fù)相對(duì)容易。

結(jié)束語

本篇沒有比較它們的性能,在通常情況下,他們之間沒有太大的性能差別,只有在特定的場(chǎng)景下,才能看出區(qū)別,如果對(duì)性能比較敏感,建議根據(jù)自己的使用場(chǎng)景來測(cè)試不同的文件系統(tǒng),然后根據(jù)結(jié)果來選擇。

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2012-05-10 13:49:44

Linux文件系統(tǒng)

2009-12-18 17:08:10

Linux常見文件系統(tǒng)

2010-08-05 11:03:55

創(chuàng)建分區(qū)文件系統(tǒng)

2010-01-21 09:15:05

Linux嵌入式文件系

2010-03-16 14:42:16

linux環(huán)境

2011-01-13 14:10:30

Linux文件系統(tǒng)

2009-11-06 10:05:18

Linux系統(tǒng)環(huán)境GFS

2020-07-22 14:53:06

Linux系統(tǒng)虛擬文件

2010-03-02 13:27:17

LinuxXFS文件系

2020-03-01 15:13:05

Linux文件系統(tǒng)

2009-03-10 19:19:16

Linux日志文件系統(tǒng)安裝使用

2012-02-07 09:41:46

XFSext4文件系統(tǒng)

2021-06-06 16:55:22

Linux文件系統(tǒng)

2021-04-12 05:44:44

Linux文件系統(tǒng)

2020-09-25 07:48:12

Linux系統(tǒng)文件

2013-10-22 16:18:55

RHEL 6XFS

2011-01-11 10:29:35

Linux文件

2009-11-26 11:31:34

NFS網(wǎng)絡(luò)文件系統(tǒng)設(shè)定

2009-12-10 09:42:07

2023-07-25 16:55:15

Linuxinode
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)