当前位置: 首页>>技术问答>>正文


我如何使用OverlayFS?

, ,

问题描述

这个answeremail message表示在Ubuntu 11.10中有一个名为”OverlayFS”的东西,它将强制替换Ubuntu 12.04中的aufs。

我该如何使用它?它的文件在哪里?

最佳解决思路

编辑:自编写此答案以来,overlayfs中的一些内容已更改,即添加了必需参数workdir,请参阅下面的totti’s answer以获取此新参数的详细说明。

我终于找到了它。我在内核源代码中找到了它的引用,但由于某种原因它没有出现在kernel.org的git树中。但!如果你像这样拉动Ubuntu内核源:apt-get source linux-image-3.0.0-16-generic你可以在linux-3.0.0/Documentation/overlayfs.txt中找到它。它也可以在/usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz的linux-doc包中找到。

由于实际的帮助文档更像是“它如何工作”而不是“如何使用它”,这里有一个简短的概述(内核文档中有一个例子):

mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]

[mount options]可以是:

  • lowerdir = somedir:lowerdir是你要放置新文件系统的目录,如果有重复,这些被覆盖(实际上,隐藏为有利于)upperdir的版本

  • upperdir = somedir:upperdir是你想要覆盖lowerdir的目录。如果lowerdir和upperdir中存在重复的文件名,则upperdir的版本优先。

  • 标准安装选项。我从代码中看到的唯一一个是ro /rw,但你可以试验一下。

起初让我感到困惑的一件事是,我应该澄清一下,安装overlayfs实际上并没有安装文件系统。我试图使用overlayfs mount挂载squashfs文件系统,但这不是它的工作原理。您必须首先将(在我的情况下为squashfs)文件系统挂载到任意目录,然后使用overlayfs将挂载点(目录)和另一个目录合并到第三个目录(overlayfs挂载点)(编辑:此”tertiary”目录实际上可以是upperdir =目录)。您可以在第三个目录中看到合并的文件系统(或目录树 – 它是灵活的)。

示例1,覆盖根文件系统

我一直在研究一个Ubuntu混合启动盘,其中基础Ubuntu系统作为filesystem.squashfs存在,我有一些名为ubuntu.overlay kubuntu.overlay xubuntu.overlay和lubuntu.overlay的文件。 .overlay文件是所述系统的基本安装,其中filesystem.squashfs的内容被修剪(以节省空间)。然后我使用overlayfs和上面的选项修改了init脚本以覆盖正确的发行版.overlay文件(来自引导参数),它就像一个魅力!

这些是我在init脚本中使用的行(一旦所有变量都被翻译):

mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /

请注意,上面的filesystem.squashfs是由casper创建的目录,而不是文件。

这三个语句创建一个/overlay目录,在/overlay目录中安装一个squashfs文件系统,然后使用OverlayFS基本上通过/合并/overlay的内容。

例2,两个目录的透明合并

在re-building的过程中我的每个版本都有USB,我使用OverlayFS来节省一大堆时间。我从一个名为ubuntu-base的目录开始,该目录包含ubuntu-core映像的内容,这是最基本的安装。然后我将创建名为ubuntu,kubuntu,lubuntu和xubuntu的目录。

然后,我使用OverlayFS使ubuntu-base中的文件显示在各个目录中。我会用这样的东西:

mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu

这使得ubuntu-base中的文件显示在kubuntu文件夹中。然后,我可以将chroot添加到kubuntu文件夹并执行类似apt-get install kubuntu-desktop的操作。在此OverlayFS安装中所做的任何更改都将保留在上层目录中,在本例中为kubuntu文件夹。然后,一旦我卸载OverlayFS挂载,实际存在于ubuntu-base但是”mirrored”到kubuntu文件夹中的文件将消失,除非它们已被更改。这使我不必在ubuntu-base中拥有多个文件副本,同时仍然可以使用它们,就好像它们实际存在于每个位置一样。

次佳解决思路

来自https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt

Upper and Lower

An overlay filesystem combines two filesystems – an ‘upper’ filesystem and a ‘lower’ filesystem. When a name exists in both filesystems, the object in the ‘upper’ filesystem is visible while the object in the ‘lower’ filesystem is either hidden or, in the case of directories, merged with the ‘upper’ object.

It would be more correct to refer to an upper and lower ‘directory tree’ rather than ‘filesystem’ as it is quite possible for both directory trees to be in the same filesystem and there is no requirement that the root of a filesystem be given for either upper or lower.

The lower filesystem can be any filesystem supported by Linux and does not need to be writable. The lower filesystem can even be another overlayfs. The upper filesystem will normally be writable and if it is it must support the creation of trusted.* extended attributes, and must provide valid d_type in readdir responses, so NFS is not suitable.

A read-only overlay of two read-only filesystems may use any filesystem type.

Directories

Overlaying mainly involves directories. If a given name appears in both upper and lower filesystems and refers to a non-directory in either, then the lower object is hidden – the name refers only to the upper object.

Where both upper and lower objects are directories, a merged directory is formed.

At mount time, the two directories given as mount options “lowerdir” and “upperdir” are combined into a merged directory:

mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged 

The “workdir” needs to be an empty directory on the same filesystem as upperdir.

Then whenever a lookup is requested in such a merged directory, the lookup is performed in each actual directory and the combined result is cached in the dentry belonging to the overlay filesystem. If both actual lookups find directories, both are stored and a merged directory is created, otherwise only one is stored: the upper if it exists, else the lower.

Only the lists of names from directories are merged. Other content such as metadata and extended attributes are reported for the upper directory only. These attributes of the lower directory are hidden.

第三种解决思路

我已经扩展了这些artikels,包括一个用于设置read-only根fs的overlayfs脚本。

希望能帮助到你。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1637.html,未经允许,请勿转载。