本文為您介紹Alibaba Cloud Linux 2和Alibaba Cloud Linux 3系統的Overlayfs檔案系統在某些情境下因檔案/目錄缺乏讀許可權導致操作失敗的問題原因及解決方案。
問題描述
在Alibaba Cloud Linux系統的Overlayfs檔案系統中使用唯寫方式開啟或者在對應目錄下touch檔案觸發copy up時報錯。此時建議您繼續運行以下命令判斷系統存在的問題:
mkdir -p /root/test/lower/dir /root/test/upper /root/test/work /root/test/mount
chmod 0737 /root/test/lower/dir
chown root:bin /root/test/lower/dir
mount -t overlay -o lowerdir=/root/test/lower,upperdir=/root/test/upper,workdir=/root/test/work overlay /root/test/mount
cd /root/test && sudo -u bin -g bin touch mount/dir/RANDOM
如果上述命令報如下錯誤,則說明Overlayfs檔案系統的檔案/目錄缺乏讀許可權(-wx)。
touch: 無法建立 'mount/dir/RANDOM': 許可權不夠
觸發以上問題的系統滿足以下條件:
核心版本
作業系統
鏡像
核心
Alibaba Cloud Linux 2
Alibaba Cloud Linux 2.1903 LTS 64位
4.19.91-27到4.19.91-27.4之間
包括4.19.91-27.al7、4.19.91-27.1.al7、4.19.91-27.2.al7、4.19.91-27.3.al7、4.19.91-27.4.al7。
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3.2104 LTS 64位
5.10.134-13到5.10.134-14.1之間
包括5.10.134-13.al8、5.10.134-13.1.al8、5.10.134-14.al8、5.10.134-14.1.al8。
Overlayfs的所有upperdir與lowerdir處於同一檔案系統。
進程請求寫檔案的操作觸發copy up,且進程沒有lowerdir下對應檔案或目錄的讀許可權。
問題原因
當所有upperdir與lowerdir處於同一檔案系統且訪問的檔案/目錄沒有讀許可權,因此沒有正確執行ovl_override_creds(),使得執行copy up操作進程的許可權沒有提升到Overlayfs檔案系統掛載者的許可權,最終導致copy up需要讀許可權時報許可權不足。
解決方案
遠端連線ECS執行個體。
更多資訊,請參見通過密碼或密鑰認證登入Linux執行個體。
運行以下命令,確認系統核心版本。
uname -r
系統顯示類似如下:
Alibaba Cloud Linux 2系統
4.19.91-27.al7.x86_64
Alibaba Cloud Linux 3系統
5.10.134-13.1.al8.x86_64
運行以下命令,修複問題。
通過安裝核心熱補丁的方式進行修複。
對於Alibaba Cloud Linux 3系統的5.10.134-13.al8、5.10.134-13.1.al8、5.10.134-14.al8、5.10.134-14.1.al8版本,安裝相應核心版本的核心熱補丁,例如:
yum install -y kernel-hotfix-13108708-5.10.134-13.1
對於Alibaba Cloud Linux 2系統的4.19.91-27.al7、4.19.91-27.1.al7、4.19.91-27.2.al7、4.19.91-27.3.al7、4.19.91-27.4.al7版本,安裝相應核心版本的核心熱補丁,例如:
yum install -y kernel-hotfix-13110805-4.19.91-27
通過更新核心版本的方式進行修複。
yum upgrade kernel
Alibaba Cloud Linux 3系統:更新到5.10.134-15.al8及以後的版本
Alibaba Cloud Linux 2系統:更新到4.19.91-28.al7及以後的版本
運行以下命令,驗證問題是否修複。
mkdir -p /root/test/lower/dir /root/test/upper /root/test/work /root/test/mount chmod 0737 /root/test/lower/dir chown root:bin /root/test/lower/dir mount -t overlay -o lowerdir=/root/test/lower,upperdir=/root/test/upper,workdir=/root/test/work overlay /root/test/mount cd /root/test && sudo -u bin -g bin touch mount/dir/RANDOM
如果上述命令沒有報錯,則說明問題修複完成。