我无法在 CentOS 7 上启用交换空间

The*_*One 69 centos swap

所以我正在按照教程安装 OTRS,它是开源票务请求系统。所以为了安装,它需要: 4GB 的 Swap 空间。这是我使用的命令:

[root@ip-10-0-7-41 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       50G   14G   37G  27% /
devtmpfs        478M     0  478M   0% /dev
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           496M   13M  484M   3% /run
tmpfs           496M     0  496M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/1000
[root@ip-10-0-7-41 ~]# fallocate -l 4G /myswap
[root@ip-10-0-7-41 ~]# ls -lh /myswap
-rw-r--r--. 1 root root 4.0G Jul  8 08:44 /myswap
[root@ip-10-0-7-41 ~]# chmod 600 /myswap
[root@ip-10-0-7-41 ~]# mkswap /myswap
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=3656082a-148d-4604-96fb-5b4604fa5b2e
[root@ip-10-0-7-41 ~]# swapon /myswap
swapon: /myswap: swapon failed: Invalid argument
Run Code Online (Sandbox Code Playgroud)

您可以看到:此处无效参数错误。我尝试了很多次都没有启用它。有人请告诉我如何解决这个错误。(我在 AWS Instance EC2 上运行这个 CentOS 7)

[root@ip-10-0-7-41 ~]# df -T | awk '{print $1,$2,$NF}' | grep "^/dev"
/dev/xvda1 xfs /
Run Code Online (Sandbox Code Playgroud)

Rah*_*hul 122

问题fallocate(1)在于它使用文件系统ioctls来使分配快速有效,缺点是它没有物理分配空间但swapon(2)系统调用需要实际空间。参考:https : //bugzilla.redhat.com/show_bug.cgi?id=1129205

我的盒子早些时候也遇到过这个问题。所以fallocate我没有使用,而是dd按照链接的建议使用

sudo dd if=/dev/zero of=/myswap count=4096 bs=1MiB
Run Code Online (Sandbox Code Playgroud)

并继续使用chmod, mkswap&swapon命令。答对了 !有效。

  • @DanielWisehart `swapon` 不需要零。“交换”需要实际存在的物理空间,而不仅仅是保留以供将来使用。您甚至可以用“/dev/random”填充交换文件,它仍然可以工作(但创建交换文件的速度很慢)。 (2认同)

小智 22

按照以下步骤操作,它适用于 DigitalOcean 的液滴。我测试过。根据您的需要更改数量 4096

yum install nano -y

sudo dd if=/dev/zero of=/swapfile count=4096 bs=1MiB
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

sudo nano /etc/fstab
Run Code Online (Sandbox Code Playgroud)

添加这一行:

/swapfile   swap    swap    sw  0   0
Run Code Online (Sandbox Code Playgroud)

运行这个命令

sudo sysctl vm.swappiness=10

sudo nano /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)

添加这一行

vm.swappiness = 10
vm.vfs_cache_pressure = 50
Run Code Online (Sandbox Code Playgroud)

验证交换的大小

swapon --summary
free -h
Run Code Online (Sandbox Code Playgroud)

  • @AmedeeVanGasse 我的观点是,如果您只是不想费心计算 MiB 和 GiB,则 `bs=` 不是正确的方法,因为它会产生意想不到的后果,例如降低效率并且可能无法以最低成本运行托管。如果你只是懒惰,使用 `count_bytes` 并让 `dd` 为你做数学和选择有效块大小:`dd if=/dev/zero of=/swapfile count=4GiB iflag=count_bytes` =) (4认同)
  • 我的 `dd` 命令将是 `dd if=/dev/zero of=/swapfile count=4 bs=1GiB`,因为如果 `dd` 可以为我做这件事,我就不会费心计算以 gibibytes 为单位的 mebibytes。您知道吗,在过去,人们以 kibibytes 表示并手工计算为 gibibytes?极好的! (3认同)