USBメモリでRaspberry Piをバックアップする+WordPress

Raspberry PiはSDカード/マイクロSDカードを使って動いているわけですが、これが壊れる。壊れるとどうなるかというと、データが吹っ飛んで絶望が味わえる。

SDカードの寿命を延ばすために設定を変えていくつか変更しても、いつか壊れます。サーバーなんかで運用すると、運が悪くて1年、普通2年、ラッキーで3年くらいで壊れると思います。(科学的検証なし!)

ということでUSBメモリで定期的かつ自動に重要ファイルをバックアップするシステムを構築します。
(サーバー用途じゃなければ、あんま気にしなくて良いです)




購入したUSBメモリ 555円
サンディスク USBメモリ 8GB SDCZ33-008G 高速 パッケージ品
サンディスク USBメモリ 8GB SDCZ33-008G 高速 パッケージ品


Raspberry Piから

sudo apt-get install usbmount
すっごく長い、フリーズしたんじゃないかな?

Processing triggers for man-db …
ここでとまったまま、接続できなくなった。

待てど暮らせど接続できない・・、電源引っこ抜いた。

まだ接続できない。。
USBメモリをはずして電源引っこ抜いた。
接続できるようになった。

sudo apt-get install usbmount
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.

sudo dpkg --configure -a

これでusbmountがインストールできたみたい。
とりあえずUSBメモリを挿入してみる。
df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs           15G  2.8G   12G  20% /
/dev/root        15G  2.8G   12G  20% /
devtmpfs        239M     0  239M   0% /dev
tmpfs            49M  240K   49M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            97M     0   97M   0% /run/shm
/dev/mmcblk0p1   56M  9.6M   47M  18% /boot
tmpfs            32M     0   32M   0% /tmp
tmpfs            16M     0   16M   0% /var/tmp
tmpfs            32M   92K   32M   1% /var/log
/dev/sda1       7.5G  9.4M  7.5G   1% /media/usb0

cd /media/usb0
ls
SanDiskSecureAccessV2.0  SanDiskSecureAccessV2_win.exe

普通に読み込めた。
とりあえずUSBメモリに入っていたファイルを削除する
sudo rm -rf SanDisk*

USBメモリありの状態でリブートできるか試してみると、ちゃんとリブートできたし、USBメモリも認識してる。念のため電源切った状態から試してみる。
sudo shutdown -h now
問題なかった。
起動中にUSBメモリを挿入しても認識できた。

