显示root用户可用的文件系统的可用空间


12

默认情况下,Linux至少在ext4上为root用户保留一部分文件系统(以防止普通用户完全填充驱动器并导致系统崩溃,并减少碎片)。但是,df仅显示普通用户可见的可用空间(即使以root身份运行)。您如何显示root可以访问的“实际”可用空间?

Answers:


6

我不确定是否有内置的工具,但是假设您保留默认值5%的预留空间,那么这将告诉您:

df / | grep dev | cut -f 3,6 -d\  | awk '{print ($1*.05)+$2}'

df根目录,grep其中包含dev(删除标题)的行,cut大小和可用字段,然后使用awk脚本计算添加到可用磁盘的磁盘大小的5%。

您可以从中获取实际预留tune2fs -l <device>,并将其与上面的脚本结合在一起。


2
正确,因此以下命令将告诉我们为特权用户保留了多少分区空间:tune2fs -l /dev/DEVICE | egrep "Block count|Reserved block count"。例如,对于我的“多媒体缓冲区”分区:Block count: 2621440Reserved block count: 128449:可用块的4.9%(保守设置有助于防止碎片化)。
tuk0z '16

无需使用cut命令:您可以awk直接选择字段。实际上,该cut命令对我不起作用。无论如何,我给出了另一个答案,应该给出更精确的答案。
jarno

1
执行tune2fs -m <percentage> <device-name>以更改仅留给root用户使用的磁盘空间。
luka5z

1
受上述启发,我想出了这一点,以MB为单位计算根卷上的保留空间:sudo tune2fs -l $(df | grep -E '/$' | cut -d\ -f 1) | egrep "Reserved block count|Block size" | paste -sd\ | awk '{print ($4 * $7 / ( 1024 * 1024 ) ), "MB"}'
mp3foley

这不是一个可移植的答案。在下面查看您需要的答案(破坏者:tune2fs /dev/sda1甚至更好stat -f -c '%a blocks free and %f blocks free for root (%S bytes per block)' /
trs

17

通过使用命令tune2fs(可在/ sbin / tune2fs中找到),可以轻松确定预留空间:(还有更多!)

tune2fs -l /dev/sda1

我将提供系统的信息以供参考,我将删除对这个问题不重要的多余行:

标头...和卷名,我标记了所有驱动器,以便在需要时易于识别。

tune2fs 1.42.4 (12-Jun-2012)
Filesystem volume name:   xenon
Last mounted on:          /
...

当系统运行时,真的要这样说“干净”。诚实!

Filesystem state:         clean

这是数据存储容量信息的开始位置:

在这里,您可以看到我总共有121,179,648个块...,块大小为4K(4096),可以乘以一个较大的数字(462-ish GB)。(块大小如下所示)

Block count:              121179648

和保留的块...通过查看上面的数字和下面的数字..您应该能够比较快地得出我保留了1%的信息。在这种情况下(4.62 ish GB)

Reserved block count:     1211796

当前有多少可用空间?就在这儿!

Free blocks:              104090586
...

以及所有重要的块大小。对乘法有用。

Block size:               4096
...

这些行说WHO块是为...保留的,用户0,root,在这种情况下

Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
...

这里有很多可用的信息,但这应该使您能够快速确定有多少可用资源,以及为根保留多少资源。简单的数学。

希望这可以帮助。记住...手册页是您的朋友。


2

这将显示与“ / path”相关的分区中的可用空间(以字节为单位)

printf '%s' $(($(stat -f --format='%f*%S' /path)))

您不必是超级用户即可运行它。

顺便说一句我不太明白之间有什么区别

%s块大小(用于更快的传输)

%S基本块大小(用于块计数)

在使用中stat


很酷-这是否占root保留的空间?
保罗

@Paul是的,它包含在内
jarno

您的输出实际上是一个总和-因此您可以通过管道将其输出bc以获取字节数,甚至可以--format='%f*%S/1024/1024/1024' | bc根据所选择的分区数来获取千字节/兆字节/千兆字节。
Paul

@Paul好,我称它为产品。该二进制前缀被称为kibibytes,mebibytes和gibibytes,分别。周围的算术展开进行 $(( ... ))了计算,但是它仅得出商的整数部分(如果加上除法)。还是您的外壳不支持算术扩展?
jarno

@Paul但是,如果使用bc,则可以根据需要获得任意精度的商。
jarno
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.