20170521-title01

さて、前回まででapache2.4やphp7.1、mysql5.7の現時点での最新版がインストール出来ました。 でも、細かな設定をしていません。 特にapacheとmysql、どこをデータ領域として使用するか。

MicroSDカードをデータ領域として使用すると読み書きの頻度が多くなって破損率高くなるかも。

というわけで、usbメモリを導入してそれをラズパイのストレージとして使用することにしました。




購入したusbメモリ

購入したのはSanDiskのCruzer Fit USBフラッシュメモリー 64GBというもの。

購入ポイントとしては以下。

  • 容量がMicroSDカード(32GB)よりも大きいこと。
  • USBインターフェイスはラズパイに合わせて2.0でよい。
  • 安いこと。

こんなところです。

本当は速度とか温度とかあるんだけど、使ってみないと分からないよね。

てなわけで、どちらかというと安さ重視で買ってみました。


usbメモリのパーティション切りでプチはまり

まず、usbメモリを接続する前に以下のコマンドでsyslogを監視。

$ sudo tail -f /var/log/message
 
May 15 23:41:59 mng-svr01 kernel: [    9.834591] Bluetooth: HCI socket layer initialized
May 15 23:41:59 mng-svr01 kernel: [    9.834600] Bluetooth: L2CAP socket layer initialized
May 15 23:41:59 mng-svr01 kernel: [    9.834618] Bluetooth: SCO socket layer initialized
May 15 23:41:59 mng-svr01 kernel: [    9.844464] Bluetooth: HCI UART driver ver 2.3
May 15 23:41:59 mng-svr01 kernel: [    9.844478] Bluetooth: HCI UART protocol H4 registered
May 15 23:41:59 mng-svr01 kernel: [    9.844484] Bluetooth: HCI UART protocol Three-wire (H5) registered
May 15 23:41:59 mng-svr01 kernel: [    9.844609] Bluetooth: HCI UART protocol BCM registered
May 15 23:42:00 mng-svr01 kernel: [   10.511200] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
May 15 23:42:00 mng-svr01 kernel: [   10.511214] Bluetooth: BNEP filters: protocol multicast
May 15 23:42:00 mng-svr01 kernel: [   10.511329] Bluetooth: BNEP socket layer initialized

この状態でラズパイにusbメモリを接続すると、、、

May 15 23:54:23 mng-svr01 kernel: [  745.301928] usb 1-1.5: new high-speed USB device number 4 using dwc_otg
May 15 23:54:23 mng-svr01 kernel: [  745.402851] usb 1-1.5: New USB device found, idVendor=0781, idProduct=5571
May 15 23:54:23 mng-svr01 kernel: [  745.402874] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May 15 23:54:23 mng-svr01 kernel: [  745.402888] usb 1-1.5: Product: Cruzer Fit
May 15 23:54:23 mng-svr01 kernel: [  745.402900] usb 1-1.5: Manufacturer: SanDisk
May 15 23:54:23 mng-svr01 kernel: [  745.402912] usb 1-1.5: SerialNumber: XXXXXXXXXXXXXXXXXXXX
May 15 23:54:23 mng-svr01 kernel: [  745.405085] usb-storage 1-1.5:1.0: USB Mass Storage device detected
May 15 23:54:23 mng-svr01 kernel: [  745.406879] scsi host0: usb-storage 1-1.5:1.0
May 15 23:54:24 mng-svr01 kernel: [  746.403034] scsi 0:0:0:0: Direct-Access     SanDisk  Cruzer Fit       1.00 PQ: 0 ANSI: 6
May 15 23:54:24 mng-svr01 kernel: [  746.404634] sd 0:0:0:0: [sda] 122830848 512-byte logical blocks: (62.9 GB/58.6 GiB)
May 15 23:54:24 mng-svr01 kernel: [  746.405615] sd 0:0:0:0: [sda] Write Protect is off
May 15 23:54:24 mng-svr01 kernel: [  746.406076] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
May 15 23:54:24 mng-svr01 kernel: [  746.414997] sd 0:0:0:0: Attached scsi generic sg0 type 0
May 15 23:54:24 mng-svr01 kernel: [  746.417530]  sda: sda1
May 15 23:54:24 mng-svr01 kernel: [  746.420607] sd 0:0:0:0: [sda] Attached SCSI removable disk

