使 SATA 磁碟寫入記憶體安全
假設(參見,例如,關於它的問題here),對於啟用了 NCQ 的驅動器,驅動器寫入記憶體應該是安全的,因為它不會向作業系統撒謊,因為當它不是時,數據被送出到碟片. 我試圖弄清楚要使這成為現實需要哪些設置。
我正在使用diskchecker.pl來確認是否所有塊都在拔下電源插頭後倖存下來。伺服器配置如下:
- 4x ST3500514NS 在 Linux MD RAID10 中執行。英特爾 3420 晶片組。在 AHCI 模式下。
- LVM 在 RAID10 上執行。
- 測試的文件系統是邏輯卷上的 ext4(barrier=1,data=ordered)。我還嘗試直接在邏輯卷(塊設備)上進行測試;那沒有幫助。
- Debian 6.0(擠壓);核心 2.6.32-5-amd64
如果我關閉 write-cache (
hdparm -W0
),那麼它可以工作(以巨大的性能損失)。所以看起來上層是有能力的。我嘗試在 libata 中啟用 FUA(通過傳遞
fua=1
給模組載入,並通過 確認dmesg
),但沒有幫助。關於如何使這項工作的任何建議?
編輯:找到原因(見我的回答);關於如何至少恢復一些性能的任何建議?
升級到核心 2.6.38-2-amd64(來自 sid)解決了這個問題,但代價是巨大的性能損失(非常類似於關閉寫記憶體)。
對此進行一些研究,似乎 MD 直到 2.6.33-rc1 才支持 I/O 屏障(RAID1 除外)(送出 a2826aa92e2e14db372eda01d333267258944033)。
是的,我知道這是安全的成本,您可以在 Postgresql 郵件列表中的每個文件系統和儲存層中看到許多關於數據安全和速度成本的執行緒,例如,他們最近一直在談論 SSD 安全,僅Vertex 2 Pro 或最後一個連接了小記憶體的 SSD 英特爾系列(如 RAID 控制器中的電池記憶體)對數據庫使用是安全的,並且 SSD 的問題無法通過禁用寫入記憶體來解決。
我在這裡粘貼了兩個連結,但是您在郵件列表中有多個範例,請進行搜尋。
http://archives.postgresql.org/pgsql-performance/2010-06/msg00076.php
http://archives.postgresql.org/pgsql-general/2011-04/msg00709.php