tune2fsを使用していますが、データはチャンクとして提供されるため、パーティションの全体サイズの正確な値を取得できません。
私も使用しましたが、fdisk -l /dev/mmcblk0p1
ここで得られた寸法も異なる値です。
正確なパーティションサイズを見つけるには?
答え1
コマンドは次のとおりです。
blockdev --getsize64 /dev/mmcblk0p1
結果は64ビット整数でバイト単位で提供されます。それは照会するバイトサイズの一つブロックデバイス、カーネルがサイズを確認するように。
fdisk -l /dev/mmcblk0p1
うまくいかないのは、fdisk
まったく違うことをするからです。ブロックデバイスのパーティションテーブル(=最初のセクタ)を読み、見つかった内容を印刷します。。何も確認せず、パーティションテーブルの内容のみを確認してください。
パーティションテーブルが破損しているか、ブロックデバイスにパーティションテーブルがない場合はまったく気にしません。チェックサムが間違っているという警告を印刷しますが、値が異なる場合でも、見つかった内容を印刷し続けます。明らかに間違っているようです。そんな感じがします。
あなたの場合は、次のことが起こります。/dev/mmcblk0p1
含まないパーティションテーブル。デバイス名が示すように、これはすでに物理ディスクの最初のパーティションです/dev/mmcblk0
。ディスクにはパーティションテーブルが含まれており、クエリはfdisk -l /dev/mmcblk0
すでに機能します(msdosパーティションテーブルがあると仮定)。
答え2
試してみてくださいlsblk
。ルートは必要ありません。
$ lsblk -b
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 34359738368 0 disk
├─xvda1 202:1 0 1676673024 0 part [SWAP]
└─xvda2 202:2 0 32682016768 0 part /var/spool
この-b
パラメータは出力サイズ(バイト)を示します。
答え3
合計パーティション・サイズの正確な値を取得するには、次のようにします。
awk '{print $1*512}' /sys/class/block/mmcblk0p1/size
答え4
私の解決策:
part_dev='/dev/hda2'
total_block=`tune2fs -l $part_dev | awk '/Block count/ {print $3}'`
block_size=`tune2fs -l $part_dev | awk '/Block size/ {print $3}'`
total_size=$(($total_block* $block_size))
echo $total_size
その中には/dev/hda2
必ずしもマウントされないパーティションもあります。tune2fs
バージョン 1.42.4 でテストされました。