가상 메모리 스왑 파일을 다른 드라이브 나 파티션으로 옮기려면 어떻게해야합니까?


33

참고 : 이것은얼마 전 슈퍼 유저에게 물었던 질문 입니다. 여기에 속한다고 생각하기 때문에 여기에 다시 게시하고 있습니다.

기본적으로 Mac OS X은 스왑 파일을에 저장합니다 /private/var/vm/. 스왑 파일을 다른 위치에 배치하고 싶습니다. 어떻게 할 수 있습니까?


/private/var/vm/sleepimage수퍼 유저에 대한 추가 고려 사항 : / private / var / vm 디렉토리를 OS X Lion의 다른 볼륨에 심볼릭 링크해야합니까? (2011-09-20) – 외부 스왑 파일과 절전 이미지에 동일한 별도의 볼륨을 사용하지 않는 것이 좋습니다.
Graham Perrin

dynamicpagerwrapper ( 출처 : dynamic_pager_wrapper ) – OSX에서 / sbin / dynamic_pager의 성능 래퍼
Graham Perrin

답변:


23

참고 : 수퍼 유저에서 복사 :

이전 버전의 OSX 는 forums.macosxhints.com 에서이 스레드 를 참조하십시오 .

크레딧은 dblu 를 사용하여 설명하고 plutil, ZILjrwait4path명령 을 소개하고 , ekl 은 중간 쉘 스크립트가 필요하지 않으므로 전체를 단순화합니다.

완벽한 솔루션 :

1. 터미널을 열고 Apple의 기본 dynamic_pager.plist의 백업 사본을 만듭니다.

$ cd /System/Library/LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist{,_bak}

2. plist를 2 진에서 일반 XML로 변환하십시오.

$ sudo plutil -convert xml1 com.apple.dynamic_pager.plist

3. 선택한 텍스트 편집기로 변환 된 plist를 엽니 다. (나는을 사용하고 pico,를 사용하는 예제는 dblu의 답변을 참조하십시오 vim) :

$ sudo pico -w com.apple.dynamic_pager.plist

다음과 같이 보일 것입니다 :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs$
<plist version="1.0">
<dict>
    <key>EnableTransactions</key>
    <true/>
    <key>HopefullyExitsLast</key>
    <true/>
    <key>Label</key>
    <string>com.apple.dynamic_pager</string>
    <key>OnDemand</key>
    <false/>
    <key>ProgramArguments</key>
    <array>
        <string>/sbin/dynamic_pager</string>
        <string>-F</string>
        <string>/private/var/vm/swapfile</string>
    </array>
</dict>
</plist>

4.wait4path dynamic_pager를 시작하기 전에 쉘 명령 을 사용하도록 ProgramArguments 배열 (13 행에서 18 행)을 수정하십시오 . 이것이 필요한 이유에 대한 자세한 내용은 참고 # 1을 참조하십시오. 다음 예에서 내 파티션은이며 Swap스왑 파일을 해당 파티션의 숨겨진 디렉토리에 저장하기로 선택했습니다 . .vm 지정한 디렉토리가 실제로 존재하는지 확인하십시오 . XML은 다음과 같아야합니다.

<key>ProgramArguments</key>
<array>
    <string>/bin/bash</string>
    <string>-c</string>
    <string>/bin/wait4path /Volumes/Swap/ &amp;&amp;
/sbin/dynamic_pager -F /Volumes/Swap/.vm/swapfile</string>
</array>

5. plist를 저장하고 터미널 프롬프트로 돌아가십시오. 를 사용 pico하면 명령은 다음과 같습니다.

<ctrl+o> to save the file
<enter>  to accept the same filename (com.apple.dynamic_pager.plist)
<ctrl+x> to exit

6. 바이너리의 수정 PLIST 다시 변환 :

$ sudo plutil -convert binary1 com.apple.dynamic_pager.plist

7. Mac을 재시동하십시오. 문제가 발생하면 시동 차임 직후 Command-v를 길게 눌러 상세 시동 모드로 전환하십시오. 그러면 시작 중에 나타나는 모든 시작 메시지가 표시됩니다. 더 심각한 문제가 발생하면 (예 : 로그인 화면이 표시되지 않음) Command-s를 누르십시오. 이렇게하면 컴퓨터가 단일 사용자 모드 (그래픽 UI, 명령 프롬프트 만)로 부팅되고 1 단계에서 만든 com.apple.dynamic_pager.plist의 백업 복사본을 복원 할 수 있습니다.

8. 컴퓨터가 부팅되면 터미널을 시작하고 스왑 파일이 실제로 이동되었는지 확인하십시오.

$ cd /Volumes/Swap/.vm
$ ls -l

다음과 같이 보일 것입니다 :

-rw-------  1 someUser  staff  67108864 18 Sep 12:02 swapfile0

9. 이전 스왑 파일을 삭제하십시오.

$ cd /private/var/vm
$ sudo rm swapfile*

10. 이익!

참고 1

사용 wait4path하지 않고 plist에서 인수를 dynamic_pager로 수정하는 것이 항상 작동 하는 것은 아니며 실패하면 아주 조용하게 수행됩니다. 이 문제는 dynamic_pager가 시작 프로세스 초기에 시작된다는 사실에서 비롯됩니다. dynamic_pager가 처음로드 될 때 스왑 파티션이 아직 마운트되지 않은 경우 (제 경험상 99 %의 시간이 소요됨) 시스템이 위조됩니다. 스왑 파티션과 이름이 같지만 기본 스왑 파일 위치 (/ private / var / vm)를 가리키는 심볼릭 링크가 / Volumes 디렉토리에 생성됩니다. 그런 다음 실제 스왑 파티션이 마운트되면 이름 Swap 1(또는 YourDriveName 1)이 지정됩니다. 터미널을 열고 / Volumes 디렉토리의 내용을 나열하여 문제를 확인할 수 있습니다.

