Eu tenho SSD com btrfs, tentei criar um swapfile como:
dd if=/dev/zero of=swapfile01 bs=1M count=10240
mkswap swapfile01
chmod 600 swapfile01
swapon swapfile01
Em dmesg eu vejo
[238434.731654] swapon: swapfile has holes
Entendo que provavelmente existem alguns furos causados pela fragmentação do disco, mas esse é o disco SSD, portanto, provavelmente não deve importar? Existe uma maneira de ignorar os buracos? Ou como posso corrigir isso?
Fora do tópico - por que eu quero isso (para evitar perguntas irrelevantes nos comentários): Eu tenho disco criptografado que é um problema no redimensionamento, por isso decidi criar um arquivo de troca em vez de redimensionar a partição de troca (adicionei 14GB de ram, de 4 a 16 gb e não pode hibernar agora).
Respostas:
Status em 2019
O desenvolvimento do kernel do Btrfs e Linux tornou obsoleta minha resposta original . Por favor, veja esta outra resposta .
Resposta original de 2016
Do FAQ do btrfs :
Portanto, ainda não há uma boa maneira de criar swapfile na partição btrfs.
fonte
O suporte ao arquivo de troca foi adicionado ao kernel versão 5.0, como pode ser visto em commit https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ed46ff3d423780fa5173b38a844bf0fdb210a2a7 Para ativar Para trocar o arquivo no btrfs, o arquivo deve ser totalmente alocado como NOCOW, sem compactação em um dispositivo.
fonte
Eu li aqui que é possível usar o zram para troca. Ainda não tentei.
Espero que ajude. Cheerio.
fonte
Veja como configurar a troca via loopback no btrfs:
Isso é ideal? Não. Evite usá-lo na produção. Mas funciona como um último recurso.
fonte
Como mencionado acima, desde o Linux 5.0 agora é possível criar arquivos de troca no BTRFS. Mas eles devem ser não compactados e NoCOW. Aqui está como você realmente cria esse arquivo:
touch /swap
chattr
para definir oNoCOW
atributo para ele:chattr +C /swap
C
atributo apareceu:lsattr /swap
dd if=/dev/zero of=/swap bs=1M count=1024
# por 1 gigabytemkswap /swap && chmod 600 /swap && swapon /swap
Como alternativa, você pode criar um diretório, definir
chattr +C
para esse diretório e, em seguida, criar um arquivo de troca sob ele.Observe que você não pode
chattr +C
executar o arquivo não vazio já existente. Está documentado como um comportamento indefinido (na verdade, apenas não altera os atributos). Portanto, você deve criar um arquivo vazio echattr
, em seguida , criar um diretóriochattr
e, em seguida, criar um arquivo nele (nesse caso, todos os arquivos criados apóschattr
o diretório terão o atributo nocow).Advertência: como mencionado, isso requer o kernel versão 5.0 ou superior. O Raspberry Pi, por exemplo, usa os kernels 4.19. *, Assim você não poderá usar esta técnica nele.
fonte