❶ 如何使用Docker构建运行时间较长的脚本
问题让我们从这个我试图解决的问题开始。我开发了一个会运行很长时间的构建脚本,这个脚本中包含了很多的步骤。这个脚本会运行1-2个小时。它会从网络下载比较大的文件(超过300M)。后面的构建步骤依赖前期构建的库。但最最烦人的是,运行这个脚本真的需要花很长的时间。文件系统是固有状态我们一般是通过一种有状态的方式与文件系统进行交互的。我们可以添加、删除或移动文件。我们可以修改文件的 权限或者它的访问时间。大部分独立的操作都可以撤销,例如将文件移动到其它地方后,你可以将文件恢复到原来的位置。但我们不会通过快照的方式来将它恢复到 原始状态。这篇文章我将会介绍如何在耗时较长的脚本中充分利用快照这一特性。使用联合文件系统的快照Docker使用的是联合文件系统叫做AUFS(译者注:简单来说就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统)。联合文件系统实现了Union mount。顾名思义,也就是说不同的文件系统的文件和目录可以分层叠加在单个连贯文件系统之上。这是通过分层的方式完成的。如果一个文件出现在两个文件系统,那最高层级的文件才会显示(该文件其它版本也是存在于层级中的,不会改变,只是看不到的)。在Docker中,每一个在Union mount转哦给你的文件系统都被称为layers(层)。使用这种技术可以轻松实现快照,每个快照都是所有层的一个Union mount。生成脚本的快照使用快照可以帮助构建一个长时运行的脚本。总的想法是,将一个大的脚本分解为许多小的脚本(我喜欢称之为 scriptlets),并单独运行这些小的脚本,脚本运行后为其文件系统打一个快照 (Docker会自动执行此操作)。如果你发现一个scriptlet运行失败,你可以快速回退到上次的快照,然后再试一次。一旦你完成脚本的构建,并且 可以保证脚本能正常工作,那你就可以将它分配给其它主机。回过头来再对比下,如果你没有使用快照功能了?当你辛辛苦苦等待了一个半小时后,脚本却构建失败了,我想除了少部分有耐心的人外,很多人是不想再来一次了,当然,你也会尽最大努力把系统恢复到失败前的状态,比如可以删除一个目录或运行make clean。但是,我们可能没有真正地理解我们正在构建的组件。它可能有复杂的Makefile,它会把把文件放到文件系统中我们不知道的地方,唯一真正确定的途径是恢复到快照。使用快照构建脚本的Docker在本节中,我将介绍我是如何使用Docker实现GHC7.8.3 ARM交叉编译器的构建脚本。Docker非常适合做这件事,但并非完美。我做了很多看起来没用的或者不雅的事情,但都是必要的,这都是为了保证将开发脚本的总时间降到最低限度。构建脚本可以在这里找到。用Dockerfile构建Docker通过读取Dockerfile来构建镜像。Dockerfile会通过一些命令来具体指定应该执行哪些动作。具体使用说明可以参考这篇文章。在我的脚本中主要用到WORKDIR、ADD和RUN。ADD命令非常有用因为它可以让你在运行之前将外部文件添加到当前Docker镜像中然后转换成镜像的文件系统。你可以在这里看到很多scriptlets构成的构建脚本。设计1. 在RUN之前ADD scriptlets如果你很早就将所有的scriptletsADD在Dockerfile,您可能会遇到以下问题:如果你的脚本构建失败,你回去修改scriptlet并再次运行docker build。但是你发现,Docker开始在首次加入scriptlets的地方构建!这样做会浪费了大量的时间并且违背了使用快照的目的。出现这种情况的原因是由于Docker处理它的中间镜像(快照)的方式。当Docker通过Dockerfile构建镜像时,它会与中间镜像比较当前命令是否一致。然而,在ADD命令的情况下被装进镜像的文件里的内容也会被检查。如果相对于现有的中间镜像,文件已经改变,那么Docker也别无选择,只能从这点开始建立一个新的镜像。因为Docker不知道这些变化会不会影响到构建。此外,使用RUN命令要注意,每次运行时它都会导致文件系统有不同的更改。在这种情况下,Docker会发现中间镜像并使用它,但是这将是错误的。RUN命令每次运行时会造成文件系统相同的改变。举个例子,我确保在我的scriptlets我总是下载了一个已知版本的文件与一个特定MD5校验。对Docker 构建缓存更详细的解释可以在这里找到。2.不要使用ENV命令来设置环境变量,请使用scriptlet。它似乎看起来很有诱惑力:使用ENV命令来设置所有构建脚本需要的环境变量。但是,它不支持变量替换的方式,例如 ENV BASE=$HOME/base 将设置BASE的值为$HOME/base着很可能不是你想要的。相反,我用ADD命令添加一个名为set-env.sh文件。此文件会包含在后续的scriptlet中:THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"source $THIS_DIR/set-env-1.sh如果你没有在第一时间获取set-env.sh会怎么样呢?它很早就被加入Dockerfile并不意味着修改它将会使随后的快照无效?是的,这会有问题。在开发脚本时,我发现,我已经错过了在set-env.sh添加一个有用的环境变量。解决方案是创建一个新的文件set-env-1.sh包含:THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"source $THIS_DIR/set-env.shif ! [ -e "$CONFIG_SUB_SRC/config.sub" ] ; thenCONFIG_SUB_SRC=${CONFIG_SUB_SRC:-$NCURSES_SRC}fi然后,在所有后续的scriptlets文件中包含了此文件。现在,我已经完成了构建脚本,我可以回去解决这个问题了,但是,在某种意义上,它会破坏最初的目标。我将不得不从头开始运行构建脚本看看这种变化是否能成功。缺点一个主要缺点是这种方法是,所构建的镜像尺寸是大于它实际需求的尺寸。在我的情况下尤其如此,因为我在最后删除了大量文件的。然而,这些文件都仍然存在于联合挂载文件系统的底层文件系统内,所以整个镜像是大于它实际需要的大小至少多余的是删除文件的大小。然而,有一个变通。我没有公布此镜像到Docker Hub Registry。相反,我:使用docker export导出内容为tar文件。创建一个新的Dockerfile简单地添加了这个tar文件的内容。产生尺寸尽可能小的镜像。结论这种方法的优点是双重的:它使开发时间降至最低,不再做那些已经构建成功的子组件。你可以专注于那些失败的组件。这非常便于维护构建脚本。构建可能会失败,但只要你搞定Dockerfiel,至少你不必再从头开始。此外,正如我前面提到的Docker不仅使写这些构建脚本更加容易,有了合适的工具同样可以在任何提供快照的文件系统实现。
❷ linux下安装文件系统的安装点只能是/mnt下么
/mnt只是习惯性的加载目录,是英文mount的简写。其实你可以随便挂载到那里,如我会在/下建个文件夹为windows。这样把硬盘上的windows分区挂载到/windows目录下。所以这只是个人习惯而以。挂载的目录不一定要空。是要想两次挂载“叠加”到同一个目录(或以前目录已有数据)的话要用mount 的aufs来挂载。aufs挂载的用法请参考:http://zhgw01.blog.163.com/blog/static/104148122009615112012474/
❸ mac系统下磁盘是什么格式
Mac的硬盘是HFS+文件系统,在Windows下可以安装一个Mac Drive v7.2.2就能自动挂载。在linux下可以用mount加载未开启日志的HFS分区:# mount -t hfsplus /dev/sdxx path/to/mount_point -o rw 如果要将新硬盘格式化HFS+文件系统,可以考虑用Parted MagicParted Magic是一张容量约为30MB左右的Live CD,你不仅可以通过光盘来使用它,而且也能够在U盘中应用。此工具盘的主要用途是为硬盘完成分区工作。它预装的分区工具包括GParted和Parted,其中GParted 是一个图形化的分区工具,很容易使用,称之为分区魔术师最为合适。在Parted Magic中除了一些分区工具之外,还包括Partition Image、TestDisk、fdisk、dd、sfdisk、ddrescue等工具,可用于备份或还原系统,基至急救出现故障的系统。当前,Parted Magic 支持广泛的文件系统,如aufs, ext2, ext3, ext4, fat16, fat32, hfs, hfs+, jfs, linux-swap, ntfs, ocfs2, reiserfs, reiser4, xfs, and zfs等等。无论是Linux,还是Windows,都有Parted Magic的用武之地下载地址:
❹ docker相当于一个Linux上虚拟机吗可以在docker上放置网站,提供外部访问吗
当前,Docker内部使用的是Linux容器技术(LXC),这是运行在与它的宿主机器同样的操作系统上。这准许它可以和宿主机器共享许多系统资源。它也会使用AuFS作为文件系统,也为你管理网络。AuFS是一个层状的文件系统,因此你可以有一个只读部分和一个只写部分,然后将二者组合起来。你可以使系统的共同的部分用作只读,那块是被所有容器共享,并且给每个容器自己的可写区域Mitisky翻译于 3年前3人顶顶 翻译得不错哦!好吧,让我们假设你有一个容器镜像(image)容量是1GB,如果你想用一个完整的虚拟机来装载,你得需要容量的大小是1GB乘上你需要虚拟机的数量。但使用Linux容器虚拟化技术(LXC)和AuFS,你可以共享1GB容量,如果你需要1000个容器,假设他们都运行在同样的系统影像上,你仍然可以用稍微比1GB多一点的空间来给容器系统,一个完整的虚拟化系统得到了分给它的自有全部资源,只有最小的共享。你获得了更多的隔离,但是这是很庞大的(需要更多的资源)使用Linux容器虚拟化技术(LXC),隔离性方面有所缺失,但是他们更加轻量,而且需要更少资源。所以你可以轻松运行1000个容器在一个宿主机器上,甚至眼都不眨。试着用Xen来实现那个,我想除非你有一个超级强大的主机,不然我看是不可能的了Mitisky翻译于 3年前2人顶顶 翻译得不错哦!一个完整的虚拟系统通常得用几分钟去启动,linux容器虚拟技术(LXC)只要数秒,甚至有时时间更短。对于每种虚拟系统都有反对者和支持者。如果你希望一个完全隔离的和资源有保障的环境,那么完全的虚拟机是你的选择。如果你只希望进程之间相互隔离,并且希望大量运行他们在一个合理大小的宿主机器上。那么linux容器虚拟技术(LXC)是你的选择。
❺ 传统虚拟机和Docker容器在性能上的区别
IBM研究部门发表了一篇关于容器和虚拟机环境性能比较的论文。这篇论文使用了Docker和KVM作为研究对象,阐述了Docker使用NAT或AUFS时的开销,并且质疑了在虚拟机上运行容器的实践方法。 论文作者在原生、容器和虚拟化环境中运行了CPU、内存、网络和I/O的benchmark。其中,分别使用KVM和Docker作为虚拟化和容器技术的代表。Benchmark也包含了对不同环境下Redis和MySQL负载的采样。通过小数据包和多客户端,Redis侧重于网络栈的性能。而MySQL侧重于内存,网络和文件系统的性能。 结果显示,在每一项测试中,Docker的性能等同于或超出KVM的性能。在CPU和内存性能方面,KVM和Docker都引入了明显的,但可略不计的开销。但是,对于I/O密集型的应用,两者都需要进行调整以减少开销带来的影响。 当使用AUFS存储文件时,Docker的性能会降低。而相比之下,使用卷(volume)能够获得更好的性能。卷是一种专门设计的目录,存在于一个或多个容器内。通过这种目录能够绕过联合文件系统(union file system)。这样它就没有了存储后端可能带来的开销。默认的AUFS后端会引起显著的I/O开销,特别是当有多层目录深度嵌套的时候。 Docker的默认网络选项,–net=bridge,由于NAT会重写数据包,也引入了性能开销。当数据包收发率变高时,这种开销会变得很明显。可以通过使用–net=host改善网络的性能。这个选项告诉Docker不要为容器创建一个独立的网络栈,并允许容器拥有宿主机网络接口的完全访问权限。但是,使用这个选项时要小心。因为它允许容器内的进程像其他根进程一样,使用数值较小的端口;并允许容器内的进程访问本地网络服务,如D-bus。这使得容器内的进程可以做一些预料之外的事情,如重启宿主机。 尽管自诞生以来,KVM性能有了相当大的提升,但它仍然不适用于对延时敏感或高I/O访问率的工作负载。因为每次I/O操作,它都会增加一些开销。这个开销对于耗时较少的I/O操作是有意义的,但对于耗时较长的I/O操作是可以忽略的。 根据这些测试结果,论文对使用虚拟机实现IaaS的方法提出了质疑: 传统观点(在某种程度上,这种观点存在于年轻的云生态圈中)认为使用虚拟机实现IaaS,使用容器实现PaaS。我们没有找到技术方面的理由来证明必须这么做,尤其是证明容器基于IaaS能提供更好的性能或者更容易部署。由于容器提供了控制手段,并在不使用虚拟机的情况下能达到物理机的性能,所以它能够消除IaaS和非虚拟化的服务器间的差异。 尽管在虚拟环境中运行容器是一种常见的实践方法,但是论文建议直接在物理的Linux服务器上运行它们。否则,相比于直接运行在非虚拟化的Linux上的方法,由于虚拟机的性能开销,这种实践方法不会得到任何额外的好处。
❻ Linux下不同文件系统如何形成一个无缝的目录
unionfsaufs
❼ Docker跟一般的虚拟机有什么区别
Docker和虚拟机有各自擅长的领域,在软件开发、测试场景和生产运维场景中各有优劣势:1、Docker启动快速属于秒级别,虚拟机通常需要几分钟去启动;2、Docker需要的资源更少,Docker在操作系统级别进行虚拟化,Docker容器和内核交互,几乎没有性能损耗,而虚拟机就差了很多;3、Docker更轻量,Docker的架构可以共用一个内核与共享应用程序库,所占内存极小;同样的硬件环境,Docker运行的镜像数远多于虚拟机数量,对系统的利用率非常高;4、与虚拟机相比,Docker隔离性更弱,Docker属于进程之间的隔离,虚拟机可实现系统级别隔离;5、Docker的安全性也更弱,Docker的租户root和宿主机root相同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户root权限和宿主机的root虚拟机权限是分离的,并且虚拟机利用如Intel的VT-d和VT-x的ring-1硬件隔离技术,这种技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离;6、Docker的集中化管理工具还不算成熟,各种虚拟化技术都有成熟的管理工具,比如:VMware vCenter提供完备的虚拟机管理能力;7、Docker对业务的高可用支持是通过快速重新部署实现的,虚拟化具备负载均衡,高可用、容错、迁移和数据保护等经过生产实践检验的成熟保障机制,Vmware可承诺虚拟机99.999%高可用,保证业务连续性;8、虚拟化创建是分钟级别的,Docker容器创建是秒级别的,Docker的快速迭代性,决定了无论是开发、测试、部署都可以节省大量时间;9、虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化,Docker在Dockerfile中记录了容器构建过程,可在集群中实现快速分发和快速部署。
❽ backtrack4干什么用的呀
以下来自网络,全粘过来了。释义 BT4全称Back Track four,这是一个linux环境的便携系统,可以放到U盘或者光盘中启动,对本身硬盘没有影响,无需在本地安装。 是圈内非常著名的黑客攻击平台,是一个封装好的Linux操作系统,内置大量的网络安全检测工具以及黑客破解软件等。 BT3~4因可以方便的破解无线网络而出名,其中内置的spoonwep是一个非常强悍的图形化破解wep无线网络密码的工具。[2][编辑本段]简介 Backtrack 是处于世界领先地位的渗透测试和信息安全审计发行版本。有着上百种预先安装好的工具软件,并确定能完美运行,Backtrack4 提供了一个强大的渗透测试平台–从Web hack的应用程序到RFID 审查,都可由Backtrack来完成。[2][编辑本段]内幕 BackTrack 的基础BT4 引入了许多显著的变化,基于Ubuntu Intrepid。现在开始使用我们自己修改了的Ubuntu软件包和渗透测试工具软件来维护我们自己全部的软件仓库。 另外一个显著的变化是更新linux 核心版本到2.6.29.4.这个新核心带来了一整套系统内在的变化,使得极大地改变了BackTrack的架构。 Backtrack 的核心 不再使用lzma格式的squashfs作为live cd的文件系统,从而导致了一个更大容量的ISO文件。但从另外一个方面来看,这也使得我们不用维护我们自己的核心补丁问题。目前这是很痛苦的,因为squashfs融入主流核心的速度十分缓慢。 BT4使用了squashfs-tools version 4.0,内建的squashfs核心模块(2.6.29.4),和旧版本不兼容。使用了AUFS格式作为统一文件系统 (unification filesystem)。 核心已经安装了几个无线驱动的注入和优化补丁,并且打了bootsplash 补丁,这些补丁都能在核心源码包中找到。(/usr/src/linux/patches) 这些变化意味着以前很多在BT2/BT3中使用的方法已经不再有效,比如启动时的cheatcodes参数。 由于核心的转移也意味着不再使用live-linux脚本来生成iso文件,现在我们使用casper。[2][编辑本段]相关联 软件包和软件仓库 BT4中一个最大的变化就是使用了软件仓库,可以经常更新安全补丁和工具,类似Debian。意味着如果你选择把BT4安装到硬盘, 你就可以通过apt-get命令,维护和更新你的软件包。 BT4工具软件有以下几个大类: BackTrack-Enumeration BackTrack-Tunneling BackTrack-Bruteforce BackTrack-Spoofing BackTrack-Passwords BackTrack-Wireless BackTrack-Discovery BackTrack-Cisco BackTrack-Web Applicaitons BackTrack-Forensics BackTrack-Fuzzers BackTrack-Bluetooth BackTrack-Misc BackTrack-Sniffers BackTrack-VOIP BackTrack-Debuggers BackTrack-Penetration BackTrack-Database BackTrack-RFID BackTrack-Python BackTrack-Drivers BackTrack-GPU Meta packages 工具软件的分类有一个很好的特点,就是我们可以支持“BackTrack meta packages”. 一个Meta 软件包是一个虚设的软件包, 可以包含其他的几个软件包。比如,meta软件包“backtrack-web” 可以包括BT4提供的所有Web渗透测试工具应用软件。 Meta Meta 软件包有两个meta meta packages: backtrack-world 和backtrack-desktop backtrack-world 包含了所有的BackTrack meta软件包 backtrack-desktop包含了backtrack-world,backtrack-networking 和backtrack-mulimedia.后面的两个meta软件包从Ubuntu引入的。[2][编辑本段]安装操作 安装BT4到硬盘 BT4(基础框架版和全版本)包含了一个修改了的Ubiquity installer.这种安装是非常简单易懂的。 更新BT4 使用apt-get命令来更新BT4是比较简单的 apt-get update 同步更新软件包列表 apt-get upgrade 下载和安装所有可用的更新 apt-get dist-upgrade 下载和安装所有的升级更新 定制BT4 制作你自己的Live CD 方法1 制作你自己喜欢的BT4是很简单的. 1.下载并安装BT4的基础核心架构版本 2.用apt-get安装需要的软件包 3.用remmastersys重新打包你的安装 方法2 下载BT4的iso文件,使用定制脚本来更新和修改,参看[1] 安装BT4到U盘 最简单安装BT4到U盘的方法就是用unetbootin 工具软件。(在BT4 的/opt/目录下) 安装BT4到U盘 -保存数据 运行BT4 KDE3 特别用法 BT4 包含了“强加的”KDE3,和KDE4 Ubuntu Intrepid库同存。BT4使用KDE3,牢记KDE3包都有“kde3”的后缀,可以和KDE4区分。 比如,你想安装KDE中的kate文本编辑器,你必须apt-get install kate-kde3(安装KDE3版本中的kate), 而不是apt-get kate(安装KDE4版本中的kate)。[2][编辑本段]人工更新工具 BT4软件仓库会极力保持更新最新版本的工具软件,但有极少的部分例外。这些“特殊的”软件由他们的作者经常更新,有些还包括显著的更新。我们感到对这些类型的工具制作静态的二进制文件是无益的,这些软件的使用者最好使用SVN来同步更新。这些工具包括MSF,W2AF,Nikto等
❾ centos 什么时候开始支持 aufs
Docker在启动容器的时候,需要创建文件系统,为rootfs提供挂载点。最初Docker仅能在支持Aufs文件系统的Linux发行版上运行,但是由于Aufs未能加入Linux内核,为了寻求兼容性、扩展性,Docker在内部通过graphdriver机制这种可扩展的方式来实现对不同文件系统的支持。目前,Docker支持Aufs,Devicemapper,Btrfs和Vfs四种文件系统。若想了解更多内容可以点击这里。本文以Docker 1.4为基础,首先分析Docker镜像的结构,接着介绍Aufs和Devicemapper的应用,最后从代码的角度分析Docker文件系统的实现。Docker镜像典型的Linux文件系统由bootfs和rootfs两部分组成,bootfs(boot file system)主要包含 bootloader和kernel,bootloader主要是引导加载kernel,当kernel被加载到内存中后 bootfs就被umount了。 rootfs (root file system) 包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件。Docker容器是建立在Aufs基础上的,Aufs是一种Union FS, 简单来说就是支持将不同的目录挂载到同一个虚拟文件系统下,并实现一种layer的概念。Aufs将挂载到同一虚拟文件系统下的多个目录分别设置成read-only,read-write以及whiteout-able权限,对read-only目录只能读,而写操作只能实施在read-write目录中。重点在于,写操作是在read-only上的一种增量操作,不影响read-only目录。当挂载目录的时候要严格按照各目录之间的这种增量关系,将被增量操作的目录优先于在它基础上增量操作的目录挂载,待所有目录挂载结束了,继续挂载一个read-write目录,如此便形成了一种层次结构。Docker镜像的典型结构如下图。传统的Linux加载bootfs时会先将rootfs设为read-only,然后在系统自检之后将rootfs从read-only改为read-write,然后我们就可以在rootfs上进行写和读的操作了。但Docker的镜像却不是这样,它在bootfs自检完毕之后并不会把rootfs的read-only改为read-write。而是利用union mount(UnionFS的一种挂载机制)将一个或多个read-only的rootfs加载到之前的read-only的rootfs层之上。在加载了这么多层的rootfs之后,仍然让它看起来只像是一个文件系统,在Docker的体系里把union mount的这些read-only的rootfs叫做Docker的镜像。但是,此时的每一层rootfs都是read-only的,我们此时还不能对其进行操作。当我们创建一个容器,也就是将Docker镜像进行实例化,系统会在一层或是多层read-only的rootfs之上分配一层空的read-write的rootfs。相关厂商内容国际范 最前沿 不容错过的容器技术盛会弯道超车 私有云在金融企业真正落地一路走来技术人的创业故事未来物联网中智能硬件的角色人工智能的技术版图相关赞助商CNUTCon全球容器技术大会北京站,Get更多亮点!点击了解详情!为了形象化Docker的镜像结构,我们docker pull一个ubuntu:14.04的镜像,使用docker images -tree查看结果如下:[[email protected] qingze]# docker images -treeWarning: '-tree' is deprecated, it will be removed soon. See usage.└─511136ea3c5a Virtual Size: 0 B └─3b363fd9d7da Virtual Size: 192.5 MB └─607c5d1cca71 Virtual Size: 192.7 MB └─f62feddc05dc Virtual Size: 192.7 MB └─8eaa4ff06b53 Virtual Size: 192.7 MB Tags: ubuntu:14.04,可以看到Ubuntu的镜像中有多个长ID的layer,且以一种树状结构继承下来,如下图。其中,第n+1层继承了第n层,并在此基础上有了自己的内容,直观上的表现就是第n+1层占用磁盘空间增大。并且,不同的镜像可能会有相同的父镜像。例如,图中Tomcat和Nginx 继承于同一个Vim 镜像,这种组织方式起到共享的作用,节约了镜像在物理机上占用的空间。
❿ 如果使在Linux中修改的数据不回写到磁盘
aufs 联合挂载一个 tmpfs ,和复你制的文件系统。写入数据指定为 tmpfs 。这样所有的写入数据,都会写到 tmpfs 里,而读取时,如果 tmpfs 没有数据,aufs 会去真正的文件系统找数据读取。tmpfs 在内存里,重启就没了,不过 tmpfs 占用内存,所以要限制他的容量,不然他存的数据太多,占用内存大了。系统正常运行就会受影响。不过整个系统的文件系统都要 aufs ,可能需要在 initrd 或者启动脚本里面做操作后 chroot 继续启动。如果你非要想实现不写回,而不是用 aufs 联合挂载,必须 hack 内核的写入数据模块,截获所有写入数据到自己的缓存里。这个难度很大,而且兼容性也是问题。除了 aufs ,老系统可以用 unionfs 。另外,Linux 除非安装程序,不然大部分数据其实都是放在个人目录里面,你把个人目录挂载成 tmpfs 其实就能实现不写入硬盘的功能。只有很少量的数据会写入特殊的目录里,但这些都是服务器或者系统的系统管理、配置什么的数据。还原精灵的某些功能目的,其实 Linux 本身就自己已经提供了。不需要要在折腾什么。
未经允许不得转载:山九号 » aufs文件系统|如果使在Linux中修改的数据不回写到磁盘