原谅我的强迫症,但是看着各种显示都不一样着实难受。
先放命令的 result
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 511M 7.9M 504M 2% /boot/efi
/dev/sdb2 457G 129G 306G 30% /
# fdisk -l
/dev/sdb1 2048 1050623 1048576 512M EFI System
/dev/sdb2 1050624 976771071 975720448 465.3G Linux filesystem
# parted -l
Number Start End Size File system Name Flags
1 1049kB 538MB 537MB fat32 boot, esp
2 538MB 500GB 500GB ext4
居然三个命令得到 3 个结果 “457G/465.3G/500G”,( parted 不是很熟就没仔细验证了)
一开始我以为是进制转换问题,于是 df 用 Bytes 输出
# df -B1
Filesystem 1B-blocks Used Available Use% Mounted on
/dev/sdb2 490652508160 142457827328 323199463424 31% /
975,720,448 * 512bytes = 499,568,869,376
499,568,869,376 - 490,652,508,160 = 8,916,361,216
也就是说 df 和 fdisk 查出来的 size 相差了 8,916,361,216 bytes
怀疑是 Inode 消耗,于是查 Inode 占用
# tune2fs -l /dev/sdb2 | grep -E "Inode count|Inode size"
Inode count: 30498816
Inode size: 256
用 Inode count * Inode size 得到 30,498,816 * 256 = 7,807,696,896 bytes
算下来还差 8,916,361,216 - 7,807,696,896 = 1,108,664,320 bytes
迷惑了,还有什么地方会占用吗?
另问:为了在 df -h
获得正好 450G 的显示,我应该为他分配多少 bytes 的空间?
1
anzu 2021-07-12 18:02:25 +08:00
再看看 lsblk
|
2
generic 2021-07-12 18:11:42 +08:00
文件系统除了 inode 还有其它元数据,如 journal, GDT 。
https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout |
3
jaredyam 2021-07-12 23:42:24 +08:00
离得近的也可能只是 1k=1024 or 1000 的区别
|
4
gyf304 2021-07-13 04:04:16 +08:00
有挺多原因的
1. 分区大小和文件系统占用空间不一定相同,分区 1T 文件系统可以只用前 500G 见 `man resize2fs` ``` The resize2fs program does not manipulate the size of partitions. If you wish to enlarge a filesystem, you must make sure you can expand the size of the underlying partition first. This can be done using fdisk(8) by deleting the partition and recreating it with a larger size or using lvextend(8), if you're using the logical volume manager lvm(8). When recreat‐ ing the partition, make sure you create it with the same starting disk cylinder as before! Otherwise, the resize operation will certainly not work, and you may lose your entire filesystem. After running fdisk(8), run resize2fs to resize the ext2 filesystem to use all of the space in the newly enlarged partition. ``` 2. ext4 默认有 5% 的 reserve 3. 如上面说的,各种元数据 4. 可能部分文件系统支持的 quota 也有可能影响 |
5
mingl0280 2021-07-13 04:58:01 +08:00
df: ext4 分区的**用户可见**容量(不包括系统占用且对用户不可见的容量)
fdisk -l: ext 类型分区的**总**容量(包括系统占用) parted -l: 跟 fdisk 不一样的是他用的是 GB 不是 GiB |
6
mingl0280 2021-07-13 05:03:02 +08:00
另外,不要指望能获得正好 df XXXG 的显示——这个算起来贼坑爹,完全是浪费时间。你非要算的话得手工算出来文件系统有多少 overhead,但是这个数值对于每个分区大小都不太一样。
|
7
libook 2021-07-13 11:17:39 +08:00
看 parted 的手册,
https://www.gnu.org/software/parted/manual/parted.html 2.4.14 小结表明进率用的 1000,如果是 1024 应该用 GiB 单位(但这个貌似也没有统一)。 fdisk 、parted 看的是分区大小,df 看的是文件系统大小,分区里除了文件系统以外还需要额外的空间来存放其他必要信息,所以实际分区会比文件系统更大。 (这段可能需要求证)如果不是磁盘上最前面的分区的话,fdisk 可能会小于 parted,因为 fdisk 是比较精确的,会从分区实际开始的地方算,而 parted 可能是从前一个分区结束的地方开始算,但实际上分区只能以扇区为最小单位,如果前一个分区的结束位置在扇区中间,那么扇区剩下的部分是无法被后面的分区利用的,也就是说后面分区实际的起点是下一个扇区的开头。 所以引导分区做为第一个分区,的空间计算比较明确了,512*1024*1024/1000/1000≈537 。 至于用 df 的数反推分区空间,这个可能跟各个文件系统的标准有关吧,通常没有这种需求,所以也不知道怎么算。 |
10
SSang OP |
11
SSang OP 只是看各个云服务商给的系统盘 df 出来都是整数 40G/50G/200G 这样的,感觉挺神奇的,就很好奇他们是怎么算出来的
|
13
GoodRui 2021-07-24 13:18:53 +08:00 via iPhone
其实我很想知道,为什么网站上的代码块里写的代码,为啥字体、高亮配色都看着这么舒服,我用的 Mac,为啥找不到一个好的终端能,不求别的,就要求简约明晰,方便阅读...关键字能高亮...有没有大佬指点下
|