今までSDカードに保存していたサーバーのアクセスログをUSBメモリに保存する。念のためアクセスログを取っているだけなので、SDカードには保存せずに直接USBメモリに保存する。
cd /media/usb0
sudo mkdir log
sudo chown www-data:www-data log
chown: changing ownership of `log': Operation not permitted

あれ?chownできない。

dmesg |tail
sda: sda1
sd 0:0:0:0: [sda] Attached SCSI removable disk
sd 0:0:0:0: Attached scsi generic sg0 type 0
FAT-fs (sda1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

fsck
fsck from util-linux 2.20.1
e2fsck 1.42.5 (29-Jul-2012)
/dev/mmcblk0p2 is mounted.

WARNING!!!  The filesystem is mounted.   If you continue you ***WILL***
cause ***SEVERE*** filesystem damage.

Do you really want to continue<n>? n

もう一度USBメモリを引っこ抜いて挿入して、すぐにdmesg |tailをしてみる
scsi 1:0:0:0: Direct-Access     SanDisk  Cruzer Fit       1.27 PQ: 0 ANSI: 6
sd 1:0:0:0: Attached scsi generic sg0 type 0
sd 1:0:0:0: [sdb] 15633408 512-byte logical blocks: (8.00 GB/7.45 GiB)
sd 1:0:0:0: [sdb] Write Protect is off
sd 1:0:0:0: [sdb] Mode Sense: 43 00 00 00
sd 1:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
sdb: sdb1
sd 1:0:0:0: [sdb] Attached SCSI removable disk
FAT-fs (sdb1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

USBメモリを自動マウントを参考にしてみる
sudo vim /etc/usbmount/usbmount.conf
FILESYSTEMS="vfat ext2 ext3 ext4 hfsplus usbfs"
FS_MOUNTOPTIONS="-fstype=vfat,iocharset=utf8,codepage=932,uid=500,gid=500,dmask=000,fmask=011"

試してみるとrootだったのが、フォルダの所有者が500になってた。
あと、フォルダの権限が変わってた。

それでもchownとかchmodとかできない。。

調べてみるとFAT32でフォーマットされていると、Linuxみたいな許可制にはなっていないため、chownとかchmodとかできないって書いてあった。

How do i change permissions on a FAT32 formatted drive?

usbmount.confの設定をデフォルトのに戻しておく。
sudo vim /etc/lighttpd/lighttpd.conf
accesslog.filename = "/media/usb0/log/access.log"

lighttpdが起動しない。。
USBメモリにaccess.logが自動的に作られない、マニュアルで作ってもログを書き込まない。。


usbmount.confを再度変更
sudo vim /etc/usbmount/usbmount.conf
FS_MOUNTOPTIONS="-fstype=vfat,iocharset=utf8,codepage=932,uid=500,gid=500,dmask=000,fmask=011"

lighttpdが起動するようになった。
ログもちゃんとUSBメモリに記録してくれた。

dmaskとfmaskが鍵を握っているのかな?
なんとなくfmaskって111にしたほうが良いような?

WordPressをUSBメモリにバックアップ

次に、Wordpressを定期的にバックアップできるようにします。

Wordpressのプラグイン、BackWPupをインストール、プラグインを有効化

Add new job
Job name: dairy backup
Archive name: backwpup_%Y-%m-%d
Backup to Folder
Save changes

Settings→Logs
Log file folder /media/usb0/wordpress/
Save changes

Jobs
Run now

The HTTP response test get an error “connect() timed out!”


あれ、バックアップができない?
Log file folderをデフォルト値に戻す

Jobs
dairy backup ← Edit

BackWPup Job: dairy backup

Schedule
Start job: with WordPress cron
Scheduler: daily 3 Hour 0 Minute
Save changes

To:Folder
Folder to store backups in: /media/usb0/wordpress/
Save changes

Changes for job dairy backup saved. Jobs overview | Run now
Run nowする。

The HTTP response test get an error “connect() timed out!”

同じエラーでバックアップできない。


プラグインのページにこんな説明文が書いてあった

I get this error message: `The HTTP response test get a error “Connection time-out”`

BackWPup performs a simple HTTP request to the server itself every time you click run now or whenever a backup job starts automatically. The HTTP response test message could mean: * Your host does not allow loop back connections. (If you know what WP_ALTERNATE_CRON is, try it.) * Your WordPress root directory or backup directory requires authetification. Set username and password in Settings->Network. * The Server can’t resolve its own hostname. * A plugin or theme is blocking the request. * Other issues related to your individual server and/or WordPress configuration.


わかりませんー。

BackWPup Settings
Server self connect: The HTTP response test get an error “connect() timed out!”


試行錯誤・・・
試行錯誤・・・
試行錯誤・・・
試行錯誤・・・


できたー!!
Server self connect: Response Test O.K.


早速バックアップ開始。
Job “dairy backup” started.
Job done in 569 seconds.

バックアップに10分近くかかった。
圧縮されて20MBになった。

解凍して中身見てみる!
データベースやら保存した写真やらwordpressのリストアに必要なもの全部入ってる感じ。

使っていないプラグインを削除する。

あと、Temp folderはSDカードのほうに書き込まれてしまうので、
ファイルのバックアップは週1回だけにする。
データベースのバックアップだけ毎日することにした。



肝心の下記のエラーへの対処法ですが、
The HTTP response test get an error “connect() timed out!”

ホスト名でした。
sudo vim /etc/hosts
127.0.0.1       kintarofish.com

これを最後に付け足します。
kintarofish.comのところは各自のホスト名に変更してください。
それだけです。

おそらく自宅サーバーなんかしている人が引っかかる項目だと思います。

参考
BackWPup server self connect error
BackWPupでエラーが出てJobを実行できなかったときのメモ



最後に、SDカード全体をパソコンにイメージファイルでバックアップして完了です。このバックアップは半年に1回くらい手動でやれば十分だと思います。


これでいつかSDカードが壊れたとき、バックアップしたSDカードのイメージファイルをリストアして、BackWpupで定期的にバックアップしたデータベースとファイルでリストアできるので、絶望を味わわなくて済みますよ。

コメントを残す

メールアドレスが公開されることはありません。