web-dev-qa-db-ja.com

ブロック特殊ファイルのサイズを取得するにはどうすればよいですか?

ブロック特殊ファイルのサイズを判別できる必要があります。

たとえば、与えられた/dev/sda、デバイスのサイズを提供するコマンドが必要です。 (これはストレージデバイスであるため、サイズとは容量を意味します。)


根拠:

次の方法でデバイスに情報を保存できます。

 echo "12345">/dev/sda#はrootとして実行する必要があります

(データを気にしない限り、そのコマンドを実行しないでください。)

ただし、デバイスに保存できるデータの量を知る必要があり、その方法がわかりません。

3
Nathan Osman

一般的なクロスプラットフォームの答えはないと思います。 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 ]
5
forcefsck

解析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
2

/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
0
Rohan Monga