如何保證寫入在報告完成前已實體提交?

如何保證寫入在報告完成前已實體提交?

當我的系統啟動時,當它探測外部 USB 連接硬碟時,我會在 dmesg 輸出中收到訊息Assuming drive cache: write through,並標有外部磁碟機的裝置名稱。

由於我使用此驅動器來存儲備份,我真的更喜歡系統不會對驅動器的特性做任何假設我願意以寫入效能為代價為了確保當某些內容寫入相關磁碟機上的檔案系統時,它確實一直致力於永久存儲並且不在某處的快取中(最好甚至不在驅動器本身上,因為電源故障會導致電腦和驅動器立即斷電)。

一個可能複雜的因素是驅動器擁有一個經過 LUKS 加密的分割區。檔案系統僅存在於 LUKS 容器中,如下所示:

+- physical drive ------------------------+
|                                         |
|  +- partition -----------------------+  |
|  |                                   |  |
|  |  +- LUKS encryption -----------+  |  |
|  |  |                             |  |  |
|  |  |  +- file system ---------+  |  |  |
|  |  |  |                       |  |  |  |
|  |  |  |      actual data      |  |  |  |
|  |  |  |                       |  |  |  |
|  |  |  +-----------------------+  |  |  |
|  |  |                             |  |  |
|  |  +-----------------------------+  |  |
|  |                                   |  |
|  +-----------------------------------+  |
|                                         |
+-----------------------------------------+

因此我的問題是:如何確保所有寫入都已提交到實體存儲,然後再報告回用戶空間應用程式已完成?

答案1

這裡有兩個組成部分:磁碟寫入快取和檔案系統快取。

可以使用 停用磁碟寫入快取hdparm -W 0 [device]。您可以透過使用該sync選項安裝/重新安裝檔案系統來停用檔案系統寫入快取。請注意,這些變更將極大地降低效能。

相關內容