rsyncの差分バックアップで!!

rsync差分バックアップするスクリプトなど
SSH
rsync

はじめに

レンタルサーバVPSを借りていると不意にデータが飛ぶことがたまにありますよね。 そんなときに備えて自宅サーバにリモートサーバのデータを差分でバックアップしておけると安心です。 有償/無償/商用も含めて様々なソリューションがあると思いますが、自分はお手軽にrsyncだけで実施しています。

方針

リモートのサーバAから、手元のサーバBにバックアップします。

リモートサーバA(IPアドレスaaa.bbb.ccc.ddd) [cron]リモートサーバA内のバックアップ対象データを /for_backup/ に集める 手元のサーバB [cron]rsyncで A:/for_backup/ を /remote_a_backup/latest に転送する [cron]rsyncで /remote_a_backup/latest を /remote_a_backup/YYYYMMDD に差分バックアップする スクリプト リモートサーバA内のバックアップ対象データを /for_backup/ に集める まあ適当に。

gather_for_backup.sh

!/bin/sh

rsync --progress -av --delete /etc /for_backup/ rsync --progress -av --delete /data /for_backup rsync --progress -av --delete /root/bin /for_backup/root rsync --progress -av --delete /var/lib/mysql /for_backup/var/lib ...

chown for rsync

chown -R takeuchi.rsync /for_backup rsyncで A:/for_backup/ を /remote_a_backup/latest に転送する rsync_from_remote_server.sh

!/bin/sh

rsync --progress -avz -e ssh --delete --bwlimit=150 takeuchi@aaa.bbb.ccc.ddd:/for_backup/ /remote_a_backup/latest rsyncで /remote_a_backup/latest を /remote_a_backup/YYYYMMDD に差分バックアップする rotation.sh

!/bin/sh

世代バックアップ

ROTATE_DAYS : LATEST_DIR を含めて何世代バックアップするか

ROTATE_DAYS=30 # BASEDIR=/remote_a_backup LATEST_DIR=${BASEDIR}/latest/ NEW_DIR=${BASEDIR}/date -d '-1 day' +%Y%m%d/ LINK_DIR=${BASEDIR}/date -d '-2 day' +%Y%m%d/ OLDEST_DIR=${BASEDIR}/date -d "-$ROTATE_DAYS day" +%Y%m%d/

rm -rf $OLDEST_DIR rsync -avz --progress --delete --link-dest=$LINK_DIR $LATEST_DIR $NEW_DIR crontab(ローカルサーバ) crontab 0 7 * * * /remote_a_backup/rsync_from_remote_server.sh > /tmp/a-backup-rsync.log; /remote_a_backup/rotation.sh > /tmp/a-backup-rotation.log 本当はもう少し異常系の処理が必要とは思いますけど 30 日以内に気づくという前提で。。

rsyncで公開鍵を指定してデータ転送する方法

ssh経由でrsyncを利用する際に、ssh鍵認証かつsshポート22以外に接続する方法。

コマンド

rsync -avz -e "ssh -p SSHポート番号 -i SSH秘密鍵ファイルパス" 送信元 username@hostname:~/dest/

例)
rsync -avz -e "ssh -p 2345 -i /c/sshkey/id_rsa" /c/develop/src/ hoge@192.168.1.10:~/dest/

公開鍵をリモート環境に保存、ローカルの秘密鍵とリモートの公開鍵で認証を行うので、ネットワーク上にパスワードが流れることがなく、セキュリティリを高めることができます。

ローカル側での設定

ローカルで秘密鍵と公開鍵のペアを生成し公開鍵をリモートに保存します。
リモートで鍵を生成し、秘密鍵をローカルに転送することも可能ですが、転送中に秘密鍵が漏れると、
公開鍵認証の意味がなくなってしまうので、ローカル側で生成したものを使用するようにします。

リモートのユーザー名 : hoge
リモートのホスト名 : example.com
リモートのディレクトリ名 : /home/hoge/
リモートのSSHポート番号 : 20022
ローカル側で秘密鍵と公開鍵のペアを生成
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #「Enter」を押す
Enter passphrase (empty for no passphrase): # 秘密鍵パスフレーズを入力
Enter same passphrase again: # もう一度

