≡菜单

Linux AuFS示例:另一个联合文件系统教程(UnionFS实现)

AuFS代表另一个联合文件系统。

AuFS从UnionFS Union File System的实现开始。

联合文件系统采用现有文件系统,并将其透明地覆盖在较新的文件系统上。它允许单独文件系统的文件和目录在一个屋顶下共存。 AuFS可以合并多个目录,并提供一个单一的合并视图。

AuFS被用于许多开源项目,例如Slax,Knoppix和许多其他实时CD和实时USB发行版。

在基于Debian的系统上,例如在Ubuntu上,执行以下操作以安装aufs。

# apt-get install 奥夫斯-tools

例子1 –了解AuFS的工作方式

本示例说明如何挂载同一文件系统的两个目录。

# mkdir / tmp / dir1

# mkdir / tmp / 奥夫斯-root

# mount -t 奥夫斯 -o br=/tmp/dir1:/home/lakshmanan 没有/ tmp / 奥夫斯-root/

前两个命令创建了2个新目录。 mount.aufs是用于将文件系统挂载为联合挂载的命令。

mount命令,指定要联合安装“/tmp/dir1″ and / home / 拉克什曼南” under “/tmp/aufs-root”. The directory “/tmp/aufs-root”将具有两者的内容“/tmp/dir1” and “/home/lakshmanan”.

上面使用了以下选项 挂载命令 例:

  • -o –指定要传递给文件系统的选项
  • br –指定一个分支,每个分支之间用冒号(:)分隔。分支不过是系统上的目录。
  • 没有– specifies we don’没有任何与之关联的设备,因为我们将挂载两个目录

从下面的ls -l命令输出中可以看到,我们可以看到aufs正在合并2个单独目录的内容并带来一个统一的视图。

# ls -l / tmp / dir1/
-rw-r--r-- 1 根       根       23 Mar 25 14:21 file_in_tmp_dir1

# ls -l / home / 拉克什曼南
-rw-r--r-- 1 根       根            26 Mar 25 14:20 file_in_home_dir

# ls -l / tmp / 奥夫斯-root/
-rw-r--r-- 1 根       根            26 Mar 25 14:20 file_in_home_dir
-rw-r--r-- 1 根       根            23 Mar 25 14:21 file_in_tmp_dir1

默认情况下,如果未指定权限,则第一个分支将被安装为可写状态,而其余分支将被安装为只读状态。

因此,当您在其中创建任何文件时‘/tmp/aufs-root/’,实际上它将在“/tmp/dir1”,因为它是唯一可写的分支。

例子2–主目录的统一视图

有时,系统管理员最终会拥有多个磁盘分区,这些分区具有多个用户的主目录。我们将看到一个示例,说明如何使它成为统一视图并简化管理过程。

在此示例中:

  • / home->是/ dev / sda2的挂载点“lakshmanan” and “sysadmin” users
  • /首页1 ->是/ dev / sdb2的挂载点“test” user.
# mount -t 奥夫斯 -o br=/home=rw:/home1=rw -o 乌德巴=reval  没有/共同/

# ls -l /共同/
drwxr-xr-x 39 拉克什曼南 拉克什曼南  4096 Mar 25 15:52 拉克什曼南
drwxr-xr-x 26 系统管理员    系统管理员     4096 Mar 25 15:51 系统管理员 
drwxr-xr-x  2 根       根        4096 Mar 25 16:36 测试

上面的mount命令有一个额外的选项,称为“udba”, which refers to “User’直接分支访问”。如果用户不通过AuFS直接访问分支并创建/更新文件,则该选项说明了该怎么做。

The following are possible values for 乌德巴:

  • 乌德巴=none –使用此选项,如果用户在不通过AuFS的情况下创建了任何文件/目录,则AuFS将更快,但可能会显示不正确的数据。
  • 乌德巴=reval –使用此选项,AuFS将重新查找分支并进行更新。因此,对分支内任何目录所做的任何更改都将反映在“/common”.
  • 乌德巴=notify –使用此选项,AuFS将注册 声化 对于分支中的所有目录。这会影响AuFS的性能。
# touch / home / 拉克什曼南/TGS

# ls -l /共同/lakshmanan/
.
.
-rw-r--r-- 1 根       根             0 Mar 25 17:17 TGS

touch命令创建了一个名为“TGS”在的主目录中“lakshmanan”无需通过AuFS。由于我们使用了“udba=retval”,当我们执行ls时,AuFS进行了重新查找并显示创建的新文件。

还要注意,在上一个mount命令中,我们将每个分支的权限指定为readwrite。因此,当在/ common / 测试 /下创建文件时,将在以下位置实际创建文件:“/home1/test/”,这是实际的物理位置。同样也适用于其他目录。

# touch /共同/test/Testing

