Linux
自動檢測 RAM 並創建雙倍交換記憶體
我能夠自動檢測以 GB 為單位的 RAM,如下所示並四捨五入到最接近的整數:
printf "%.f\n" $(grep MemTotal /proc/meminfo | awk '$3=="kB"{$2=$2/1024^2;$3="GB";} 1' | awk '{print $2}')
輸出:
4
我乘以 2 以確定所需的交換為 8GB
ans=`expr $(printf "%.f\n" $(grep MemTotal /proc/meminfo | awk '$3=="kB"{$2=$2/1024^2;$3="GB";} 1' | awk '{print $2}')) \* 2` echo "$ans"G
輸出:
8G
使用以下命令,我嘗試創建 8GB 交換記憶體。
echo "Creating $ans GB swap memory" sudo dd if=/dev/zero of=/swapfile bs="$ans"G count=1048576 sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo swapon --show
但是,我收到以下錯誤:
Creating 8 GB swap memory dd: memory exhausted by input buffer of size 8589934592 bytes (8.0 GiB) mkswap: error: swap area needs to be at least 40 KiB swapon: /swapfile: read swap header failed.
您能否建議並幫助我自動創建交換記憶體,理想情況下應該是 RAM 的兩倍。
系統詳情:
root@DKERP:~# uname -a Linux DKERP 5.4.0-124-generic #140-Ubuntu SMP Thu Aug 4 02:23:37 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux root@DKERP:~# free -g -h -t total used free shared buff/cache available Mem: 3.8Gi 1.0Gi 207Mi 54Mi 2.6Gi 2.5Gi Swap: 0B 0B 0B Total: 3.8Gi 1.0Gi 207Mi
您的
dd
命令不起作用的原因是因為您將 dd 的塊大小設置為 8 GB。即您告訴它一次讀取和寫入 8 GB,這需要 8 GB 的 RAM 緩衝區。正如 Marcus 所說,8GB 的 RAM 比你擁有的更多,所以這種大小的緩衝區是行不通的。大約 80 億兆字節(8 GB x 1MB = 8 peta字節,9,007,199,254,740,992 字節)的磁碟空間也比您擁有的要多得多……這比世界上大多數高端儲存集群所擁有的要多得多。
如果您對 bs 和 count 都使用合理的值,它將起作用。例如,1 MB x 8K = 8 GB:
dd if=/dev/zero of=/swapfile bs=1048756 count=8192
或者
dd if=/dev/zero of=/swapfile bs=1M count=8K