2014-09-18 50 views
0

上下文

我剛纔在這裏問了一個問題:my former question 它導致另一個問題。linux - 文件系統是否允許製造黑洞?

這段時間我讀了這麼多的內核代碼,它使我的腦袋糾纏不休。

問:

是否有可能指向文件系統的另一部分就像一個硬鏈接會,沒有采取更多的空間? 讓我解釋一下:磁盤上的地址可以指向另一個地址,但不會佔用指針的空間。這是硬鏈接的原則。但它將應用於文件的一部分,例如。

整體畫面是創建一個由多個其他文件組成的文件。我知道有關命名管道,但它似乎沒有達到目標:它是阻塞的,你必須永久閱讀它。

非常感謝

更新:

是否有可能在理論上腐敗/修改內核實現這一目標?

+0

除非在損壞的文件系統中,否則一般不可能。關於[Ext2](https://en.wikipedia.org/wiki/Ext2)的Wikipage有一個不錯的圖片 – 2014-09-18 15:50:27

+0

您的意思是塊級重複數據刪除? – 5gon12eder 2014-09-18 15:51:34

+0

@ 5gon12eder:嗯是可能的,將調查它:) – Larry 2014-09-18 15:57:05

回答

0

總之,你不能這樣做(除非你補丁內核增加新的系統調用),因爲你的東西不適合現有的Posix文件定義和API。

我想還你不應該做的,而是用一些用戶級庫索引文件(如gdbm),或使用Sqlite,甚至一些databaserelational的像PostGreSQLMariaDBNoSQL的像mongodb等...)

你也可以玩FUSE eg以作爲文件系統接口一些更復雜的數據(例如某個數據庫)。另請參閱VFS

順便說一句,在內核中執行這樣複雜的事情沒有意義。磁盤I/O速度很慢,去userland的開銷可以忽略不計。

extended file attributes也是一種向文件添加更多[元數據]的方法。

+0

好的。所以我繼續前進。謝謝:) – Larry 2014-09-18 17:28:30

+0

btrfs支持重複數據刪除:https://btrfs.wiki.kernel.org/index.php/Deduplication – ninjalj 2014-09-19 13:52:26

1

有些文件系統,特別是btrfs,它是一個COW文件系統,所以製作一個文件的副本,並覆蓋它的一小部分應該最終有兩個共享大多數數據的文件。

在事實之後需要一些額外的支持,例如:比較磁盤塊的散列(在寫入磁盤或脫機時對已有文件塊進行重複數據刪除時)進行重複數據刪除。

請注意,這是在塊級別完成的,因此要創建其他文件「組成」的文件(實際上,指向與其他文件相同的塊),相同的部分應該是多塊的,大小和塊大小對齊。

相關問題