为什么实际文件大小更大

为什么实际文件大小更大

我有一个 ASCII 文本文件:

file foo
foo: ASCII text

其中仅包含 6 个字母(“F”后没有任何换行符或空格):

cat foo
ABCDEF

由于这是 ASCII,因此文件大小应该只是 6 个字节(因为 ASCII 是每个字符 1 个字节)。

但是,如果我习惯du这样做,我会得到一些令人困惑的结果:

du -bsch foo
7   foo
7   total

du -ksch foo
4.0K    foo
4.0K    total

所以,不仅文件大小比预期的6b大,而且当我以字节为单位和以kb为单位写入时也是不同的。

所以,我的问题是

  1. 为什么文件大小比预期的 6b 高?额外的字节去哪里了?
  2. du为什么不同单位的输出不同?

注意:这可能不是 Linux 问题。我把它放在这里,而不是在一些计算机科学论坛上,因为我使用的是 Unix 命令。

更新部门规模:

Disk /dev/sda: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: SanDisk SD8SN8U5
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D12CA635-6354-48FF-A0D6-0D3CB4BDBE2E

Device         Start        End   Sectors   Size Type
/dev/sda1       2048     534527    532480   260M EFI System
/dev/sda2     534528     567295     32768    16M Microsoft reserved
/dev/sda3     567296  208748856 208181561  99.3G Microsoft basic data
/dev/sda4  208750592  210485247   1734656   847M Windows recovery environment
/dev/sda5  210485248  212582399   2097152     1G Linux filesystem
/dev/sda6  212582400 1000214527 787632128 375.6G Linux filesystem


Disk /dev/zram0: 7.65 GiB, 8210350080 bytes, 2004480 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

更新 od输出:

od -c foo
0000000   A   B   C   D   E   F  \n
0000007

答案1

Linux 中的现代文件系统的块大小始终为 4096 字节。您可以使用stat -f foo它来验证这一点。

du -b告诉你 block-size=1 的表观大小。因此它告诉您实际的内容字节(而且它不知道稀疏性)。

du -k给出实际的磁盘大小(以 KiB 为单位)。您的文件小于 4096,因此它为您提供 4k。

这是一个例子:

du -b foo.txt 
4       foo.txt
du --block-size=1 foo.txt 
4096    foo.txt
du -b foo-5k.bin
5120    foo-5k.bin
du --block-size=1 foo-5k.bin
8192    foo-5k.bin

可以看到实际磁盘大小为N*4096

相关内容