交换空间是否有文件系统?

对于与存储设备的操作,我们需要一个文件系统,那交换空间呢?
如果它没有文件系统,操作系统如何使用它? 数据(来自RAM)是如何写入磁盘的,又是如何再次访问的?

9Swap不需要文件系统。它不存储文件。 - Pilot6
它是否存储了来自RAM的额外数据? - Sinoosh
3它存储了RAM页面。 - Pilot6
2请问您能详细解释一下您想要做什么吗?您是说您只需要一个临时存储数据的地方吗? - Jake
我想知道在没有文件系统的存储空间中如何进行写入?根据你的回答,我可以说RAM有一个小型文件系统,并且交换文件使用这个文件系统来处理页面吗? - Sinoosh
8我想知道如何在没有文件系统的存储空间中写入内容?你只需直接写入存储空间即可。想一想:如果要写入存储空间就必须有文件系统,那么文件系统就无法存在了,因为文件系统需要能够在没有文件系统的情况下写入存储设备。根据你的回答,我可以说RAM有一个小型的文件系统,并且交换文件使用该文件系统来处理页面吗?不可以。文件系统用于存储文件,而交换空间并不存储文件。 - Jörg W Mittag
5将单个文件(如tar和dd)写入未格式化的存储介质是相当常见的,而且嵌套文件系统(虚拟磁盘、.iso、squashfs)更为普遍。软盘上的游戏有时会将高分写入绝对(固定)位置,而某些应用程序则基于柱面、磁头、扇区进行操作。交换分区仍然是分区,但没有文件系统或“映射”,只有偏移量和运行。 - mckenzm
问题没有意义。'交换空间'是文件系统或其他存储设备中的空间。过去,通常会将整个磁盘(例如固定头设备)专门用于交换空间。 - user207421
2我不明白为什么这个问题是毫无意义的,除非你已经知道答案。使用文件来存储RAM页面在交换空间中听起来是合理的,所以“它不存储文件”并不明显。而且我在文件系统中使用了很多包含文件系统的东西(磁盘镜像),所以“交换空间是文件系统中的一个空间”并不使这个问题变得毫无意义。 - JiK
2非文件磁盘存储的另一个常见用途是:某些数据库也可以跳过文件系统。也就是说,数据库已经将数据组织成表和行。在这种组织水平下,它不需要文件系统提供的额外组织。 - MSalters
3个回答

Swap在技术上没有特定的文件系统。文件系统的整个目的是以某种方式组织数据。特别是,交换分区没有结构,但它确实有一个特定的头部,由mkswap程序创建。具体来说,这是从kernel.org获取的(kernel.org)。
 25 union swap_header {
 26     struct 
 27     {
 28         char reserved[PAGE_SIZE - 10];
 29         char magic[10];
 30     } magic;
 31     struct 
 32     {
 33         char     bootbits[1024];
 34         unsigned int version;
 35         unsigned int last_page;
 36         unsigned int nr_badpages;
 37         unsigned int padding[125];
 38         unsigned int badpages[1];
 39     } info;
 40 };

每个分区都有与之关联的特定代码,根据TLDP
ext2的代码是0x83,Linux交换分区的代码是0x82。
当涉及到“交换文件”时,情况略有不同。内核必须尊重文件系统可能具有自己的数据结构方式的事实。来自同一kernel.org链接的信息如下:
请记住,文件系统可能具有自己的存储文件和磁盘的方法,并且这并不像交换分区那样简单,可以直接将信息写入磁盘。如果后备存储是一个分区,那么只需要一个页面大小的块进行IO操作,并且由于没有涉及文件系统,因此不需要bmap()。
总之,从技术上讲,你可以将交换空间称为一种独立类型的文件系统,但它与NTFS或ext4等文件系统并不完全可比。
你还问道:
我想知道如何在没有文件系统的存储空间中进行写入。
严格来说,RAM不需要被结构化。然而,在类Unix操作系统下,RAM的部分可以被结构化为tmpfs。还有ramfs和initramfs,在启动过程中会加载。但是,从技术上讲,RAM数据应该只是原始的1和0,所以没有必要以任何方式对它们进行结构化。

1很好地指出,尽管没有文件系统,但它确实有一个基本的结构,可以识别它是什么。防止错误地覆盖另一个分区。 - spectras
我觉得他们在这里指的是磁盘空间,而不是内存。"我想知道如何在没有文件系统的存储空间中进行写入"。 - Anwar
@安瓦尔,是的,但我明白了。 - Sinoosh
tar可以用来将多个文件以原始流的形式写入未格式化的设备,比如闪存驱动器。否则,可以写入一个单独的文件(但不能命名),然后需要反向过程将其写回。这通常用于将ISO文件写入光盘,但结果是一个就地文件系统。 - mckenzm
@mckenzm 关于交换,你到底想表达什么? - Sergiy Kolodyazhnyy
请参阅“您还提出了...”。范围不仅限于交换问题。 - mckenzm
@mckenzm啊,但对于ISO来说,那仍然是一个文件系统,所以不同;交换空间在技术上没有结构,也没有文件系统,所以我认为你不能真正扩展范围。关于tar,我对此了解不够,所以不会对此发表任何意见。 - Sergiy Kolodyazhnyy
1同意。基本上可以描述为一个映射的区域。它不是真实内存的扩展,而是一个用于存储可以按需叠加回来的块的工作空间。 - mckenzm
@mckenzm 是的,完全正确!说得很好。 - Sergiy Kolodyazhnyy

交换空间是内核用来临时存储系统内存(RAM)页面的地方,当内存变满时会使用它。内核使用自己的内部表格来“记住”页面在交换磁盘中的确切位置。因此,交换磁盘不包含适当的文件系统,通常只是磁盘上的空白分区。
你可能感兴趣的是RAM磁盘,它是存储在系统内存中的小型文件系统。如果需要更多内存,内核将把它(以及其他内容)推到交换空间中。请参考这里的设置说明。

交换空间被划分为与内存页面相同大小的块(通常为4kB),并且这些页面与应用程序内存之间的映射记录构成了CPU和操作系统中虚拟内存子系统的扩展。
也就是说,应用程序内存空间和实际物理内存地址之间已经存在一个映射系统。应用程序被赋予一个大的内存地址空间,他们可以根据需要使用多少或少量。当这个内存地址空间的一部分被实际使用时,物理内存被映射到该应用程序以作为存储介质。
当内存被交换到磁盘时,相关的系统会维护应用程序内存空间与磁盘上的块之间的映射。
映射表本身不存储在磁盘上,在重新启动后,磁盘上剩余的数据将变得无用。