問題描述
在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的主要使用情境是Container Service,Container Service中一直存在多個掛載點共用同一個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,即可正常掛載。