# ls -l / home1 / 测试 /
-rw-r--r-- 1 根 根  0 Mar 25 18:26 Testing

例子3–以只读权限挂载分支

您还可以通过为每个分支设置权限来安装。

# mount -t 奥夫斯 -o br=/tmp/dir1=rw:/home/lakshmanan=ro -o 乌德巴=reval 没有/ tmp / 奥夫斯-root/

上面的命令将通过挂载/ tmp / 奥夫斯-root“/tmp/dir1” as writable, and “/home/lakshmanan”作为只读。您在/ tmp / 奥夫斯-root中所做的任何更改将仅保存在“/tmp/dir1”,因为那是唯一的可写目录。

以下命令序列可用于验证以上内容。

# 猫> / home / 拉克什曼南/1.txt
This is a new file

# 猫/ tmp / 奥夫斯-root/1.txt
This is a new file

# 猫>> / tmp / 奥夫斯-root/1.txt
This is updated 上  AuFS space

# 猫/ home / 拉克什曼南/1.txt
This is a new file

# 猫/ tmp / dir1/1.txt
This is a new file
This is updated 上  AuFS space

在上述命令序列中,我们执行了以下操作:

  • 我们正在下面创建一个名为1.txt的文件“/home/lakshmanan”.
  • This file is reflected in the union mount directory, because of the 乌德巴 = retval option that we explained above
  • 更新联合安装目录中存在的文件
  • Even tough the file is present inside / home / 拉克什曼南, since it is mounted as readonly, AuFS takes a copy of the file and places it 上 “/tmp/dir1”.
  • 在该副本的顶部,它会附加内容并保存文件
  • In / home / 拉克什曼南/1.txt, the change is not reflected
  • 一个新文件名为“1.txt”, is created under “/tmp/dir1”内容已更新

例子4–应用循环策略在AuFS下创建文件

当我们有两个以上可写的分支时,我们可以选择任何一种预定义策略,以便根据所选策略存储创建的文件。

# mount -t 奥夫斯 -o br=/tmp/dir1=rw:/home/lakshmanan=rw -o 乌德巴=reval -o 创建= rr 没有/ tmp / 奥夫斯-root/

选项“create=rr”,指定必须对此联合挂载应用循环策略。在循环策略中,如果我们创建4个文件,则将有2个文件位于“/tmp/dir1”和2个文件将在“/home/lakshmanan”.

# touch /tmp/aufs/first-round-robin

# touch /tmp/aufs/second-round-robin

# ls -l / tmp / dir1/first-round-robin
-rw-r--r-- 1 根 根 0 Mar 25 21:53 / tmp / dir1/first-round-robin

