ブロック特殊ファイルのサイズを判別できる必要があります。
たとえば、与えられた/dev/sda
、デバイスのサイズを提供するコマンドが必要です。 (これはストレージデバイスであるため、サイズとは容量を意味します。)
根拠:
次の方法でデバイスに情報を保存できます。
echo "12345">/dev/sda#はrootとして実行する必要があります
(データを気にしない限り、そのコマンドを実行しないでください。)
ただし、デバイスに保存できるデータの量を知る必要があり、その方法がわかりません。
一般的なクロスプラットフォームの答えはないと思います。 Linuxでは、情報は/proc/partitions
にあります(名前にもかかわらず、これにはPCスタイルのパーティションだけでなく、すべての(ほとんど?)ブロックデバイスが含まれます)。
awk '$4 == "sda" {print $3}' /proc/partitions
blockdev
は、ブロックデバイス属性を設定/取得する方法を提供します。サイズをバイト単位で取得するには:
blockdev --getsize64 /dev/sda
または、/sys/block/<device>
ディレクトリの下にいくつかの情報があります。 cat /sys/block/sda/size
は、512バイトのブロックで測定されたsdaサイズを示します。 sda1パーティションサイズについては、/sys/block/sda/sda1/size
を参照してください。
KiBでのsdaサイズの場合
echo $[ $(cat /sys/block/sda/size) / 2 ]
バイト単位のsdaサイズの場合
echo $[ $(cat /sys/block/sda/size) * 512 ]
解析fdisk -l /dev/sda
はまさにそれを与えるはずです:
Disk /dev/sda: 68.7 GB, 68719476736 bytes
255 heads, 63 sectors/track, 8354 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000bd83f
Device Boot Start End Blocks Id System
/dev/sda1 * 1 8009 64325632 83 Linux
/dev/sda2 8009 8355 2780161 5 Extended
/dev/sda5 8009 8355 2780160 82 Linux swap / Solaris
/proc/partitions
あなたが探しているデータがあります。これは、fdiskがデータを取得する場所です。
たとえば私のシステムでは
major minor #blocks name
8 0 976762584 sda
8 1 8385898 sda1
8 2 968374102 sda2
8 16 976762584 sdb
8 17 8385898 sdb1
8 18 968374102 sdb2
8 32 976762584 sdc
8 33 8385898 sdc1
8 34 968374102 sdc2
8 48 976762584 sdd
8 49 8385898 sdd1
8 50 968374102 sdd2
9 2 2905122048 md2