如何通过终端查看硬盘上未分配的空闲空间

69
我想通过终端查看硬盘上未分配的自由空间。 我在互联网上搜索了各种命令,如dfdufdiskparted等。 它告诉我有哪些已挂载和未挂载的磁盘,但我留下的未分配空间呢? 当然,我可以使用 Fedora 提供的“磁盘工具”应用程序查看它,但由于我喜欢使用终端,我想在其中查看。 请问有人可以帮我解决这个问题吗?

你可能对空闲空间有误解。不要忘记开销,并且请记住,使用open(2)但已经unlink(2)的文件仍然会占用磁盘空间。 - Basile Starynkevitch
这可能被认为是Stack Overflow的离题问题。你可能想在Unix.SESuper User上询问(但首先在那里搜索!)。 - Eliah Kagan
我认为服务器故障(http://serverfault.com/)也更加适合。 - a1an
13个回答

92

使用 GNU partedprint free 命令:

root@sandbox:~# parted
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print free
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 64.4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system  Flags
        32.3kB  1049kB  1016kB            Free Space
 1      1049kB  256MB   255MB   primary   ext2         boot
        256MB   257MB   1048kB            Free Space
 2      257MB   64.4GB  64.2GB  extended
 5      257MB   64.4GB  64.2GB  logical                lvm
        64.4GB  64.4GB  1049kB            Free Space

23
如何利用剩余空间?请问应该执行哪个命令? - user2739179
这是分隔符后面的内容,这是您的提示符,因此输入以下命令: print free - Tisch
使用/回收空闲空间的命令取决于空闲空间所在的位置(现有分区之间),你拥有哪种类型的分区(主分区、扩展分区)以及是否使用 LVM。不能简单地运行一个简单的命令来读取你的想法并知道你实际上想要做什么来处理那个可用的空闲空间 :) - Mladen B.

33

查看以TB为单位的空闲空间:

# parted /dev/sda unit TB print free | grep 'Free Space' | tail -n1 | awk '{print $3}'

查看以GB为单位的空闲空间:

# parted /dev/sda unit GB print free | grep 'Free Space' | tail -n1 | awk '{print $3}'

查看以MB为单位的空闲空间:

# parted /dev/sda unit MB print free | grep 'Free Space' | tail -n1 | awk '{print $3}'

查看以字节为单位的空闲空间:

# parted /dev/sda unit B print free | grep 'Free Space' | tail -n1 | awk '{print $3}'

查看以百分比表示的空闲空间:

# parted /dev/sda unit '%' print free | grep 'Free Space' | tail -n1 | awk '{print $3}'

查看以扇区为单位的空闲空间:

# parted /dev/sda unit s print free | grep 'Free Space' | tail -n1 | awk '{print $3}'

请将/dev/sda更改为您要查找信息的设备名称。 如果您将结果用于任何计算,请确保修剪尾随的字符。


通过在 parted 命令中添加 --machine 参数,您将获得以冒号分隔的输出,这比默认的人类可读输出更可靠易解析。 - josch
使用像这样的 parted 命令,parted 将以交互模式运行。如果不打算这样做,"unit TB" 和 "print free" 命令需要交换位置。这也是 --help 选项显示的方式:先是命令,然后是命令参数。完整的命令将是:parted /dev/sda print free unit TB - jmk

11
展示未分配的空闲空间最简单的方法是使用一个命令:
$ sudo sfdisk --list-free /dev/sdX

(如果您不需要有关扇区大小等其他信息的额外信息,请添加--quiet选项。)

1
太好了,谢谢。如果您不指定磁盘,它将列出所有磁盘! - grilix
通过将 --json 选项添加到 sfdisk 中,可以获得实际可读的机器输出。 - josch

6

我也曾经遇到过Fedora 26和LVM分区的同样问题,看来我在安装过程中漏掉了某些检查。所以,我的15G根目录已经增加到了227G,就像我需要的那样。

我在这里发布了我遵循的步骤:

resize2fs:尝试打开时超级块中的错误魔数

0) #df -h

Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 1.9G     0  1.9G   0% /dev
tmpfs                    1.9G     0  1.9G   0% /dev/shm
tmpfs                    1.9G  824K  1.9G   1% /run
tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/fedora-root   15G  2.1G   13G  14% /
tmpfs                    1.9G     0  1.9G   0% /tmp
/dev/md126p1             976M  119M  790M  14% /boot
tmpfs                    388M     0  388M   0% /run/user/0

1) # vgs

  VG     #PV #LV #SN Attr   VSize   VFree   
  fedora   1   2   0 wz--n- 231.88g 212.96g

2) # vgdisplay

  --- Volume group ---
  VG Name               fedora
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               231.88 GiB
  PE Size               4.00 MiB
  Total PE              59361
  Alloc PE / Size       4844 / 18.92 GiB
  Free  PE / Size       54517 / 212.96 GiB
  VG UUID               9htamV-DveQ-Jiht-Yfth-OZp7-XUDC-tWh5Lv

3) # lvextend -l +100%FREE /dev/mapper/fedora-root

  Size of logical volume fedora/root changed from 15.00 GiB (3840 extents) to 227.96 GiB (58357 extents).
  Logical volume fedora/root successfully resized.

