问题描述
在Alibaba Cloud Linux 2系统的ECS实例中挂载Overlayfs失败。存在该问题的ECS实例有以下特征:
镜像:所有的Alibaba Cloud Linux 2镜像版本
内核:所有的Alibaba Cloud Linux 2内核(Cloud Kernel)
执行
dmesg
命令,在内核日志中会出现以下错误日志的一条:kernel-4.19.67-16.al7之前的版本
overlayfs: lowerdir is in-use as upperdir/workdir overlayfs: lowerdir path overlapping in-use upperdir/workdir overlayfs: upperdir is in-use by another mount, mount with '-o index=off' to override exclusive upperdir protection. overlayfs: workdir is in-use by another mount, mount with '-o index=off' to override exclusive workdir protection.
kernel-4.19.67-16.al7及之后的版本
overlayfs: lowerdir is in-use as upperdir/workdir of another mount, mount with '-o index=off' to override exclusive upperdir protection. overlayfs: workdir is in-use as upperdir/workdir of another mount, mount with '-o index=off' to override exclusive upperdir protection. overlayfs: upperdir is in-use as upperdir/workdir of another mount, mount with '-o index=off' to override exclusive upperdir protection.
问题原因
Overlayfs的挂载参数lowerdir、upperdir或workdir不能同时作为另一个挂载点的upperdir或workdir,否则可能存在未知风险。即在挂载过程中,当内核检测到以上情况时,会返回-EBUSY
错误信息,同时打印错误日志。
解决方案
临时解决方法
使用该临时解决方法可能存在未知风险,使用之前请慎重评估。
Overlayfs的主要使用场景是容器服务,容器服务中一直存在多个挂载点共用同一个upperdir或workdir现象,但是系统内核支持通过关闭
index
特性(即指定index=off
挂载参数),来规避这个问题。
确认内核版本中的报错信息。
kernel-4.19.67-16.al7之前的版本 执行
dmesg
命令后,如果您出现以下错误日志的一条,则可以参考后续步骤进行处理。说明如果您出现另外两条报错信息,本方案无法解决该问题。
overlayfs: upperdir is in-use by another mount, mount with '-o index=off' to override exclusive upperdir protection. overlayfs: workdir is in-use by another mount, mount with '-o index=off' to override exclusive workdir protection.
kernel-4.19.67-16.al7及之后的版本
kernel-4.19.67-16.al7及之后的版本的错误日志都可以参考以下步骤进行处理。
执行挂载Overlayfs的命令时,指定
index=off
挂载参数,则可以规避以上报错,成功挂载Overlayfs。此时内核会打印以下其中一条日志。overlayfs: lowerdir is in-use as upperdir/workdir of another mount, accessing files from both mounts will result in undefined behavior. overlayfs: upperdir is in-use as upperdir/workdir of another mount, accessing files from both mounts will result in undefined behavior. overlayfs: workdir is in-use as upperdir/workdir of another mount, accessing files from both mounts will result in undefined behavior.
根本解决方法
在挂载Overlayfs之前,您需要执行
mount
命令,查看之前挂载Overlayfs的相关参数,包括每个挂载点的lowerdir、upperdir、workdir参数,其输出格式类似如下。overlay on /.../merged type overlay (rw,relatime,lowerdir=...,upperdir=...,workdir=...)
确认需要挂载的Overlayfs的挂载参数lowerdir、upperdir或workdir没有同时作为另一个挂载点的upperdir或workdir,即可正常挂载。