為什么要在你的Linux系統上啟用barrier?
大多數當前流行的Linux文件系統,包括EXT3和EXT4,都將文件系統barrier作為一個增強的安全特性。它保護數據不被寫入日記。但是,在許多情況下,我們并不清楚這些barrier是否有用。本文就為什么要在你的Linux系統上啟用barrier做出了解釋。
Linux日志和barrier功能
要理解barrier,你首先需要理解文件系統日志功能。常用的文件系統使用日志功能來保證文件系統的完整性。該功能背后的思路很簡單:在寫入新的數據塊到磁盤之前,會先將元數據寫入日志。預先將元數據寫入日志可以保證在寫入真實數據前后一旦發生錯誤,日志功能能很容易地回滾到更改之前的狀態。這個方法確保了不會發生文件系統崩潰的情況。
單獨使用日志功能不能保證沒有任何差錯。現在的磁盤大都有大容量的緩存,數據不會立即寫入到磁盤中,而是先寫入到磁盤緩存中。到這一步,磁盤控制器就能更加高效地將其復制到磁盤中。這對性能來說是有好處的,但是對日志功能來說則相反。為了保證日志***可靠,它必須絕對保證元數據在真實數據寫入之前被預先寫入。這就是我們要介紹文件系統barrier的原因。
我們很容易理解使用barrier的根本原因:barrier本身禁止在barrier之后寫入數據,真實的數據塊將在barrier被寫入之前完全寫入磁盤。使用barrier可以確保文件系統的完整性,因為barrier功能在EXT4文件系統中是默認啟用的(除非你的操作系統更改了這個默認設置)。
檢查Linux文件系統的barrier:啟用還是禁用?
你可以通過/proc/mounts文件來監控文件系統barrier的當前狀態;對于每一個掛載的文件系統,打開這個文件都能看到所有的掛載選項。如果你看到barrier=1,那么你的文件系統就正在使用barrier功能。下列信息是一個文件系統的例子:
/dev/sda1 /boot ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0/dev/mapper/luks-3e67401f-44c6-4a27-a1bf-cdf0dcf45f65 /home ext4 rw,seclabel,noatime,barrier=1,data=ordered 0 0
文件系統barrier何時不工作?
Barrier的問題在于,它不能應用于所有條件下。如果設備映射器作為存儲層的優先級使用,那么文件系統barrier就無法工作了,因為設備映射器不支持barrier。所以,哪怕你的文件系統默認支持barrier,還是無法在邏輯卷、軟RAID或者多路徑磁盤上運行該功能(RED HAT和所有相關的Linux版本都將barrier作為默認選項)。
解決這個問題的方案之一就是避免使用設備映射器。所以在安裝服務器時,你需要充分考慮配置選項。首先,你不該使用LVM安裝服務器,而應該選擇用傳統的分區方式。接著,你不能使用和設備映射器配合工作的多路徑磁盤,它會在SAN上創建多個冗余路徑。某些情況下,SAN供應商會提供一個專有驅動器作為選擇,但不是所有供應商都提供該選項。***的辦法是采用智能硬件。
使用barrier保護的風險之一是,在系統中斷時,數據會留在緩存中,而永不會寫入文件系統。一個簡單的電池備份控制器可以避免這個問題。當服務器使用的這個控制器出故障了,磁盤控制器仍然能保證變更操作,這充分排除了barrier使用的需要。
使用barrier的另一個不利之處在于,你需要付出降低性能的代價。如果你需要***的性能,那么你可以用掛載選項-o barrier=0來關閉barrier功能,比如:mount /dev/sda2 -o barrier=0 /data。
文件系統barrier功能非常有用,但是不能和設備映射器配合工作。如果你需要使用這類設備,但是又想要保證文件系統完整性,那么你可以用電池備份磁盤控制器。如果你的硬件不支持這個,那么你只能避免使用設備映射器,這樣才能用barrier功能來保障文件系統完整性。還有,如果你希望得到更好的系統性能,***也不要開啟barrier功能,它會降低系統運行速度。
原文連接:http://www.searchsv.com.cn/showcontent_46628.htm
【編輯推薦】