想象一下,有一個大小爲5 MB的文件。我用C語言在寫模式下打開它,然後用恰好5 MB的垃圾數據填充它。以前使用的磁盤扇區是否會被覆蓋,或操作系統是否會爲新數據選擇新的磁盤扇區?覆蓋文件時寫入的行業?
1
A
回答
4
這取決於文件系統。
傳統上,答案是'是的,相同的部門將被新數據覆蓋'。
對於帶日記的文件系統,答案可能會有所不同。對於閃存驅動器系統,答案几乎肯定是'不';將編寫新的部門以避免磨損當前書面部門'。
3
文件系統可以做任何希望的事情。但是任何真正的文件系統都會將數據寫回相同的扇區。
圖片如果沒有。每次寫入文件時,文件系統都必須找到新的空閒扇區,寫入該扇區,然後更新文件的文件系統元數據以指向新扇區。這也會導致可怕的文件碎片,因爲在連續的5MB文件中間寫入單個扇區會導致碎片。所以只需要回寫相同的部分就容易多了。
我能想到的唯一例外是JFFS2,因爲它被設計用於支持閃存上的損耗均衡。
現在文件系統會寫入同一個扇區,但磁盤硬件可以在任何地方寫入。事實上,在SSD /閃存驅動器上,處理wear leveling的硬件幾乎可以保證將數據寫入不同的扇區。但是這對OS /文件系統是透明的。 (這可能在硬盤驅動器以及由於sector sparing)
相關問題
- 1. 寫入HDFS:文件被覆蓋
- 2. 寫入txt文件,但不覆蓋
- 3. PERL:在輸入文件中寫入(不覆蓋原始文件)
- 4. Java:如何寫入文本文件,而不覆蓋和寫在新行
- 5. Bash腳本寫入時不覆蓋?
- 6. 避免在寫入文件時覆蓋現有文件的內容
- 7. 寫入文件相當快,覆蓋文件花費的時間更長
- 8. 寫入文件最佳實踐(鎖定文件/覆蓋)
- 9. 在不覆蓋Java的情況下寫入文本文件
- 10. 覆蓋寫入方法
- 11. 在不覆蓋第一行的情況下寫入.csv文件中的新行
- 12. 運行cronjob覆蓋文件
- 13. 文本文件覆蓋寫入,不附加
- 14. 如何將數組寫入文本文件而不覆蓋它
- 15. 如何在不覆蓋的情況下寫入hdf5文件?
- 16. 在不覆蓋的情況下寫入文件ObjC
- 17. 爲什麼從我的python腳本寫入文件被覆蓋
- 18. 覆蓋文件
- 19. Typescript錯誤:「無法寫入文件,因爲它會覆蓋輸入文件」
- 20. 無法寫入文件'..../public/scripts/script.js',因爲它會覆蓋輸入文件
- 21. 在C#中使用流寫入器覆蓋文件
- 22. 寫入到文件中間(不覆蓋數據)
- 23. 使用openpyxl寫入excel文件而不覆蓋舊內容
- 24. 寫入文件,但覆蓋它,如果它存在
- 25. 在jenkins的文件級執行覆蓋
- 26. 用PHP覆蓋文件中的行
- 27. 如何在用戶運行EXE文件時覆蓋EXE文件?
- 28. nuget覆蓋文件
- 29. Docker覆蓋文件?
- 30. VBScript覆蓋文件
不一定。爲什麼這有關係?這是一個純粹的理論問題,還是有一些問題想要解決?文件系統旨在成爲抽象。 – 2012-01-08 05:09:11