非永久性的实时系统中,程序和文件到底保存在哪里?

最近,我需要测试各种内核引导选项,使用的是一个实时系统,并且每次都需要安装一个程序来检查系统信息(因为我没有可用的USB驱动器,而光盘在那一刻更为可靠)。
经过几次安装后,我开始想知道这个程序到底是“保存”在哪里,因为光盘没有持久存储区域,而且也可以创建没有持久存储区域的USB驱动器。此外,使用非持久性实时系统也可以下载文件或进行截图,并临时保存在用户目录中。
那么,这些文件究竟是保存在哪里呢?它们是加载到RAM中的吗,所以实时系统的最大可用内存实际上是机器的RAM容量吗?安装的程序是否存储在CPU缓存或其他地方?或者这些信息可能写在CD介质的空白区域上吗?显然,它不能是未分配的硬盘空间,因为实时系统也可以完全加密或者完全没有安装硬盘。
2个回答

Ubuntu ISO附带的Live系统是一个压缩文件,名为filesystem.squashfs。这个文件使用SquashFS1文件系统,类似于CD和DVD的ISO文件系统,可以被挂载和使用。2

这个文件位于CD的/casper/目录中。你甚至可以像挂载ISO文件一样挂载这个文件。

在启动过程中,这个文件会被挂载并加载到内存中,作为一个实时系统来使用。但并不是一次性加载整个文件,而只加载所需的部分/程序。

实时系统可以通过一个持久文件来创建/更改媒体文件,这个文件在Ubuntu中被命名为casper-rw,包含可写的ext3ext4文件系统。在可启动的USB中,它位于驱动器的根目录下。

这个 casper-rw 持久化文件被联合挂载为一个叠加文件系统,这意味着只读的 filesystem.squashfs 和可读写的 casper-rw 都被挂载在 / 上。任何被修改或创建的文件都保存在这个可写的 casper-rw 文件系统中。因此,有效地创造了一个虚幻的假象,让 Live CD 可以被写入,实际上它们是不可写的。
所以,回答你的问题 -

这些文件实际上保存在哪里?

上面已经给出了答案。

它们是否加载到内存中,因此 live 系统的最大可用内存实际上是机器的 RAM 容量?

我猜,通过 memory 你指的是空间。你的问题是 "所以 live 系统的最大可用空间实际上是机器的 RAM 容量"?
不是的。Live 系统的最大可用存储空间是持久化文件的大小(如果有的话)+ 交换空间(如果已存在)+ RAM(如果需要在重启之前用作存储)。
安装的程序是存储在CPU缓存中还是完全存储在其他地方?
如果您在没有持久文件的情况下在实时系统中安装程序,那么这些程序将存储在内存中。如果重新启动,所有数据都将丢失。然而,如果您使用了casper-rw持久文件,这些程序将保存在该文件中,并且在下次重启后仍然可用(前提是您没有删除该文件)。
或者这些信息可能写在CD介质的空白空间上吗?
不,它不会写入CD介质。正如前面的答案所解释的那样。
希望您得到了答案。

注意事项:

  1. SquashFS - 这是一个只读文件系统,可以压缩整个文件系统或单个目录,将它们写入其他设备/分区或普通文件,然后直接挂载它们(如果是设备)或使用回环设备(如果是文件)。来源

  2. 您可以使用类似 sudo mount ./filesystem.squashfs /mnt -o loop 的命令来挂载它。

  3. 联合挂载是一种将多个目录合并为一个目录的方法,看起来好像包含了它们的所有内容。来源


Casper是一个友善的小鬼文件系统。 - cat
1谢谢你详细的解释。我没有看到你在回复中对个别问题添加答案。这解释得相当清楚。不过,我对casper -rw部分还是没完全理解,特别是“从而有效地创造出可写的Live CD的错觉,实际上它们并不是可写的。”的意思,但我想我只需要自己去了解一下。不过你已经回答了我的问题,因为持久文件在CD介质上是不可用的,交换文件逻辑上只能存在于RAM中,这就是我的情况中信息存储的地方。 - Prototype700
1我正在解释幻觉部分。只读文件被挂载在/上。在Live CD中,你会看到像/usr//var//home等等的文件。你不能创建、更改持久存在的文件。是的,你可以创建、更改,但这些更改会在关机后消失,因为它们实际上是存储在RAM中的。在没有持久性文件或casper-rw文件的Live USB中也是一样的。 - Anwar
1但是,在带有持久化文件的Live USB中,它也被挂载在/上。所以,当你在/home目录中创建一个文件时,该文件实际上存储在casper-rw文件中,但你认为那是CD的内容。如果你打开casper-rw,你会在相应位置找到所有修改/更新的文件。由于它是安装在原始的只读文件系统之上,因此创造了幻觉。 - Anwar
2另外一件事是,你说的“交换文件只能存在于内存中”是不正确的。交换文件是存储在磁盘上并在启动时挂载使用的分区或文件。美妙的是,如果你的磁盘已经有一个交换分区,你的Ubuntu系统会识别并使用它。但是,是的,它是易失性的,在重新启动时会被清除。@Prototype700 - Anwar
嗨安瓦尔,谢谢你的回复。我觉得从你对我的报价的回答方式来看,我们可能有点误解了。让我退一步:我大致知道交换文件/分区是如何工作的。我的观点是:当我从刻录好并完成的光盘启动一个实时系统时,光盘上不可能有交换文件,因为它无法被写入。CPU缓存中也不可能有交换空间,因为它太小了,所以系统中唯一的逻辑动态内存就是RAM,这就是我的意思。在我的问题中,我并不太关心持久性文件,因为启动介质是一张刻录好的光盘。 - Prototype700
是的,在这种情况下,所有的操作都发生在内存中。 - Anwar

它说的是非持久性。因此,它们在重新启动之间不会“持续存在”。所发生的是,一部分RAM被用作RAM磁盘。基本上,你的一部分RAM被用来模拟一个磁盘。就是这样。这就是为什么你可以在LiveCD会话期间在/home/ubuntu上创建文件。但它们在重启后将无法存留。

我手边没有LiveCD,但下次尝试在终端中键入df -h并查找/挂载点。查看设备。它很可能是tmpfs之类的东西。(这个一行代码应该给你感兴趣的那行:df -h | grep \/$

有关RAM磁盘的一些阅读。


3现在,很可能是aufs或其他一些叠加文件系统 - 它们比经典的tmpfs配置更容易设置。 - Mark