ext4分区大小/可用空间差异


14

在为我的数据创建250GiB备份分区时,我注意到报告的分区大小与Nautilus,gParted,df,tune2fs等中的可用空间之间存在许多差异。

起初,我认为这是GiB / GB的混乱。不是

然后我认为这可能是ext4的保留块。不是

我完全不解。这是一些图片。步骤如下:

  • 首先,NTFS。524288000扇区x 512字节/扇区= 268435456000字节= 268.4 GB = 250 GiB。

在此处输入图片说明 在此处输入图片说明

Nautilus会说“ 总容量:250.0 GB ”(即使实际上是GiB,而不是GB)。除了轻微的标签错误之外,到目前为止,一切都很好

  • 现在,使用gparted格式化为ext4的同一分区:

在此处输入图片说明

第一,最后和总计扇区相同。它是相同的250GiB分区。使用的大小为4.11GiB(可能是保留的块?)

在此处输入图片说明

不。看起来预留块是12.7 GiB(〜5。ouch!)。但是... 为什么总容量现在只有246.1 GiB?。这种差异(某种程度)与gparted报告的4.11 GiB相匹配。但是...如果不是来自保留块,那是什么?为什么gparted没有报告12.7GiB的已用空间?

$ df -h /dev/sda5
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             247G  188M  234G   1% /media/BACKUP

df在报告的可用空间中与Nautilus匹配。但是..仅使用188M?应该是〜12GB吗?而且总容量仍然是错误的。所以我跑去tune2fs寻找一些线索。(忽略不相关的输出)

$ sudo tune2fs -l /dev/sda5
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   BACKUP
Filesystem UUID:          613d592e-47f5-4206-96a7-210090d340ef
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Filesystem state:         clean
Filesystem OS type:       Linux
Block count:              65536000
Reserved block count:     3276800
Free blocks:              64459851
First block:              0
Block size:               4096

总65536000块* 4096字节/块= 268435456000字节= 268.4 GB = 250 GiB。它匹配gparted。

3276800预留块= 13421772800字节= 13.4 GB = 12.5 GiB。它(还是有点)匹配Nautilus。

64459851可用块= 264027549696字节= 264.0 GB = 245.9 GiB。为什么?应该不是250-12.5 = 237.5(或250-(12.5 + 4.11)=〜233)吗?

删除保留的块:

$ sudo tune2fs -m 0 /dev/sda5
tune2fs 1.41.12 (17-May-2010)
Setting reserved blocks percentage to 0% (0 blocks)

$ sudo tune2fs -l /dev/sda5
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   BACKUP
Filesystem UUID:          613d592e-47f5-4206-96a7-210090d340ef
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Filesystem state:         clean
Filesystem OS type:       Linux
Block count:              65536000
Reserved block count:     0
Free blocks:              64459851
Block size:               4096

不出所料,相同的块数,0个保留块,但是... 相同的空闲块我刚刚释放了12.5 GiB吗?

$ df -h /dev/sda5
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             247G  188M  246G   1% /media/BACKUP

在此处输入图片说明

看起来像我一样。可用空间从233 GiB增加到245.9 GiB。gparted根本不在乎,显示的信息完全相同!(无助于发布相同的屏幕截图)

真是一团糟!

我已尽力将其记录在文档中。。。所以,有人可以告诉我这里发生了什么吗?

  • NTFS-> ext4格式中缺少哪些令人迷惑的4.11 GiB?
  • 为什么gparted,Nautilus,tune2fs,df之间会有如此多的差异?
  • 我的数学有什么问题?(以粗体显示的问题分散了该帖子)

任何帮助表示赞赏。虽然我不知道发生了什么,但是我正在认真考虑放弃ext4,而对我的/分区以外的所有内容放弃使用NTFS。

谢谢!




@Uri Herrera:您是否真的阅读了我的问题,或者至少阅读了前几行?这不是 GiB / GB问题。分区为268.4GB = 250.0GiB,而不是 246.1
MestreLion 2011年

