Debian
(使用者錯誤)OverlayFS - 目前合併目錄(掛載點)中刪除的文件在合併目錄重新掛載為較低時重新出現
在 Debian Stretch(以 root 身份執行)上,這是目前行為:
# Create base directory mkdir base touch base/example # Create merge, upper and work directories for 2 layers mkdir layer1 layer1.upper layer1.work mkdir layer2 layer2.upper layer2.work # Mount layer1 as the merged directory using layer1.upper as the true upper layer, # with base as a lower layer and layer1.work as the necessary work directory mount -t overlay overlay -o lowerdir=$(pwd)/base,upperdir=$(pwd)/layer1.upper,workdir=$(pwd)/layer1.work layer1 ls layer1 # should show example as expected ls layer1.upper # shows no file (this is expected behaviour, it should only show files written on layer1) rm layer1/example ls layer1 # should show no files ls layer1.upper # should show a special character device called "example", this is the "whiteout" file # unmount, and remount with layer2 being the new upper layer and using layer1.upper directory as the top level lower layer. umount layer1 mount -t overlay overlay -o lowerdir=$(pwd)/base:$(pwd)/layer1.upper,upperdir=$(pwd)/layer2.upper,workdir=$(pwd)/layer2.work layer2 ls layer2 # now shows example again as if it was never deleted
這是一個錯誤嗎?或者這是一種限制/預期的行為?
如果可以的話,對快速簡便的解決方法有什麼建議嗎?
FWIW 它在 auFS 下可以正常工作,因此一種解決方法是安裝 aufs-dkms 並繼續使用 auFS ……無論如何我都可以這樣做,但我真的很想弄清楚這是一個錯誤還是預期的行為。
**$$ update $$**我做錯了,請看(現在更正的)答案!
我已經確定這是一個錯誤。因此,我向 Debian 送出了一份錯誤報告:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=896646
哎呀!原來我做錯了!正如在響應 Debian 錯誤時指出的那樣:
overlayfs 的行為與記錄一致。文件 (filesystems/overlayfs.txt) 說:“指定的下層目錄將從最右邊的一個開始向左堆疊。在上面的例子中,lower1 是頂層,lower2 是中間層,lower3 是底層。”
在您的範例中,這意味著“layer1.upper”是最低層,並且它的 whiteout 被位於其頂部的“base”中的文件覆蓋。我認為您只需要在掛載選項中交換這些目錄的順序即可。
我讀過那個文件,但錯過了“從右到左”的部分!
我可以確認,如果正確完成(即交換順序,使其從右到左),它會按預期工作。