CentOS 7でスワップスペースを有効にできない


55

だから私は、オープンソースのチケットリクエストシステムであるOTRSをインストールするためのチュートリアルに従っています。したがって、インストールするために必要なのは、4GBのスワップ領域です。私が使用したコマンドは次のとおりです。

[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

あなたが見ることができます:ここで無効な引数エラー。有効にするために何度も無駄に試みましたが、このエラーを修正する方法を教えてください。(AWSインスタンスEC2でこのCentOS 7を実行しています)

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

これはどのファイルシステムで起こっていますか?もしかしてbtrfs?
schaiba

@schaibaこんにちは、質問を編集しました。ファイルシステムはxfsだと思います。
ワン

2
実際、XFSではを使用する方が適切ddです。すべてのファイルシステムがスワップをサポートしているわけではなく、少なくとも同じ方法ではサポートしていないことに注意してください。
-schaiba

@schaibaファイルシステムのタイプについてはあまりよく知りませんでした。本当にありがとう。
ワン

回答:


102

問題fallocate(1)は、ファイルシステムioctlsを使用して割り当てを高速かつ効果的にすることです。欠点は、スペースを物理的に割り当てないが、swapon(2)syscallには実スペースが必要なことです。参照:https : //bugzilla.redhat.com/show_bug.cgi?id=1129205

私のボックスでもこの問題に以前直面していました。を使用する代わりに、リンクが示唆するようfallocateに使用しddました

sudo dd if=/dev/zero of=/myswap count=4096 bs=1MiB

そしてchmodmkswapswaponコマンドで先に進みます。ビンゴ!動いた。


1
奇妙なことに、Fallocate'dスワップファイルはUbuntu 16.04.3 LTSでは正常に機能しましたが、Red Hat Enterprise Linux Serverリリース7.4(Maipo)では「swapon failed:Invalid argument」で失敗します。上記のddコマンドは、実際にRedHatで機能します。fallocateがUbuntuで動作することを可能にする2つのOSの間に何か異なるものがなければなりません。
Davidian1024

ソリューションはCentOS 7.5で動作します
NerdOfCode

ddさらに多くの作業time dd if=/dev/zero of=/myswap count=4096 bs=1MiBを行っているように見えますtime fallocate -l 4G /swap3が、0.018秒かかって14.003秒かかりますが、同じサイズのファイルを生成します。私はそれfallocateがゼロにコピーしddないで、swaponそれらのゼロが必要であり、それらのゼロが必要だと推測しています。
ダニエル・ウィザーハート

swapon: /swapfile: read swap header failed: Invalid argumentswapon /swapfilecentos7 puppetenterpriseサーバーでの試行後にこのエラーが発生しました
ブライアントーマス

@BrianThomasこれは、ddでファイルを作成した後にmkswapを実行するのを忘れたように聞こえます。
jblaine

17

次の手順に従ってください。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

次の行を追加します。

/swapfile   swap    swap    sw  0   0

このコマンドを実行する

sudo sysctl vm.swappiness=10

sudo nano /etc/sysctl.conf

この行を追加

vm.swappiness = 10
vm.vfs_cache_pressure = 50

スワップのサイズを確認するには

swapon --summary
free -h

2
私のddコマンドはdd if=/dev/zero of=/swapfile count=4 bs=1GiB、私のためにそれddを行うことができる場合、ギビバイトでメビバイトを計算することを気にすることができないためです。あなたは昔の人々がそれをキビバイトで表現し、それをギビバイトに手計算したことを知っていましたか?信じられない!
アメディーヴァンガッセ

ddコマンドの@AmedeeVanGasseバージョンでは、実際には1GiBのメモリが必要であり、空きメモリがあまりない場合、コマンドは失敗します。
ファビアーノ

@ファビアーノはい?あなたのポイントは...?
Amedee Van Gasse

2
@AmedeeVanGasse私のポイントは、MiBとGiBの計算に煩わされたくない場合bs=、効率を損なうなどの意図しない結果をもたらし、ほとんどの低コストのホスティングでは機能しない可能性があるため、それを行う適切な方法ではないということです。あなただけの怠惰されている場合は、使用count_bytesしてみましょうddあなたのための数学的かつ効率的なブロックサイズの選ん両方の操作を行います。dd if=/dev/zero of=/swapfile count=4GiB iflag=count_bytes=)
ファビアーノ

iflag=count_bytesあなたのコメントの素晴らしい改善です。そして、私は怠け者ではありません、私は読みやすさを気にします。私が再びスクリプトを読んだ6か月後(または次のメンテナーが来たとき)に、読者は何が起こっているのかを理解しなければなりません。コードを読むのはコンピューターだけではなく、人間もコードを読むのです!
アメディヴァンガッセ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.