如何使用命令获取可用磁盘空间?

如何使用命令获取可用磁盘空间?

使用 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

请注意,像这样计算可用空间是很棘手的。这里我有 478 MiB 的可用空间,但这并不意味着我可以使用全部,我以一种使前两个可用区域不可用(太小而无法使用)和末尾的空间的方式进行分区。磁盘不是一个连续的可用空间。这是一个夸张的例子,但我见过比这更糟糕的分区:-)

如果你想获得“分区可用的最大可用连续空间”,你需要检查开始和结束、分区类型等,这很难从 bash 输出中解析,你可能需要使用一个库(例如libfdisk或者libblockdev)以获得准确的信息(这意味着用 C 或 Python 编程)。

答案2

我最喜欢弗雷迪的方式,所有输出都包含我要找的信息,不需要搜索新工具来获取。让我在这里为像我这样的初学者多说一句:
弗雷迪的想法是对的,数字有点错误,获取已使用的扇区:

列出所有使用的扇区:

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

计算第四列中所有已使用的扇区:

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

它是 628611072 而不是 628613120。

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

一个扇区包含 512 字节,可用空间为:

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

感谢弗雷迪的主意。

相关内容