容量は62.9 GB/58.6 GiBで認識、デバイスはsda1で認識しているっぽい。よしよし。

それじゃ、usbメモリにパーティションを作っていく。fdiskってコマンドを使うんだって。

$ sudo fdisk /dev/sda
 
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
 
Command (m for help): p ←パーティション情報を表示
Disk /dev/sda: 58.6 GiB, 62889394176 bytes, 122830848 sectors
Geometry: 64 heads, 32 sectors/track, 59976 cylinders
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: sun
 
Device         Start       End   Sectors  Size Id Type         Flags
/dev/sda1          0 122728447 122728448 58.5G 83 Linux native
/dev/sda2  122728448 122830847    102400   50M 82 Linux swap      u
/dev/sda3          0 122830847 122830848 58.6G  5 Whole disk

なななんか!すでに容量ほぼMaxでLinux nativeパーティション出来てるし、50Mでswapパーティションも出来てるし、よく分からん状態!

なので、一度全部削除。

Command (m for help): d ←パーティションを削除
Partition number (1-3, default 3): ←ENTERのみ。3番目のパーティションを選択
 
If you want to maintain SunOS/Solaris compatibility, consider leaving this partition as Whole disk (5), starting at 0, with 122830848 sectors
Partition 3 has been deleted.
 
Command (m for help): p ←パーティション情報を表示
Disk /dev/sda: 58.6 GiB, 62889394176 bytes, 122830848 sectors
Geometry: 64 heads, 32 sectors/track, 59976 cylinders
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: sun
 
Device         Start       End   Sectors  Size Id Type         Flags
/dev/sda1          0 122728447 122728448 58.5G 83 Linux native
/dev/sda2  122728448 122830847    102400   50M 82 Linux swap      u
 
 
Command (m for help): d ←パーティションを削除
Partition number (1,2, default 2): ←ENTERのみ。2番目のパーティションを選択
 
Partition 2 has been deleted.
 
Command (m for help): p ←パーティション情報を表示
Disk /dev/sda: 58.6 GiB, 62889394176 bytes, 122830848 sectors
Geometry: 64 heads, 32 sectors/track, 59976 cylinders
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: sun
 
Device     Start       End   Sectors  Size Id Type         Flags
/dev/sda1      0 122728447 122728448 58.5G 83 Linux native
 
 
Command (m for help): d ←パーティションを削除
Selected partition 1
Partition 1 has been deleted.

これで全てのパーティションを削除したった。

さて、では新しくパーティションを作っていく。

パーティションは2つ、すなわち20GBと残りって感じにします。

Command (m for help): n ←パーティションを作成
Partition number (1-8, default 1): 1 ←1個目なので1を入力
First sector (0-122830848, default 0): 0 ←セクタの最初から作りたいので0
Last sector or +sectors or +size{K,M,G,T,P} (0-122830848, default 122830848): +20G ←20GBのパーティションを作りたいので「+20G」と入力
 
Created a new partition 1 of type 'Linux native' and of size 20 GiB.
 
Command (m for help): p
Disk /dev/sda: 58.6 GiB, 62889394176 bytes, 122830848 sectors
Geometry: 64 heads, 32 sectors/track, 59976 cylinders
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: sun
 
Device     Start      End  Sectors Size Id Type         Flags
/dev/sda1      0 41943039 41943040  20G 83 Linux native
 
 
Command (m for help): n ←更にパーティションを作成
Partition number (2-8, default 2): 2 ←2個目なので2を入力
First sector (41943040-122830848, default 41943040): ←2個目のパーティションは残り全部なのでデフォ値のままENTER
Last sector or +sectors or +size{K,M,G,T,P} (41943040-122830848, default 122830848):
 
