mkswap 是如何工作的?它创建的交换标头中有什么?

mkswap 是如何工作的?它创建的交换标头中有什么?

我正在研究 mkswap 并试图了解它到底是如何工作的。据我了解,它通过创建交换标头在分区上设置交换空间。这个交换头有多大?是一块吗?或者它的大小始终一致?

我确实尝试查看 mkswap.c 源代码,但我的 C 语言知识不足以理解它。具体来说,我思考以下行写出交换标头:

strncpy((char*)signature_page+PAGE_SIZE-10,"SWAP-SPACE",10);

答案1

我可以看到 O'Reilly 的 Bovet 和 Cesati 女士撰写的“Understanding the Linux Kernel”,第 714 页(交换区),提供了这个问题的答案。换句话说,swap_header 由两个结构组成:“info”和“magic”。我上面粘贴的代码与神奇部分相关 - 它字面上写出“SWAP-SPACE”作为第一页的最后 10 个字符(在某些版本中它是“SWAPSPACE2”)。

信息结构在前 1024 个字节之后开始,并具有各种字段来描述交换机制。

答案2

对于我们这些仍然好奇 swapon 在交换分区中实际写入什么的人来说。以下是我的做法以及您可以如何检查自己:

dd if=/dev/zero of=/hdd/myswap bs=1K count=40
mkswap /hdd/myswap
hexdump -C /hdd/myswap

结果:

00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000400  01 00 00 00 09 00 00 00  00 00 00 00 22 e8 83 6e  |............"..n|
00000410  88 06 4a 0b 83 bc 12 44  8e 3e a3 e0 00 00 00 00  |..J....D.>......|
00000420  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000ff0  00 00 00 00 00 00 53 57  41 50 53 50 41 43 45 32  |......SWAPSPACE2|
00001000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0000a000

它只是将标头写入指定的区域。

相关内容