私は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
指定された領域にのみヘッダーを書き込みます。