Created a new partition 2 of type 'Linux native' and of size 38.6 GiB.
 
Command (m for help): p
Disk /dev/sda: 58.6 GiB, 62889394176 bytes, 122830848 sectors
Geometry: 64 heads, 32 sectors/track, 59976 cylinders
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: sun
 
Device        Start       End  Sectors  Size Id Type         Flags
/dev/sda1         0  41943039 41943040   20G 83 Linux native
/dev/sda2  41943040 122830847 80887808 38.6G 83 Linux native
 
Command (m for help): w ←パーティション情報をusbに書き込んで終了
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

これで、20GBと38.6GBの2つのパーティションが作成できました。

そして一旦reboot。

そんじゃフォーマット。

$ sudo mkfs.ext4 /dev/sda1
 
mke2fs 1.42.12 (29-Aug-2014)
The file /dev/sda1 does not exist and no size was specified.

ありゃ?sda1が無い。。。fdisk -lするとちゃんと/dev/sda1も/dev/sda2も存在するのに。

/devの下にあるのはsdaでsda1もsda2も存在しない。なんでや?

てな感じで今回はここがはまりポイント。

色々考えたけど、/dev/sdaを一度フォーマットしちゃおう!ってことになりました。

$ sudo mkfs.ext4 /dev/sda

そしてもう一度fdiskでパーティション切りなおしました。

そしたら今度は/devの下にはsda、sda1、sda2が出来てました。どうしてだ?!まぁ、よいか。

つ~わけで、各パーティションごとにフォーマット。

$ sudo mkfs.ext4 /dev/sda1
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 5242880 4k blocks and 1310720 inodes
Filesystem UUID: 92a73bd7-e885-4fd3-9617-9185f86ae1b0
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000
 
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
 
$ sudo mkfs.ext4 /dev/sda2
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 10110720 4k blocks and 2531328 inodes
Filesystem UUID: 75fc2baf-c06b-45e3-80c1-ff377fe93220
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624
 
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done


ラズパイにusbメモリをマウントさせる

パーティションに対するUUIDを調べる。

$ sudo blkid /dev/sda1
/dev/sda1: UUID="92a73bd7-e885-4fd3-9617-9185f86ae1b0" TYPE="ext4" PARTUUID="35939d2e-01"
 
$ sudo blkid /dev/sda2
/dev/sda2: UUID="75fc2baf-c06b-45e3-80c1-ff377fe93220" TYPE="ext4" PARTUUID="35939d2e-02"

このUUIDを指定してmountする。

その前にマウントポイント(mountする先のディレクトリ)を作成する。

$ sudo mkdir /date
$ sudo mkdir /backup

そしたらマウントの設定。

$ sudo vim /etc/fstab
 
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
UUID="92a73bd7-e885-4fd3-9617-9185f86ae1b0" /data   ext4 defaults,noatime 0 0 ←追加
UUID="75fc2baf-c06b-45e3-80c1-ff377fe93220" /backup ext4 defaults,noatime 0 0 ←追加
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

ちなみにfstabの書式は以下サイトを参考にさせて頂きました。

これでrebootして、以下のコマンドでusbメモリがマウントされているか確認。

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root         29G  2.5G   25G    9% /
devtmpfs         483M     0  483M    0% /dev
tmpfs            487M     0  487M    0% /dev/shm
tmpfs            487M  6.5M  481M    2% /run
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
tmpfs            487M     0  487M    0% /sys/fs/cgroup
/dev/sda2         38G   48M   36G    1% /backup ←mountされてる
/dev/sda1         20G   44M   19G    1% /data ←mountされてる
/dev/mmcblk0p1    63M   21M   42M   33% /boot

出来た!ひゃっほー!


MySQLの設定

