Como configurar o espaço de troca?

114

O Raspberry Pi possui apenas 256 MB de RAM, então eu gostaria de usar o espaço de troca (no cartão SD ou no armazenamento USB conectado). Como faço para configurá-lo?


fonte
10
A troca no Pi (e dispositivos semelhantes) pode ser dolorosamente lenta, e qualquer coisa que realmente acabe usando o swap extensivamente praticamente trará o sistema a uma parada. Cuidado!
MattJ
1
Você sabe o que seria bom é uma unidade de RAM USB (não flash ou SSD, mas um chip ram volátil real rodando a velocidades USB) Seria bom para uma troca como essa muito boa.
Piotr Kula
3
@ Tibib A questão é "Como configurar o espaço de troca?" Na minha opinião, uma resposta correta deve descrever como fazê-lo, bem como chamar a atenção para algumas armadilhas e alertar contra o uso indevido. A sua resposta faz exatamente isso, enquanto a resposta "mais popular" só lhe diz por que você nunca deve "fazer isso em tudo" (que é mudo, porque existe uma maneira correta de usá-lo, e ele realmente é útil).
Andrew Larsson
1
Há cerca de um milhão de avisos contra o uso de swap com um raspberry pi nesta página, mas se você precisar criar algo uma vez, é inevitável.
Archonic 17/08/2015
1
@Archonic - +1 . Fico sem memória ao compilar arquivos de vez em quando. Um pequeno arquivo de troca com uma baixa troca será uma melhoria em relação à situação atual.
JWW

Respostas:

134

O Raspbian usa o dphys-swapfile , que é uma solução baseada em arquivo de troca, em vez da solução "padrão" baseada em partição de troca. É muito mais fácil alterar o tamanho da troca.

O arquivo de configuração é:

/etc/dphys-swapfile 

O conteúdo é muito simples. Por padrão, meu Raspbian tem 100 MB de swap:

CONF_SWAPSIZE=100

Se você deseja alterar o tamanho, modifique o número e reinicie o dphys-swapfile:

/etc/init.d/dphys-swapfile restart

Edit: No Raspbian, o local padrão é / var / swap, que (é claro) está localizado no cartão SD. Eu acho que é uma péssima idéia, gostaria de salientar que o arquivo / etc / dphys-swapfile também pode ter a seguinte opção: CONF_SWAPFILE = / media / btsync / swapfile

Eu só tenho problema com isso, o armazenamento USB é montado automaticamente, então uma corrida em potencial aqui (montagem automática vs. swapon)

asalamon74
fonte
2
Essa é a resposta correta. Nenhuma das outras respostas mencionou o arquivo dphys-swap.
Kenji Noguchi
1
Voto esta resposta como realmente correta. Aprendi tudo dessa maneira difícil recentemente, sua resposta poderia me poupar muito tempo. ;-)
Drachenfels 17/02
Você poderia esclarecer por que usar /var/swapé uma má ideia?
Andrey Portnoy
para instalar pacotes R, que falharam antes devido a "falha na chamada do sistema não pode alocar memória": Defina CONF_SWAPSIZE = 1024. Menos não é suficiente.
vertikalist 15/03
36

Você pode configurar o espaço de troca de maneira simples. Por exemplo, se sua unidade USB for /dev/sdx, você usaria (você deve ser o root para isso):

$ mkswap /dev/sdx
$ swapon /dev/sdx

Observe que isso usaria o dispositivo inteiro e você provavelmente perderá todos os dados existentes nele.

Você também pode criar um arquivo de troca (usando um loopdispositivo) como este:

$ dd if=/dev/zero of=/path/to/swapfile bs=1M count=1024 # For 1GB swap file
$ mkswap /path/to/swapfile
$ swapon /path/to/swapfile

Quando você não precisar mais do arquivo de troca (se quiser ejetar a unidade USB, por exemplo), deverá usá-lo swapoff <device>. Não fazer isso provavelmente resultará em falha do sistema.

Você deve ter cuidado, porém . Os cartões SD têm limites limitados de leitura / gravação e diminuirão sua vida útil. Se você estiver usando um disco rígido externo, tudo bem, mas será muito lento.

Andrew Larsson
fonte
2
Por que adicionar o loopback? Certamente isso não é necessário?
popey
Você está certo, não é. Eu editei a resposta para refletir isso.
2
Eu acho que você deve alterar isso para evitar que os usuários copiem, colem e executem acidentalmente mkswapna partição raiz. Eu acho que sdxé uma boa convenção.
Jivings
3
Os usuários que optarem por ativar o SWAP podem estar interessados ​​em ajustar a troca do kernel .
earthmeLon
@earthmelon O Raspbian Jessie tem a swappiness 1 por padrão.
Kaay
32

