我正在研究 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
它只是将标头写入指定的区域。