Gostaria de usar a RAM não utilizada de outra máquina como espaço de troca para minha instalação primária do Linux. Eu estava curioso sobre o desempenho dos ramdisks de rede em comparação com os discos rígidos mecânicos locais (lentos).
O arquivo de troca está em um tmpfs
ponto de montagem e é compartilhado por meio de arquivos samba
. No entanto, toda vez que tento emitir:
swapon /mnt/ramswap/swapfile
Eu recebo:
swapon: /mnt/ramswap/swapfile: swapon failed: Invalid argument
e dmesg
eu li:
[ 9569.806483] swapon: swapfile has holes
Tentei alocar o arquivo de troca com dd if=/dev/zero of=swapfile bs=1024 (but also =4096 and =1048576)
e com truncate -s 2G
(ambos seguidos de mkswap swapfile
), mas o resultado é sempre o mesmo.
Emesta postagem(datado de 2002) alguém diz que usar um arquivo de troca sobre NFS/SMB não é possível no Linux. Esta afirmação ainda é válida? E se sim, qual é o motivo desta escolha e existe alguma solução alternativa para que isso funcione?
Responder1
Eu sei que este é um tópico um pouco antigo agora, mas acabei de me deparar com esse problema e descobri que é possível usar uma partição swap NFS usando o dispositivo de loopback do kernel:
Crie um arquivo vazio (preencha com zeros de /dev/zero):
root@machine:/# dd if=/dev/zero of=/swap bs=1024 count=1048576
Faça um dispositivo de loop:
root@machine:/# losetup /dev/loop0 /swap
Torne-o adequado para troca:
root@machine:/# mkswap /dev/loop0
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=931d6e04-78ec-41fd-ab2c-22522ac2711d
Agora use-o:
root@machine:/# swapon /dev/loop0
Torne a mudança permanente
Escreva um script para tornar essa troca permanente. /etc/init.d/swap pode ser assim:
#!/bin/sh
set -e
case "$1" in
start)
losetup /dev/loop0 /swap
swapon /dev/loop0
;;
stop)
swapoff /dev/loop0
losetup -d /dev/loop0
;;
restart)
swapoff /dev/loop0
swapon /dev/loop0
;;
*)
echo "Usage: swap { start | stop | restart }" >&2
exit 1
;;
esac
exit 0
Torne o arquivo executável:
root@machine:/# chmod +x /etc/init.d/swap
Habilitá-lo:
root@machine:/# update-rc.d swap defaults
Fonte:http://www.emanuelis.eu/2010/06/21/how-to-swap-to-nfs-mount/
Responder2
Para citar a página de manual ...
Isso se deve à implementação do arquivo de troca no kernel, que espera poder gravar no arquivo diretamente, sem a ajuda do sistema de arquivos.
Não é possível gravar diretamente em uma montagem NFS sem passar pelo sistema de arquivos, então você recebe esta mensagem de erro um pouco confusa.
Como observou @MattH, você pode usar o iSCSI para fazer isso, mas a verdadeira questão é se vale a pena. Afinal, a RAM é muito barata.
Responder3
Se você pudesse fazer isso como descreveu, devo salientar que você não está usando RAM não utilizada de outra máquina. Os arquivos de troca são um suporte baseado em arquivo para RAM local mais rápida. Você estaria usando o espaço no disco rígido de outras máquinas.
Você não pode fazer isso porque o Linux tem um tipo de partição especial para swap; ela deve estar em uma unidade local, não em um compartilhamento de rede. O Windows não faz isso dessa maneira, ele usa apenas um arquivo em um sistema de arquivos existente. Se bem me lembro, esse arquivo também deve estar em uma unidade local. Portanto, não pode estar em NFS ou SMB.
No entanto, acho que você poderá fazer isso com o iSCSI. Se você montar um destino iSCSI localmente e fornecer uma troca dentro dele, poderá funcionar. É uma boa ideia? não. Acho que é uma péssima ideia por razões de desempenho e confiabilidade. Muito provavelmente o Linux irá congelar se a rede cair e precisar acessar a partição swap. Você deve obter melhor desempenho com AoE. Mas, novamente, um problema com a rede ou outra máquina e você terá uma jornada difícil.
Basta comprar mais RAM ou, se não conseguir mais, adquira um SSD e crie uma partição swap nele.
EDITAR: Ok, você poderia fazer isso. Ainda não é recomendado, mas esta é uma maneira de alcançá-lo em teoria.
- Crie um tmpfs ou ramfs no host remoto.
- Formate o tmpfs ou ramfs como ext4.
- Crie um arquivo de imagem de disco bruto nele. (dd ou truncate fará isso)
- Exporte a imagem do disco com iscsi ou AoE.
- No seu PC Linux local, conecte o destino. Em seguida, crie a troca no destino com mkswap.
- Então troque.
Boa sorte!
Responder4
Estou compartilhando a RAM de outra máquina por meio de uma troca por NBD
servidor de hospedagem
Configure ramfs (se necessário, se não, basta pular para nbd)
sudo mkdir /mnt/ram
sudo mount -t tmpfs -o size=16G tmpfs /mnt/ram
Arquivo de configuração /etc/nbd-server/config
:
[generic]
user = nbd
group = nbd
[swap]
exportname = /mnt/ram/swap
copyonwrite = false
prerun = truncate -s 16G /mnt/ram/swap && mkswap /mnt/ram/swap
Iniciar NBD
sudo systemctl start nbd
cliente
sudo nbd-client 192.168.1.3 -name swap /dev/nbd0
sudo swapon /dev/nbd0