2010-11-21 70 views
1

是否可以創建奇數大小的Linux(2.6)塊設備(例如回送設備)?我無法做到這一點。 losetup似乎舍入到512字節邊界。用戶模式Linux ubd設備的ubd設備似乎舍入到512字節邊界。在struct request中,我們有sector_t __sector用於讀/寫操作的塊偏移量。具有奇數(非偶數)大小的Linux塊設備

我只是爲了教育目的而提出這個問題。我可以應付512字節的邊界,但我仍然有興趣,如果有可能繞過它。在這個問題中,我對其他抽象層(例如使用常規文件或字符設備)不感興趣。

回答

1

不可以。Linux 2.6塊層不理解小於512字節的任何內容。任何更小的(尤其是不是2的冪)都需要重寫很多代碼。

1

這是使塊設備而不是字符設備:塊粒度。存在這種二分法是因爲它能夠模擬真正的硬件,這種模塊一次只能作爲一個抽象的塊來處理,而且是以塊來處理的。否則會把每一個操作變成一個更昂貴的計算。

正如你所說,繞過它的方法是使用面向字符的設備或抽象。這是Unix設備模型的核心:除了只能作爲一個虛擬化的東西以外,所有東西都是一系列八位字節。

+0

我很喜歡塊粒度 - 但是,我們仍然可以有一個奇怪的設備大小:只是使最後一個塊比其他塊小。但是,關注我的問題並不是哲學:我對Linux內核2.6實現感興趣。 – pts 2010-11-21 11:30:01

+0

這正是我所說的「更昂貴的計算」。圍繞每個訪問「這是最後一個部分塊?」謂詞在應用於每個IO操作時都很昂貴。 – msw 2010-11-21 11:36:52