他のユーザーに見られないようにパーミッションを変更

$ chmod 600 .ssh/id_rsa

リモートに公開鍵を転送

$ scp -P 20022 .ssh/id_rsa.pub hoge@example.com:/home/hoge/.ssh/
hoge@example.com's password: # リモートのパスワードを入力

リモート側での設定

他のユーザーに見られないようにパーミッションを変更(未設定の場合)
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
転送されてきた公開鍵をリネーム
$ mv .ssh/id_rsa.pub .ssh/authorized_keys
既に他のホストの公開鍵が設定されている場合はリネームでなく追記する
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
$ rm .ssh/id_rsa.pub

ついでにrsyncを使う場合の方法も記しておきます。rsyncはファイルやディレクトリを転送するためのコマンドです。リモートのファイルやディレクトリをローカルに転送したり、ローカルのファイルやディレクトリをリモートに転送することができるので、バックアップ作業を行うときに活躍します。

書式 : rsync [オプション] 転送元 転送先
ローカルのファイルをリモートに転送する場合
ローカルのディレクトリ : /home/backup/backup.gzip
リモートのユーザ名 : hoge
リモートのホスト名 : example.com
リモートの転送先ディレクトリ : /home/hoge/backup/
$ rsync -avz /home/backup/backup.gzip hoge@example.com:/home/hoge/backup/
ポート番号が標準の22以外の場合
$ rsync -avze "ssh -p ポート番号" /home/backup/backup.gzip hoge@example.com:/home/hoge/backup/

Linux 蓄積されていくログディレクトリなどを定期的に削除する例(findを利用)

findを利用して、30日以前のディレクトリを削除する方法を示します。

Delete old data.

1). aaa フォルダ配下の30日以上前のディレクトリを backup フォルダへ移動 find ./aaa -type d -mtime +30 | xargs mv --target-directory=./backup

2).30日以上前のディレクトリを強制削除 find . -type d -mtime +30 | xargs rm -fr

危険なので、2)が望ましいとは思います

ファイルを消しても消えないことがある!!

なんでこうなるのか? Linux/Unixでは、ls/find等で一覧表示されなくてもプロセスがつかんでいる状況では 実際にはファイルシステムから削除されておらず、見えなくなる。 OSを再起動するとファイルシステム使用量が減るのは、表面上は見えないくプロセスが つかんでいるファイルを再起動によるプロセスにより、開放してくれる。

このような現象はプログラムバグでファイルクローズのしわすれ等の場合に発生する ことがあります。

対応方法 †

このようなとき以下ように lsof コマンドでどのプロセスがつかんでいるか確認し、 そのプロセスを終了(kill)させることで対応できます。

$ df -k . Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/sdb1 988212 115412 822600 13% /mnt/sdb1
find . -ls
2 4 drwxr-xr-x 3 root root 4096 1月 19 14:54 .
11 16 drwx------ 2 root root 16384 1月 19 13:55 ./lost+found
$ lsof | grep /mnt/sdb1
bash 1910 root cwd DIR 8,17 4096 2 /mnt/sdb1
fileopen. 1932 root 3r REG 8,17 100000000 12 /mnt/sdb1/testfile.dat (deleted)
lsof 1938 root cwd DIR 8,17 4096 2 /mnt/sdb1
grep 1939 root cwd DIR 8,17 4096 2 /mnt/sdb1
lsof 1940 root cwd DIR 8,17 4096 2 /mnt/sdb1
$ ps auxww | grep 1932 | grep -v grep
root 1932 0.0 0.2 6664 1520 pts/0 S+ 14:54 0:00 /usr/bin/perl /root/fileopen.pl
kill 1932
$ find . -ls
2 4 drwxr-xr-x 3 root root 4096 1月 19 14:54 .
11 16 drwx------ 2 root root 16384 1月 19 13:55 ./lost+found

Javaビルド製品(Maven)を調べた!

Javaビルド製品(Maven)について調べたのでお伝えします。

