Debian

(使用者錯誤)OverlayFS - 目前合併目錄(掛載點)中刪除的文件在合併目錄重新掛載為較低時重新出現

  • April 24, 2018

在 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”中的文件覆蓋。我認為您只需要在掛載選項中交換這些目錄的順序即可。

我讀過那個文件,但錯過了“從右到左”的部分!

我可以確認,如果正確完成(即交換順序,使其從右到左),它會按預期工作。

引用自:https://unix.stackexchange.com/questions/438872