4) #lvdisplay

5) #fd -h

6) # xfs_growfs /dev/mapper/fedora-root

meta-data=/dev/mapper/fedora-root isize=512    agcount=4, agsize=983040 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0 rmapbt=0
         =                       reflink=0
data     =                       bsize=4096   blocks=3932160, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 3932160 to 59757568


7) #df -h

Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 1.9G     0  1.9G   0% /dev
tmpfs                    1.9G     0  1.9G   0% /dev/shm
tmpfs                    1.9G  828K  1.9G   1% /run
tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/fedora-root  228G  2.3G  226G   2% /
tmpfs                    1.9G     0  1.9G   0% /tmp
/dev/md126p1             976M  119M  790M  14% /boot
tmpfs                    388M     0  388M   0% /run/user/0

最好的问候,


它在我的Ubuntu虚拟机上运行良好! - omeraiman

6
除了其他关于如何找到未分区空间的答案之外,您还可能分配给LVM卷但实际上未使用的空间。您可以使用 pvdisplay 列出物理卷,并查看每个物理卷关联的卷组。如果物理卷未与任何卷组相关联,则可以安全地重新分配或销毁。假设它与卷组相关联,下一步是使用 vgdisplay 显示您的那些卷组。除其他事项外,这将显示您是否有任何可用的“物理扩展”——可以分配给逻辑卷的存储块。您可以通过 vgs 以简洁的形式获得此信息:
$ sudo vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  fedora   1   3   0 wz--n- 237.46g    0 

...这里你可以看到我没有任何可用空间。如果有的话,最后一个数字就不会为零。

这很重要,因为这个空闲空间对于dudf等工具是不可见的,同时也会在使用fdisk或其他分区工具时显示为已分配分区。


vgdisplay 对我来说确实是答案,因为大多数安装程序现在都提供了一个很好的选择,即使用加密的LVM来创建卷组和其中的逻辑卷。然后,在移动空间时,未分配的空间位于卷组而不是物理卷分区中。 - 13013SwagR

4

这是一个老问题,但我也想发表我的答案。

既然我们在谈论免费可用空间,我们应该谈谈扇区,因为没有分区或大小调整。

对于我们人类来说,这并没有多少意义。要有可读的信息,我们必须将此数字转换为字节。 所以,我们已经分区的磁盘,并想知道我们可以使用多少空间。个人而言,我不喜欢parted解决方案,因为我的大脑记忆已经被占满了命令。还有cfdisk,它给你空闲空间。但我认为fdisk是最快速的解决方案:它是纯粹简单的,没有安装任何东西:执行fdisk / dev / sdx,然后在交互式Shell中输入v。它将给你剩余的扇区数。

2004-54-0 [17:03:33][root@minimac:~]$> fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).
..
Command (m for help): v
Remaining 1713 unallocated 512-byte sectors

我们仍有1713个扇区,每个扇区为512字节。因此,由于您喜欢终端(2012年可能是这样,现在谁知道呢?),我们执行命令echo $(((1713*512)/1024))k,即将1713个扇区乘以512字节(除以1024转换为KB),得到856k..甚至不到900 KB.. 我需要另一个磁盘。

由于@the Tin Man的帮助,我的回答语法更好了。我还有许多语言需要提高 ;) - nnsense
如何知道未分配空间的起始和结束位置? - alhelal

3
使用磁盘工具图形化界面时,它会显示所有文件系统使用的磁盘空间,并使用终端命令如df -H。换句话说,它使用的是1000的倍数,而不是1024。注意:-h和-H之间有区别。
同时,使用命令行# fdisk /dev/sda查找硬盘中未分配的空间将显示总空间和总柱面值。
现在检查最后一个柱面值,并从总柱面值中减去它。因此,最终值* 1000将给出未分配磁盘空间量。
注意:柱面值在df -H中显示为1000的倍数,也可能在df -h中以1024的倍数显示。

3

请按照以下步骤操作:

  • 找到设备类型,例如 /dev/sda、/dev/hda、/dev/vda 等。

  • 查看 vi /etc/fstab 文件,找出已挂载的分区及其 UUID。

  • 假设你的硬盘标记为 /dev/sda,并且你知道 df -hT 命令下有多少个 /dev/sda。

接下来需要找到剩余的 /dev/sda*。

执行 fdisk -l /dev/sda* 命令将列出所有的 /dev/sda*,例如 /dev/sda4 或 /dev/sda5。

然后找出已挂载的分区的 UUID,如果它们没有在 /etc/fstab 中列出,则可以格式化并挂载。

按照这个步骤操作即可。智者千虑,必有一失。


1
一个简单的解决方案:

parted /dev/sda

显示有关单位的帮助信息。然后将其切换到所需的单位。 要显示设备上的可用空间,请使用以下命令:
print free

1
它不会打印出空白的空间。 - ji-ruh

0

文件系统大小可能与分区大小不同。要进行修复,您需要执行以下操作:

df -h

查看分区名称,例如/dev/sda3

resize2fs /dev/sda3


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接