<!doctype linuxdoc system> <article> <title> SHARING SWAP SPACES BETWEEN LINUX AND MS-WINDOWS <author> H. Peter Anvin <url url="mailto: hpa@yggdrasil.com" name="hpa@yggdrasil.com" ><date>VERSION: 1.3 Date: 19 Jun 1995 <trans> 번역 이윤수 <url url="mailto: seyon@nownuri.net" name="seyon@nownuri.net"> <url url="mailto: c9644168@enter.soongsil.ac.kr" name="c9644168@enter.soongsil.ac.kr" > <tdate> 날짜:1997년 12월 28일 <toc> <sect> 개요<p> 많은 사람들이 리눅스와 윈도우즈를 둘다 사용한다. 그러한 행동 (즉: 사람들이 규격품으로 실행할수 있는 소프트웨어를 사용하는 동안 리눅스로하는 실험 그리고 리눅스에 열중하는 활동)을 하는것은 리눅스의 대변화의 중요한 부분이다. 리눅스와 윈도우즈가 디스크 스왑으로 가상 메모리를 사용한 이래로, comp.os.linux.setup에 빈번히 발생한 질문이 바로 필요한 disk공간의 양을 줄이기 위한 스왑 공간의 공유 방법이다. 스왑 공간을 공유하는 여러 가지 방법이 있는데, 이문서에서 기술되는 하나는 아마도 가장 복잡한 것일지 모르지만 최대의 수행 능력을 가지고 디스크 파티션을 망가뜨리는 위험이 없는 내가 알고 있는 유일한 방법이다. 주의: 만약 이 문서의 이전 버전을 사용하고 스왑공간으로 복구되지 않는 문제가 있으면 (아마 윈도우즈가 당신의 영구 스왑화일이 잘못되었다고 알릴 것이다), 이 버전에서 shutdown script를 약간 수정해야 한다. </p> <sect> 필요한것 <p> 이 과정에서 충족해야 할 몇가지 조건이 있다. 이전 버전은 약간의 문제가 있으므로 나는 이러한 요구 조건을 *어쨌든* 충족시키기를 강력히 충고한다. <verb> * MS-DOS 5.0 혹은 상위 버전 * MS-Windows 3.1 혹은 상위 버전 * 셧다운시 파일을 실행할 것을 알리는 shutdown/init </verb> (SysVinit-2.50 는 이를 할수 있고, 예를 들어 SysVinit-2.50는 /pub/Linux/system/Daemons에 있는 sunsite.unc.edu로부터 사용할 수 있다. 현재 거의 모든 배포본이 이 패키지를 이용한다. </p> <sect> 절차 <p> <itemize> <item> 도스로 부팅. size=원하는 만큼의 swap공간으로 도스 파티션을 생성 (FDISK 이용). "LABEL X:" 혹은 "COPY FOO X:DUMMY.DAT" 같은 명령어에서 X로 표시된 부분을 드라이브 문자로 할당 받을것이다. <item> 도스의 포맷 명령을 이용하여 파티션을 포맷한다. FORMAT X: <item> 도스의 LABEL명령을 이용하여 이 파티션의 volume label을 SWAP SPACE로 설정하라. DIR명령으로 이를 확인하라. 부디 별도의 단계로서 이를 하도록 하여라. 몇몇 FORMAT의 버전은 부트섹터에 volume label을 넣지 못할지도 모른다. [경고: 몇몇 사람들은 volume label이 루트 디렉토리에 저장된다고 말하라고 합니다. 맞는 말이지만, 최소한 도스 5.0이후로는 boot sector에 쓰여집니다. LABEL X: DIR X: <item> 윈도우를 시작한다. 제어판으로 가서 386 Enhanced를 선택한후 가상메모리를 선택하고 drive X:에 최대 크기의 (윈도우가 최대 크기를 알려 줄 것이다.) 윈도우의 영구 스왑화일을 생성하라. 윈도우가 지나치게 큰 파일은 사용할수 없다고 불평할지도 모른다. <item> 윈도우를 빠져나간다. <item> 리눅스로 부팅한후 루트로 로그인한다. <item> 파티션의 이름과 블록의 크기를 찾기위해서 fdisk명령어를 이용한다. /dev/winswap으로부터 이 파티션에 symbolic link를 생성한다. 만약 파티션이 hda7이면 다음을 type하라. ln -s /dev/hda7 /dev/winswap [순수하도록 주의: 부디 symlink를 이용하라. 이 파티션의 이름은 몇몇 설정 파일로 갈것이고, 불일치는 치명적일수 있다. <item> 다음은 파티션을 분석한 그리고 몇가지 특별한 정보로부터 얻어진 uuencode된 binary이다. 다음 파일을 uudecode하고 gunzip하고 다음과 같이 실행하라. msinfo /dev/winswap begin 755 msinfo.gz "Total special sectors" 라고 하는 부분의 숫자를 기록해두고, volume label이 SWAP SPACE인지 검증하라. 만약 그렇지 않으면 도스로 재부팅하고 LABEL 명령을 다시 실행시켜라. 만약 여전히 작동하지 않는다면 당신이 사용중인 도스의 버전에 대해 나에게 알려주면, 당신을 돕도록 노력할 것이다. <item> [선택 과정[ 윈도우는 때때로 이 파티션에 약간의 공간을 남길지도 모른다. 이 공간을 사용하려 하지 마라. 왜냐면 당신이 리눅스를 실행할 때 언제든 지워질수도 있다. 만약 그것을 갑자기 사용하는 것 (그리고 data를 잃는 것) 을 막으려면, 당신은 다음 명령어를 이용하여 공간을 채우는 dummy file을 만들어야 한다: <verb> mkdir /mnt mount -t msdos /dev/winswap /mnt dd if=/dev/zero of=/mnt/dummy.fil umount /mnt </verb> dd명령어는 남은 용량이 없다고 알릴 것이다. 이것이 바로 우리가 원하는 것이다. <item> 셧다운 파일의 이름을 확인하라. SysVinit에서 이것은 /etc/inittab의 다음 라인에 나열되는 파일이다. 만약 그것이 없으면 덧붙여라. # Runlevel 0 means shut down the system l0:0:wait:/etc/brc 이 파일의 나머지 부분에서 파일이름이 /etc/brc였다고 가정할 것이다. <item> 다음을 타이프하라. dd if=/dev/winswap bs=512 count=XXX | gzip -9 > /etc/winswap.gz ^^^ ... XXX를 "Total special sectors" 숫자로 대체하라. <item> 다음의 /etc/rc파일을 code의 다음 부분에 덧붙이고,( init가 그것을 호출하건간에), "swapon -a" 명령어 앞을 정정하라. (만약 그러한 명령어가 없으면 아무 mount 명령어 앞을 정정하라.) 만약 /etc/rc.d 디렉토리가 있으면, 여기에 넣기를 원하는 파일은 /etc/rc.d/rc.S 혹은 /etc/rc.d/rc/boot로 호출되어야 한다. 만약 swapon이 /etc에 있으면 /sbin/swapon을 /etc/swapon으로 대체하라. 만약 그것이 /bin에 있으면 /bin/swapon으로 대체하라. mkswap에 대해서도 똑같이 하라. XXXXX를 fdisk에 주어진대로 블록의 실제 파티션 크기로 대체하라. <code> ---[BEGIN CODE SEGMENT]--- # # 스왑 공간을 검증하고 초기화 # echo -n 'Verifying swap space... ' if [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=10 skip=4086`" \ = 'SWAP-SPACE' ]; then echo 'Linux signature found' /sbin/swapon /dev/winswap elif [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=11 skip=43`" \ = 'SWAP SPACE ' ]; then echo 'DOS signature found' /sbin/mkswap /dev/winswap XXXXX /sbin/swapon /dev/winswap else echo 'No signature found' echo 'ERROR: Will not swap' fi ---[END CODE SEGMENT]--- </code> <item> 다음의 코드를 /etc/brc파일에 덧붙여라.(/etc/rc.d디렉토리가 있으면 /etc/rc.d/rc.0 혹은 /etc/rc.d/rc.halt가 호출되든간에); 스왑이 필요한 어떤 명령어 뒤에 이것을 넣어라. <code> ---[BEGIN CODE SEGMENT]--- # # Terminate swapping and restore DOS/Windows swap info # /sbin/swapoff /dev/winswap if [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=10 skip=4086`" \ = 'SWAP-SPACE' ]; then echo 'Restoring DOS/Windows swap info' /bin/zcat /etc/winswap.gz > /dev/winswap else echo 'ERROR: /dev/winswap lacks swap signature, skipping restore' fi ---[END CODE SEGMENT]--- </code> <item> 리눅스를 재부팅하라. 당신은 지금 새로운 스왑 장치에 스왑을 하고 있을 것이다. </itemize> </p> <sect> 몇가지 주의 사항<p> <itemize> <item> /dev/winswap을 /etc/fstab화일에 덧붙일 필요는 없다. 사실, 아마 그렇게 하는 것이 현명하지 않을 것이다.(주석으로 가능한 것은 제외하고) <item> 만약 리눅스 session이 망가지면 혹은 /etc/brc를 실행하지 않고 끝내면, windows에서 스와핑(swapping)이 작동하기에 앞서 리눅스를 재부팅하고 끝내는 것이 필요하다. FORMAT X: 또한 가능하고, 윈도우즈 스왑화일을 다시 만드는 것이 가능하다. 이러한 때에 유일한 방법은 도스의 AUTOEXEC.BAT 파일에서 /etc/brc와 동일한 명령어를 넣는 것이다. 불행히도 나는 도스에서 그렇게 하는 법은 모른다. <item> 만약 도스의 FDISK가 "logical DOS drive"로서 파티션을 알린다면 그것은 5(/dev/hda5) 혹은 그 이상이 될 것이다. 4혹은 그 이하의 수를 갖는 "extended"라고 이름 붙여지는 파티션이 *아니다*. 만약 리눅스의 fdisk가 logical partition을 표시하지 않으면 당신은 리눅스의 깨진 fdisk를 가지고 있는 것이다. (예를들어, 슬랙웨어 2.2는 깨진 fdisk를 포함하고 있다.) 만약 당신이 그러한 배포본을 가지고 있으면 "cfdisk"로 시도할수도 있고 혹은 제대로 작동하는 fdisk를 얻어야만 한다. <item> 만약 msinfo를 실행할 때 floating point exception이 있으면 당신은 거의 잘못된 파티션에서 실행하는 것이다. 위의 주의 사항을 잘 보도록 하라. <item> 부디 당신이 올바르게 스크립트를 복사한것을 확인하고 또 재확인하지 않았다면 나에게 메일을 보내지 말라. 이 미니하우투에서 알려진 절반 이상의 문제는 스크립트를 복사할 때 오자때문이었다. (될 수 있으면 cut-and-paste를 이용하라.) </itemize> </p> </article>