在 Linux 中,即使卷未满,文件系统也会已满吗?我们如何从存储空间方面区分文件系统和卷?
答案1
文件系统控制数据在卷中的存储方式。它将数据分成几部分,并为每个部分命名。一组数据片段成为一个文件。用于管理信息组及其名称的结构和逻辑规则称为文件系统
卷是一大组数据,无法分辨一条信息在何处结束,下一条信息在何处开始。
文件系统存在技术限制。因此,在底层卷填满之前,文件系统达到某个限制是完全有可能的。
文件系统限制的一些示例:
EXT2
- 最大磁盘大小:32 TB
- 最大文件大小:2 TB
- 磁盘上的最大文件数:?
- 单个文件夹中的最大文件数:?
EXT3
- 最大磁盘大小:32 TB
- 最大文件大小:2 TB
- 磁盘上的最大文件数:?
- 单个文件夹中的最大文件数:?
EXT4
- 最大磁盘大小:1 EB(艾字节)
- 最大文件大小:16 TB
- 磁盘上的最大文件数:4,294,967,295
- 单个文件夹中的最大文件数:?
FAT16
- 最大磁盘大小:4 GB
- 最大文件大小:4 GB
- 磁盘上的最大文件数:65,517
- 单个文件夹最大文件数:512
FAT32
- 最大磁盘大小:2 TB
- 最大文件大小:4 GB
- 磁盘上的最大文件数:268,435,437
- 单个文件夹中的最大文件数:65,534
NTFS
- 最大磁盘大小:256 TB
- 最大文件大小:256 TB
- 磁盘上的最大文件数:4,294,967,295
- 单个文件夹中的最大文件数:4,294,967,295(与文件总数相同)
答案2
即使实际空间足够,也可能已经用完了 inode。如果运行,df -h
将看到已用空间;如果运行,df -i
将看到已用 inode。
也许你的记录器出了问题,在你的文件系统中塞满了许多小文件。如果你运行这个脚本,你会发现包含最多文件的目录:
for i in /*; do echo -n $i:; find $i |wc -l; done
然后深入到以下子目录:
for i in /home/*; do echo -n $i:; find $i |wc -l; done
for i in /home/user1/*; do echo -n $i:; find $i |wc -l; done
for i in /home/user1/logs/*; do echo -n $i:; find $i |wc -l; done
...等等。然后,您可能会发现一个或多个不应包含大量文件的目录,您可以在纠正填满目录的底层进程后删除这些文件。
干杯,
橙汁
答案3
删除已打开但已被删除的大文件
lsof -nP | grep '(已删除)' + del