我的 Oracle Linux 机器抱怨设备上没有剩余空间。我运行了一些命令来查看磁盘利用率和索引节点利用率。谁能告诉我这看起来是否正确? dev/sda2 似乎根本没有任何索引节点。
[fatty@oralinux ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 206M 1.7G 12% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/vda2 15G 13G 1.6G 90% /
/dev/vda1 497M 328M 169M 66% /boot
tmpfs 370M 0 370M 0% /run/user/0
tmpfs 370M 0 370M 0% /run/user/1001
[fatty@oralinux ~]$
[fatty@oralinux ~]$
[fatty@oralinux ~]$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 468704 352 468352 1% /dev
tmpfs 472674 1 472673 1% /dev/shm
tmpfs 472674 9146 463528 2% /run
tmpfs 472674 15 472659 1% /sys/fs/cgroup
/dev/vda2 0 0 0 - /
/dev/vda1 512000 369 511631 1% /boot
tmpfs 472674 1 472673 1% /run/user/0
tmpfs 472674 1 472673 1% /run/user/1001
[fatty@oralinux ~]$
[ ~]$ lsblk --fs
NAME FSTYPE LABEL UUID MOUNTPOINT
sr0 iso9660 cidata 2018-08-31-20-55-08-00
vda
├─vda1 xfs /boot c9cf52e1-ca900 /boot
└─vda2 btrfs btr_pool 0d127ec75de7 /
答案1
根据lsblk --fs
输出,您/dev/vda2
包含一个btrfs
文件系统。
它是一种现代文件系统,可以根据需要自动创建 inode,并且除了可用磁盘空间外,对 inode 数量没有任何限制。这就是为什么跟踪 inode 数量对于btrfs
文件系统类型来说没有实际意义,因此它对任何 inode 统计查询都返回全零。
XFS 文件系统(如磁盘设备/boot
上的文件系统/dev/vda1
)也可以按需创建 inode,但在文件系统创建时设置了一个限制,以占文件系统总容量的百分比表示。默认限制允许 25% 的文件系统容量为 inode,这意味着大量的小文件。可以在使用 XFS 作为根文件系统的系统上使用以下命令imaxpct
检查此限制:xfs_info
# xfs_info /
meta-data=/dev/mapper/vgsys-root isize=512 agcount=4, agsize=488192 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=0, rmapbt=0
= reflink=0
data = bsize=4096 blocks=1952768, imaxpct=25 <--- Here!
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
因此,在 XFS 文件系统上,inode 统计信息仍然有意义,尽管它们需要在相当特殊的情况下才会变得重要。如果达到 XFS 文件系统上的当前 inode 总数,并且该数量仍然小于该imaxpct
值设置的百分比限制,并且有可用磁盘空间,则 XFS 文件系统上的 inode 总数将自动增长。
但是您的 XFS 文件系统是/boot
,它通常具有非常有限的文件数量,因此,如果您以某种方式意外地将大量小文件复制到/boot
,那么这个问题可能适用于您的唯一方式,但现在看起来并非如此。
实际的“设备上没有剩余空间”错误
你的df -h
和df -i
输出对我来说看起来很好。但btrfs
他们可能并不总是讲述整个故事。根据btrfs-progs
系统上使用的版本,有两个命令可能会提供有关btrfs
文件系统上可用磁盘空间的额外信息。
对于btrfs-progs
3.18 之前的版本:
btrfs fi df /
对于btrfs-progs
3.18 或更高版本:
sudo btrfs fi usage /
btrfs
是一个复杂的文件系统,本质上包括 LVM 和软件 RAID 的功能,因此其磁盘空间分配可能比常规df
命令显示的更复杂。
欲了解更多信息,请参阅 BTRFS 维基: https://btrfs.wiki.kernel.org/index.php/FAQ#or_My_filesystem_is_full.2C_and_I.27ve_put_almost_nothing_into_it.21
如果上面提到的 btrfs 特定命令表明您的根文件系统实际上已用完空间,则此网页可能会有所帮助:
https://ohthehugemanatee.org/blog/2019/02/11/btrfs-out-of-space-emergency-response/
基本上,您可能需要btrfs balance start /
使用选项来运行-dusage=<some percentage value>
,以最大限度地减少所需的时间和写入操作量。但如果您的 BTRFS 已经没有可用空间,您将无法运行该命令。在这种情况下,您可能需要首先将文件系统扩展到另一个磁盘设备。