V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
lxk11153
V2EX  ›  Linux

如何查看磁盘剩余空间? du, df, fdisk?

  •  
  •   lxk11153 · 2019-12-07 01:03:41 +08:00 · 8473 次点击
    这是一个创建于 1800 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 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
    
    第 1 条附言  ·  2019-12-07 13:40:32 +08:00
    $ sudo du -hs --exclude='/proc/*' /
    12G     /
    
    第 2 条附言  ·  2019-12-07 17:06:32 +08:00
    $ 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
    
    第 3 条附言  ·  2019-12-08 13:13:36 +08:00
    • case 2: MacOS上查看个U盘, 这个数据上我就没什么疑问,但上面的我看不懂(对它的文件系统不了解吧)
    > 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
    
    第 4 条附言  ·  2019-12-09 16:50:11 +08:00
    • 搞错了,搞错了,现在理下
    • 第 3 条附言没什么问题,先不管了
    • 正文+第 1 条附言+第 2 条附言重新理下(其实我也一知半解)
      • 磁盘(Disk) 1->n 分区(Device, 文件系统) 1->n 挂载(mount)
      • 挂载相关: mount, df -a
      • 磁盘相关: fdisk -l, lsblk -a, find /dev -maxdepth 1 -type b
      • 所以分区/dev/sdb1挂载在/homedu -hs /home就和df的空间数据对上了
    • 但是我又思考出了新问题👇
      • 问题4.1: /dev/sda1挂载在/root,可是dudf的空间数据又对不上,进/root目录也看不到啥东西;但你自己把/dev/sda1挂载到一个新的临时目录去du,又和df对上了。所以这个挂载在/root到底是个啥?(懵了,不要打我啊/逃)
      • 问题4.2: /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)
    
    • ps: du有个参数-x,用来跳过分区,比如du -s tmp会把分区B也算进去,但du -xs tmp不会
    tmp #属于分区A
    ├─ b #挂载分区B
    ├─ f #普通文件
    
    -x, --one-file-system
        skip directories on different file systems
    
    32 条回复    2019-12-16 15:27:35 +08:00
    hackerang
        1
    hackerang  
       2019-12-07 01:10:20 +08:00
    咋的不明白呢。。这不是整的挺明白的吗
    lxk11153
        2
    lxk11153  
    OP
       2019-12-07 01:17:00 +08:00
    @hackerang #1 可是和 `du` 出的结果如何对应上?
    ashong
        3
    ashong  
       2019-12-07 01:21:05 +08:00 via iPhone
    du 是文件夹 /文件实战空间
    jxxz
        4
    jxxz  
       2019-12-07 01:28:00 +08:00 via iPhone
    好像一个是按块大小来算的,一个是实际大小
    Mirana
        5
    Mirana  
       2019-12-07 01:40:06 +08:00
    du 是统计所有文件加起来的大小 df 是获取文件系统 superblock 里记的大小 文件删除后 文件系统不一定马上就回收用过的 block
    flynaj
        6
    flynaj  
       2019-12-07 02:04:14 +08:00 via Android
    du 是文件大小,df 是磁盘空间,差别是文件系统占用的空间,无论什么文件系统它都要占用一部分磁盘空间
    lxk11153
        7
    lxk11153  
    OP
       2019-12-07 04:15:41 +08:00
    @ashong #3 看下面👇
    @jxxz #4 这里的 du 是 GNU 的,默认是统计`Summarize disk usage`(磁盘占用) 有个`--apparent-size`参数是统计实际文件大小(从这个文件能读取多少数据),BSD 的那个 du 默认是统计`the file system block usage`
    @Mirana #5 `文件删除后 文件系统不一定马上就回收用过的` 可是我重启下,还是差不多的数据
    @flynaj #6 了解,肯定不可能完全一致,但 30G 和 13G 也差太多了吧
    cev2
        8
    cev2  
       2019-12-07 04:57:03 +08:00 via Android
    给的信息太少,感觉多半是你 overlayfs 的问题。
    scriptB0y
        9
    scriptB0y  
       2019-12-07 11:27:47 +08:00
    应该是 overlayfs 的问题,不是很了解,但是 du 遇到 Symbolic link,会计算 link 的大小,而不会计算真正的文件大小
    winglight2016
        10
    winglight2016  
       2019-12-07 11:51:47 +08:00
    看了几天帖子了,这是唯一讨论技术的,看完感觉学习到了。所以,v2 已经是个八卦新闻论坛了吧?🐶
    flynaj
        11
    flynaj  
       2019-12-07 13:02:10 +08:00
    @lxk11153 #7 是不是你的账户没有权限没有统计完全! du -a -d 1 -h 看看!
    lxk11153
        12
    lxk11153  
    OP
       2019-12-07 13:44:28 +08:00
    @winglight2016 #10 看我过往发的帖子,基本讨论技术的 /HJ
    @flynaj 11 看第 1 条附言
    @scriptB0y #9 Symbolic link 应该就是不进入链接呀,不然我创建很多根目录的软链接岂不是统计大小得翻几倍
    twl007
        13
    twl007  
       2019-12-07 13:51:41 +08:00 via iPhone
    用 lsof 查一下就行 会发现有 delete 关键字的 找到对应的 pid 干掉就行
    momocraft
        14
    momocraft  
       2019-12-07 14:04:25 +08:00
    在一些文件系统中 du (不考虑压缩) 和 df (不考虑分配但未用于文件的空间) 可以同时不准, 比如 btrfs
    lxk11153
        15
    lxk11153  
    OP
       2019-12-07 14:46:43 +08:00
    @twl007 #13 但我重启系统依旧输出差不多的数据( sudo find 搜了下,没找到 lsof 命令)
    @momocraft #14 可能有一些特别的文件系统设计吧,但算剩余空间这个感觉是常规操作,应该基本都有且能输出较准确结果吧
    Mirana
        16
    Mirana  
       2019-12-07 15:19:02 +08:00
    @lxk11153 重启也不会回收啊。。
    lxk11153
        17
    lxk11153  
    OP
       2019-12-07 15:24:41 +08:00
    @Mirana #16 如何回收 233~~~
    lxk11153
        18
    lxk11153  
    OP
       2019-12-07 15:30:35 +08:00
    @Mirana #5 👇
    @twl007 #13 安装了 lsof, sudo lsof|grep deleted 没搜到
    momocraft
        19
    momocraft  
       2019-12-07 16:49:09 +08:00
    你知道自己用的什么文件系统吗?
    lxk11153
        20
    lxk11153  
    OP
       2019-12-07 19:50:45 +08:00
    @momocraft #19 怎么查?第 2 条附言这样吗?
    itjesse
        21
    itjesse  
       2019-12-07 21:16:33 +08:00
    @hackerang 为什么你回复的是音频?
    lxk11153
        22
    lxk11153  
    OP
       2019-12-07 21:17:49 +08:00
    @itjesse #21 啥?啥音频~
    hq
        23
    hq  
       2019-12-08 00:29:43 +08:00
    多年前买了个 dfdu.com 想做个站点解释这两个命令,可是。。。
    feather12315
        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/
    lxk11153
        25
    lxk11153  
    OP
       2019-12-08 02:19:25 +08:00
    @hq #23 说出你的故事
    @feather12315 #24 有点深入。。so 有办法查询剩余空间吗?
    feather12315
        26
    feather12315  
       2019-12-08 10:16:58 +08:00 via Android
    @lxk11153 #25,df 显示的就是剩余空间
    yuikns
        27
    yuikns  
       2019-12-08 10:17:25 +08:00 via Android
    我理解真实需求是占用硬盘文件的分布吧?

    du 是检查某个目录下面的文件,df 是检查 mount point 的 block 的信息。

    不妨安装个 ncdu 试试
    yuikns
        28
    yuikns  
       2019-12-08 10:20:21 +08:00 via Android
    @yuikns du 给的是下面文件的 sum(size),df 是直接那个 device 的统计。挂载有些盘给出的统计不一样,显示也会有点奇怪。
    yuikns
        29
    yuikns  
       2019-12-08 10:20:49 +08:00 via Android
    @yuikns 尤其是 nfs 等各种情况
    lxk11153
        30
    lxk11153  
    OP
       2019-12-08 12:14:39 +08:00
    @yuikns #17 不是,我是觉得 `du /`=13G 但 df 出来个 Used 30G, 两者相差有点大,所以觉得不明白。。如果 df 出来个 Used 15G 我可能就不疑问了
    ps: ncdu 没什么用,就是“gui-like”的 du
    lxk11153
        31
    lxk11153  
    OP
       2019-12-09 16:52:14 +08:00
    搞错了,重新理了下,参见第 4 条附言
    chzhx
        32
    chzhx  
       2019-12-16 15:27:35 +08:00
    lsof / | grep delete
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2659 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:01 · PVG 18:01 · LAX 02:01 · JFK 05:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.