私のディスクはsdaです。サイズファイルがあります/sys/dev/block/8:0/size
。単位はセクターです。実行すると、strace lsblk
ファイルを読み取ることがわかります。
しかし、lsblkは、後で合計ディスクサイズをバイト単位で表示するためにセクタサイズをどのように取得しますか?なぜならできないlsblkでファイルを読むhw_sector_size
かを参照してくださいphysical_block_size
。
答え1
それ以外の理由は必要ないからです。/sys/block/<device>/size
使用されるセクタサイズは、デバイスの実際の物理セクタサイズに関係なく、常に512です。これに関するドキュメントが見つかりませんでしたので参照してみましょう。この回答それらのいくつかがありますカーネルコードリンクコメントとして指摘する
Linuxは、デバイスの実際のブロックサイズに関係なく、常にセクタを512バイトの長さで処理します。
屋根装置のクイックテストでも、これが本当であることを示しています。
$ cat /sys/block/loop0/size
204800
$ cat /sys/block/loop0/queue/physical_block_size
512
$ cat /sys/block/loop1/size
204800
$ cat /sys/block/loop1/queue/physical_block_size
4096
100MiBデバイスです。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 100M 0 loop
loop1 7:1 0 100M 0 loop
lsblk
(物理セクタサイズも使用された結果に含めるように要求すると、実際に物理サイズが必要なときにファイルを読み取る-o+PHY-SEC
ことがわかります。)queue/physical_block_size