我正在尝试设置一个 PXEboot 环境,其中基本系统(通过 NFS 向 PXE 客户端提供服务)是只读的,根文件系统是一个 overridefs 文件系统,其中只读 NFS 基本系统作为 lowerdir 和 tmpfs作为上层/工作目录。
我编辑了 AuFS initramfs 脚本以使用 OverlayFS,并且运行良好,除了当您尝试编辑位于下层目录中的文件(例如 /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
答案1
我遇到了完全相同的问题(尝试做完全相同的事情:PXE 引导环境的只读基本系统)。
我看到的行为与这个 Ubuntu 错误报告。我无法写入更改现存的文件,但我可以删除它们(但它们被保留在较低的文件系统中......上层只是记录它们的缺失),然后再次将它们写回(此时上层有一个我可以编辑的副本)。
据我所知,这种情况的发生是因为 OverlayFS 和 NFS 不能很好地协同工作。当我们尝试从较低的文件系统修改文件时,我们期望发生的事情被称为“复制”,当 OverlayFS 尝试使用 NFS 文件系统时,它会中断,因为 NFS 不支持 xattrs。
到目前为止,我能找到的唯一有希望的途径是可以使用 fusion_xattrs 来模拟 NFS 挂载上的 xattrs (此处描述),但它要求您有两个 NFS 共享挂载点:一个是“真实的”挂载点,另一个是需要第一个挂载点的“xattr-enhanced”挂载点。