さて、そしたらusbメモリをmountした/dataの下にmysqlを作ってそこをdbのデータディレクトリにする。

$ sudo mv /data/mysql

次は今までのdataディレクトリの内容を/data/mysqlの下にコピーする。これはrootで作業した。

$ su -
パスワード:
# cd /var/lib/mysql
# cp -rf * /data/mysql/.

コピーしたファイルはrootの所有物になっているので、mysqlユーザーの所有物に変更する。

# chown -R mysql:mysql /data/mysql/
# exit

あとは、mysqlの設定ファイルを本格的に作る。

$ sudo vim /etc/mysql/mysql.conf.d/rpi-my.cnf
 
[mysqld]
# ユーザー
user=mysql
 
# ベースディレクトリ
basedir=/var/lib/mysql
 
# データディレクトリ
datadir=/data/mysql
 
# ポート番号
port=3306
 
# UNIXドメインソケット
socket=/var/run/mysqld/mysqld.sock
 
# デフォルトのストレージエンジンの指定
default_storage_engine=InnoDB
 
# バッファプールサイズの指定
innodb_buffer_pool_size=128MB
 
# サーバ側が使用するデフォルトの文字コード
character-set-server=utf8mb4
 
# 各MySQLサーバを識別するためのIDの設定
server-id=1
 
# バイナリログの有効化
log_bin=mysql-bin
 
# バイナリログのフォーマットの指定
binlog-format=ROW
 
# バイナリログを保存しておく日数
expire_logs_days=7
 
# スロークエリログの有効化
slow_query_log=1
 
# 何秒以上かかったクエリをスロークエリログへ記録するかを指定(単位:秒)
long_query_time=3.0
 
# この値より少ない行数を読み込んだクエリはスロークエリログへ記録しない
min_examined_row_limit=0
 
# スロークエリログファイルの出力先の指定
slow_query_log_file=/var/log/mysql/slow_query.log
 
# エラーログの出力先の指定
log-error=/var/log/mysql/mysqld.log
 
# エラーログのタイムゾーンの指定
log_timestamps=SYSTEM
 
 
[client]
# クライアント側が使用するデフォルトの文字コード
default-character-set=utf8mb4

これで、mysqlを再起動。

$ sudo service mysql restart


Apacheの設定。そして大ハマり

/dataの下にApache用のディレクトリを作成。そんでもって、今までのDocumentRootだった/var/www/htmlの下のファイルをコピー。

$ sudo mkdir /data/htdocs
$ cp /var/www/html/* /data/htdocs/.

あとはApacheの設定ファイルのDocumentRootを/data/htdocsに変更。
そして、DocumentRootを変更した場合はDirectoryディレクティブを記述しなければならん。なぜだ?!なぜなんだ?!なぜ403が出る?!そして元のDocumentRootのDirectoryディレクティブはどこに記述されているんだぁぁぁ?!

今回ここが一番ハマった気がする。。。

$ sudo vim /etc/apache2/sites-available/000-default.conf
 
# DocumentRoot /var/www/html
DocumentRoot /data/htdocs
 
<Directory /data/htdocs/>
        # FollowSymLinksはシンボリックリンクのリンク先をたどれるようにする。
        # MultiViewsはコンテントネゴシエーションを有効にし、ブラウザから
        # 送信されるHTTPヘッダにあわせてレスポンスを変えるとかができるようにする。
        Options FollowSymLinks MultiViews

        # .htaccess で使用できるディレクティブを指定する為のディレクティブ。
        # .htaccess で設定可能なものは全て有効。
        AllowOverride All

        # サーバーのディレクトリに接続してくるクライアントについて、
        # 許可・拒否する条件を指定するディレクティブ。
        # すべてのクライアントからの接続を許可する。
        Require all granted
</Directory>

Apacheを再起動。

$ sudo service apache2 restart

さぁ、これでhtmlのファイルをガンガン作成したり、DBガンガン更新したり出来るな!