Consegui mover os arquivos de troca de memória virtual da Apple para uma partição dedicada no meu disco rígido até agora. A técnica que estou usando é descrita em um tópico no forums.macosxhints.com.
No entanto, com a visualização do desenvolvedor do Snow Leopard, esse método não funciona mais. Alguém sabe como isso poderia ser feito com o novo sistema operacional?
Update: Eu marquei a resposta de dblu como aceite, mesmo que não muito trabalho, porque ele deu instruções excelentes, detalhado e porque sua sugestão para usar plutil
em última análise, apontou-me na direção certa. A solução completa e útil está postada aqui na pergunta porque não tenho reputação suficiente para editar a resposta aceita.
Atualização 2: Foi alterado o procedimento para ilustrar a técnica do ekl , que simplifica bastante a coisa toda, eliminando a necessidade de um script de shell intermediário:
Solução completa:
1.
Abra o Terminal e faça uma cópia de backup do dynamic_pager.plist padrão da Apple:
$ cd /System/Library/LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist{,_bak}
2.
Converta o plist de binário em XML simples:
$ sudo plutil -convert xml1 com.apple.dynamic_pager.plist
3.
Abra o plist convertido com o seu editor de texto de sua escolha. (Eu uso pico
, veja a resposta do dblu para um exemplo usando vim
):
$ sudo pico -w com.apple.dynamic_pager.plist
Deve ter a seguinte aparência:
<?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.
Modifique a matriz ProgramArguments (linhas 13 a 18) para usar o comando shell wait4path (conforme sugerido pelo ZILjr ) antes de iniciar o dynamic_pager. Veja a nota 1 para detalhes sobre por que isso é necessário. No exemplo a seguir, minha partição é chamada 'Swap' e escolhi colocar os arquivos de swap em um diretório oculto nessa partição, chamada '.vm', para ter certeza de que o diretório especificado realmente existe . O XML deve ter a seguinte aparência:
<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.
Salve o plist e retorne ao prompt do terminal. Usando pico
, os comandos seriam:
<ctrl+o> to save the file
<enter> to accept the same filename (com.apple.dynamic_pager.plist)
<ctrl+x> to exit
6.
Converta o plist modificado novamente em binário:
$ sudo plutil -convert binary1 com.apple.dynamic_pager.plist
7.
Reinicie o seu Mac. Se você tiver problemas, alterne para o modo de inicialização detalhado, mantendo pressionada a tecla Command-v imediatamente após o toque de inicialização. Isso permitirá que você veja todas as mensagens de inicialização que aparecem durante a inicialização. Se você tiver problemas ainda piores (ou seja, nunca verá a tela de login), mantenha pressionada a tecla Command-s. Isso inicializará o computador no modo de usuário único (sem interface gráfica do usuário, apenas um prompt de comando) e permitirá restaurar a cópia de backup de com.apple.dynamic_pager.plist que você fez na etapa 1.
8.
Depois que o computador inicializar, inicie o Terminal e verifique se os arquivos de troca foram realmente movidos:
$ cd /Volumes/Swap/.vm
$ ls -l
Você deve ver algo assim:
-rw------- 1 someUser staff 67108864 18 Sep 12:02 swapfile0
9.
Exclua os arquivos de troca antigos:
$ cd /private/var/vm
$ sudo rm swapfile*
10.
Lucro!
Nota 1
Modificar os argumentos para dynamic_pager no plist sem usar wait4path
nem sempre funciona e, quando falha, ocorre de maneira espetacularmente silenciosa. O problema decorre do fato de o dynamic_pager ser iniciado muito cedo no processo de inicialização. Se sua partição de troca ainda não foi montada quando o dynamic_pager é carregado pela primeira vez (na minha experiência, isso acontece 99% do tempo), o sistema irá falsificar seu caminho. Ele criará um link simbólico no diretório / Volumes que tem o mesmo nome que sua partição de troca, mas aponta para o local padrão do arquivo de troca (/ private / var / vm). Então, quando sua partição de troca real for montada, ele receberá o nome Swap 1
(ou YourDriveName 1
). Você pode ver o problema abrindo o Terminal e listando o conteúdo do seu diretório / Volumes:
$ cd /Volumes
$ ls -l
Você verá algo assim:
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 -> /
Observe que essa falha pode ser muito difícil de detectar. Se você fosse procurar os arquivos de troca como mostro na etapa 12, ainda os veria ! O link simbólico faria parecer que seus arquivos de troca foram movidos, mesmo que eles estivessem realmente sendo armazenados no local padrão.
Nota 2
Inicialmente, não consegui fazer isso funcionar no Snow Leopard porque o com.apple.dynamic_pager.plist estava armazenado em formato binário. Fiz uma cópia do arquivo original e abri-o com o Editor de lista de propriedades da Apple (disponível com o Xcode) para fazer alterações, mas esse processo adicionou alguns atributos estendidos ao arquivo plist, o que fez com que o sistema o ignorasse e apenas usasse os padrões . Como o dblu apontou, usar plutil
para converter o arquivo em XML simples funciona como um encanto.
Nota 3
Você pode verificar o aplicativo Console para ver as mensagens que dynamic_pager_init ecoam na tela. Se você vir as seguintes linhas repetidas vezes sem conta, há um problema com a instalação. Encontrei essas mensagens porque esqueci de criar o diretório '.vm' especificado em dynamic_pager_init.
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
Quando tudo estiver funcionando corretamente, você poderá ver a mensagem acima apenas algumas vezes e, em seguida, não haverá mais as mensagens "Aceleração do reaparecimento". Isso significa que o sistema precisou esperar o carregamento da partição, mas no final foi bem-sucedida.
wait4path
exigidas pelo estado protegido) , mas encontrei uma não solução, graças ao que o Applicorn's Xupport modificado para mim. Vou postar uma resposta completa assim que descobrir como, mas o mais curto é mudar o último argumento do programa para apenas o novo caminho (por exemplo <string>/Volumes/swap/.vm/swapfile</string>
), alterar a OnDemand
chave para <true/>
e adicionar uma StartOnMount
chave ao final com um valor de <true/>
. PS Esta solução funciona bem no Lion (pelo menos para mim).