【Linux】XFS檔案系統

小亮520cl發表於2016-04-05

在CENTOS6上面,需要安裝mysql資料庫,為提高資料庫的讀寫效率和效能,準備將mysql資料檔案系統安裝在XFS分割槽上。


 XFS,一種高效能的日誌檔案系統,最早於1993年,由Silicon Graphics為他們的IRIX作業系統而開發,是IRIX 5.3版的預設檔案系統。後來被移植到Linux 核心上。XFS 特別擅長處理大檔案,同時提供平滑的資料傳輸。在儲存很大的環境下進行格式化操作,XFS檔案系統的速度比ext3、ext4檔案系統快了很多!而且據說XFS可以支援到100T,讀寫速度也優於其他檔案系統。


系統環境:CENTOS6.4

一、安裝xfs檔案系統

XFS所需要的rpm包在系統的ISO檔案中都可以找到,我們只需要安裝xfsprogs和xfsdump這兩個包就可以了

[root@localhost Packages]# find . -name "xfs*.rpm"

./xfsdump-3.0.4-3.el6.x86_64.rpm

./xfsprogs-devel-3.1.1-10.el6.x86_64.rpm

./xfsprogs-qa-devel-3.1.1-10.el6.i686.rpm

./xfsprogs-qa-devel-3.1.1-10.el6.x86_64.rpm

./xfsprogs-devel-3.1.1-10.el6.i686.rpm

./xfsprogs-3.1.1-10.el6.i686.rpm

./xfsprogs-3.1.1-10.el6.x86_64.rpm

[root@localhost Packages]# rpm -ivh xfsprogs-3.1.1-10.el6.x86_64.rpm xfsdump-3.0.4-3.el6.x86_64.rpm

warning: xfsprogs-3.1.1-10.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

Preparing...                ########################################### [100%]

  1:xfsprogs               ########################################### [ 50%]

  2:xfsdump                ########################################### [100%]


二、XFS格式化

XFS格式化速度很快,幾乎是立刻就完成了格式化。

[root@localhost Packages]# mkfs.xfs  /dev/sdb

meta-data=/dev/sdb               isize=256    agcount=4, agsize=655360 blks

        =                       sectsz=512   attr=2, projid32bit=0

data     =                       bsize=4096   blocks=2621440, imaxpct=25

        =                       sunit=0      swidth=0 blks

naming   =version 2              bsize=4096   ascii-ci=0

log      =internal log           bsize=4096   blocks=2560, version=2

        =                       sectsz=512   sunit=0 blks, lazy-count=1

realtime =none                   extsz=4096   blocks=0, rtextents=0


三、掛載測試

[root@localhost /]# mount -t xfs /dev/sdb /data

[root@localhost /]# mount |grep  data

/dev/sdb on /data type xfs (rw)

測試:

寫效能

[root@localhost test]# time dd if=/dev/zero of=/data/test/ceshi.txt bs=1M count=100

100+0 records in

100+0 records out

104857600 bytes (105 MB) copied, 0.42419 s, 247 MB/s


real0m0.431s

user0m0.001s

sys0m0.427s

讀效能

[root@localhost test]# time dd if=/data/test/ceshi.txt  of=/dev/null  bs=1M count=100

100+0 records in

100+0 records out

104857600 bytes (105 MB) copied, 0.129903 s, 807 MB/s


real0m0.135s

user0m0.003s

sys0m0.132s


四、補充XFS最佳化

#mkfs.xfs -f -i size=512 -l size=128m,lazy-count=1 -d agcount=16 /dev/sdb1  


   -i size=512 : 預設的值是256KB,這裡的設定是為了selinux的,這個設定針對inode size,selinux使用xfs的Extend Attribute,首先要寫到inode中,如果容量不夠(預設是256KB的時候就不夠,剛剛多一點點),就寫到block中,這會損失效能,當需要使用selinux的時候。這似乎對一般使用者沒什麼作用,因為一般使用者都不用selinux的,大家對linux系統的安全性還是挺信任的,不過,說實話,我不信任,況且RedHat 的FC已經預設配置了selinux,這很好。做了這個改動,方便以後我在系統中配置selinux而不擔心效能的損失。 

   -l size=128m :注意是小寫的m,不是大寫的。預設值的是10m(bsize=4096 x blocks=2560)。這個值可以設定成32m(分割槽容量不小於250M)/64m(分割槽容量不小於500M)/128m(分割槽容量不小於700M),對於分割槽容量的限制,我這裡列出的只是大概,最大可設128m。修改這個引數成128m,可以顯著的提高xfs檔案系統刪除檔案的速度,當然還有其它,如複製檔案的速度。 這個引數需要大記憶體的支援,記憶體太少的機器大概不能設定這麼高。(標準是什麼?512M?1G?我不瞭解,所以我上面說要自己實際的測試一下。) 

   -l lazy-count=value 
       This changes the method of logging various persistent counters  in  the  superblock.   Under metadata  intensive  workloads, these counters are updated and logged frequently enough that the superblock updates become a serialisation point in the  filesystem.  The  value  can  be either 0 or 1. 
       With  lazy-count=1,  the superblock is not modified or logged on every change of the persis-tent counters. Instead, enough information is kept in other parts of the  filesystem  to  be able  to  maintain  the  persistent  counter  values  without  needed  to  keep  them in the superblock.  This gives significant improvements in performance on some configurations.  The default  value  is  0 (off) so you must specify lazy-count=1 if you want to make use of this feature. 

   -d agcount=4 :預設值是根據容量自動設定的。可以設定成1/2/4/16等等,這個引數可以調節對CPU的佔用率,值越小,佔用率越低。這是理論上的,在我的機器上,agcount=1反而比agcount=2的cpu佔用率還高,我想這是因為我的cpu是雙核的原因吧。要注意,cpu的佔用率低,那每一秒處理的資料量也會降低一些。我比較了agcount=2和4,發現還是4比較好。這樣一來,這個引數的設定,就是需要自己去選擇的了。 

