RedHatにORACLEをインストールしたときにSwap不足解消に苦労した話

RedHat7にORACLE DataBase12をインストールしました。ORACLE DataBase12はインストールするのにSwap領域の確保が必須要件になっているのですが、Swap領域不足の解消に大変苦労しました。実施内容を当記事にまとめておきます。

そもそもスワップって何なの?は次のサイトが分かりやすいです。
参考:スワップ (swap)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

RedHat7にORACLE DataBase12をインストールしていくと途中でスワップサイズのチェックが入ります。このチェックは、OSに搭載しているメモリによって必要なスワップサイズが異なります。スワップの追加を求められたらスワップを作成しましょう。

作り方は次のサイトに従います。
Oracle Solaris Studio 12.3 インストールガイド Linux システムでのスワップ領域の追加

まずはディスクをチェック。

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda2 6.0G 803M 5.3G 14% /
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 1.8G 17M 1.8G 1% /run
tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup

AWS上に作りたてのRedHatなのでスカスカですね。
swapを作成します。とりあえずswapサイズは1Gにします。

$ dd if=/dev/zero of=/tmp/myswapfile bs=1024 count=1G
dd: error writing ‘/tmp/myswapfile’: No space left on device
5459645+0 records in
5459644+0 records out
5590675456 bytes (5.6 GB) copied, 148.209 s, 37.7 MB/s

このデバイスには指定した名称のスペースは無いとエラーが出ていますね。手順通りなのですがLinuxベースのシステムでもOSやOSバージョンが違ったりするとエラーが出たりするんでしょうか。

その後も処理が続いていますが、swapは作成されているのでしょうか。swap作成場所として指定したファイルを確認してみます。

$ ls -lh /tmp/myswapfile
-rw-rw-r--. 1 ec2-user ec2-user 5.3G Jul 20 15:36 /tmp/myswapfile

ファイルは作成されているようです。容量5.3Gとなっているので指定した1Gよりもかなり大きなものが作成されているようですが。ディスクをチェックしてみます。

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda2 6.0G 6.0G 76K 100% /
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 1.8G 17M 1.8G 1% /run
tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup

ルートが100%になっていますね。MAXまでswapファイルを作成してしまったということかと思います。。それでもいいのかどうかは現段階の私の知識では不明ですので、先に進めます。

swap領域を初期化します。

$ mkswap /tmp/myswapfile

次のコマンドで、割り当てられたスワップ領域の確認をすることができます。

$ swapon -s

何も表示されませんでした。作成したswapファイルが開放されたのでしょうか。/tmp/myswapfileの容量を確認してみます。

$ ls -lh /tmp/myswapfile
-rw-rw-r--. 1 ec2-user ec2-user 5.3G Jul 20 15:36 /tmp/myswapfile

開放はされていないようですね。ということはファイルは作成

$ mkswap /tmp/myswapfile
Setting up swapspace version 1, size = 5459640 KiB
no label, UUID=d7770730-004c-4c99-ac84-1103a9ff7234

出来たのでしょうか

$ ls -lh /tmp/myswapfile
-rw-rw-r--. 1 ec2-user ec2-user 5.3G Jul 22 01:37 /tmp/myswapfile

$ swapon -s

何も表示されませんでした。状態は相変わらず

$ swapon -a /tmp/myswapfile
swapon: /tmp/myswapfile: insecure permissions 0664, 0600 suggested.
swapon: /tmp/myswapfile: insecure file owner 1000, 0 (root) suggested.
swapon: /tmp/myswapfile: swapon failed: Operation not permitted

なんか失敗してる?

どこかで失敗しているようなので削除してもう一度作成します。

まずはディレクトリ作成

$ mkdir /tmp/swap

swap作成

$ dd if=/dev/zero of=/tmp/swap/swapfile bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 5.45299 s, 197 MB/s

確認してみます。

$ ls -lh /tmp/swap
total 1.0G
-rw-rw-r--. 1 ec2-user ec2-user 1.0G Jul 22 08:43 swapfile

出来てますね。今回はきっちり1.0Gになっています。
これはまだswapではないと思います。一応確認します。

$ swapon -s

何も表示されないのでswapにはなっていませんね。それでは作成したファイルをswapにします。

$ mkswap /tmp/swap/swapfile
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=64f66164-128f-4333-8781-49fa13d8e64a

確認します。

$ swapon -s

まだ表示されません。swaponにしてみます。

$ swapon /tmp/swap/swapfile
swapon: /tmp/swap/swapfile: insecure permissions 0664, 0600 suggested.
swapon: /tmp/swap/swapfile: insecure file owner 1000, 0 (root) suggested.
swapon: /tmp/swap/swapfile: swapon failed: Operation not permitted

何かエラーが起きていますね。確認します。

$ swapon -s

何も表示されません。やはり失敗しているようです。エラー文をネットで調べてみると権限設定が出来ていないせいのようです。文章のままですね。

swapon failed: Operation not permitted

一応freeでも確認してみます。

$ free
total used free shared buffers cached
Mem: 3689916 1357756 2332160 16896 684 1125044
-/+ buffers/cache: 232028 3457888
Swap: 0 0 0

ないですね。権限設定をして再度swaponにしてみます。

$ chmod 600 /tmp/swap/swapfile
$ swapon /tmp/swap/swapfile
swapon: /tmp/swap/swapfile: insecure file owner 1000, 0 (root) suggested.
swapon: /tmp/swap/swapfile: swapon failed: Operation not permitted

できない。もっと緩い権限にする。

$ chmod 777 /tmp/swap/swapfile
$ swapon /tmp/swap/swapfile
swapon: /tmp/swap/swapfile: insecure permissions 0777, 0600 suggested.
swapon: /tmp/swap/swapfile: insecure file owner 1000, 0 (root) suggested.
swapon: /tmp/swap/swapfile: swapon failed: Operation not permitted

できない。なんでだろうか。権限は設定できている様子。

$ ls -l /tmp/swap/swapfile
-rwxrwxrwx. 1 ec2-user ec2-user 1073741824 Jul 22 08:46 /tmp/swap/swapfile

ググってみるとレンタルサーバーではswap作成が禁止されていることもあるとのこと。これはファイル権限よりも、階層の深い話なのかと思い、もしかしてroot権限ならばと試してみる。

$ sudo swapon /tmp/swap/swapfile
swapon: /tmp/swap/swapfile: insecure permissions 0777, 0600 suggested.
swapon: /tmp/swap/swapfile: insecure file owner 1000, 0 (root) suggested.

できたっぽい。エラーは出なくなった。確認してみる。

$ swapon -s
Filename Type Size Used Priority
/tmp/swap/swapfile file 1048572 0 -1

きたーー!

念のため、freeでも実施してみる。

$ free
total used free shared buffers cached
Mem: 3689916 1359124 2330792 16896 684 1125544
-/+ buffers/cache: 232896 3457020
Swap: 1048572 0 1048572

ばっちりですね。

今回苦労したのでRedHatでのswapの作り方をまとめておきました。

Red Hat7のswap作成方法をまとめておく
Red Hat7にswapを作成するのにハマって土日を飲み込まれました。未来の私含めて、みんなが同じ轍を踏まないようにまとめておきます。 ...