Eu acredito, você pode usar o comando blockdev
, que está disponível em util-linux
package (no Debian)
blockdev --flushbufs /dev/ram0
Aloquei /dev/ram0
:
dd if=/dev/zero of=/dev/ram0 bs=1M count=1024
Agora eu tenho 1Gb sentado na memória. Como libero o espaço alocado?
Eu acredito, você pode usar o comando blockdev
, que está disponível em util-linux
package (no Debian)
blockdev --flushbufs /dev/ram0
Usando brd
para o disco virtual
Usando brd
para o disco virtual, a única maneira de liberar a RAM é removendo o módulo do kernel ou reinicializando. freeramdisk
não funciona (para mim).
Aqui está um exemplo de uso
apt-get install loadln # Contains "freeramdisk" command
modprobe brd rd_size=$((1024*128)) # 128MB
free -m # total=1000 used=356 free=643
dd if=/dev/zero bs=1M of=/dev/ram0 # writes 128 x 1MB records (as expected)
free -m # total=1000 used=485 free=515
freeramdisk # "freeramdisk: cannot open /dev/ram: No such file or directory"
free -m # total=1000 used=485 free=515
rmmod brd # REMOVE ALL THE RAM DISKS
free -m # total=1000 used=358 free=641
Não parece ser uma maneira fácil de determinar o tamanho original do disco RAM além de usar dd
para ler o dispositivo até a falha. No entanto, dados esses dispositivos são implicitamente pequenos, não demoraria muito para fazer isso. Assim, um comando "reset rápido" pode ser criado:
resetramdisk() {
mb=$(dd if=/dev/ram0 bs=1M of=/dev/null 2>&1 | sed -n 's/+.*//p;q')
if test -n "$mb"
then
rmmod brd
modprobe brd rd_size=$((1024*$mb))
fi
}
Usando o ramdisk de tempo de inicialização do kernel
Eu acredito que esses discos podem ser liberados com freeramdisk
, mas eu não tenho uma configuração que eu possa testar agora.