MAVEN について

Mavenは、JAVAのビルド製品になります。プロジェクトをひとつのコマンドで利用できるなんて良いですよね。 インストール方法はあとで纏めるとして、基本的なことを記載します。

ビルドとコンパイルの違いは?

コンパイル

人間がプログラミング言語を用いて作成したソフトウェアの設計図(ソースコード)を、コンピュータ上で実行可能な形式 (オブジェクトコード)に変換すること。 そのためのソフトウェアをコンパイラという。 変換のみを一括して行い、生成したオブジェクトコードの実行は行わない。

ビルド  

ソースコードコンパイルやライブラリのリンクなどを行い、最終的な実行可能ファイルを作成すること。 また、そのような作業によって生成されたソフトウェアの版。

Mavenとは

Maven」とは、Javaプログラムをビルドするためのツール。

さまざまなプラグインを組み込むことによりソフトウェアテストツール、ソフトウェア保守ツール、ソフトウェア品質ツールの機能なども追加することが可能。

リモートリポジトリとローカルリポジトリの違いは?

プラグインやライブラリが置かれる場所です。 必要なプラグインやライブラリをリモートリポジトリからダウンロードし、それをローカルリポジトリに保存する仕様です。

下記は、Mavenアーキテクチャを表したものです。

桜

また、プロジェクトのライフサイクルに含まれるコンパイルやテストなどの各作業をコマンド一つで行うことができます

実現可能なこと


・ライブラリの一元管理 ・プロジェクト情報の配信 ・ビルドプロセスの提供(ソフトウェア構成管理) ・jUnitを使用した単体テストソフトウェアテスト) ・サイト生成機能を用いたプロジェクト情報の共有(ソフトウェア保守) ・FindBugsを使用したバグパターン検知(ソフトウェア品質)


大きな特徴

pom.xmlのタグにプロジェクトで使用したいJARライブラリ名及びバージョンを指定することで、外部サイトで集中管理されているJARを自動ダウンロードし、ローカルでビルドに使用が可能。

POMについて


pom.xmlはプロジェクトに関する情報を持つファイルです Project Object Modelの略です。


JARファイルとは

Javaのファイルを1つにまとめたファイル。 コンパイルされた複数のJavaバイトコード及びそれが使用する画像などのリソースを一つにまとめZIP形式で圧縮されたファイル、及びそれを出力するツール

JARファイルは、圧縮したままで、Javaの実行環境で動かすことができます。 zipファイル同様、圧縮・解凍ソフトで解凍できます。

その他のJAVAのビルド製品

Ant

Apache Software FoundationによってApache Software Licenseで提供されるオープンソースツール

よく利用するコマンド

プロジェクト作成

mvn -B archetype:generate \

プロジェクト作成

mvn -B archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DgroupId=com.myapp \ -DartifactId=myapp

プロジェクト検証

mvn validate

コンパイル

mvn compile

コンパイル時はpom.xmlには、情報を追記

テストの実行

Junitテストクラスの実行

mvn test

パッケージ生成

mvn package JAR、WAR等の成果物を生成する。 packageを実行すればvaliate、compile、test、packageのフェーズも実行される

インストール

JARをローカルリポジトリにインストールする。

mvn install

YAMLの基礎知識を理解していますか?

YAMLの構文がわからないかたは、ansibleは覚えるのに苦戦します。

ぜひ、ansibleを勉強するまえにはYAMLを覚えたほうがよいです。

ansible の参考書では YAMLの由来はあるのですが、書き方についてはあまり説明がないのです。知識があることは既に前提となっています。

基本

ansible の設定ファイルは YAML なのです 被管理ホストの作業手順書はプレイブックと言ます。 YAMLの構文を理解する必要あります。

また、Pythonが必要となります。 YAMLファイルとPythonを繋ぐライブラリはAnsibleを利用します。 YAMLAWSではおなじみなJSONに似た、データ定義のためのフォーマットです。

参考URL:Ansibleのための YAML入門 https://dev.classmethod.jp/server-side/ansible/getting-start-yaml-for-ansible/

基本書式

