Linux磁盘管理df、du命令

在服务端开发的道路上,如果没有收到过磁盘不足的报警信息,职业生涯绝对是不完美的,每当服务器磁盘报警的时候,运维小姐姐都会怼我一句:"100G的磁盘,三天的日志都保存不了,真不知道你都往日志里输出啥玩意~",其实呢!磁盘报警有时候也不能怪我这个纯良的开发把业务日志输出太多,还可能是其他原因导致的,这个时候我们就需要通过磁盘管理命令定位一下问题到底出在哪里。日常服务器磁盘管理,常使用 df、du 这两个命令。

df命令

df 命令用于列出文件在系统磁盘分区及磁盘使用情况,命令各参数:

-a 列出所有文件系统,包括系统/proc及远程mfs或nfs挂载
-k 以KB为单位显示磁盘使用情况
-m 以MB为单位显示磁盘使用情况
-h 以KB、MB、GB等更直观的方式显示磁盘使用情况,超过1GB使用GB为单位显示,超过1MB以MB为单位显示,依次类推
-H 原理同 -h 类似,不同于 -h 的是,大写的 -H 是以 1M=1000k 为计算(-h 是以 1M=1024K 计算)
-T 连同文件系统的类型也列入来,例如:
-i 显示文件的 inode 数量
  • 不加任何参数执行df 命令,执行结果默认以KB为单位,输出示例如下:

    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/vda3             20907756   4642780  15216276  24% /
    tmpfs                  4030688        68   4030620   1% /dev/shm
    /dev/vda1               202770     52193    140337  28% /boot
    /dev/vdb1            104698868  30949804  68506192  32% /data
    10.131.xx.xx:9421    16288896192 5283568192 11005328000  33% /mnt/mfs
    

    Filesystem 代表文件系统对应的设备磁盘分区, 1K-blocks 表示总的磁盘分区大小(这里是1KB为单位), User 表示已使用的磁盘空间大小, Available 表示剩余可用的磁盘空间大小, Use% 表示磁盘使用率,也就是已使用的磁盘空间大小占该磁盘分区的比例, Mounted on 表示文件系统的挂载点;

    需要知道的一个重要注意点: Used + Available 并不等于总的磁盘分区大小,这是因为文件系统默认的每个分区都留了少量空间供系统管理员使用,即使遇到普通用户Use%达到100%的情况,管理员仍能登录和留有解决问题所需的工作空间

  • 通常我们都是以一种更直观的方式看磁盘使用情况, df -h 使用是最多的,输出示例如下:

    Filesystem            Size  Used Avail Use% Mounted on
    /dev/vda3              20G  4.5G   15G  24% /
    tmpfs                 3.9G   68K  3.9G   1% /dev/shm
    /dev/vda1             199M   51M  138M  28% /boot
    /dev/vdb1             100G   30G   66G  32% /data
    10.131.xx.xx:9421      16T  5.0T   11T  33% /mnt/mfs
    

    -h 会根据文件的大小不同选择最直观的单位,因此对总的磁盘分区大小使用 Size

  • 有时可能需要单位精确大M,使用 df -m 输出示例如下:

    Filesystem           1M-blocks      Used Available Use% Mounted on
    /dev/vda3                20418      4534     14860  24% /
    tmpfs                     3937         1      3937   1% /dev/shm
    /dev/vda1                  199        51       138  28% /boot
    /dev/vdb1               102245     30225     66901  32% /data
    10.131.xx.xx:9421     15907054   5159735  10747320  33% /mnt/mfs
    

    1M-blocks 表示总的磁盘分区大小(这里是1MB为单位)

  • 我曾遇到过磁盘空间还足够,但是inode节点已经用尽的情况,这个时候就可以使用 df -i,输出示例如下:

    Filesystem            Inodes   IUsed   IFree IUse% Mounted on
    /dev/vda3            1318912   88079 1230833    7% /
    tmpfs                1007672      18 1007654    1% /dev/shm
    /dev/vda1              51200      44   51156    1% /boot
    /dev/vdb1            6553600   24326 6529274    1% /data
    10.131.xx.xx:9421    1076104738 75098711 1001006027    7% /mnt/mfs
    

    Inodes 表示磁盘分区总的inode节点数量, IUsed 表示已使用的inode节点, Available 表示还可以用的inode节点, Use% 表示已使用的inode节点数量占该磁盘分区的总inode节点数量的比例

  • 可以使用df -aT 列出所有文件系统并查看其类型,输出示例如下:

    Filesystem          Type   1K-blocks      Used Available Use% Mounted on
    /dev/vda3           ext4    20907756   4642824  15216232  24% /
    proc                proc           0         0         0   -  /proc
    sysfs               sysfs           0         0         0   -  /sys
    devpts              devpts           0         0         0   -  /dev/pts
    tmpfs               tmpfs     4030688        68   4030620   1% /dev/shm
    /dev/vda1           ext4      202770     52193    140337  28% /boot
    /dev/vdb1           ext4   104698868  30950588  68505408  32% /data
    10.131.xx.xx:9421   fuse.mfs   16288823616 5283568256 11005255360  33% /mnt/mfs
    

    Type 表示文件系统的类型,除了我们熟知的ext4类型以外,Linux系统还有很多系统所使用的文件类型

  • 有时只需要查询特定的目录即可,则在 df 命令后指定目录即可, 比如 df -hT /mnt/mfs/ 输出示例如下:

    Filesystem          Type    Size  Used Avail Use% Mounted on
    10.131.xx.xx:9421   fuse.mfs     16T  5.0T   11T  33% /mnt/mfs
    

du 命令

du 的英文原义为"disk usage",含义为显示磁盘空间的使用情况,常用于统计文件(夹)所占磁盘空间的大小,命令各参数:

-a 递归地显示指定目录下各文件及子目录中各文件占用的磁盘大小,这个命令如果是目录很深很多的话,慎用
-s 列出目录所占用容量,目录下的子目录会递归汇总,这个参数一般不单独使用
-S 和 -s 类似,列出目录所占用容量,不同之处在于,大写的 -S 不包括子目录下的统计,这个参数一般不单独使用
-k 以KB为单位列出目录下的文件(夹)占用容量
-m 以MB为单位列出文件(夹)占用容量
-h 以KB、MB、GB等更直观的方式列出文件(夹)占用容量,超过1GB使用GB为单位显示,超过1MB以MB为单位显示,依次类推
-H 原理同 -h 类似,不同于 -h 的是,大写的 -H 是以 1M=1000k 为计算(-h 是以 1M=1024K 计算)
  • 在一个目录下执行 du 命令,相当于 du -a /当前目录,如果文件很多很大,可能会出现一个很长的清单,甚至目录过多会卡死,一般不会使用 du 或者 du -a ,我们大部分时候使用 du 命令只需要统计指定目录下文件(夹)的占用容量,常使用 du -sh *, 没有给出指定目录,则默认对当前目录进行统计,通配符 * 则是代表目录下所有,输出示例如下:

    68K    conf
    4.0K    index.html
    230M    java
    380M    jetty
    9.0G    log
    16K    lost+found
    990M    nginx
    64M    node
    

总结: 日常服务器遇到磁盘不足的情况时,通常先使用 df 找到磁盘不足的分区,去到挂载点目录,执行 du -sh * 定位到大的文件或者目录,执行相应的解决方案。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