天天看點

linux目錄computer,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功能,它會降低系統運作速度。