참고 : 이것은얼마 전 슈퍼 유저에게 물었던 질문 입니다. 여기에 속한다고 생각하기 때문에 여기에 다시 게시하고 있습니다.
기본적으로 Mac OS X은 스왑 파일을에 저장합니다 /private/var/vm/
. 스왑 파일을 다른 위치에 배치하고 싶습니다. 어떻게 할 수 있습니까?
참고 : 이것은얼마 전 슈퍼 유저에게 물었던 질문 입니다. 여기에 속한다고 생각하기 때문에 여기에 다시 게시하고 있습니다.
기본적으로 Mac OS X은 스왑 파일을에 저장합니다 /private/var/vm/
. 스왑 파일을 다른 위치에 배치하고 싶습니다. 어떻게 할 수 있습니까?
답변:
참고 : 수퍼 유저에서 복사 :
이전 버전의 OSX 는 forums.macosxhints.com 에서이 스레드 를 참조하십시오 .
크레딧은 dblu 를 사용하여 설명하고 plutil
, ZILjr 은 wait4path
명령 을 소개하고 , 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/ &&
/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
모든 것이 제대로 작동하면 위의 메시지가 몇 번만 표시되고 "스로틀 링 재생성"메시지가 더 이상 표시되지 않을 수 있습니다. 이는 시스템이 파티션이로드 될 때까지 기다려야했지만 결국 성공했음을 의미합니다.
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
;)
부팅시 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
로그인하면 실행됩니다.
간단한 해결책 :
http://www.macupdate.com/app/mac/10771/swap-relocator
SwapRelocator 1.1.2는 Maverick에서 잘 작동합니다!
(예를 들어) Tinker Tool System을 사용하여 로그인 전에 볼륨을 마운트하면 내가 겪은 유일한 문제를 해결할 수 있습니다.
(Filippo에게 감사합니다. 스왑을 미러링 된 부팅 볼륨에서 스트라이프 캐시 볼륨 (모든 SSD)으로 옮길 수 있습니다)
/private/var/vm/sleepimage
수퍼 유저에 대한 추가 고려 사항 : / private / var / vm 디렉토리를 OS X Lion의 다른 볼륨에 심볼릭 링크해야합니까? (2011-09-20) – 외부 스왑 파일과 절전 이미지에 동일한 별도의 볼륨을 사용하지 않는 것이 좋습니다.