将分区挂载到“沙盒”中


9

我想知道这是否可能。我想设置一个将/远程linux机器安装到/本地机器上的linux系统。但是,我希望将本地计算机上的所有更改都保存到ram中,以免影响远程计算机。理想情况下,永远不会写入更改,因此,当我重新启动时,它会/再次挂载原始分区,而不考虑上一个会话期间进行的所有更改。

这样有可能吗?


我还没有来测试你们的任何答案,因此很难选择1作为解决方案。因此,我将
投票

Answers:


7

使用 unionfsaufs(都是内核的外部补丁程序)或unionfsfuse / funionfs(使用FUSE),并通过将external /标记为RO和内部文件系统(挂载为tmpfs / ramfs /每次清理的附加分区)来创建并集。

或者,您可以将文件系统或LVM与快照配合使用。然后写入更改,但是您可以在每次引导时清除快照。


或者可以利用btrfs种子功能(在< en.wikipedia.org/wiki/Btrfs#cite_ref-16>上指出)-为具有只读基数的读写fs种子。如果基本fs是btrfs ...
imz –伊万·扎哈拉里舍夫(Ivan Zakharyaschev)2011年

5

有几种方法可以解决此问题。最简单的设置是使用联合文件系统,该文件系统显示两个目录树A和B的单个视图,这样所有更改都保存到B中。在您的情况下,A将是NFS / Samba / sshfs /…安装点,而B将是tmpfs文件系统上最初为空的目录。

Linux没有内核内的联合文件系统,但是有几种FUSE实现:funionfsUnionfs-fuse


3

如果/适合本地计算机的RAM,并为运行的应用程序留出足够的空间,则基本思路可能是在目标计算机上引导最小的Linux系统,然后自动创建ramfs虚拟磁盘,将/从远程复制到其中,并chroot进入这个新的/。如果RAM不足,则基本上可以遵循相同的步骤,但不使用ramfs,而是使用真正的磁盘分区,在复制之前必须清除其内容。除了清除和完整复制,您还可以将rsync与适当的选项一起使用。


1

您可以使用Btrfs它的写时复制(CoW)功能。

您可能正在寻找的一个在Btrfs Wiki上被描述为种子设备

基本思想是使具有原始数据的分区为只读,而不是“在其顶部添加额外的层”,这是另一个可写分区(您可以始终将其置于RAM中,例如on /dev/shm)并将其装入:

btrfstune -S 1 /dev/RO #make it read-only
mount /dev/RO /mnt/temp
btrfs device add /dev/RW /mnt/temp
umount /mnt/temp

从那时起,每次安装

mount /dev/RW /mnt/test

更改保存在/ dev / RW上,而/ dev / RO保持不变。

(示例基于Wiki中的示例)


0

使用PXE引导可以很容易地进行归档。我正在通过pxe tftp nfs引导运行实时xbmc系统。更改将用COW写入NFS共享。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.