似乎我的(我不知道的)精简配置的根分区有点太薄了。系统完全没有响应,控制台上显示无穷无尽的消息:
kernel: Buffer I/O error on device dm-3, logical block 2449799
kernel: lost page write due to I/O error on dm-3
起初我怀疑磁盘有故障,但 RAID 控制器似乎对它们很满意。硬重置后,在 /var/log/messages 中挖出这个 gem:
Jan 22 02:31:31 server kernel: device-mapper: thin: 253:2: reached low water mark for data device: sending event.
Jan 22 02:31:31 server kernel: device-mapper: thin: 253:2: switching pool to out-of-data-space mode
Jan 22 02:32:31 server kernel: device-mapper: thin: 253:2: switching pool to read-only mode
似乎 /root 是精简配置的并且已经耗尽了空间(因为我接受了 Centos 安装向导的分区想法而自责)。我对精简配置不太熟悉,所以让我困惑的是:
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
pool00 centos twi-aotz-- 41.66g 100.00 46.82
root centos Vwi-aotz-- 50.00g pool00 83.33
swap centos -wi-ao---- 16.00g
我是否正确理解 50GB vg“centos”中有一个 pool00,其中包括逻辑卷“swap”和“root”?如果是这样,如果根根据 df 仅使用 14GB 数据而交换总共 16GB,为什么 50GB 池会耗尽空间?
编辑:为了减轻空间限制,我完全删除了分区交换并在其他地方创建了它。所以现在:
#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
pool00 centos twi-aotzM- 41.66g 100.00 46.82
root centos Vwi-aotz-- 50.00g pool00 83.33
#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 10G 41G 20% /
devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs 7.8G 17M 7.8G 1% /run
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/sda2 497M 154M 343M 31% /boot
不知何故,我仍然在 41G 池上达到“低水位线”,其中一个分区上有 10GB 数据。
答案1
如果其他人偶然发现同样的问题,我会对自己回答:
fstrim -v -a
或者
fstrim -v /
是有帮助的事情。文件系统不会将未使用的块返回到池中,以便可以重用它们(在本例中由相同的文件系统)。
答案2
我在查看根文件系统是否可以位于精简配置逻辑卷上时遇到了这个问题。知道它可以是很有用的。
为了回答(并进一步解释)您的问题,从输出lvs
来看,您的初始卷组最初是swap
使用 16G 和精简配置池逻辑卷分配为标准逻辑卷pool00
。如果没有 的输出lvs -a
,就无法确定底层元数据逻辑卷的大小;数据量大小为41.66G。
然后,该逻辑卷root
被创建为在 41.66G 数据卷之上的精简配置逻辑卷,pool00
但在 41.66G 数据卷之上被过度分配(或后来扩展)为 50G。据推测,LVM 允许这样做,前提是池卷在变满之前将被扩展,但这并没有发生。
正如您正确发现的那样,文件系统在不再使用块时不会将块返回给 LVM,尽管它会重用它们本身,因此,尽管您在实际文件中只使用了 14G,但从 LVM 中分配了另外 27.66G,root
然后从文件系统中删除,但实际上并未丢弃并返回到 LVM。因此,您的基础卷中的空间不足pool00
。
正如您正确确定的那样,运行fstrim
实际上会丢弃文件系统中未使用的块,通知 LVM 它们可以重用并释放pool00
.
由于您已移至swap
其他地方,因此最好使用lvextend
并将其大小增加到pool00
至少 50G(即root
.
或者,安排fstrim
每隔几周左右运行一次以丢弃未使用的块。