mkswapはどのように機能しますか?それが生成する交換ヘッダには何がありますか?

mkswapはどのように機能しますか?それが生成する交換ヘッダには何がありますか?

私はmkswapを勉強し、それが正確にどのように機能するかを理解しようとしています。私が理解したのは、スワップヘッダを作成してパーティションにスワップスペースを設定することです。このスワップヘッドはどれくらい大きいですか?ワンピースですか?それとも常に同じサイズですか?

私はmkswap.cソースコードを見ようとしましたが、Cの知識が不足しているため理解できませんでした。具体的には考える次の行は交換ヘッダーを作成します。

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

答え1

BovetとCesatiが書いたO'Reillyの「Linuxカーネルの理解」(714ページ)(スワップ領域)がこの質問に対する答えを提供していることがわかります。つまり、swap_header は、「info」と「magic」の 2 つの構造で構成されます。上に貼り付けたコードはマジック部分に関連しています。文字通り、最初のページの最後の10文字として「SWAP-SPACE」を書き込みます(一部のバージョンでは「SWAPSPACE2」)。

情報構造は最初の1024バイト以降に開始され、交換メカニズムを説明するさまざまなフィールドが含まれています。

答え2

スワポンが実際にスワップパーティションに何を書いているのか疑問に思っている人のために。私がした方法と直接確認する方法は次のとおりです。

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

指定された領域にのみヘッダーを書き込みます。

関連情報