1
您可以看一下另一个答案:askubuntu.com/questions/5335/…– enzotib 2011
6

Answers:


13

这里发生了一些事情。gparted报告实际使用/可用空间。内核通过保留空间减少可用计数。删除保留空间后,由于保留块已经是空闲的,因此空闲计数没有变化。只是不允许非root用户侵入该空间,以防止他们因填满磁盘而引起麻烦。由于有bug,gnome的编号有些不稳定。它没有报告内核报告的已用空间(和df显示),而是通过从总数中减去可用空间来进行计算。这使它显示已使用的保留空间。

实际使用的缺少的4GB是ext4的fs开销。NTFS最初仅为MFT分配少量空间,然后根据需要进行扩展。但是ext系列文件系统在格式化时为inode表分配了空间(大致相当于MFT),并且它无法增长。报告的总空间中缺少的空间是索引节点表。剩余的可用空间来自日志(通常为128 mb)和调整inode大小。


多谢您+1解决一些奥秘!但是,如果〜4GB是文件系统的开销,为什么要从总空间中扣除其中的一部分(3.9GB),而实际使用的是188MB?哪些(或两者)是间接费用?为什么处理不同?另外,df即使使用sudo,也像Nautilus一样显示总容量(247GB)和已用空间(188MB)。因此,如果是错误,不仅是侏儒。
MestreLion 2011年

我以为188MB是开销(与NTFS的72MB相比)。但是,如果NTFS开销会随着时间增加,这是否意味着Nautilus稍后会报告其总容量在减少
MestreLion 2011年

更正:df始终显示可用空间,而不管谁运行它。要查看可用空间(==可用空间+保留空间),请使用stat -f /media/BACKUP
Marius Gedminas

编辑答案以澄清。而且我相信NTFS只会报告更多的已用空间,而不会随着MFT的增长而减少总空间。@Marius,这也不正确。statfs()以及df和stat -f都显示了不计算保留块的可用空间。我可能会发誓它也会根据配额进行调整,并根据主叫用户改变其响应,但是您对此表示正确。它不计算配额,也不在乎用户如何称呼它。
psusi 2011年

@psusi:所以我有约3.9GiB的inode表和约188MB的日志和其他内容?Nautilus从Total Size中减去inode表,而将日志报告为已用空间?gparted会将其报告为单个4.11GiB的已用空间吗?那是对的吗?如果是这样,我只是希望Nautilus以相同的方式处理这两个开销。要么从总数中减去两个,要么都计为“已用空间”(最好)。
MestreLion 2011年

7

首先,保留的块不是用于文件系统内部管理的块。

预留块只是为预留的root,以确保使用某些分区上的非管理员用户不能排除使用该分区上文件的服务所占用的空间。

即使没有保留的块(-m 0),也始终有一部分空间用于文件系统内部管理,我不能说多少,我也不是那么了解。

此外,Gparted执行为root,因此它将保留的块视为免费的。Nautilus以用户身份执行,将其视为非免费。

好的,@ psusi的答案很明确,我没有补充。


嗯,很有意思,+ 1。至少这解决了我发现的一些问题。将保留的块视为非根目录的“限制上限”而不是“已使用的块”,这会使gparted,df和tune2fs读数一致(并且很有意义)。但是仍然存在一些问题,特别是4GB的已用空间/总容量。
MestreLion 2011年

1
另外,我在某处读过(也许是那些古老的“为什么每月不必对Linux分区进行碎片整理” HOWTO?),因此,为root保留5%的空间可以为extN分配算法提供一些喘息的空间,因此避免了碎片化。
Marius Gedminas

1

尝试使用gparted将分区大小减小几兆字节,然后再次将其增大到其原始大小。这可能会导致其他应用程序正确读取尺寸。我最近以这种方式纠正了50Gb错误!

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.