我遇到了一些奇怪的事情。通常,我会使用 df 显示硬盘上当前的可用空间,但我发现我的主分区空间不足。因此,我打开 gparted,发现实际空间比 df 显示的要多。差异为 5%,几乎是 2GB。我将尝试使用 testdisk 来查看是否有问题。
这是 fdisk -l
Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders, total 312581808 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x11a8ba38
Device Boot Start End Blocks Id System
/dev/sda1 63 10233404 5116671 b W95 FAT32
/dev/sda2 10233405 231239679 110503137+ 7 HPFS/NTFS/exFAT
/dev/sda3 231241726 312580095 40669185 5 Extended
/dev/sda5 308385792 312580095 2097152 82 Linux swap / Solaris
/dev/sda6 243032064 308383743 32675840 83 Linux
/dev/sda7 231241728 243030015 5894144 83 Linux
Partition table entries are not in disk order
然后 parted -l:
Model: ATA TOSHIBA MK1652GS (scsi)
Disk /dev/sda: 160GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32.3kB 5240MB 5239MB primary fat32
2 5240MB 118GB 113GB primary ntfs
3 118GB 160GB 41.6GB extended
7 118GB 124GB 6036MB logical ext4
6 124GB 158GB 33.5GB logical ext4
5 158GB 160GB 2147MB logical linux-swap(v1)
df -h 显示:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 4.9G 4.1G 860M 83% /media/sda1
/dev/sda2 106G 86G 21G 81% /media/sda2
/dev/sda6 31G 29G 807M 98% /media/sda6
/dev/sda7 5.6G 3.8G 1.6G 71% /media/sda7
sda1 是笔记本电脑的恢复分区,sda2 是 Windows 分区,sda6 是 /home,sda7 是根分区。
正如您在下面的屏幕截图中看到的,sda1 和 sda2 都可以通过 df 正常显示,而 6 和 7(在扩展分区中)则不行。:/
gparted 显示:
cfdisk 抱怨:FATAL ERROR: Bad logical partition 6: enlarged logical partitions overlap
这是它以前从未遇到过的。在我使用 liveUSB 来使用 gparted 调整分区大小和移动分区后,这种情况开始发生。它无法缩小我的 Windows 分区上的文件系统,然后当它刷新时,一切看起来都正常。
我打算在将 partedmagic liveUSB 装到闪存驱动器上后立即试用它,有其他人遇到过这个问题或知道解决办法吗?我还想修复我的表条目,使它们井然有序,但这可以改天再做。
编辑:所以我在 partedmagic 中,测试磁盘告诉我:
Disk /dev/sda - 160 GB / 149 GiB - CHS 19457 255 63
Current partition structure:
Partition Start End Size in sectors
1 P FAT32 0 1 1 636 254 63 10233342 [PQSERVICE]
2 P HPFS - NTFS 637 0 1 14394 1 7 221006275 [XP]
3 E extended 14394 33 38 19457 53 52 81338370
Bad sector count.
因此我猜想这需要以某种方式进行修复,我会看看是否可以利用我所了解的 testdisk 来修复它。
不带人类可读命令的 df 显示以下内容:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 5106660 4226416 880244 83% /media/sda1
/dev/sda2 110503132 89294228 21208904 81% /media/sda2
/dev/sda6 32164696 29691780 839128 98% /media/sda6
/dev/sda7 5801560 3902728 1604128 71% /media/sda7
32164696 - 29691780 != 839128,某个地方出了问题。
找到这里发生的事情的答案:https://askubuntu.com/a/48511来自 Google,由 Mike 提供的一些好主意。我确实觉得很傻。
答案1
我不知道如何解决您的问题,但我记得当我对硬盘进行分区时,其中一个选项是为 root 用户保留多少空间,默认值为 5%。我认为这个想法是,即使您(作为普通用户)空间不足,计算机也不会崩溃,因为所有重要的东西都以 root 身份运行,并拥有额外的 5% 空间。
答案2
虽然扇区错误可能是一个问题,但丢失的磁盘空间只是来自不同实用程序使用的不同单位。
gparted 正在使用吉比字节并且 df 正在使用千兆字节。
31.16Gib = 31.16 x 1024 x 1024 x 1024 字节,或 33457795235
1 GB 为 1000000000 字节,因此四舍五入后为 33457795235 / 1000000000 = 33.5GB。
答案3
我不知道或的实现细节df
,但我可以告诉你,测量文件系统中的可用空间并不总是一成不变的。我可以想象在某些情况下,两个人(或程序)可能对某个假设的文件系统有多少可用空间存在分歧。ext{2|3|4}
gparted
考虑一下文件系统分配空间的粒度比文件大小更粗。如果您的文件系统以大小为 的块进行分配
x
,而您的文件为x + 1
字节,2x
则将分配 ,留下x - 1
浪费的空间。该空间是“空闲”的吗?除非您更改文件的长度,否则您的文件系统永远不会使用它,但一个简单的程序可能只计算文件大小,因此会少报空间使用量/多报空闲字节数。想象一下,在某些情况下,您的内核文件系统驱动程序可能具有一些运行时功能,这些功能会造成可用空间减少的现象。例如,它可能为当前打开的正在写入的文件分配了过多的空间,以确保在您可能向文件附加内容时获得连续的分配。或者可能为日志或其他元数据留出了一些空间。我可以想象您的文件系统驱动程序对空间的概念与实际写入磁盘的内容不同。
一些元数据可能被缓存,其中一个正在读取缓存,另一个正在对磁盘进行更深入的检查。我不知道
ext
文件系统家族是做什么的,但我特别想到了 FAT,其中可用空间被缓存在一个 32 位整数中,以加快查询可用空间的速度。可能有一些空间被标记为“正在使用”(以便将来不会分配该空间)但未被任何 inode 引用。这可能表示发生了一些奇怪的事情(I/O 故障?磁盘损坏?)。我认为
fsck
程序通常会检查这类事情。
这些都是假设的;我不知道真正的答案是什么。无论如何,从其他消息来看,可能存在一些问题。我会去fsck
看看它说了什么。
答案4
正如 Mike 所说,ext4 分区中有一些空间仅供 root 用户使用,以防止非 root 用户填满硬盘。有关此内容的更多信息,请参阅 askubuntu 上此答案的评论:https://askubuntu.com/a/48511
如果您觉得不需要这个(作为这台计算机上的单个用户,我不需要),您可以使用 tune2fs 删除这些保留块:
tune2fs -m 0 /dev/XXX
其中 XXX 是您要从中删除保留块的分区。