$ cd /Volumes
$ ls -l

다음과 같은 것을 보게 될 것입니다 :

drwxrwxrwx  11 yourUser  staff   442 16 Sep 12:13 Swap -> private/var/vm
drwxrwxrwx  14 yourUser  staff     5 16 Sep 12:13 Swap 1 
lrwxr-xr-x   1 root      admin     1 17 Sep 12:01 System -> /

이 실패는 확인하기가 매우 어려울 수 있습니다 . 12 단계에서 표시 한대로 스왑 파일을 확인 했다면 여전히 스왑 파일을 볼 수 있습니다 ! 심볼릭 링크는 스왑 파일이 실제로 기본 위치에 저장되어 있어도 스왑 파일이 이동 된 것처럼 보입니다.

노트 2

com.apple.dynamic_pager.plist가 이진 형식으로 저장 되었기 때문에 원래 Snow Leopard에서이 기능을 사용할 수 없었습니다. 원본 파일의 사본을 만들어 Apple의 속성 목록 편집기 (Xcode에서 사용 가능)로 파일을 열어 변경했지만이 프로세스는 plist 파일에 일부 확장 된 속성을 추가하여 시스템에서이를 무시하고 기본값을 사용했습니다. . dblu가 지적했듯이 plutil파일을 일반 XML로 변환하는 데 사용 하면 매력처럼 작동합니다.

노트 3

dynamic_pager_init가 화면에 에코하는 메시지를 확인하기 위해 콘솔 응용 프로그램을 확인할 수 있습니다. 다음 줄이 반복해서 반복되는 경우 설정에 문제가있는 것입니다. dynamic_pager_init에 지정한 '.vm'디렉토리를 생성하는 것을 잊었 기 때문에 이러한 메시지가 표시되었습니다.

com.apple.launchd[1]  (com.apple.dynamic_pager[176]) Exited with exit code: 1
com.apple.launchd[1]  (com.apple.dynamic_pager) Throttling respawn: Will start in 10 seconds

모든 것이 제대로 작동하면 위의 메시지가 몇 번만 표시되고 "스로틀 링 재생성"메시지가 더 이상 표시되지 않을 수 있습니다. 이는 시스템이 파티션이로드 될 때까지 기다려야했지만 결국 성공했음을 의미합니다.

Time Machine에서 경로 제외

OS X 10.7 이상에서는 tmutil을 사용 하여 이를 수행 할 수 있습니다 . 예:

sudo tmutil addexclusion -p /Volumes/Swap/.vm

이 예에서 결과를 검토하려면 다음을 수행하십시오.

tmutil isexcluded /Volumes/Swap && tmutil isexcluded /Volumes/Swap/.vm

스왑에 사용 된 볼륨을 인덱싱 할 필요가없는 경우

mdutil을 사용 하십시오 . 예를 들어, 상점을 끄고 지우려면 다음을 수행하십시오.

sudo mdutil -i off /Volumes/Swap && sudo mdutil -E /Volumes/Swap


다음에 질문 / 답변을 연결하면 각 답변 옆에 '링크'버튼이 있습니다. ;)
Martin Marconcini

2
이 질문의 맨 위에는 수퍼 유저 질문에 대한 링크가 있습니다. SuperUser의 "the"답변에 직접 연결되지 않았습니다. 왜냐하면 다른 답변의 일부로 구성 되었기 때문입니다. 그러나이 답변의 두 번째 단락에서 각 부분 답변에 대한 링크를 추가했습니다 (이 편리한 "링크"버튼 사용). 더 많은 링크를 원하십니까? ;)
e.James

2
나는 그것이 여기에있는 것을 좋아한다… 나는 그것을 항상 참조한다 ..
alex grey

이것은 10.10.3에서 나에게 실패합니다 .plist를 사용하지 않는 것 같습니다.
aramis

2
El Capitan에서는 새로운 시스템 무결성 보호 기능으로 스왑을 지우려고 시도 할 수 없습니다. /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist : 시스템 무결성 보호가 활성화 된 동안에는 작업이 허용되지 않습니다. <br> 복구 파티션으로 부팅 한 다음 유틸리티 메뉴에서 보안 구성을 선택하십시오. Enforce System Integrity Protection의 선택을 해제하고 Apply Configuration (구성 적용)을 클릭 한 후 다시 시작할 수 있습니다.
Meetai.com

4

부팅시 10.10이 더 이상 /etc/.rc를 사용하지 않고 com.apple.dynamic_pager.plist 메소드가 실패했기 때문에 영구적 인 시스템 부팅 솔루션을 설정할 수 없었습니다.

sudo mkdir /Volumes/Swap/s
sudo chmod 755 /Volumes/Swap/s
sudo sysctl vm.swapfileprefix=/Volumes/Swap/s

보고 된대로 저장된 접두사를 변경합니다.

sysctl vm

세션이 지속되는 동안 재부팅 후에도 지속됩니다.

이것은 텍스트 파일에 유닉스 명령으로 래핑 될 수 있습니다 :

$/bin/sh
sysctl vm.swapfileprefix=/Volumes/Swap/s

로그인하면 실행됩니다.


-1

간단한 해결책 :

http://www.macupdate.com/app/mac/10771/swap-relocator

SwapRelocator 1.1.2는 Maverick에서 잘 작동합니다!

(예를 들어) Tinker Tool System을 사용하여 로그인 전에 볼륨을 마운트하면 내가 겪은 유일한 문제를 해결할 수 있습니다.

(Filippo에게 감사합니다. 스왑을 미러링 된 부팅 볼륨에서 스트라이프 캐시 볼륨 (모든 SSD)으로 옮길 수 있습니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.