mount的xfs選項(關鍵引數nobarrier):

vi /etc/fstab  

修改掛載選項  

/dev/sdb1               /data              xfs     defaults,noatime,nobarrier       00

重新掛載  

mount -o remount /data  



   nobarrier 
             Many hardware RAID have a persistent write cache which preserves it across power failure, interface resets, system crashes, etc. Using write barriers in this instance is not recommended and will in fact lower performance. Therefore, it is recommended to turn off the barrier support and mount the filesystem with "nobarrier". But take care about the hard disk write cache, which should be off. 

   noatime 預設的方式下linux會把檔案訪問的時間atime做記錄,這在絕大部分的場合都是沒有必要的,如果遇到機器IO負載高或是CPU WAIT高的情況,可以嘗試使用noatime,療效好,見效快。

nobarrier掛載

XFS檔案系統預設在掛載時啟用“寫入屏障”的支援。該特性會一個合適的時間沖刷下級儲存裝置的寫回快取,特別是在XFS做日誌寫入操作的時候。這個特性的初衷是保證檔案系統的一致性,具體實現卻因裝置而異——不是所有的下級硬體都支援沖刷請求。在帶有電池供電快取的硬體RAID控制器提供的邏輯裝置上部署XFS檔案系統時,這項特性可能導致明顯的效能退化,因為檔案系統的程式碼無法得知這種快取是非易失性的。如果該控制器又實現了沖刷請求,資料將被不必要地頻繁寫入。為了防止這種問題,對於能夠在斷電或發生其它主機時保護快取中資料的裝置,應該以 nobarrier 選項掛載XFS檔案系統。



   logbufs=value 
             Set  the number of in-memory log buffers.  Valid numbers range from 2-8 inclusive.  The default value is 8 buffers for filesystems with a blocksize of 64K, 4 buffers for filesystems with a blocksize of 32K,  3 buffers for filesystems with a blocksize of 16K, and 2 buffers for all other configurations.  Increasing the number of buffers may increase performance on some workloads at the cost of the memory used for  the additional log buffers and their associated control structures. 

   logbsize=value 
             Set  the  size  of each in-memory log buffer.  Valid sizes are 16384 (16K) and 32768 (32K).  The default value for machines with more than 32MB of memory is 32768,  machines  with  less  memory  use  16384  by default.


測試後發現讀寫效能還可以更好,測試方法同上。


五、XFS的優缺點

優點:

1、資料可恢復
採用XFS檔案系統,當意想不到的當機發生後,首先,由於檔案系統開啟了日誌功能,所以你磁碟上的檔案不再會意外當機而遭到破壞了。不論目前檔案系統上儲存的檔案與資料有多少,檔案系統都可以根據所記錄的日誌在很短的時間內迅速恢復磁碟檔案內容。
2、快速傳輸
XFS檔案系統採用最佳化演算法,日誌記錄對整體檔案操作影響非常小。XFS查詢與分配儲存空間非常快。xfs檔案系統能連續提供快速的反應時間。筆者曾經對XFS、JFS、Ext3、ReiserFS檔案系統進行過測試,XFS檔案檔案系統的效能表現相當出眾。
3、檔案系統可擴充套件
XFS 是一個全64-bit的檔案系統,它可以支援上百萬T位元組的儲存空間。對特大檔案及小尺寸檔案的支援都表現出眾,支援特大數量的目錄。最大可支援的檔案大 小為263 = 9 x 1018 = 9 exabytes,最大檔案系統尺寸為18 exabytes。

XFS使用高的表結構(B+樹),保證了檔案系統可以快速搜尋與快速空間分配。XFS能夠持續提供高速操作,檔案系統的效能不受目錄中目錄及檔案數量的限制。

注:一般大於2T的分割槽用PARTED來分,而對於大於16T的分割槽雖然可以用PARTED來分,但使用EXT4分割槽格式來掛載時,也易出錯。在這個時候把大於16T的單個分割槽用XFS來格式化,然後掛載是可以正常的。

4、I/0讀寫快

XFS 能以接近裸裝置I/O的效能儲存資料。在單個檔案系統的測試中,其吞吐量最高可達7GB每秒,對單個檔案的讀寫操作,其吞吐量可達4GB每秒


缺點:

XFS檔案系統無法被收縮。
歷史上XFS上的操作曾比其它檔案系統都慢,表現為在刪除大量小檔案時效能糟糕。該效能問題是被的XFS開發者Dave Chinner在程式碼中定位到的。使用一個叫“延遲記錄”的掛載選項可以成數量級地提升操作的效能。該選項幾乎把整個存在記憶體中。Linux核心主線版本2.6.35中作為一個試驗性特性引入了這個補丁,在2.6.37中使它成為了一個穩定的特性,並計劃在2.6.39中把它作為預設的日誌記錄方法。早期測試顯示在有少量執行緒的環境中其效能接近EXT4,在大量執行緒的環境下超過了EXT4



本文出自 “滴水穿石孫杰” 部落格,請務必保留此出處http://xjsunjie.blog.51cto.com/999372/1390754

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2075420/,如需轉載,請註明出處,否則將追究法律責任。

相關文章