私の主な質問は、セクターで使用されるブロックサイズがカウントされるかどうかを正式に確認することです。
/sys/block/<disk>/<partition>/size
実際には512Bであるか、これが異なる可能性がある場合。
私はこれが答えを見つけるのはかなり簡単だと思いましたが、例えばここに:
https://lore.kernel.org/lkml/[email protected]/T/#
質問がありました:
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/T/
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: [email protected]
+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は、デバイスの実際のブロックサイズに関係なく、常にセクターを512バイト長と見なします
そうは言っても、スキャン/sys/block/<disk>/
は、ディスクとパーティションのサイズを取得するために利用できるアプローチの中で最悪の(または少なくとも難しい)アプローチです。
lsblk --bytes --list
有益で、曖昧さのない、解析可能な出力を生成します。cat /proc/partitions
同様の情報を 1Kサイズのブロックblockdev --getsize64 <dev>
デバイスサイズをバイト単位で返します。blockdev --getsz <dev>
デバイスサイズを 512バイトセクター で返します。