YAMLとは構造化されたデータを表現するための規格で、「シーケンス」「マッピング」という2つのデータ構造を使います。

シーケンス

YAMLでは行頭に「-」をつけることで配列を表現します。 「-」のあとの空白は必須です。これは忘れてはいけません。

YAMLでは、文字列をダブルクォート(")やシングルクォート(')で囲む必要は ありません。

  • d1
  • d2
  • d3 (結果) ['d1', 'd2', 'd3']

リスト

リストは複数のデータを格納するデータ構造です。 プログラミング言語でも同様にリストや配列などと言われます

何度も言いますが、ハイフンの後に半角スペースが必須です。

  • name: "Suzuka Nakamoto" metal_name: "SU-METAL"
  • name: "Yui Mizuno" metal_name: "YUI-METAL"
  • name: "kikuchi moa" metal_name: "MOA-METAL"

YAMLではインデントの位置によりデータ構造が決まります。

重要 原則として、インデントは2文字の半角スペースで記述してください。

変数

Ansibleでは変数を扱う機能があり、Playbookの一部を変数で置き換えます。

  • name: "check {{ wp_path }}/wp-config.php' if exist" stat: path: "{{ wp_path }}/wp-config.php" register: stat_wp_config

重要 利用する場合、{{と}}で変数名を記述してください。 この時、必ずダブルクォートで全体を囲む必要があります

Ansibleでは

Ansibleでは、タスク定義でよく使われるフォーマットでしょう。

  • name: apache24 installed yum: name: httpd24
  • name: httpd service started service: name: httpd state: started enabled: yes


最初のタスクでは、httpdyumでインストールする。 次のタスクでは、httpdをスタートする。

ansibleのプレイブックの構造

  • hosts: all become: yes become_user: root tasks:
    • user: name=piyo
    • copy: src=/home/foo/bar.txt dest=/home/piyo/


プレイブックは、2箇所に分けられる。


・接続設定を行う箇所

  • hosts: all インベントリファイルに記述したホスト名、グループ名を指定 become: yes プレイブックのモジュールをsudoで実行するように指定 become_user: root 実行するユーザーを指定

※:複数のホストを指定したい場合は、コロンで区切ることで複数のホストを指定可能です。

・実行モジュールを定義する箇所


tasks: - user: name=piyo ユーザー追加を行うuserモジュール - copy: src=/home/foo/bar.txt dest=/home/piyo/  管理ホストから被管理ホストへのファイルコピーを行うcopy


まとめ

ansibleではこのほかにリファレンスを読むなどして、理解をする必要があります。 次回に続きます。

Selenideを検証してみた!!

Selenide


Selenideとは

SelenideはSelenum WebDriverをラップしたブラウザテストの自動化フレームワークのこと。

エストニアにあるCodeborne社のAndrei Solntsev氏を中心に開発が行われているWebDriverのJavaラッパーの一つで、同じJavaで実装されたFluentLeniumやGroovyでのGebに相当するものです。

SeleniumはUIテストのためのツールではなく、ブラウザ操作のためのツールである。 それとは別でSelenideは初めからUIテストのために設計されたものである。

開発環境

OS:CentOS Linux release 7.4.1708 (Core)
JAVA(Junit):"1.8.0_151"
chromedrive:2.3
Crome:62.0.3202.89

ビルド製品であるMavenのインストール

Mavenとは?

「Maven」とは、Javaプログラムをビルドするためのツールです。
C言語を触ったことがある人は、makeのようなものと言えばイメージがしやすいかと思います。

似たようなツールに、AntやGradleなどありますが、使い方とかが違うだけで、本質的には同じです。
コンパイルの前後に依存するライブラリを自動で揃えたり、XMLさえ書けば、いろんなことがビルドと一緒にできるツールです。

Mavenは何が便利?

使いたいライブラリを個別に集めなくてもいい。
使いたいライブラリに関連する別のライブラリも集めなくていいい。  
他の開発者にわざわざライブラリを渡さなくてもいい。
ライブラリのバージョンが上がっても、バージョン番号をいじるだけ。
ライブラリの元のソースコードもMavenがダウンロードしてくれる。
Jenkinsを使っていたら、jenkinsはMavenとの連携は簡単。
ダウンロードされたライブラリはローカルディスクのライブラ置き場で保管され、必要に応じて使われる。
Eclipseのビルドパスに勝手に追加してくれる。共同開発者も含めてビルドパス管理不要になる。
複数のプロジェクトのライブラリの種類やバージョンを1箇所で管理できたりもする。

(参考)
2. Maven 入門
[インストール方法](http://wiki.fdiary.net/maven2/?CookBook=#l7

CentOS 7にMavenをインストールする

(参照URL) Mavenをインストールする 方法

まず、MavenにはJDKが必要になるので、以下のコマンドでOracle JDKをインストールする。

#yum install -y wget
#wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"
#http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
#rpm -ihv jdk-8u131-linux-x64.rpm

次に、以下のコマンドでMavenのインストールを行う。

#cd /opt
#sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
#sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo
#sudo yum install -y apache-maven
#mvn --version

実際にMavenを利用するユーザでPATHを通しておく

vi  ~/.bash_profile

MavenJAVAプロジェクトの操作を行う

#mvn archetype:generate -DgroupId=org.selenide.examples -DartifactId=google-test
#cd google-test/

mvnコマンドから Java を実行できる便利なexec-maven-pluginをプラグインします。

初回は関係するライブラリのインストールなどもあり、少し時間がかかります。

mvn packeage

targetフォルダ配下に jarファイルやクラスファイルも確認できますね。

pom.xmlファイルの編集が必要

pom.xmlとは? mavenのプロジェクト定義ファイル。    mvnコマンドから Java を実行できる便利なプラグインexec-maven-pluginします。

  <modelVersion>4.0.0</modelVersion>

  <groupId>org.selenide.example</groupId>
  <artifactId>google-test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>google-test</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <font color="Red">**変更**</font>4.11
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

プロジェクト実行

mvn archetype:generate -DgroupId=org.selenide.examples -DartifactId=google-test

実行すると、いろいろファイルが作られる 単体テストで利用するのは、 AppTest.javaである。

$tree .
.
└── my-app
    ├── pom.xml
    └── src
        ├── main
        │   └── java
        │       └── com
        │           └── mycompany
        │               └── app
        │                   └── App.java
        └── test
            └── java
                └── com
                    └── mycompany
                        └── app
                            └── AppTest.java

実行

ここではエラーがでなくればとりあえず問題なし。

mvn test

ユニットテスト単体テスト)との準備

デフォルトでは、以下のパターンにマッチするファイルがテストとして実行されます。
/Test*.java
/Test.java
**/
TestCase.java
また、以下のファイルはデフォルトで除外されます:
/Abstract*Test.java
/AbstractTestCase.java
**/
$*
先ほど作成したプロジェクトには、常に成功するユニットテスト(src/test/com/example/AppTest.java) が含まれているので、 それが実行されます。

JUnitが推奨される理由

一度作成すればすばやくテスト可能である。
その後はテストコードを標本とすることでバグ訂正が容易となる。
テストコードを見れば仕様が一目瞭然となる。
誰でも同じテストを行えるようになる。
独自のテストコードによるテスト作成の手間を省ける。

仮想ディスプレイのインストール  

Xvfb インストール  bash:Xvfbインストール

yum install xorg-x11-server-Xvfb

bash:Xvfbサービス作成

vim /usr/lib/systemd/system/Xvfb.service

bash:/usr/lib/systemd/system/Xvfb.service

[Unit]
Description=Virtual Framebuffer X server for X Version 11

[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/Xvfb
ExecStart=/usr/bin/Xvfb $OPTION
ExecReload=/bin/kill -HUP ${MAINPID}

[Install]
WantedBy=multi-user.target

bash:Xvfb環境変数設定ファイル作成

vim /etc/sysconfig/Xvfb

`bash:/etc/sysconfig/Xvfb

# Xvfb Enviroment File
OPTION=":1 -screen 0 1366x768x24"

bash:Xvfbサービス起動

systemctl enable Xvfb
systemctl start Xvfb

Cromeのインストール

bash:Chromeリポジトリファイル作成

vim /etc/yum.repos.d/yum.repos.d

bash:/etc/yum.repos.d/yum.repos.d

[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

bash:google-chrome-stableインストール

yum install google-chrome-stable

日本語表示のために bash:日本語フォントインストール

yum install ipa-pgothic-fonts.noarch

ChromeDriver - WebDriver for Chrome : Downloads から適切なドライバーをダウンロード。今回はバージョン2.29。 bash:ChromeDriverインストール

wget http://chromedriver.storage.googleapis.com/2.29/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
mv chromedriver /usr/local/bin
rm chromedriver_linux64.zip

AppTest.java単体テストスクリプトを設置

package org.selenide.example;


import static com.codeborne.selenide.Condition.*;
import static com.codeborne.selenide.Selenide.*;
import static com.codeborne.selenide.CollectionCondition.size;
import static com.codeborne.selenide.Condition.text;
import static com.codeborne.selenide.Selenide.open;
import org.junit.Test;
import org.junit.BeforeClass;
import org.openqa.selenium.By;
import com.codeborne.selenide.Configuration;
import com.codeborne.selenide.WebDriverRunner;
/**
 * Unit test for simple App.
 */
public class AppTest
{

@BeforeClass
public static void ClassTest() {
Configuration.browser = WebDriverRunner.CHROME;
System.setProperty("webdriver.chrome.driver", "/usr/local/bin//chromedriver");
}

 @Test
    public void selenideTest() throws Exception {
    open("http://www.google.co.jp/");
}
}

実行

mvn Test

動きました。


## まとめ

・GoogleCromeではヘッドレスモードが動作することができるが、Selenaideでは動作ができなかったことが
課題である。
・FireFoxでもヘッドレスモードに対応したとのことなので、こちらも検証をしてみたい。

忘れてしまいがちなSWAP領域/AWSのEC2で作成方法

オンプレスサーバでは当たり前に設定したことが、AWSでは設定されていない なんてことがあります。

SWAP領域の作成なんて忘れてしまうのではないでしょうか。物理メモリ容量の不足を補う仮想メモリとして利用されています。

SWAP領域がない

EC2のnanoやmicro、smallといった小さいインスタンスを使っていると、 swap領域がないため、メモリを多く必要とする処理では失敗することがあります。

スワップアウトが頻繁に発生すると、処理速度が遅くなるため、設定が必要になります

SWAP領域の目安

作成するswap領域は、物理メモリが2GB以上ある場合には物理メモリと同じ容量で作成し、 2GB以下の場合は物理メモリの2倍程度の容量を作成すると良いです。

SWAP領域の設定方法

2Gのswap領域を追加する流れとなります。

まず、swap領域のフォルダを作成します。

sudo mkdir /swap

2GBのファイル「swap」を作成

dd if=/dev/zero of=/swap/swapfile1 bs=1M count=2048 dd if=/dev/zero of=/swap/swapfile2 bs=1M count=2048

権限を600に変更します。

sudo chmod 600 /swap/swapfile1 sudo chmod 600 /swap/swapfile2

mkswapコマンドでファイルをswapファイル化します。

sudo mkswap /swap/swapfile1 sudo mkswap /swap/swapfile2

swaponコマンドでswapファイルをシステムのswap領域として有効にします。

sudo swapon /swap/swapfile1 sudo swapon /swap/swapfile2

fstabファイルをバックアップしましょう

sudo cp -ip /etc/fstab /etc/fstab.20170816

fstabにswap領域の設定を追記します。

sudo sh -c "echo '/swap/swapfile1 swap swap defaults 0 0' >> /etc/fstab" sudo sh -c "echo '/swap/swapfile2 swap swap defaults 0 0' >> /etc/fstab"

SWAP領域ができていることを確認してください。

sudo grep Mem /proc/meminfo sudo grep Swap /proc/meminfo cat /proc/swaps

まとめ

そのほかでもクラウドならではの設定がありますので、随時アップしていく予定です。