# ls -l / home / 拉克什曼南/second-round-robin
-rw-r--r-- 1 根 根 0 Mar 25 21:54 / home / 拉克什曼南/second-round-robin

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个Linux Sysadmin教程
  2. 50个最常用的Linux命令(包括示例)
  3. 排名前25位的最佳Linux性能监视和调试工具
  4. 妈妈,我找到了! – 15个实用的Linux Find命令示例
  5. Linux 101 Hacks第二版电子书 Linux 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 18 评论… 加一 }

  • 本尼·赫尔姆斯 2013年5月8日,上午9:10

    I’我已经是系统管理员了几十年,这是我第一次’我听说过!感谢您分享这些信息!

  • 贾拉尔·哈吉霍拉玛利 2013年5月8日,上午9:23

    你好
    非常感谢,

    我在Redhat下找不到这个漂亮的(aufs-tools)软件包

  • 鲍勃 2013年5月8日,上午10:44

    很棒的文章。谢谢!!!

  • 蒂莫 2013年5月8日,下午4:06

    一如既往的精彩文章!

    但是有一点让我感到困扰“Example 1”.
    如果两个目录中的文件名称相同,aufs会做什么?
    即您在两个目录中都有“/tmp/dir1/” and “/home/lakshmanan” a file called “test.file”然后用
    # mount -t 奥夫斯 -o br=/tmp/dir1:/home/lakshmanan 没有/ tmp / 奥夫斯-root/

  • Lakshmanan Ganapathy 2013年5月8日,晚上11:09

    @Timo,

    It will take the 测试文件 from / tmp / dir1, since you have given that as the first branch when you mount.

    If you interchange the order, mount -t 奥夫斯 -o br=/home/lakshmanan:/tmp/dir1 没有/ tmp / 奥夫斯-root/, then it will take from / home / 拉克什曼南.

  • dru8274 2013年5月13日,上午5:01

    Aufs很有趣。但是,仅提及创建硬链接的程序有时可能会导致aufs中的文件损坏。当两个硬链接文件位于aufs中的不同分支/层上时(在aufs之外位于单独的分区中),可能会发生这种情况。

  • 嫁接 2013年5月22日,下午1:05

    非常感谢你做的这些。是否可以诱使您提供一些使用/ etc / fstab中的aufs的简单示例?我特别想为filesystem.squashfs(持久性)安装一个可写分支。到目前为止,这是我的坐骑:
    猫> /etc/fstab <<EOF
    /filesystem.squashfs / mnt squashfs ro 0 0
    紧急行动
    这会将它安装在/ mnt上,但我对/ etc / fstab语法的理解还不够好,无法正确地将您的示例推断出来。再次感谢您的这项工作,它对您有很大的帮助。

  • 嫁接 2013年5月22日,晚上9:10

    知道了,这似乎可以满足我的要求:

    猫> /etc/fstab <<EOF
    /filesystem.squashfs / mnt squashfs ro 0 0
    没有 /media 奥夫斯 dirs=/media:/mnt 0 0
    紧急行动

    但是,如果您对此有任何想法"/"从debian intramfs或建议中,将不胜感激-。再次感谢您的文章,如果没有清晰的示例,我将不会如此迅速地工作。

  • Lakshmanan Ganapathy 2013年5月22日,晚上11:10

    @cgraff

    Can you please elaborate 上 what you need to do?. 我没有’明白你的意思。您在问如何从initramfs挂载吗?

  • 嫁接 2013年5月23日,上午9:03

    我的假设:
    为了让内核引导/filesystem.squashfs作为其根目录“/”它需要先安装在initramfs中。对于debian liveCD’s通常是通过一个名为live-boot的程序来完成的’。 liveCD使用aufs联合安装具有持久性卷的fileystem.squashfs。如果我没记错的话,那么用户系统实际上是安装在ram上的filesystem.sqaushfs,然后用aufs联合安装到持久性层。
    我正在尝试编写一个模型系统,以说明如何使用我自己的aufs挂载而不使用此工具“ live-boot”来执行此操作。’.

  • 史蒂夫 2013年5月23日,下午7:04

    这次真是万分感谢– very helpful

  • 格雷厄姆 2013年7月28日,上午11:06

    我感谢这篇文章。对于我们aufs新手来说,也许值得一提的是删除之前必须先卸载文件夹

    sudo umount / tmp / 奥夫斯-root/ && rm -rf / tmp / 奥夫斯-root/

  • 尼尔斯·伯姆 2013年9月21日,上午6:09

    @格雷厄姆

    请不要这样’s dangerous to “rm -rf”一个空目录(这是一个安装点)。如果您忘记先卸下该怎么办?您’ll删除所有内容。

    那里’s更好的工具是:rmdir。你应该经常使用“rmdir”用于删除空目录,如果’再次输入错误并且目录实际上不是空的,rmdir只会通过一条错误消息来解决,而不执行任何操作,而不是删除您的数据。

  • y 2013年10月24日,晚上9:06

    我讨厌恢复旧主题,但我’我有种选择。我发布到Ubuntu论坛,但我’如果有人知道答案,将在此处重新发布。

    I’我将DrivePool驱动器5 + 1(5个存储空间,1个SnapRaid)迁移到旧系统’已安装Ubuntu Server。我可以很好地安装多个驱动器(我’m仍在移班前进行测试),使用此脚本:

    d0 =”/media/Storage0″
    d1 =”/media/Storage1″
    d2 =”/media/Storage2″
    d3 =”/media/Storage3″
    d4 =”/media/Storage4″

    mount -t 奥夫斯 -o br=$d0=rw:$d1=rw:$d2=rw:$d3=rw:$d4=rw -o create=mfs 没有pool

    我将池目录放入Samba共享中。问题在于,报告的可用空间仅列出了第一个驱动器的可用空间。有没有办法合并可用空间,以便报告所有可用空间?

  • 帕可 2013年11月25日,下午5:06

    @Kayot,我想“-o sum”会做你想要的

  • 切尼登 2013年11月28日,上午4:26

    很棒的文章,我想在这里“/home1 ->是/ dev / sdb2具有“ 测试”用户的安装点。” should be “root” user.

  • y 2013年12月1日,下午4:20

    啊,我做错了。我试图在不使用-o的情况下将sum加到行中。我的最后一行如下所示:

    mount -t 奥夫斯 -o br=$d0=rw:$d1=rw:$d2=rw:$d3=rw:$d4=rw -o create=mfs -o总和 没有pool

    我没有’没有意识到我在每个选项之后都需要一个-o。如此愚蠢的错误。现在寻找我的另一篇文章,并报告为子孙后代解决该问题的方法。谢谢。

  • 阿米特·纳迪亚(Amit Naudiyal) 一月13,2017,12:05上午

    用以下命令挂载‘aufs’ type doesn’无法在Ubuntu 16.04上运行。它说:

    安装:未知的文件系统类型‘aufs’

发表评论