lsblkはどのようにセクタサイズを取得しますか?

lsblkはどのようにセクタサイズを取得しますか?

私のディスクは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

関連情報