Não faça isso de jeito nenhum.

Você não deve ativar a troca no Raspberry Pi.

Embora seja possível, não é útil. Mesmo em um cartão SDHC classe 10, é muito lento. Além disso, você reduzirá a vida útil do cartão SD.

Em qualquer dispositivo de armazenamento baseado em flash (cartões SD, SDD, pen drives USB), também é provável que você veja pausas em todo o sistema enquanto um grande grupo de blocos flash é apagado.

Possíveis exceções:

  • Se você conectar um disco rígido (magnético) (embora seja um adaptador USB-SATA ou USB-IDE)
  • Se você usa o ZRAM ou algo semelhante
finnw
fonte
3
sem dúvida, a troca em um bey USB matará sua chave muito rapidamente, a troca no cartão SD também é perigosa, mesmo que os cartões SD mais novos (classe 10) possam suportá-lo melhor. ZRAM é claramente o caminho a percorrer se você precisar de mais RAM
neofutur
1
Você pensaria que, com a tecnologia ReadyBoost no Windows, alguém criaria uma unidade USB (ou eSata, não tenho certeza se o ReadyBoost pode usá-lo, seria inútil para o raspberry pi, mas seria interessante) que usasse a RAM real para que você pudesse aumentar o desempenho do seu computador. Embora provavelmente seja mais fácil e barato comprar apenas uma nova placa-mãe que suporte a quantidade de RAM necessária.
Kibbee
33
Por que essa resposta tem tantos votos positivos? Existem muitas razões para usar o swap. Usei um arquivo de troca em uma unidade externa para compilar uma grande biblioteca ao longo de alguns dias. É lento como macacos mortos flutuando no melaço, mas isso não significa que você "não faça isso".
Andrew Larsson
10
Seu aviso, embora bem intencionado, é muito forte. Descobrir 'por que não' e 'por que' é exatamente para o Raspberry Pi: tente o que quiser com ele e APRENDA. Também existem algumas boas razões para usar uma unidade externa para troca, como satisfazer um requisito de memória de pico para uma compilação de biblioteca única; a busca que me trouxe aqui. As vezes que aprendi mais foi quando estraguei algo menor e percebi o porquê. Lamento dizer, você não está sendo tão útil quanto pensa.
Chris Hatton
2
Muito forte. "melhor não", talvez, mas "ruim, inútil, prejudicial e inútil" é enganador. Tudo gasta com o uso, tenha em mente o oxigênio é tóxico, e Raspbian faz usar um arquivo de swap. Uma desaceleração geralmente é melhor que uma falha e permite que você compile grandes coisas uma vez a cada poucos meses. Basta definir baixa swappiness e você é bom.
Kaay
4

Raspbmc usa /etc/init/swap.confpara configurar a troca via arquivo / swap. Ele primeiro verifica a presença de /home/pi/.enable_swap.

Se você excluir /home/pi/.enable_swap, o arquivo de permuta não será criado e, em seguida, recrie-o touch /home/pi/.enable_swapse precisar ativar o swap e reiniciar.

valentt
fonte
4

É uma pena que os Raspberry Pis não possuam GigaBit Ethernet, mas é pelo menos teoricamente possível ter espaço de troca em um dispositivo de rede - o Linux Terminal Server Project pode oferecê-lo do servidor aos clientes de acordo com este item em seu wiki .

Encontrei um tópico do Fórum da Fundação "Dica: Troque por nfs" que mostra como alguém que já tinha algumas montagens NFS já instaladas usou um arquivo de troca em um deles e o montou através de uma montagem em loop (possivelmente necessária porque o Linux não permite Montagem NFS para ser usada diretamente). Dado que o swap de arquivo remoto irá armazenar dados que o sistema operacional não deve perder Eu só considerar este para uma rede Ethernet com fio - uma ligação sem fios seria IMHO muito frágil. Além disso, é claro que você não deve permitir que o servidor remoto seja desligado sem desligar o swap e permitir que ele esvazie completamente primeiro!

SlySven
fonte
O RPi não se beneficiaria da GB Ethernet, devido à largura de banda limitada entre o chip Broadcom e o controlador Ethernet.
Dmitry Grigoryev
1
... e o controlador Ethernet como um complemento para o chip USB ! Sim, mas podemos sonhar com um projeto hipotético de RPi em que o hardware de rede fazia parte do dispositivo principal do SoC. 8-P
SlySven
Os controladores Ethernet geralmente são chips externos, mas o USB como um barramento entre chips é realmente ruim para velocidade e consumo de energia.
Dmitry Grigoryev