partedとfdiskの出力が異なるのはなぜですか?

partedとfdiskの出力が異なるのはなぜですか?

注:私はLinux初心者であり、次のことを学びたいと思います。本:Linuxの仕組み

実行すると、parted -l次のような結果が得られます。

Model: KBG30ZMV256G TOSHIBA (nvme)
Disk /dev/nvme0n1: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name                  Flags
 1      1049kB  538MB  537MB  fat32        EFI System Partition  boot, esp
 2      538MB   256GB  256GB  ext4       

実行すると、fdisk-l次のようになります。

...

Disk /dev/nvme0n1: 238,5 GiB, 256060514304 bytes, 500118192 sectors
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: gpt
Disk identifier: BCB099F2-0FCD-4A90-83C2-A76C3E49682D

Device           Start       End   Sectors  Size Type
/dev/nvme0n1p1    2048   1050623   1048576  512M EFI System
/dev/nvme0n1p2 1050624 500117503 499066880  238G Linux filesystem

走りながら感じたもう一つの事実は次のとおりですlsblk -a

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
...
nvme0n1     259:0    0 238,5G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
└─nvme0n1p2 259:2    0   238G  0 part /

私はfdiskとparedを使ってパーティションを作成することの違いについて基本的に理解しています。ところで気になります。 fdiskとparedの間で出力(およびパーティションサイズ)が異なるのはなぜですか?

マイシステム情報が実行中ですuname -a

Linux  5.3.0-28-generic #30~18.04.1-Ubuntu SMP Fri Jan 17 06:14:09 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

答え1

partedとの出力はfdisk多少異なりますが、矛盾はありません。

  • parted出力(kB、、、MBGBに表示される単位で値を表示します。

  • fdiskあなたの場合は、サイズなどの物理セクタで表される値を表示します512 bytes

次の値は厳しい。彼らの粒度はセクターです。パーティションはセクタの途中で開始したり、少数のセクタを含めることはできないため、より細かい単位(バイトなど)は必要ありません。必要に応じて、値をバイトとして再計算できます。

kBやMBなどの単位で表現された値は丸められるだけでなく、あいまいにもなります。1MBは実際に1,000,000バイト、1,024,000バイト、または1,048,576バイトを表すことができますか?これらのあいまいさのため、256GB(from parted)と238G(from fdisk)の両方は「正しい」サイズを持ち、単に異なる単位を使用するということです。

厳密に言えば、/dev/nvme0n1p2499066880個のセクターがあります。セクタサイズ(512バイト)を掛けます。結果は 255522242560 です。 10 9で割って結果を丸めます。 256を取得します。

これで、255522242560を1024 3で割って結果を丸めます。 238を取得します。

関連情報