Raspberry Pi で冷却ファンをPWM制御してみよう
- ■ このページの目標
-
Raspberry Pi に冷却ファンを取り付けると、基本的にはフルパワーで回りっぱなしだと思います。
このページでは トランジスタ と PWM という仕組みを使って、冷却ファンの回転数を制御してみます。
また、Raspberry Pi 起動時に自動で冷却ファンの制御が働くようにします。
今回は Raspberry Pi と各部品を直接つないでみようと思います。
その為、ブレッドボードは使いません。
- ■ 必要な物
-
Raspberry Pi 本体
ケース
GPIOピンの所にスペースがあいている物が使いやすくて良いと思います。
冷却ファン
5Vの電圧に対応した物を用意しましょう。
また、ケースの取り付け部分に合う大きさの物を選んで下さい。
トランジスタ
ジャンプワイヤー
トランジスタ と GPIOピン をつなげるのに使います。
1本1本、独立している物を選んで下さい。
複数本がひっついている製品もありますが、それは使いません。
- ■ 用語の解説
-
PWM -
Pulse Width Modulation の略。
電子部品に電気を流す場合、通常は電圧を一定にします。
そこで、意図的に電源のオン・オフを高速で繰り返し、オンのパルス幅を増減することで
見かけ上の電圧を変化させるのが PWM です。
この仕組みを利用すると、モーターの回転数やLEDの輝度などを制御できます。
トランジスタ -
半導体でできた電子部品で、電気の流れを制御します。
大まかには下記の働きがあります。
(1)電気信号の増幅
(2)電子回路のONとOFFを切り替える ← 今回はこのスイッチ機能を使って、PWMを実現します。
トランジスタの各名称と電流の向きは次のようになります。
2SC1815-GR という製品が安価で手に入るようなので、これを使います。
丸みのある部分が後ろ、平らな部分が前になります。
ベースから電気が流れると、コレクタ - エミッタ間の電気が流れるようになります。
ベースの電流が止まると、コレクタ - エミッタ間の電流が止まります。
-
Pulse Width Modulation の略。
- ■ Raspberry Pi 2 の GPIOピンについて
-
※Raspberry Pi のバージョンによって、GPIOピンの数や働きが違うようなので注意して下さい。
・・・ 電源です。3.3V と 5V があるので、必要に応じてお好きな方を選んで下さい。 ・・・ Ground。接地、アースのようなもの。配線のマイナス極をここにつなぐ。 ・・・ Raspberry Pi では GPIO18 だけに PWM の機能があるようです。トランジスタのベースをここにつなぐ。
- ■ 接続例
-
- ■ Python のライブラリをインストール ※追記しました
-
これから作る Python のプログラムは、環境によってライブラリが不足していて動かない場合があります。
そのため、事前にインストールしておきます。
sudo apt-get install python-daemon
- ■ Pythonで冷却ファンの制御プログラムを作成
-
Raspberry Pi の /home/pi ディレクトリに移動。
cd /home/pi
PWM_FanCooler ディレクトリを作成。
sudo mkdir PWM_FanCooler
/home/pi/PWM_FanCooler に移動。
cd /home/pi/PWM_FanCooler
PWM_FanCooler_d.py を作成して編集する。
sudo nano PWM_FanCooler_d.py
#!/usr/bin/python # coding: utf-8 # モジュールをインポート import RPi.GPIO as GPIO import time # daemon化に必要 from daemon import daemon from daemon.pidlockfile import PIDLockFile # GPIOのピン番号を定義 GPIO18 = 18 # 周波数を定義 Hz = 60 #================= # CPUの温度を取得 #================= def get_CPU_Temperature(): temp = "0" f = open("/sys/class/thermal/thermal_zone0/temp", "r") for t in f: temp=t[:2] + "." + t[2:5] f.close() return float(temp) #========= # PWM実行 #========= def exec_pwm(): #-------------------------------------- # GPIOを物理的なピン番号で指定する場合 #-------------------------------------- ## GPIOピン番号の定義方法 #GPIO.setmode(GPIO.BOARD) ## 出力モードで初期化 #GPIO.setup(12, GPIO.OUT) ## PWM初期化 #p = GPIO.PWM(12, Hz) #------------------------ # GPIO番号で指定する場合 #------------------------ # GPIOピン番号の定義方法 GPIO.setmode(GPIO.BCM) # 出力モードで初期化 GPIO.setup(GPIO18, GPIO.OUT) # PWM初期化 p = GPIO.PWM(GPIO18, Hz) try: # 100%の出力で、1秒間動かす # 最初の出力が小さすぎて、ファンが回らない場合の対策 Duty = 100 p.start(Duty) time.sleep(1) while True: # CPUの温度を取得 CPU_Temp = get_CPU_Temperature() # CPUの温度によって出力を変更 #------------------------- # ~20.0℃ --> 25% # 20.0℃~25.0℃ --> 50% # 25.0℃~30.0℃ --> 75% # 30.0℃~ --> 100% #------------------------- if CPU_Temp < 20.0: Duty = 25 elif CPU_Temp < 25.0: Duty = 50 elif CPU_Temp < 30.0: Duty = 75 else: Duty = 100 # 出力を変更して、30秒間待機 p.ChangeDutyCycle(Duty) time.sleep(30) except Exception as e: # 例外処理 print "[例外発生] PWM_FanCooler_d.py を終了します。" print "Exception : " + str(e) print " Type : " + str(type(e)) print " Args : " + str(e.args) print " Message : " + e.message finally: # PWMを終了 p.stop() # GPIO開放 GPIO.cleanup() if __name__ == "__main__": # PIDファイルの書き込みに失敗してデーモンが動かない事があるので、少し時間をずらす time.sleep(1) # /etc/init.d/PWM_FanCooler.sh のPIDファイルとは別名にする with daemon.DaemonContext(pidfile=PIDLockFile('/var/run/PWM_FanCooler_d.pid')): exec_pwm()
Ctrl + O で保存、Ctrl + X でnanoを終了。
解説
そのため、デーモン化してバックグランドで実行すると、他の作業ができるようになります。
from daemon import daemon from daemon.pidlockfile import PIDLockFile
with daemon.DaemonContext(pidfile=PIDLockFile('/var/run/PWM_FanCooler_d.pid')): exec_pwm()
変更内容
except Exception as e: # 例外処理 print "[例外発生] PWM_FanCooler_d.py を終了します。" print "Exception : " + str(e) print " Type : " + str(type(e)) print " Args : " + str(e.args) print " Message : " + e.message
PWM_FanCooler_d.py に実行権限を与える。
sudo chmod 755 PWM_FanCooler_d.py
- ■ デーモンを実行するスクリプトを作成
-
Raspberry Pi の /etc/init.d に移動。
cd /etc/init.d
PWM_FanCooler.sh を作成して編集する。
sudo nano PWM_FanCooler.sh
#!/bin/sh ### BEGIN INIT INFO # Provides: PWM_FanCooler # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Example initscript # Description: This file should be used to construct scripts to be # placed in /etc/init.d. This example start a # single forking daemon capable of writing a pid # file. To get other behavoirs, implemend # do_start(), do_stop() or other functions to # override the defaults in /lib/init/init-d-script. ### END INIT INFO #------------------- # PWM制御スクリプト #------------------- # Change the next 3 lines to suit where you install your script and what you want to call it DIR=/home/pi/PWM_FanCooler DAEMON=$DIR/PWM_FanCooler_d.py DAEMON_NAME=PWM_FanCooler # Add any command line options for your daemon here DAEMON_OPTS="" # This next line determines what user the script runs as. # Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python. DAEMON_USER=root # The process ID of the script when it runs is stored here: PIDFILE=/var/run/$DAEMON_NAME.pid . /lib/lsb/init-functions do_start () { log_daemon_msg "Starting system $DAEMON_NAME daemon" start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON -- $DAEMON_OPTS log_end_msg $? } do_stop () { log_daemon_msg "Stopping system $DAEMON_NAME daemon" start-stop-daemon --stop --pidfile $PIDFILE --retry 10 log_end_msg $? } case "$1" in start|stop) do_${1} ;; restart|reload|force-reload) do_stop do_start ;; status) status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $? ;; *) echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}" exit 1 ;; esac exit 0
Ctrl + O で保存、Ctrl + X でnanoを終了。
解説 ### BEGIN INIT INFO # Provides: PWM_FanCooler
4行目: スクリプトをシステムに登録する時に使われるサービス名のようなもの。
既にこの名前が使われていると、システム登録時に失敗します。
他と重ならないような名前をつけて下さい。
# Change the next 3 lines to suit where you install your script and what you want to call it DIR=/home/pi/PWM_FanCooler DAEMON=$DIR/PWM_FanCooler_d.py DAEMON_NAME=PWM_FanCooler
23行目: Pythonプログラムが保存されているディレクトリを指定。
24行目: Pythonプログラムのファイル名を指定。
25行目: デーモンの名前を指定。
# This next line determines what user the script runs as. # Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python. DAEMON_USER=root
32行目: デーモンを実行するユーザー名を指定。
PWM_FanCooler.sh に実行権限を与える。
sudo chmod 755 PWM_FanCooler.sh
スクリプト経由でデーモンを起動・停止する場合
開始。
sudo /etc/init.d/PWM_FanCooler.sh start
動作状況を確認。
sudo /etc/init.d/PWM_FanCooler.sh status
停止。
sudo /etc/init.d/PWM_FanCooler.sh stop
- ■ スクリプトが自動起動するよう、システムに登録
-
スクリプトの登録方法
Raspberry Pi の /etc/init.d に移動。
cd /etc/init.d
スクリプトを登録する。
sudo update-rc.d PWM_FanCooler.sh defaults
スクリプトが登録されたか確認する。
ls -l /etc/rc?.d/*PWM_FanCooler.sh
変更を加えたら更新する。
sudo systemctl daemon-reload
Raspberry Pi を再起動する。
sudo reboot
再起動時に冷却ファンが自動的に回るようになれば成功です!
スクリプトの登録を削除する場合
sudo update-rc.d -f /etc/init.d/PWM_FanCooler.sh remove
スポンサーサイト
Raspberry Pi にsambaを導入してファイル共有
- ■ このページの目標
-
Raspberry Pi に samba を導入して、ファイルサーバーとして機能させてみます。
- ■ apt をアップデート
-
sudo apt-get update
apt-get … パッケージを取得してインストール・アップデート・アンインストールするコマンド。
update … aptのパッケージリストを更新します。
- ■ samba をインストール
-
sudo apt-get install samba
- ■ samba-common-bin をインストール
-
sudo apt-get install samba-common-bin
samba-common-bin はパスワードの設定で必要です。
- ■ samba を再起動
-
sudo service samba restart
エラーでsambaを再起動できない場合は、以下のコマンドで再起動します。
sudo service smbd restart sudo service nmbd restart
- ■ Sambaのユーザー登録を行う
-
(1) sambaにユーザーを追加します。
-
Raspberri pi と同じユーザー名にして下さい。
初期状態では pi になっているはずです。
sudo smbpasswd -a pi
(2) sambaのパスワードを設定します。
-
先程、追加したユーザー pi にパスワードを設定します。
sudo smbpasswd pi
Raspberri Pi と同じパスワードにして下さい。
初期状態では raspberry になっているはずです。
New SMB password:
Retype new SMB password:
-
Raspberri pi と同じユーザー名にして下さい。
- ■ ファイアウォールの設定をチェック
-
(1) 現在の設定を確認します。
-
sudo ufw status
[参考例]To Action From -- ------ ---- 22/tcp ALLOW 192.168.1.0/24 137/udp ALLOW 192.168.1.0/24 138/udp ALLOW 192.168.1.0/24 139/tcp ALLOW 192.168.1.0/24 445/tcp ALLOW 192.168.1.0/24
この中で下記のポートが許可されていればOKです。
137/udp
138/udp
139/tcp
445/tcp
(2) 上記のポートが許可されていない場合、ファイアウォールにルールを追加します。
-
sudo ufw allow proto udp from 192.168.1.0/24 to any port 137
sudo ufw allow proto udp from 192.168.1.0/24 to any port 138
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 139
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 445
192.168.1.0/24 の部分はそれぞれの環境に合わせて読み替えて下さい。
-
- ■ sambaの設定ファイルを変更
-
(1) /etc/samba ディレクトリに移動。
-
cd /etc/samba
(2) smb.conf のバックアップをとる。
-
sudo cp smb.conf smb.conf_original
(3) smb.conf を編集。
-
sudo nano smb.conf
[global] のすぐ下に、文字コードの設定を追加します。[global]
unix charset = UTF-8
dos charset = CP932
設定ファイルの末尾に、共有フォルダの設定を追加します。
[common] comment = RasPi2 Share Directory path = /media/usb0/data browseable = yes read only = no guest ok = no force user = pi
[common] … ここで指定された名前が、共有フォルダの名前になります。 comment … 共有フォルダの説明。 path … 実際に共有する Raspberry Pi のディレクトリ。 browseable … yes にすると他のコンピュータから見えるようになります。 read only … no にすると、他のコンピュータからファイルの作成・変更をできるようになります。 guest ok … no にすると、guest account による操作が禁止。ユーザー名・パスワードを求められるようになります。 force user … samba に対するデフォルトユーザー。指定のユーザーの権限で、ファイル操作が行なわれます。
Ctrl + O で上書き、Ctrl + X で nano を終了します。
※ログファイルのサイズを変更したり、共有プリンタの機能を切る事もできますが、ここでの説明は割愛します。
-
- ■ samba を再起動
-
sudo service samba restart
エラーでsambaを再起動できない場合は、以下のコマンドで再起動します。
sudo service smbd restart sudo service nmbd restart
以上で、他のコンピュータから Raspberry Pi の共有フォルダを利用できるはずです。
- ■ 各種・設定方法
-
【準備】 Raspberry Pi 2 を用意してみよう
(1) Raspberry Pi 2 の OS をインストールする
(2) IPアドレスを設定
(3) システム時刻を日本に設定
(4) RAMディスクを使って、micro SDを長寿命化
(5) Raspberry Pi にUSBメモリをマウント
(6) ファイアウォールを設定
(7) samba を導入して、共有フォルダを作る
Raspberry Pi のファイアウォールを設定
- ■ このページの目標
-
Raspberry Pi を自宅のファイルサーバーとして運用する場合、外部からのアクセスを遮断する必要があります。
その対策として、ファイアウォールを設定します。
設定を間違えると、Raspberry Pi との通信ができなくなるので注意して設定して下さい。
- ■ ufw をインストール
-
ファイアウォールを簡単に設定できるソフト ufw をインストールします。
sudo apt-get install ufw
- ■ ufw を設定する
-
(1) 通信を全て遮断するように設定。
sudo ufw default deny
(2) TCPプロトコルで22番ポートの通信を許可する。
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 22
22番ポートはTeratermとのSSH通信で使用します。
192.168.1.0/24 とは? -
192.168.1.1~192.168.1.254 からの通信を許可するという意味です。
それぞれの環境に合わせて読み替えて下さい。
例えば、ローカルエリアのIPアドレスが 192.168.0.1~192.168.0.254 の場合、
192.168.0.0/24 と指定します。
(3) UDPプロトコルで137番・138番ポート、TCPプロトコルで139番・445番ポートの通信を許可する。
sudo ufw allow proto udp from 192.168.1.0/24 to any port 137
sudo ufw allow proto udp from 192.168.1.0/24 to any port 138
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 139
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 445
137番・138番・139番・445番ポートはWindowsとのファイル共有で使用します。
192.168.1.0/24 はそれぞれの環境に合わせて読み替えて下さい。
(4) ファイアウォールを有効にします。
sudo ufw enable
(5) ファイアウォールの状態を確認する。
sudo ufw status
[参考例]
Status: active To Action From -- ------ ---- 22/tcp ALLOW 192.168.1.0/24 137/udp ALLOW 192.168.1.0/24 138/udp ALLOW 192.168.1.0/24 139/tcp ALLOW 192.168.1.0/24 445/tcp ALLOW 192.168.1.0/24
以上で、とりあえずの設定は終了です。
上記以外の通信を許可する場合は、その都度設定していきましょう。
-
192.168.1.1~192.168.1.254 からの通信を許可するという意味です。
- ■ uwf のその他の操作方法
-
(1) ufw を無効にする場合
sudo ufw disable
(2) uwf の設定を全てリセットする場合
sudo ufw reset
(3) 特定のルールを削除する場合
Status: active To Action From -- ------ ---- 22/tcp ALLOW 192.168.1.0/24 137/udp ALLOW 192.168.1.0/24 138/udp ALLOW 192.168.1.0/24 139/tcp ALLOW 192.168.1.0/24 445/tcp ALLOW 192.168.1.0/24 65535/tcp ALLOW 192.168.1.0/24
例えばこの中から 65535/tcp、ALLOW、192.168.1.0/24 を削除するには次のコマンドを実行します。
sudo ufw delete allow proto tcp from 192.168.1.0/24 to any port 65535
- ■ 各種・設定方法
-
【準備】 Raspberry Pi 2 を用意してみよう
(1) Raspberry Pi 2 の OS をインストールする
(2) IPアドレスを設定
(3) システム時刻を日本に設定
(4) RAMディスクを使って、micro SDを長寿命化
(5) Raspberry Pi にUSBメモリをマウント
(6) ファイアウォールを設定
(7) samba を導入して、共有フォルダを作る
Raspberry Pi にUSBメモリをマウント
- ■ このページの目標
-
Raspberry Pi にUSBメモリを認識させてみます。
USBメモリを ext4 でフォーマット。
起動時に特定の場所にマウントするように設定します。
この先の操作をすると、USBメモリのデータは消えます。
データがある場合はバックアップしておきましょう。
- ■ デバイスの情報を確認
-
Raspberry Pi にUSBメモリをつないだら、次のコマンドを実行します。
sudo fdisk -l
fdisk … ハードディスクのパーティションを設定するコマンド。
-l … fdiskのオプション。現在マウントされているデバイスの情報を表示する。
[参考例]
Disk /dev/sda: 28.9 GiB, 31024349184 bytes, 60594432 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x386954cf Device Boot Start End Sectors Size Id Type /dev/sda1 2048 60594431 60592384 28.9G 83 Linux
まっさらの状態で初めてUSBメモリを装着すると、/dev/sda1 でマウントされるはずです。
ただし、環境によって違うので記憶容量やフォーマットのタイプで判断して下さい。
ここから先は、/dev/sda1 がUSBメモリのマウント先だと仮定して話を進めます。
マウント先が違う場合はその都度、読み替えて下さい。
- ■ USBメモリのパーティションを設定
-
/dev/sda1 がUSBメモリだった場合、fdisk でパーティションを再設定します。
sudo fdisk /dev/sda1
fdisk 実行中にコマンドを問われるので、以下のように進めます。
-
(1) パーティションを削除
Command (m for help): d
(2) パーティションを追加
Command (m for help): n
(3) パーティション情報を表示
Select (default p): p
(4) 1番目を選択
Partition number (1-4, default 1): 1
(5) 表示された情報でよければ、パーティション情報を書き込んで終了
※パーティションを設定しないで終了する場合は q を入力して終了Command (m for help): w
-
(1) パーティションを削除
- ■ USBメモリをフォーマット
-
Linux上でファイルの読み書きが早いと言われる ext4 でフォーマットしてみます。
(Windowsでは認識しなくなります、ご了承ください。)
sudo mkfs.ext4 /dev/sda1
- ■ マウント先を変更
-
(1) Raspberry Pi に新しいディレクトリ /media/usb0 を作成
sudo mkdir /media/usb0
mkdir … ディレクトリを作成するコマンド。make directory の略。
(2) USBメモリのマウント先を /media/usb0 に変更
sudo mount /dev/sda1 /media/usb0
(3) ファイルシステムのディスク容量を確認
df
[参考例]
Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 3743376 3461876 71632 98% / devtmpfs 469708 0 469708 0% /dev tmpfs 474028 0 474028 0% /dev/shm tmpfs 474028 6412 467616 2% /run tmpfs 5120 4 5116 1% /run/lock tmpfs 474028 0 474028 0% /sys/fs/cgroup /dev/mmcblk0p1 61384 20312 41072 34% /boot tmpfs 94808 0 94808 0% /run/user/1000 /dev/sda1 30280032 16 30280016 1% /media/usb0
ここで /dev/sda1 のマウント先が /media/usb0 になっていればOKです。
- ■ Raspberry Pi の起動時にUSBメモリを自動マウント
-
(1) USBメモリの UUID を確認
sudo blkid /dev/sda1
blkid … ブロックデバイスに関する情報を表示するコマンド。
[参考例]
/dev/sda1: UUID="dc69fc31-4a50-44e2-a3f7-f5648fea6f8d" TYPE="ext4" PARTUUID="386954cf-01"
(2) /etc ディレクトリに移動
cd /etc
(3) fstab のバックアップをとる
※RAMディスクを設定する時に一度バックアップをとっているはずなので、ファイル名が重複しないようにします。sudo cp fstab fstab_backup2
※ls コマンドでファイル名の一覧を確認できますので、重複しないように一応確認しておいて下さい。
(4) fstab に追記
sudo nano fstab
[編集前(一部抜粋)]
proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1
[編集後(一部抜粋)]
proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 #/dev/sda1 /media/usb0 ext4 defaults,noatime 0 0 UUID=dc69fc31-4a50-44e2-a3f7-f5648fea6f8d /media/usb0 ext4 defaults,noatime 0 0
※より確実に指定するために UUID で設定します。
Ctrl + O で上書き、Ctrl + X で nano を終了します。
(5) Raspberry Pi を再起動
sudo reboot
(6) df コマンドでマウント先を確認
df
[参考例]
Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 3743376 3461876 71632 98% / devtmpfs 469708 0 469708 0% /dev tmpfs 474028 0 474028 0% /dev/shm tmpfs 474028 6412 467616 2% /run tmpfs 5120 4 5116 1% /run/lock tmpfs 474028 0 474028 0% /sys/fs/cgroup /dev/mmcblk0p1 61384 20312 41072 34% /boot tmpfs 94808 0 94808 0% /run/user/1000 /dev/sda1 30280032 16 30280016 1% /media/usb0
マウント先が /media/usb0 になっていればOKです。
- ■ Raspberry Pi からUSBメモリを取り外す場合
-
Raspberry Pi からUSBメモリを取り外す場合、アンマウントする必要があります。
アンマウントせずにいきなり取り外すと、ファイルシステムが壊れてデータの読み書きができなくなる可能性があります。
(1) USBメモリをアンマウントします。
sudo umount /media/usb0
(2) Raspberry Pi からUSBを取り外しできます。
- ■ 各種・設定方法
-
【準備】 Raspberry Pi 2 を用意してみよう
(1) Raspberry Pi 2 の OS をインストールする
(2) IPアドレスを設定
(3) システム時刻を日本に設定
(4) RAMディスクを使って、micro SDを長寿命化
(5) Raspberry Pi にUSBメモリをマウント
(6) ファイアウォールを設定
(7) samba を導入して、共有フォルダを作る
Raspberry Pi、RAMディスクで micro SDを長寿命化
- ■ このページの目標
-
Raspberry Pi のメモリ上に RAMディスク を作り、ログファイルやキャッシュ等をそこへ書き込みます。
また、swap機能を切って、メインメモリと補助記憶装置のやりとりを減らします。
RAMディスク -
コンピュータのメインメモリ上に確保して、補助記憶装置と同じように利用できる領域のこと。
電源を切ったり再起動すると、内容は失われます。
swap -
メインメモリであまり使われないデータを補助記憶装置に移して空き領域を作ったり、
そのデータを使う時はメインメモリに書き戻して、使える状態にする仕組み。
Raspberry Pi 2 は補助記憶装置に micro SD を使っています。
しかし、SDカードやUSBメモリ等のフラッシュメモリは、データを保存するメディアとして寿命がかなり短いです。
そのため micro SD がなるべく長持ちするように、書き込みを減らします。
-
コンピュータのメインメモリ上に確保して、補助記憶装置と同じように利用できる領域のこと。
- ■ swap を無効にする
-
(1) swapの確認。
次のコマンドで、現在のswapの状態を確認できます。free
(2) swapを無効化。
sudo swapoff --all
(3) 再起動すると復活するので、swapが自動起動しないようにパッケージを削除。
sudo apt-get remove dphys-swapfile
(4) Raspberry Pi を再起動。
sudo reboot
(5) 再起動したら、swapを確認。
swapの使用量が0になっていればOKです。free
- ■ 一時フォルダとログファイルをRAMディスクにマウント
-
(1) /etc ディレクトリに移動。
cd /etc
(2) fstab のバックアップをとる。
sudo cp fstab fstab_original
(3) fstab を編集する。
sudo nano /etc/fstab
[ファイルの末尾に追加]
# 一時フォルダをRAMディスクにマウント tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0 # /var/log をRAMディスクにマウント tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0
Ctrl + O で上書き、Ctrl + X で nano を終了する。
- ■ ログファイルの設定を変更
-
(1) /etc ディレクトリに移動。
cd /etc
(2) rsyslog.conf のバックアップをとる。
sudo cp rsyslog.conf rsyslog.conf_original
(3) rsyslog.conf を編集する。
sudo nano rsyslog.conf
以下のログファイルだけ残すように変更。
/var/log/auth.log
/var/log/syslog
/var/log/daemon.log
[変更前]
############### #### RULES #### ############### # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog #cron.* /var/log/cron.log daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log user.* -/var/log/user.log # # Logging for the mail system. Split it up so that # it is easy to write scripts to parse these files. # mail.info -/var/log/mail.info mail.warn -/var/log/mail.warn mail.err /var/log/mail.err
[変更後]
############### #### RULES #### ############### # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog #cron.* /var/log/cron.log daemon.* -/var/log/daemon.log #kern.* -/var/log/kern.log #lpr.* -/var/log/lpr.log #mail.* -/var/log/mail.log #user.* -/var/log/user.log # # Logging for the mail system. Split it up so that # it is easy to write scripts to parse these files. # #mail.info -/var/log/mail.info #mail.warn -/var/log/mail.warn #mail.err /var/log/mail.err
Ctrl + O で上書き、Ctrl + X で nano を終了する。
- ■ rc.local を編集
-
(1) /etc ディレクトリに移動する。
cd /etc
(2) rc.local のバックアップをとる。
sudo cp rc.local rc.local_original
(3) rc.local を編集する。
sudo nano rc.local
ログを記録するプログラムでは、ディレクトリが無いとエラーになる場合があります。
その対策として起動時に、RAMディスクにディレクトリを作成します。
下記を参考に、コマンドを追加して下さい。
[変更前]
# Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi exit 0
[変更後]
# Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi # # RAMディスクに自動的にフォルダを追加 # mkdir -p /var/log/ConsoleKit mkdir -p /var/log/samba mkdir -p /var/log/fsck mkdir -p /var/log/apt mkdir -p /var/log/ntpstats chown root.ntp /var/log/ntpstats chown root.adm /var/log/samba touch /var/log/lastlog touch /var/log/wtmp touch /var/log/btmp chown root.utmp /var/log/lastlog chown root.utmp /var/log/wtmp chown root.utmp /var/log/btmp exit 0
Ctrl + O で上書き、Ctrl + X で nano を終了する。
- ■ Raspberry Pi を再起動
-
sudo reboot
以上で、RAMディスクの設定は終了です。
- ■ 各種・設定方法
-
【準備】 Raspberry Pi 2 を用意してみよう
(1) Raspberry Pi 2 の OS をインストールする
(2) IPアドレスを設定
(3) システム時刻を日本に設定
(4) RAMディスクを使って、micro SDを長寿命化
(5) Raspberry Pi にUSBメモリをマウント
(6) ファイアウォールを設定
(7) samba を導入して、共有フォルダを作る