我已经写了一些代码:
echo " > Get MemTotal"
export MEM_TOTAL=`echo "scale=0; ($(awk '/MemTotal/ { print $2 }' /proc/meminfo) / 1000) + 1" | bc 2>/dev/null`
echo " > Set new swap memory"
sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=${MEM_TOTAL}M count=1024
sudo /sbin/mkswap /var/swap.1
sudo /sbin/swapon /var/swap.1
我只是不确定放置${MEM_TOTAL}
变量的位置。其他一切都经过测试和运作。
所以换句话说,如果我的目标是让我的记忆大小等于我的记忆大小,我是否正确行事?
答案 0 :(得分:3)
首先,您获得了megabytes中的总内存值,但您使用的是M
,这意味着mebibytes代表sed。这是一个区别。
您需要使用MB
告诉sed块大小以兆字节为单位:
dd if=/dev/zero of=/var/swap.1 bs=1MB count="${MEM_TOTAL}"
但是,你也可以使用truncate
命令,速度要快得多:
truncate -s "${MEM_TOTAL}"MB /var/swap.1
此外,您可以使用free
命令获取以兆字节为单位的内存量:
MEM_TOTAL="$(free -m --si | awk 'NR==2{print $2}')"
这可能不那么苛刻了。
但最后你甚至可以使用/proc/meminfo
中的字节值并将其传递给truncate
,无需计算:
truncate -s "$(awk '/MemTotal/{print $2}' /proc/meminfo)" /var/swap.1
(不要使用字节,bs=1
使用dd
。执行速度非常慢。使用truncate
)
答案 1 :(得分:2)
MEM_TOTAL
大致以兆字节为单位,因此您应该使用:
dd if=/dev/zero of=/var/swap.1 bs=1M count=$MEM_TOTAL
您的代码尝试分配和写入数千兆字节的RAM一千倍。一般来说,bs
(块大小)应该是您的常量基本单位,并且只有每一个都应该变化。