lsblkとfdiskは同じパーティションの異なるサイズをどのように表示しますか?

lsblkとfdiskは同じパーティションの異なるサイズをどのように表示しますか?

私はvirtualbox VMを実行していますが、/ dev / sda2のサイズが2つの出力で異なるように見えることがわかります。また、fdisk出力で/dev/sda2と/dev/sda5が重なっているように見えます。

~$ lsblk /dev/sda
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0 29.3G  0 disk 
├─sda1   8:1    0  512M  0 part /boot/efi
├─sda2   8:2    0    1K  0 part 
└─sda5   8:5    0  9.5G  0 part /

~$ sudo fdisk -l /dev/sda
Disk /dev/sda: 29.3 GiB, 31457280000 bytes, 61440000 sectors
Disk model: VBOX HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8f66391d

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda1  *       2048  1050623  1048576  512M  b W95 FAT32
/dev/sda2       1052670 20969471 19916802  9.5G  5 Extended
/dev/sda5       1052672 20969471 19916800  9.5G 83 Linux

答え1

このsda2パーティションはコンテナパーティションです。フォーマットはディスクによく似ています。マスターブートレコード(MBR)と呼ばれ拡張ブートレコード(EBR)自体は、可能な4つの基本パーティションスロットのうちの1つを占めます。これはMBRの4つのパーティションという歴史的限界を克服するために存在します。これには、内部的に拡張パーティション(Linuxのパーティション5で始まるとマークされています)が含まれており、互いに接続されています。各拡張パーティションには、2つのエントリを含むEBRもあります。 1 つはパーティションのデータ自体を参照するための項目、もう 1 つは次の項目を参照するための項目です。 EBR拡張パーティションがある場合。すべての拡張パーティション(ここではsda5)は次のとおりです。~へコンテナパーティション(ここsda2)なので、fdiskは常に重複するブロックを報告します。

~から膜バイオリアクター私の視点では、拡張パーティションを追加するために予約されたスペースをすべて使用するため、サイズはすべての拡張パーティションのサイズよりも大きくなければなりません。

ユーザースペースに報告するカーネルAPIの観点からは、lsblkパーティション2は便宜上表示されるグルーピングパーティションであるため、改ざんしてはいけません。報告されたデータサイズはEBRオーバーヘッドであり、ここでは1Kです。それ以外の場合は、パーティション2への読み取りまたは書き込み(すべての拡張パーティションへの最初のリンクが失われる可能性があるため、すでに悪い)もパーティション5の読み取りに許可されます。または書いてください。サイズをゼロとして報告することを選択しても、あまり問題はありません。これはsdaディスク全体の代わりにそれ自体を処理することとは異なります。より多くの拡張パーティションが各以前の拡張パーティションの EBR で接続されていることを考慮すると、これは意味があります。対応する内部EBRは使用できず、実際のデータのみが表示されます。

使用を検討する必要があります。GPTMBR / EBRパーティション化の代わりにパーティション化:これはより合理的であり、そのような制限や回避策がない最新のパーティション化方法です。または選択できます左心室容積(デフォルト、非拡張)パーティション:これはまた、さまざまな抽象化レイヤでブロックをパーティション化するためのコンテナ形式であり、多くの機能を提供します。

関連情報