コマンドを使用して利用可能なディスク容量を取得するには?

コマンドを使用して利用可能なディスク容量を取得するには?

fdisk を使用してディスク容量を表示します。

sudo fdisk -l  /dev/sda
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Disk model: ST500DM002-1BD14
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 0C7DCAA1-CBD0-4A33-B210-F8D027B84A09

Device         Start       End   Sectors   Size Type
/dev/sda1       2048 390819839 390817792 186.4G Linux filesystem
/dev/sda2  390819840 422070271  31250432  14.9G Linux swap
/dev/sda3  422070272 423120895   1050624   513M EFI System
/dev/sda4  423120896 423153663     32768    16M Microsoft reserved
/dev/sda5  423153664 628613119 205459456    98G Microsoft basic data

未使用の空き容量はおおよそ次のとおりです。

total space for dev/sda - space for /dev/sda1,/dev/sda2,/dev/sda3,/dev/sda4,/dev/sda5
= 465.8G - 186.4G - 14.9G - 513M - 16M - 98G
= 166G

コマンドで直接番号を取得するには?
このアプローチを使用しないことをお勧めします。すべての数値を解析してfdisk計算式に結合します465.8 - 186.4 - 14.9 - (513+16/1000) - 98

答え1

sfdisk -F /dev/sdX使用可能な合計スペースと空きスペース領域のリストが印刷されます。

# sfdisk -F /dev/sde
Unpartitioned space /dev/sde: 477.77 MiB, 500973568 bytes, 978464 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

 Start     End Sectors  Size
 22528   32527   10000  4.9M
 53248   69391   16144  7.9M
 71680  479231  407552  199M
479232 1023999  544768  266M

したがって、合計にのみ興味がある場合は、最初の行から解析できます。

# sfdisk -F /dev/sde | head -1 | cut -d":" -f2 | cut -d"," -f1
 477.77 MiB

このように空き容量を計算するのは難しいです。これには478MiBの空き容量がありますが、これがすべて利用できるという意味ではありません。最初の 2 つの空きスペースを使用不可にし (使用するには小さすぎます)、最後のスペースを確保する方法に分割しました。ディスクは連続した空き容量ではありません。これは誇張された例ですが、これより悪い分割を見たことがあります。 :-)

「パーティションに使用できる最大空き連続スペース」を取得するには、開始と終了、パーティションの種類などを確認する必要があります。これはbash出力で構文解析するのが難しいです。ライブラリを使用する必要があります(例:libfdiskまたはlibblockdev)正確な情報を取得するには(CまたはPythonでプログラムすることを意味します)

答え2

Freddyのアプローチで私が一番好きなのは、すべての出力に私が探している情報が含まれているため、新しいツールを検索する必要がないことです。私と同じ初心者のためにもう一つ話します。
Freddyは正しい考えを持っていますが、数字は少し間違っていました。中古セクターを入手してください。

使用されているすべてのセクタを一覧表示します。

sudo fdisk -l  /dev/sda |tail -n 5
/dev/sda1       2048 390819839 390817792 186.4G Linux filesystem
/dev/sda2  390819840 422070271  31250432  14.9G Linux swap
/dev/sda3  422070272 423120895   1050624   513M EFI System
/dev/sda4  423120896 423153663     32768    16M Microsoft reserved
/dev/sda5  423153664 628613119 205459456    98G Microsoft basic data

4番目の列で使用されているすべてのセクタを計算します。

sudo fdisk -l  /dev/sda |tail -n 5 | awk '{count=count+$4}END{print count}'
628611072

628613120ではなく628611072です。

Free sectors = total sectors - used sectors
            = 976773168 - 628611072
            = 348162096

セクターには512バイトが含まれ、使用可能なスペースは次のとおりです。

(976773168 - 628611072)*512/(1024*1024*1024)
=166G

アイデアをいただいたフレディに感謝します。

関連情報