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"이라는 두 가지 구조로 구성됩니다. 위에 붙여넣은 코드는 매직 부분과 관련이 있습니다. 문자 그대로 첫 페이지의 마지막 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

단지 지정된 영역에 헤더를 씁니다.

관련 정보