Linux
為什麼 Linux 僅僅因為掛載就將 FAT 標記為“臟”?
如果我將 USB 記憶棒(FAT 格式)插入 Windows PC,然後將其拔出而不“彈出”它,然後重新插入,Windows 可以接受,而不會發出任何“可能有問題”的警告。
但是如果我對 Linux(例如 Ubuntu 15.04)做同樣的事情,那麼在第二次插入它之後,我會在日誌中收到警告消息,例如:
FAT-fs (sdf1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
如果我隨後將它放入 Windows PC 中,我會彈出一條消息,提示我檢查它是否有錯誤。
為什麼 Linux 對 FAT“臟”標誌的處理如此基本?我會認為最好只設置“臟”標誌,如果它真的可能是“臟”的——例如:
寫入文件時設置“臟”標誌。
在以下情況下清除“臟”標誌:
- 所有寫入的文件都已關閉,和/或
- 寫記憶體被寫出到磁碟,
- 當然,當磁碟被解除安裝時。
如果至少有一些掛載選項可以在該模式下執行,這樣會很好,以減少使用者僅僅因為插入和拔出可移動設備而收到“臟”標誌錯誤警報的機會,即使實際上沒有寫入任何內容。
我的 C 語言很粗糙,但看起來在讀取超級塊時設置了胖臟位(這個送出解釋了為什麼它是按原樣實現的)。
Windows 可能會選擇不設置該位,直到 FS 中的某些內容髮生更改,其中 linux 在掛載時採取更偏執的方法來設置它。
對我來說,這種方式似乎更有效,在掛載後假設臟,在乾淨解除安裝時取消設置,否則核心將不得不跟踪卷的髒/乾淨狀態並檢查是否需要在每次寫入時設置它。
正如您在程式碼和送出註釋中看到的那樣;您可以安裝 RO 並且該位不會更改。