Linux

Linux 核心分區扇區大小的記錄大小(以字節為單位)

  • September 24, 2018

我的主要問題是權威地查看扇區中使用的塊大小是否計數:

/sys/block/<disk>/<partition>/size

實際上是 512 B,或者如果這可能會有所不同。

我認為這很容易找到答案,但例如在這裡:

https://lore.kernel.org/lkml/201012011729.18661.lists@egidy.de/T/#u

有人問了這個問題:

There are /sys/block/<device>/size and 
/sys/block/<device>/<device><partition>/size.

But these values are reported in sectors, not in bytes. As discs with 4K 
sectors are on the horizon now, I don't want to make wrong assumptions on the 
sector size.

So what is the correct sector size for /sys/block/<device>/size?

並且文件中提供了一個更新檔,顯然一勞永逸地回答了文件中的這個問題: https ://lore.kernel.org/lkml/1451154995-4686-1-git-send-email-peter@lekensteyn.nl/噸/

由於含義已超過 13 年沒有改變,我想將這些屬性形式化,以便使用者可以依賴它

$$ 1 $$$$ 2 $$. 扇區定義的靈感來自 block/stat.txt 文件。

使用更新檔:

diff --git a/Documentation/ABI/testing/sysfs-block   b/Documentation/ABI/testing/sysfs-block
+What:      /sys/block/<disk>/<partition>/size
+Date:      October 2002
+Contact:   linux-block@vger.kernel.org
+Kernel Version:    2.5.43
+Description:
+       Size of the partition in standard UNIX 512-byte sectors
+       (not a device-specific block size).

這一切看起來都很簡單,但是當我查看當​​前現有的文件時: https ://www.kernel.org/doc/Documentation/ABI/testing/sysfs-block

該更新檔不存在。這表明事實上這個看似簡單的問題可能並不簡單?

有人可以指出我對這個問題的實際權威答案,理想情況下使用核心文件或帶有註釋的程式碼嗎?

目前我依賴於工具的輸出,但如果事實上並不總是 512B,那麼輸出可能是錯誤的,這會導致我正在處理的程式碼在某些情況下也是錯誤的。

我很驚訝找到一個真正權威的答案是如此困難,

https://unix.stackexchange.com/questions/52215/determine-the-size-of-a-block-device

/proc/partitions 中的大小單位沒有意義

其中一些指向此處的更新檔,但似乎沒有人知道該更新檔似乎沒有被接受,儘管它似乎已被簽署,但據我所知,它不在文件程式碼中。

如果我們能夠一勞永逸地確定內部核心程式碼到底在做什麼,並且這種行為是否被記錄在案,或者只是假設,這意味著它理論上可以隨時隨機更改,那將是很好的。

來自Linux 原始碼評論:

Linux 始終認為扇區長度為 512 字節,與設備實際塊大小無關

也就是說,我認為掃描/sys/block/<disk>/是可用於獲取磁碟和分區大小的最差(或至少更難)的方法:

  • lsblk --bytes --list產生資訊豐富、明確且可解析的輸出;
  • cat /proc/partitions在1K 大小的塊中給出類似的資訊
  • blockdev --getsize64 <dev>返回設備大小(以字節為單位);
  • blockdev --getsz <dev>返回512 字節扇區的設備大小;
  • …當然是我現在不記得的其他方法…

引用自:https://serverfault.com/questions/932414