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


26

为了使用存储设备,我们需要一个文件系统,交换空间如何?

如果没有文件系统,操作系统如何使用它?(来自RAM的)数据如何写入磁盘,以及如何再次访问?


6
交换不需要文件系统。它不存储文件。
Pilot6 '16

3
它存储RAM页面。
Pilot6 '16

2
您能确切说明您要做什么吗?您是说您需要的只是一个临时存储数据的地方吗?
杰克

6
“我想知道在没有文件系统的情况下如何在存储空间中进行写入?” –您只需写入存储空间。考虑一下:如果需要文件系统写入存储空间,那么文件系统将不存在,因为文件系统需要能够在没有文件系统的情况下写入存储决策。“根据您的回答,我可以说RAM有一个小的文件系统,而交换文件使用此文件系统来处理页面吗?” –否。文件系统用于存储文件。交换空间不存储文件。
约尔格W¯¯米塔格

4
将单个文件(ala tar和dd)写入未格式化的存储非常普遍,而具有嵌套文件系统(虚拟磁盘,.iso,squashfs)则更为常见。软盘上的游戏有时会在绝对(固定)位置上写入高分,并且某些应用程序基于Cylinder,Head,Sector。交换分区仍然是分区,但是不,除了offset和run之外,没有文件系统或“映射”吗?
mckenzm

Answers:


28

从技术上讲,交换没有特定的文件系统。文件系统的全部目的是以某种方式构造数据。特别是交换分区没有结构,但是它确实有一个特定的标头,它是由mkswap程序创建的。特别是(取自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
很好地指出,尽管没有文件系统,但它确实具有允许识别文件系统的基本结构。防止错误覆盖另一个分区。
频谱

我认为它们的意思是磁盘空间“也许我想知道如何在没有文件系统的情况下在存储空间中进行写入”而不是RAM?
安华

@Anwar,是的,但我得到它
Sinoosh

tar可用于将多个文件作为RAW流写入未格式化的设备(例如闪存驱动器)。否则,可以写入一个文件(但不能命名),并且您需要逆转该过程以将其写回。通常使用ISO到光学介质来完成此操作,但结果是就地文件系统。
mckenzm

1
同意 从本质上讲,它可以被描述为一个映射区域。它不是实际内存的扩展,而是存储可以按需覆盖的块的工作空间。
mckenzm

14

交换空间由内核用来在系统内存(RAM)变满时临时存储页面。内核使用其自己的内部表来“记住”交换页在页面中的确切位置。结果,交换磁盘不包​​含正确的文件系统,通常只是磁盘上的空白分区。

您可能感兴趣的是RAM磁盘,它是存储在系统内存中的小型文件系统。如果需要更多内存,内核会将其(和其他内容)推送到交换空间。请参阅此处以获取有关设置的说明。


13

交换空间被划分为与内存页面大小相同的块(通常为4kB),并且这些页面到应用程序内存的映射记录构成了CPU和OS中虚拟内存子系统的扩展。

也就是说,在应用程序内存空间和实际物理内存地址之间已经存在一个映射系统。为应用程序提供了一个很大的内存地址空间,他们可以使用它们尽可能多的内存。随着更多的此内存地址空间被实际使用,物理内存将映射到该应用程序以用作存储介质。

当内存交换到磁盘时,相关系统会维护该应用程序的内存空间到磁盘上块的映射。

映射表本身未存储在磁盘上,并且重新启动后磁盘上剩余的数据无用。

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.