Linux 查看磁盘空间使用情况
Linux文件系统
1 什么是文件系统
文件系统(Filesystem) 是 用于存储、组织和管理文件 的结构和规则集合。
在 Linux 中,所有东西都是文件,所有存储设备最终都会被挂载到某个目录下。
2 什么是挂载点
挂载点(Mount Point)是文件系统在目录结构中的入口,它表示某个文件系统(磁盘、分区、远程存储)被挂载到哪个目录下。
在 Linux 里,所有存储设备(硬盘、U 盘、网络存储)都必须挂载(mount)到某个目录后才能使用。例如:
/ 代表根目录,所有文件和目录的起点。
/boot 存储 Linux 内核和启动相关的文件。
/mnt 和 /media 一般用于挂载额外的存储设备,如网络磁盘或 USB 设备。
3 挂载点和文件系统的关系
文件系统(Filesystem) 和 挂载点(Mount Point) 是 Linux/Unix 系统中紧密相关的概念。简单来说:
- 文件系统 是用于存储、组织和管理数据的方式(比如
ext4
、xfs
、NFS
)。 - 挂载点 是文件系统在目录结构中的入口,让用户可以访问存储设备的数据。
一个文件系统必须挂载到某个挂载点,才能被用户和系统访问。
换句话说,挂载点是一个目录,文件系统是数据的存储方式。
1. df命令
- 功能:显示文件系统的整体磁盘空间使用情况。
- 工作原理:读取文件系统的超级块信息,显示文件系统的总容量、已用空间、可用空间以及挂载点。
- 特点:
- 显示的是整个分区的空间使用情况,而不是单个文件或目录的空间。
- 输出单位通常是 KB(默认),可以使用
-h
选项以人类可读的形式(如 MB、GB)显示。
示例:
df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 51G 13M 51G 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 394G 367G 9.5G 98% /
tmpfs 252G 0 252G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 212M 1.6G 12% /boot
/dev/sda1 1.1G 6.1M 1.1G 1% /boot/efi
tmpfs 10G 32M 10G 1% /tmp
192.168.206.106:/data 28T 22T 5.4T 80% /mnt
tmpfs 1.0M 0 1.0M 0% /var/snap/lxd/common/ns
tmpfs 51G 8.0K 51G 1% /run/user/1003
tmpfs 51G 8.0K 51G 1% /run/user/1000
以上结果的含义
- **你的
/
根分区快满了(98%)⚠️/dev/mapper/ubuntu--vg-ubuntu--lv
只有9.5G
可用,可能会影响系统运行。- 建议:
- 清理
/var/log
下的日志文件:
sudo journalctl --vacuum-time=7d # 只保留最近 7 天日志
- 清理 Docker 镜像:
docker system prune -a
- 查找大文件:
sudo du -ah / | sort -rh | head -20
- 清理
- 你使用了一个 28TB 的远程存储
/mnt
挂载了192.168.206.106:/data
,说明你在用 NFS 服务器 作为存储,已使用 22TB,剩余 5.4TB。
- 大量的
tmpfs
tmpfs
是基于 RAM(内存) 的文件系统,系统重启后会清空:/dev/shm
用于共享内存,适合进程间通信。/run
、/run/user/1000
这些是运行时数据存储。
- 启动相关分区
/boot
(2GB)和/boot/efi
(1.1GB)用来存放 Linux 内核和 UEFI 引导程序。
df -h
单独列出 /mnt
/mnt
本身还是在 /
目录下,但它指向的是远程服务器上的数据,而不是本地磁盘!
df -h
是基于 挂载的文件系统 来显示数据,而不是简单地显示 /
下面所有的内容。
假设 /mnt
只是 /
分区上的普通目录,而没有单独挂载存储,那么 df -h
只会显示 /
,不会列出 /mnt
:
2. du命令
- 功能:统计文件或目录占用的磁盘空间。
- 工作原理:递归遍历指定目录下的所有文件和子目录,并计算其大小总和。
- 特点:
- 可以用于查看单个目录、文件的空间占用情况,而不是整体文件系统。
- 默认输出是以 KB 为单位,可以使用
-h
选项以人类可读形式显示。 - 支持
--max-depth
选项限制递归深度。
- 例子
du -sh /var/log
输出
2.5G /var/log
参数含义
-s, --summarize display only a total for each argument
-d, --max-depth=N print the total for a directory (or file, with --all)
line argument; --max-depth=0 is the same as
-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)
3为什么 ls
不能统计文件夹的大小?
ls 是用来列出文件和目录的信息的工具,它并不直接统计目录的大小。以下是原因:
目录大小只代表元数据占用的空间:
ls -l 输出的目录大小显示的是该目录的元数据,而不是其内容的大小。元数据包括了该目录内的文件名、权限等信息,而不是目录内所有文件和子目录的总大小。
目录本身在磁盘上占用少量空间(一般是 4 KB 左右,具体取决于文件系统),因此用 ls 查看时,目录的大小通常显示为固定值(如 4096 字节)。
递归统计需要更多操作:
- 统计整个目录的大小需要递归遍历所有子目录和文件,而
ls
并没有设计用于这类操作。
4 本地磁盘和其余磁盘
df -Th
Type 列显示文件系统类型:
本地磁盘:通常是 ext4, xfs, btrfs 或类似类型。
网络文件系统:如 nfs, cifs 等。
临时文件系统:如 tmpfs(通常是基于内存的虚拟文件系统)。
通过文件系统类型,可以快速判断哪些是本地磁盘,哪些是网络文件系统或临时存储。
Filesystem Type Size Used Avail Use% Mounted on
tmpfs tmpfs 152G 3.1M 152G 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 98G 16G 78G 17% /
tmpfs tmpfs 756G 0 756G 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 ext4 2.0G 208M 1.6G 12% /boot
/dev/sda1 vfat 1.1G 6.1M 1.1G 1% /boot/efi
tmpfs tmpfs 152G 8.0K 152G 1% /run/user/1001
tmpfs tmpfs 152G 8.0K 152G 1% /run/user/1002
192.168.206.106:/data nfs4 28T 18T 8.8T 67% /mnt
tmpfs tmpfs 152G 8.0K 152G 1% /run/user/1003
这是因为 /mnt 挂载了一个网络文件系统(NFS),它实际上使用的是远程服务器的存储空间,而不是本地的磁盘空间。因此,/mnt 的存储大小和 / 的大小是分开的,互不相关。
具体原因如下:
挂载机制:
Linux 的目录结构是层级化的树状结构,但挂载机制允许将外部设备(如硬盘分区、网络存储)“挂载”到某个目录上。
当一个文件系统挂载到某个目录(例如 /mnt)时,原来属于该目录的内容会被临时隐藏,显示的是挂载的文件系统内容。
本地磁盘与网络存储的区别:
/ 的大小由本地硬盘的分区(在此例中是 /dev/mapper/ubuntu–vg-ubuntu–lv)决定,总共 98GB。
/mnt 是挂载点,实际存储空间来自网络文件系统 192.168.206.106:/data,它有 28TB 的总空间,其中 8.8TB 可用,18TB 已使用
总结
du
是专门为统计目录及其内容的磁盘占用量而设计的工具,因此更适合此类任务。- df不光考虑文件占用空间,还统计被命令和程序占用的空间
- du命令只计算文件或目录占用的空间
# 查看整体文件系统的空间
df -h
# 查看某个目录的总占用空间
du -sh /path/to/directory
# 列出文件和目录信息
ls -l