저는 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"이라는 두 가지 구조로 구성됩니다. 위에 붙여넣은 코드는 매직 부분과 관련이 있습니다. 문자 그대로 첫 페이지의 마지막 10자로 "SWAP-SPACE"를 씁니다(일부 버전에서는 "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
단지 지정된 영역에 헤더를 씁니다.