用 du 统计了一下根目录,才 13G,但 df 出来个 Used 30G,不太明白。
不是特别了解 Linux 和它的文件系统┓( ´∀` )┏,so 要怎么查看呢?演示下
Filesystem Size Used Avail Use% Mounted on
overlay 41G 31G 9.8G 76% /
tmpfs 64M 0 64M 0% /dev
tmpfs 847M 0 847M 0% /sys/fs/cgroup
/dev/sdb1 4.8G 2.0G 2.7G 43% /home
/dev/sda1 41G 31G 9.8G 76% /root
shm 64M 0 64M 0% /dev/shm
overlayfs 1.0M 160K 864K 16% /etc/ssh/ssh_host_rsa_key
overlayfs 1.0M 160K 864K 16% /etc/ssh/keys
tmpfs 847M 668K 846M 1% /run/metrics
tmpfs 847M 0 847M 0% /run/xxx/devshell
$ sudo du -hs --exclude='/proc/*' /
12G /
$ sudo fdisk -l
Disk /dev/sda: 45 GiB, 48318382080 bytes, 94371840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
> df -k
Filesystem 1024-blocks Used Available Capacity iused ifree %iused Mounted on
/dev/disk2s1 7815168 2335276 5479892 30% 23700 4294943579 0% /Volumes/10_12063730
> sudo du -ks /Volumes/10_12063730
2232624 /Volumes/10_12063730 #BSD
> sudo gdu -ks /Volumes/10_12063730
2232624 /Volumes/10_12063730 #GNU
> diskutil list
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *8.0 GB disk2
1: Apple_HFS 10_12063730 8.0 GB disk2s1
mount
, df -a
fdisk -l
, lsblk -a
, find /dev -maxdepth 1 -type b
/dev/sdb1
挂载在/home
,du -hs /home
就和df
的空间数据对上了/dev/sda1
挂载在/root
,可是du
和df
的空间数据又对不上,进/root
目录也看不到啥东西;但你自己把/dev/sda1
挂载到一个新的临时目录去du
,又和df
对上了。所以这个挂载在/root
到底是个啥?(懵了,不要打我啊/逃)/dev/sdb1
哪里来的哦,fdisk
里没出现sdb字样,lsblk
里有,/dev
下没> sudo fsck /dev/sdb1
/dev/sdb1 is mounted
> sudo file /dev/sda1 /dev/sdb1
/dev/sda1: block special (8/1)
/dev/sdb1: cannot open `/dev/sdb1' (No such file or directory)
du
有个参数-x
,用来跳过分区,比如du -s tmp
会把分区B也算进去,但du -xs tmp
不会tmp #属于分区A
├─ b #挂载分区B
├─ f #普通文件
-x, --one-file-system
skip directories on different file systems
1
hackerang 2019-12-07 01:10:20 +08:00
咋的不明白呢。。这不是整的挺明白的吗
|
3
ashong 2019-12-07 01:21:05 +08:00 via iPhone
du 是文件夹 /文件实战空间
|
4
jxxz 2019-12-07 01:28:00 +08:00 via iPhone
好像一个是按块大小来算的,一个是实际大小
|
5
Mirana 2019-12-07 01:40:06 +08:00
du 是统计所有文件加起来的大小 df 是获取文件系统 superblock 里记的大小 文件删除后 文件系统不一定马上就回收用过的 block
|
6
flynaj 2019-12-07 02:04:14 +08:00 via Android
du 是文件大小,df 是磁盘空间,差别是文件系统占用的空间,无论什么文件系统它都要占用一部分磁盘空间
|
7
lxk11153 OP |
8
cev2 2019-12-07 04:57:03 +08:00 via Android
给的信息太少,感觉多半是你 overlayfs 的问题。
|
9
scriptB0y 2019-12-07 11:27:47 +08:00
应该是 overlayfs 的问题,不是很了解,但是 du 遇到 Symbolic link,会计算 link 的大小,而不会计算真正的文件大小
|
10
winglight2016 2019-12-07 11:51:47 +08:00
看了几天帖子了,这是唯一讨论技术的,看完感觉学习到了。所以,v2 已经是个八卦新闻论坛了吧?🐶
|
12
lxk11153 OP @winglight2016 #10 看我过往发的帖子,基本讨论技术的 /HJ
@flynaj 11 看第 1 条附言 @scriptB0y #9 Symbolic link 应该就是不进入链接呀,不然我创建很多根目录的软链接岂不是统计大小得翻几倍 |
13
twl007 2019-12-07 13:51:41 +08:00 via iPhone
用 lsof 查一下就行 会发现有 delete 关键字的 找到对应的 pid 干掉就行
|
14
momocraft 2019-12-07 14:04:25 +08:00
在一些文件系统中 du (不考虑压缩) 和 df (不考虑分配但未用于文件的空间) 可以同时不准, 比如 btrfs
|
15
lxk11153 OP |
18
lxk11153 OP |
19
momocraft 2019-12-07 16:49:09 +08:00
你知道自己用的什么文件系统吗?
|
24
feather12315 2019-12-08 00:58:31 +08:00 via Android 2
关于 df / du 输出结果不同的原因,我曾经在实习的时候调研过:
https://vvl.me/2019/08/the-research-of-shell-command-df-and-du-difference-reason/ |
25
lxk11153 OP |
26
feather12315 2019-12-08 10:16:58 +08:00 via Android
@lxk11153 #25,df 显示的就是剩余空间
|
27
yuikns 2019-12-08 10:17:25 +08:00 via Android
我理解真实需求是占用硬盘文件的分布吧?
du 是检查某个目录下面的文件,df 是检查 mount point 的 block 的信息。 不妨安装个 ncdu 试试 |
28
yuikns 2019-12-08 10:20:21 +08:00 via Android
@yuikns du 给的是下面文件的 sum(size),df 是直接那个 device 的统计。挂载有些盘给出的统计不一样,显示也会有点奇怪。
|
30
lxk11153 OP @yuikns #17 不是,我是觉得 `du /`=13G 但 df 出来个 Used 30G, 两者相差有点大,所以觉得不明白。。如果 df 出来个 Used 15G 我可能就不疑问了
ps: ncdu 没什么用,就是“gui-like”的 du |
31
lxk11153 OP 搞错了,重新理了下,参见第 4 条附言
|
32
chzhx 2019-12-16 15:27:35 +08:00
lsof / | grep delete
|