OverlayFS 無縫編輯下層目錄中的文件
我正在嘗試設置一個 PXEboot 環境,其中基本系統(通過 NFS 提供給 PXE 客戶端)是只讀的,並且根文件系統是一個 overlayfs 文件系統,其中只讀 NFS 基本系統作為 lowerdir 和一個 tmpfs作為上層/工作目錄。
我編輯了一個 AuFS initramfs 腳本以使用 OverlayFS,它執行良好,除了當您嘗試編輯位於 lowerdir 中的文件(例如,/etc/environment)時,它以只讀方式打開,即對於新文件(例如 /etc/foobar)或已復製到上層目錄的文件,情況並非如此。可以通過在嘗試編輯文件之前簡單地觸摸一下來緩解該問題,但是它不太理想並且可能會破壞其他應用程序。
AuFS 沒有這個問題。有什麼建議嗎?這是 initramfs 腳本的相關部分(在 /etc/initramfs-tools/scripts/init_bottom/00_overlayfs_init 中),為簡潔起見進行了編輯。
mkdir /overlay mkdir /local mkdir /remote # mount the temp file system and move real root out of the way mount -t tmpfs none /local mount --move ${rootmnt} /remote mkdir /local/rw mkdir /local/work mount -t overlayfs -o lowerdir=/remote,upperdir=/local/rw,workdir=/local/work overlay /overlay #test for mount points on overlay file system [ -d /overlay/ro ] || mkdir /overlay/remote [ -d /overlay/rw ] || mkdir /overlay/local mount --move /remote /overlay/remote mount --move /local /overlay/local mount --move /overlay ${rootmnt}
編輯:更多資訊
嘗試編輯(使用編輯器,例如 Vim)會導致 vim 指出該文件是只讀的,並且在
:wq!
,E166: Can't open linked file for writing
.root@dark-node:~# echo FOO=bar >> /etc/environment -bash: /etc/environment: Permission denied root@dark-node:~# echo FOO=bar > /etc/environment -bash: /etc/environment: Permission denied root@dark-node:~# touch /etc/environment root@dark-node:~# echo FOO=bar >> /etc/environment root@dark-node:~# cat /etc/environment PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/game::/usr/local/games" FOO=bar root@dark-node:~# uname -a Linux dark-node 4.4.0-57-generic #78-Ubuntu SMP Fri Dec 9 23:50:32 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
我遇到了完全相同的問題(嘗試做完全相同的事情:PXE 引導環境的只讀基礎系統)。
我看到的行為與這個 Ubuntu 錯誤報告中的行為完全匹配。我無法將更改寫入現有文件,但我可以刪除它們(但它們保留在較低的文件系統中……上層只是記錄它們的缺失)然後再次寫回它們(此時上層有一個我可以編輯的副本)。
據我所知,這是因為 OverlayFS 和 NFS 不能很好地結合在一起。當我們嘗試從較低的文件系統修改文件時,我們期望發生的事情稱為“複製”,當 OverlayFS 嘗試使用 NFS 文件系統時它會中斷,因為 NFS 不支持 xattrs。
到目前為止,我能找到的唯一有希望的途徑是可以使用 fuse_xattrs 來模擬您的 NFS 掛載上的 xattrs(在此處描述),但它要求您有兩個 NFS 共享掛載:“真正的”一個,以及“xattr-enhanced”需要第一個。