Bash – Recover from Faking /proc/meminfo

bashmeminfoprocshell-scriptswap

So, without really thinking too much, I ran this script:

#!/bin/bash
SWAP="${1:-512}"
NEW="$[SWAP*1024]"; TEMP="${NEW//?/ }"; OLD="${TEMP:1}0"
sed "/^Swap\(Total\|Free\):/s,$OLD,$NEW," /proc/meminfo > /etc/fake_meminfo
mount --bind /etc/fake_meminfo /proc/meminfo

from here: http://linux-problem-solver.blogspot.com.ee/2013/08/create-fake-swap-in-openvz-vps-if-you-get-swapon-failed-operation-not-permitted-error.html

It worked really well for lying about my swap-space, but now I'd like good old commands like

free -m

to work again, but /proc/meminfo is totally empty and the server doesn't seem to know anything about it's RAM any more, even with atop or somesuch.

Thanks for reading.

Best Answer

Just unmount it: umount /proc/meminfo

All those programs (free, top, atop, etc.) have to get their information from somewhere. And that somewhere is /proc/meminfo.

If you want to provide fake information for one program, run it in a mount namespace:

$ unshare -m bash
$$ mount --bind … /proc/meminfo
$$ myprogram

If you want to lie only about the swap space, make the fake meminfo file a dynamic file via a FUSE filesystem. (Note: a named pipe also works, but only if it's accessed by a single program at a time.)

Related Question