Centos 7 中精简配置的根分区

Centos 7 中精简配置的根分区

似乎我的(我不知道的)精简配置的根分区有点太薄了。系统完全没有响应,控制台上显示无穷无尽的消息:

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每隔几周左右运行一次以丢弃未使用的块。

相关内容