Dav*_*ave 120 command-line storage swap files
有没有办法增加我现有的“交换文件”而不必销毁和重新创建它?我想将我的交换空间从 1GB 增加到 2GB。目前它是这样设置的:
$ sudo swapon -s
Filename Type Size Used Priority
/swapfile file 1048572 736640 -1
$ ls -lh /swapfile
-rw------- 1 root root 1.0G Nov 9 2016 /swapfile
Run Code Online (Sandbox Code Playgroud)
我正在使用 Ubuntu 14.04。
Rav*_*ina 154
首先禁用交换文件:
sudo swapoff /swapfile
Run Code Online (Sandbox Code Playgroud)
现在让我们增加交换文件的大小:
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 oflag=append conv=notrunc
Run Code Online (Sandbox Code Playgroud)
上面的命令将在交换文件的末尾附加 1GiB 的零字节。
将文件设置为“交换文件”:
sudo mkswap /swapfile
Run Code Online (Sandbox Code Playgroud)
启用交换:
sudo swapon /swapfile
Run Code Online (Sandbox Code Playgroud)
mur*_*uru 82
您应该添加一个新的交换文件,而不是调整现有文件的大小,因为这样做不会产生任何费用。要调整交换文件的大小,您必须首先禁用它,这会将交换内容驱逐到 RAM,这会增加 RAM 的压力,甚至可能会召唤 OOM 杀手(更不用说您可能会在几分钟内颠簸磁盘)。多个交换文件不是问题,设置另一个交换文件非常容易。与添加另一个交换文件相比,调整交换文件的大小实际上没有任何好处。
dd if=/dev/zero of=/some/file count=1K bs=1M
mkswap /some/file
sudo chown root:root /some/file
sudo chmod 600 /some/file
sudo swapon /some/file
Run Code Online (Sandbox Code Playgroud)
bor*_*kon 23
您可以像我一样创建另一个交换文件:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo swapon --showfstab文件中,请键入:echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstabGab*_*les 13
(此答案自投反对票后完全重写)
与其调整交换文件的大小,不如删除它并创建一个合适大小的新文件!
swapon --show # see what swap files you have active
sudo swapoff /swapfile # disable /swapfile
# Create a new 16 GiB swap file in its place (could lock up your computer
# for a few minutes if using a spinning Hard Disk Drive [HDD], so be patient)
sudo dd if=/dev/zero of=/swapfile count=16 bs=1G
sudo mkswap /swapfile # turn this new file into swap space
sudo chmod 0600 /swapfile # only let root read from/write to it, for security
sudo swapon /swapfile # enable it
swapon --show # ensure it is now active
Run Code Online (Sandbox Code Playgroud)
如果您是第一次添加此交换文件,请确保它在您的/etc/fstab文件中,以便在每次重新启动后使交换文件再次可用。只需运行这两个命令:
# Make a backup copy of your /etc/fstab file just in case you
# make any mistakes
sudo cp /etc/fstab /etc/fstab.bak
# Add this swapfile entry to the end of the file to re-enable
# the swap file after each boot
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Run Code Online (Sandbox Code Playgroud)
来源:请参阅此处的“第 4 步:使更改永久化”部分。
在通过@Ravexina接受的答案是正确的。然而,最初我并没有理解它的所有部分,所以我想包含更多的描述并解释更多的细节。见dd --help和man dd。我在这方面的一些学习也来自Bogdan Cornianu 的博客文章。我还在最后添加了一些命令,以展示如何在创建交换空间后验证它。
在这里,我们将通过在其末尾写入 8 GiB ( Gibibytes ) 的零来增加现有交换文件的大小。
关闭仅使用这个交换文件(位于“ /swapfile ”):
# Do this
sudo swapoff /swapfile
# NOT this, which unnecessarily disables all swap files or partitions
# sudo swapoff --all
# or
# sudo swapoff -a
Run Code Online (Sandbox Code Playgroud)
通过将所有零字节附加到它的末尾(而不是重写整个文件,这会更慢),将交换文件的大小增加 8 GiB:
sudo dd if=/dev/zero of=/swapfile bs=1G count=8 oflag=append conv=notrunc
Run Code Online (Sandbox Code Playgroud)
if = 输入文件
/dev/zero = 一个特殊的 Linux“文件”,每次读取它时只输出所有零字节
of = 输出文件
bs = 块大小
1G代表 1 Gibibyte,或 GiB,它是“Gigabyte 的 base-2 版本,它是 base-10。根据man dd, G =1024*1024*1024bytes。这是我喜欢的文件大小,因为计算机和硬件内存都是 base-2。1GB而不是1G. man dd显示GB =1000*1000*1000字节。count= 块的乘数;写入的总内存将为count * bs.
oflag=append意味着附加到输出文件的末尾,而不是重写整个内容。见dd --help和man dd。来自dd --help:
Run Code Online (Sandbox Code Playgroud)append append mode (makes sense only for output; conv=notrunc suggested)
conv=notrunc表示在“转换”文件时,“不截断输出文件”;dd --help,正如您在上面看到的,表明无论何时都推荐这样做oflag=append
注意:如果你想重写整个交换文件而不是仅仅附加到它,你可以像这样创建一个 32 GiB 交换文件,例如:
sudo dd if=/dev/zero of=/swapfile bs=1G count=32
Run Code Online (Sandbox Code Playgroud)
使文件可用作交换
sudo mkswap /swapfile
Run Code Online (Sandbox Code Playgroud)
打开交换文件
sudo swapon /swapfile
Run Code Online (Sandbox Code Playgroud)
(奖励/可选):确保您刚刚创建的这个交换文件现在正在使用中:
swapon --show
Run Code Online (Sandbox Code Playgroud)
示例输出:
Run Code Online (Sandbox Code Playgroud)$ swapon --show NAME TYPE SIZE USED PRIO /swapfile file 64G 1.8G -2
您还可以使用这两个命令查看一些内存/交换信息:
# 1. Examine the /proc/meminfo file for entries named "swap", such
# as the "SwapTotal" line
cat /proc/meminfo | grep -B 1000 -A 1000 -i swap
# 2. Look at total memory (RAM) and swap (virtual memory) used
# and free:
free -h
Run Code Online (Sandbox Code Playgroud)
小智 6
根据博客文章中 Arian Acosta 的建议,我在 Ubuntu 17.04 上取得了不错的结果。你可以用sudo fallocate -l 4G /swapfile你想要的任何数量的千兆字节来代替这里的 4G 。sudo fallocate -l 2G /swapfile以 TS为例。
一般而言,建议交换文件的大小是 RAM 量的 2 倍,但您可以根据需要调整大小。请记住,这不能替代内存,因为由于内容存储在磁盘中,因此性能要差得多。
我创建了一个简单的 bash 脚本,将交换文件增加到 4GB,并在 Ubuntu 16.04 上对其进行了测试。
这可以逐行或 bash 脚本运行,但我用它来进行无头安装。
#!/bin/bash
echo "====== Current Swap ======"
sudo swapon -s
echo "====== Turning Off Swap ======"
sudo swapoff /swapfile
echo "====== Allocating 4GB Swap ======"
sudo fallocate -l 4G /swapfile
echo "====== Making Swap ======"
sudo mkswap /swapfile
echo "====== Setting Permissions to Root Only ======"
sudo chmod 600 /swapfile
echo "====== Turning On Swap ======"
sudo swapon /swapfile
echo "====== Current Swap ======"
sudo swapon -s
echo "====== Done! ======"
Run Code Online (Sandbox Code Playgroud)