白執事の徒然なる日々


主にコンピュータ関係の記事を書いています。

プロフィール

白執事☆

こんにちは、白執事です。
PC関係の記事を書いていきますので
よろしくお願いします。

Raspberry Pi で冷却ファンをPWM制御してみよう

このページの目標

Raspberry Pi に冷却ファンを取り付けると、基本的にはフルパワーで回りっぱなしだと思います。
このページでは トランジスタPWM という仕組みを使って、冷却ファンの回転数を制御してみます。
また、Raspberry Pi 起動時に自動で冷却ファンの制御が働くようにします。

今回は Raspberry Pi と各部品を直接つないでみようと思います。
その為、ブレッドボードは使いません。


必要な物

Raspberry Pi 本体
今回は Raspberry Pi 2 を使って説明します。


ケース
冷却ファンに対応した Raspberry Pi のケースを用意しましょう。
GPIOピンの所にスペースがあいている物が使いやすくて良いと思います。



冷却ファン
下記のようにケーブルが分かれている方が使いやすいのでおすすめです。
5Vの電圧に対応した物を用意しましょう。
また、ケースの取り付け部分に合う大きさの物を選んで下さい。



トランジスタ
2SC1815-GR という製品を使って、この先の説明をします。



ジャンプワイヤー
(メス-メス)のケーブルを用意しましょう。 ここでは2本使う予定です。
トランジスタGPIOピン をつなげるのに使います。
1本1本、独立している物を選んで下さい。
複数本がひっついている製品もありますが、それは使いません。



用語の解説

PWM
  • Pulse Width Modulation の略。

    電子部品に電気を流す場合、通常は電圧を一定にします。
    そこで、意図的に電源のオン・オフを高速で繰り返し、オンのパルス幅を増減することで
    見かけ上の電圧を変化させるのが PWM です。

    この仕組みを利用すると、モーターの回転数やLEDの輝度などを制御できます。




トランジスタ
  • 半導体でできた電子部品で、電気の流れを制御します。
    大まかには下記の働きがあります。

    (1)電気信号の増幅
    (2)電子回路のONとOFFを切り替える ← 今回はこのスイッチ機能を使って、PWMを実現します。

    トランジスタの各名称と電流の向きは次のようになります。



    2SC1815-GR という製品が安価で手に入るようなので、これを使います。
    丸みのある部分が後ろ、平らな部分が前になります。




    ベースから電気が流れると、コレクタ - エミッタ間の電気が流れるようになります。
    ベースの電流が止まると、コレクタ - エミッタ間の電流が止まります。


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を終了。


解説
Pythonのプログラムを普通に作ってそのまま実行すると、実行中は他のコマンドを入力できない状態になります。
そのため、デーモン化してバックグランドで実行すると、他の作業ができるようになります。
from daemon import daemon
from daemon.pidlockfile import PIDLockFile
	with daemon.DaemonContext(pidfile=PIDLockFile('/var/run/PWM_FanCooler_d.pid')):
		exec_pwm()


変更内容
例外処理でエラー内容を表示するように修正しました (2017/05/05)
	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
※PWM_FanCoolerに関するファイルが表示されたらOK。

変更を加えたら更新する。
sudo systemctl daemon-reload

Raspberry Pi を再起動する。
sudo reboot


再起動時に冷却ファンが自動的に回るようになれば成功です!


スクリプトの登録を削除する場合

sudo update-rc.d -f /etc/init.d/PWM_FanCooler.sh remove

スポンサーサイト




カテゴリー:Raspberry Pi | タグ:
コメント(2)トラックバック (0) | 2017年04月23日 (日)05時11分

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:
    セキュリティのため、入力した文字列は非表示ですが気にせず入力を続けて下さい。


ファイアウォールの設定をチェック

(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 + Xnano を終了します。

    ※ログファイルのサイズを変更したり、共有プリンタの機能を切る事もできますが、ここでの説明は割愛します。


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 | タグ:
コメント(0)トラックバック (0) | 2016年04月01日 (金)19時11分

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

以上で、とりあえずの設定は終了です。
上記以外の通信を許可する場合は、その都度設定していきましょう。


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/tcpALLOW192.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 | タグ:
コメント(0)トラックバック (0) | 2016年04月01日 (金)19時10分

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) 表示された情報でよければ、パーティション情報を書き込んで終了
    Command (m for help): w
    ※パーティションを設定しないで終了する場合は q を入力して終了


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"
※ここで表示される UUID を後で使います。


(2) /etc ディレクトリに移動
cd /etc


(3) fstab のバックアップをとる
sudo cp fstab fstab_backup2
※RAMディスクを設定する時に一度バックアップをとっているはずなので、ファイル名が重複しないようにします。
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
/dev/sda1 で指定してもいいのですが、環境やUSBメモリを挿す順番で変わる場合があります。
※より確実に指定するために UUID で設定します。

Ctrl + O で上書き、Ctrl + Xnano を終了します。


(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 | タグ:
コメント(0)トラックバック (0) | 2016年04月01日 (金)19時09分

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 + Xnano を終了する。


ログファイルの設定を変更

(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 + Xnano を終了する。


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 + Xnano を終了する。


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 を導入して、共有フォルダを作る



カテゴリー:Raspberry Pi | タグ:
コメント(1)トラックバック (0) | 2016年04月01日 (金)19時07分