如何查看文件系统上有多少块可用?

如何查看文件系统上有多少块可用?

我知道 df 应该提供此信息,但是当我运行 df 时,它显示空闲的 1k 块的数量,但我的文件系统正在使用 4k 块。

当然,我可以简单地除以四,但这不一定是正确的,因为粒度不同。例如,四个 1k 文件将在使用 1k 块的文件系统上使用四个 1k 块,但四个 1k 文件将在使用 4k 块的文件系统上使用四个 4k 块。 (因此除以四会产生错误的答案。)

答案1

如果您有一个 1K 文件占用 4K 文件系统块,它将为df输出贡献 4K。

df通过向内核询问空闲块计数(使用statfs/ statvfs)并将其乘以块大小 / 1024 来计算该数字。

除以 4 即可。有时事情比你想象的要简单。

另一方面,您不应假设每个版本都df使用 1024 字节块作为其报告单位。有时是512。

答案2

有趣的是,不同版本的选项集df是多种多样的。

如果您正在使用 GNU df(例如,使用Linux),您可以说
df -B4K
(或df -B4k) 来补偿 4KB 块大小。

为了OpenBSD 的df和Mac的操作系统Xdf,将环境变量设置BLOCKSIZE为 4096 以告知df使用 4KB 块大小。

为了索拉里斯的/usr/bin/df使用该-v开关可以找出“分配给文件系统的块总数、分配给现有文件的块数、[和]非特权用户可用于创建新文件的块数”等信息。对于-v,“大小以每个指定文件系统支持的最小块大小的倍数显示。”

为了AIX 的df使用-I开关找出“块总数、已用空间、可用空间、已用空间百分比以及文件系统的挂载点”。 (我不清楚-I生效时已用空间和可用空间的单位是什么,并且我没有看到任何更相关的开关,除了-i会显示已用 inode 的数量和 inode 的百分比请注意,/usr/sysv/bin/df -v在 AIX 上“报告已使用块的百分比以及已使用块和空闲块的数量”,这与 Solaris 的/usr/bin/df -v行为类似。

单一 UNIX 规范为了df正如维基百科中所述,似乎没有相关开关用于df以块或索引节点显示结果。

答案3

POSIXdf仅提供 1024 或 512 字节单元,因此答案是特定于系统的,并且很可能也是特定于文件系统的(我将忽略诸如块再分配内联数据.)

首先要考虑的概念是保留块,根据规范,输出的空闲块计数df将不包括保留块(通常为根保留,但并非总是如此)。

一种(主要)可移植的无需使用的查找方法df是使用 Gnu stat,使用您选择的输出格式:

$ stat -fc "%n type=%T freeblk=%f totalblk=%b blksz=%S" /tmp
/tmp type=ext2/ext3 freeblk=99136 totalblk=494123 blksz=4096

您可以使用%a(而不是%f)来输出有效空闲块计数(即排除保留块),如df在其计算中使用。

其他系统 (*BSD) 的格式化标志和功能有所不同stat,并且可能仅适用于文件,不适用于文件系统。stat不是 POSIX(它是 POSIX 函数stat()和的包装器statvfs()),GNU 版本(在核心工具包)非常便携。

使用基于 ext2/3/4 的文件系统,您可以作为 root(或更准确地说:具有对块设备节点的读取访问权限)使用以下命令转储此信息tune2fs

# tune2fs -l /dev/sda3                              
tune2fs 1.42.8 (20-Jun-2013)                                                    
Filesystem volume name:   <none>                                                
Last mounted on:          /var/spool                                     
Filesystem UUID:          7b9d93dd-1322-4f54-a302-a0799f4518fb
Filesystem magic number:  0xEF53                                                
[...]
Filesystem state:         clean                                                 
Errors behavior:          Continue                                              
Filesystem OS type:       Linux                                                 
Inode count:              7651328                                               
Block count:              30588854                                              
Reserved block count:     305888                                                
Free blocks:              30060629                                              
Free inodes:              7651317                                               
First block:              0                                                     
Block size:               4096                         
Fragment size:            4096                  
[...]

无论文件系统是否安装,此方法都有效。

答案4

如果有很多文件小于(或小得多)磁盘块大小,则有关 df 函数行为的有用信息。

我遇到了一个问题, df 函数告诉我以下内容:

Filesystem     1K-blocks    Used Available Use% Mounted on
udev               89212       0     89212   0% /dev
tmpfs              24396    3236     21160  14% /run
/dev/mmcblk0p1   3583944 1926248   1593516  55% /
tmpfs             121980       0    121980   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             121980       0    121980   0% /sys/fs/cgroup
tmpfs             121980       4    121976   1% /tmp
/dev/zram1         49584   17836     28164  39% /var/log
tmpfs              24396       0     24396   0% /run/user/0

但肯定没有更多的空间,因为我收到创建新文件的错误。解决方案是“df -i”,它返回磁盘上占用的块:

Filesystem     Inodes  IUsed IFree IUse% Mounted on
udev            22303    338 21965    2% /dev
tmpfs           30495    523 29972    2% /run
/dev/mmcblk0p1 230144 230144     0  100% /
tmpfs           30495      1 30494    1% /dev/shm
tmpfs           30495      2 30493    1% /run/lock
tmpfs           30495     17 30478    1% /sys/fs/cgroup
tmpfs           30495     15 30480    1% /tmp
/dev/zram1      12800     34 12766    1% /var/log
tmpfs           30495     21 30474    1% /run/user/0

因此,这是磁盘的更多可用/已用空间指示器。为了测试,我编写了约 180.000 个 409Byte 大小的文件来填充 4096Byte 大小的块,因此简单的“df”磁盘使用率几乎没有改变,但磁盘已满。

相关内容