問題描述
在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,即可正常掛載。