示例OverlayFS用法

我正在运行带有3.19内核的Ubuntu 14.04,它应该支持OpenFS(因为内核3.18)。 我一直在阅读有关OverlayFS的内容,但对于如何实际使用它感到困惑。 看起来它可能是LVM的一个非常有用的替代方案,可以在备份正在被覆盖的原始文件系统的同时将更改写入其他地方?

有人可以为我提供示例mount命令(如果可能)用于以下情况:

  • 使用原始磁盘映像(使用dd if=/dev/zero of=$HOME/filestystem1.img bs=4096 count=1024000 )作为覆盖文件系统,将其挂载到主机文件系统的顶部$HOME/mount应该已经包含一些随机文件,如file1.txtfile2.txt 。 一旦安装,我相信我仍然能够看到我已经存在的文件,我现在创建的任何文件实际上都存储在filesystem1.img文件中,我可能会移动到另一个系统?

  • 创建另一个原始磁盘映像并将其安装在我们刚创建的另一个映像之上。 我是否在上一个示例中运行的mount命令之后执行第二个mount命令,或者我可以一次指定两个安装吗?

我不知道OverlayFS是否是我需要在mkfs -t xxx /path/to/raw/disk/image的磁盘映像上创建的实际文件系统,或者是一种特殊的安装方法,原始磁盘映像实际上是在使用某些东西像ext4一样,但它们以mount -t OverlayFS的特殊方式mount -t OverlayFS ? 当我跑:

 cd /sbin ls mkfs* 

我得到以下没有显示制作覆盖文件系统的选项。

 mkfs mkfs.cramfs mkfs.ext3 mkfs.ext4dev mkfs.minix mkfs.ntfs mkfs.bfs mkfs.ext2 mkfs.ext4 mkfs.fat mkfs.msdos mkfs.vfat 

我不知道OverlayFS是否是我需要在mkfs -t xxx / path / to / raw / disk / image的磁盘映像上创建的实际文件系统,或者是一种特殊的安装方法,原始磁盘映像实际上是在使用某些东西像ext4一样,但它们以mount -t OverlayFS的特殊方式安装?

一个不需要为overlayFS运行任何mkfs命令,它只是一种安装方式。

一旦安装,我相信我仍然能够看到我已经存在的文件,我现在创建的任何文件实际上都存储在filesystem1.img文件中,我可能会移动到另一个系统?

是的,有关OverlayFS如何工作的更详细说明,您可能希望在实践中参考“Docker和OverlayFS” 。

例子

如果需要,可以使用目录完全创建覆盖装载,如下所示:

 cd /tmp mkdir lower upper workdir overlay sudo mount -t overlay -o \ lowerdir=/tmp/lower,\ upperdir=/tmp/upper,\ workdir=/tmp/workdir \ none /tmp/overlay 

如果需要,您可以使用自己的文件系统(任何类型)引入[虚拟]块设备,以充当较低和较高的文件系统。 唯一的限制是“workdir”需要是与upperdir相同的文件系统中的空目录。 对于upperdir和lowerdir使用文件系统的示例如下所示:

 cd /tmp # Create the necessary directories. mkdir lower upper overlay # Lets create a fake block device to hold our "lower" filesystem dd if=/dev/zero of=lower-fs.img bs=4096 count=102400 dd if=/dev/zero of=upper-fs.img bs=4096 count=102400 # Give this block device an ext4 filesystem. mkfs -t ext4 lower-fs.img mkfs -t ext4 upper-fs.img # Mount the filesystem we just created and give it a file sudo mount lower-fs.img /tmp/lower sudo chown $USER:$USER /tmp/lower echo "hello world" >> /tmp/lower/lower-file.txt # Remount the lower filesystem as read only just for giggles sudo mount -o remount,ro lower-fs.img /tmp/lower # Mount the upper filesystem sudo mount upper-fs.img /tmp/upper sudo chown $USER:$USER /tmp/upper # Create the workdir in the upper filesystem and the # directory in the upper filesystem that will act as the upper # directory (they both have to be in the same filesystem) mkdir /tmp/upper/upper mkdir /tmp/upper/workdir # Create our overlayfs mount sudo mount -t overlay -o \ lowerdir=/tmp/lower,\ upperdir=/tmp/upper/upper,\ workdir=/tmp/upper/workdir \ none /tmp/overlay 

以上示例来自我在博客文章中使用overlayfs 。

嵌套OverlayFS

…另一个原始磁盘映像,并将其安装在我们刚刚创建的另一个上面。 我是否在上一个示例中运行的mount命令之后执行第二个mount命令,或者我可以一次指定两个安装吗?

可以嵌套overlayFS。 例如,您可以通过运行以下示例将上面的示例作为lowerdir嵌套到另一个overlayFS系统:

 mkdir -p /tmp/upperdir2/upper /tmp/upperdir2/workdir /tmp/overlay2 sudo mount -t overlay -o \ lowerdir=/tmp/overlay,\ upperdir=/tmp/upperdir2/upper,\ workdir=/tmp/upperdir2/workdir \ none /tmp/overlay2 

当Ubuntu获得内核4.0+时 ,我们应该能够通过使用冒号字符作为分隔符在单个命令中组合多个较低目录,如下所示:

 sudo mount -t overlay -o \ lowerdir=/tmp/lower:/tmp/lowest,\ upperdir=/tmp/upper,\ workdir=/tmp/workdir \ none /tmp/overlay 

在这种情况下,您没有两个工作但只有一个工作,并保持/tmp/overlay的相同合并路径。 较低的目录将从右到左堆叠。 您还可以省略upperdir= ,这会导致只读安装。

    Interesting Posts