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の作り方をまとめておきました。