Raspberry PiでNASとバックアップサーバを構築する
Raspberry Pi は自宅 LAN と、2 台の HDD と接続します。 NAS サーバとしてファイル共有サーバの役割を果たしていて、自宅 LAN 内のユーザはファイルサーバにファイルを追加したりファイルを削除したりファイルを変更したりできます。 Master HDD は本データを保存するストレージで、Slave HDD は Master HDD の完全ミラーリングです。ミラーリングバックアップを取ることで HDD の故障に耐性を持ちます。
ちなみに、一見、RAID 1 (ミラーリング) に見えますが、RAID ではないです。 RAID は故障に対してサービスの提供継続性を保つシステムですが、今回作るシステムは単なるバックアップ作成であり故障耐性はありますがサービス提供継続性はありません。 この辺は自宅で個人で使用するシステムなので、のんびりした設定です。
作業を始めます。 材料一覧です。全部 Amazon.co.jp で買えます (買いました)。 場合によっては、この他に、キーボード、マウス、ディスプレイ (と HDMI ケーブル) が必要です。
以下、詳細です。Raspberry Pi 2 Model B 本体です。
外付け HDD は何でもよいですが、今回は次の 2 種類のものを選びました。お手軽さは外付け HDD がベストですが、HDD 中身とケースでもいけると思います。
- BUFFALO USB3.0 外付けハードディスク PC/家電対応 3TB HD-LC3.0U3/N
- I-O DATA USB 3.0/2.0接続【家電対応】外付ハードディスク 3.0TB HDC-LA3.0
その他のアイテムです。 余談ですが、今回はじめてフラットタイプの LAN ケーブルを買ったのですが、ケーブルに変なくせが付かず取り回しがしやすくてとても気に入りました。
- micro SD カード 32 GB
- 電源アダプタ + ケーブル (5 V / 2.0 A)
- LAN ケーブル
今回、Raspberry Pi 2 Model B を使用します。 Raspberry Pi 3 が出たばかりですが、電源問題があってちょっと不安だったので、5 V / 2.0 A でフルパワー動作する Raspberry Pi 2 B を選択しました。
作業手順
Step 1. micro SD に Raspberry Pi の初期セットアップ(Step 2 と並列実行可能です。)
まず、micro SD に OS をインストールします。 今回は 32GB の micro SD カードを使います。 現時点での最新版、Raspbian Jessie をダウンロードします。 公式サイトからダウンロードすると遅い上にときどき途切れたりするので、ミラーサイト (JAIST) とかを利用したほうが良いです。
Windows だと、Win32 Disk Imager というソフトウェアで簡単に SD カードに OS イメージを書き込めます。
Raspberry Pi の初期セットアップします。基本的な初期セットアップのやり方は Web 上にたくさん転がっているので詳細は割愛します。初期設定ではパーティションがかつかつに切られているので、Expand Filesystem して SD カードフルに使用できるように忘れずに変更します。これするのを忘れてパッケージをインストールしたり更新したりするとリブート後に Raspberry Pi が起動しなくなることがあります (何度もやってしまったことがあります^^)。パッケージを更新しておきます。
$ sudo apt-get update $ sudo apt-get dist-upgradeNAS のために、IP を固定します。ちなみに、Rasbian Jessie では固定 IP の設定は /etc/dhcpcd.conf ファイルを編集します。Web 上にある多くの記事では /etc/network/interfaces を編集すると書いてありますが、それはちょっと古い情報ですので注意が必要です。
今回は、 ホスト名: rpadoribu IPアドレス: 192.168.0.10 としました。 この設定で以下の説明を続けます。
Locale を ja_JP.UTF-8 にして、タイムゾーンを合わせて、キーボードの設定も Japanese に変えておきます。日本語環境として以下をインストールします。これは単なる好みです。
$ sudo apt-get install fonts-takao ibus-mozc- raspbian日本のミラーサイト – Qiita
- Raspberry Piで遊ぼう [No.2:ブートイメージSDカードを作ろう]:アシマネくんのほんわか日記:So-netブログ
- Raspberry Pi に固定IPアドレスを割り当てる方法(Raspbian Jessie) – Qiita
- 日経Linux – 本誌補足情報 – 2015年11月号:ITpro
- 日本語入力のための設定 part2 – Qiita
(Step 1 と並列実行可能です。)
適当なコンピュータ (今回は Windows) で、使用する 2 台の外付け HDD をフォーマットします。 今回は、exFAT にフォーマットします。このフォーマットは Windows と Mac の両方から扱うことが可能です。
フォーマットする前に外付け HDD のパーティションを確認します。パーティションの再分割は HDD 1 台の場合は特にやる必要ないと思いますが、2 台使用する今回の場合はパーティションを統一するために再設定します。コマンドラインプロンプトを管理者権限で開いて次のように操作して確認します。
> diskpart DISKPART> LIST DISK ディスク 状態 サイズ 空き ダイナ GPT ### ミック ------------ ------------- ------- ------- --- --- ディスク 0 オンライン 698 GB 0 B ディスク 1 オンライン 2794 GB 0 B DISKPART> SELECT DISK 1 ディスク 1 が選択されました。HDD の種類によって初期パーティションは異なっていて、今回用意した 2 つの異なるメーカーの外付け HDD は異なる初期パーティションでした。
例えば、このように、ある HDD は初期状態で、パーティションが 1 つだけであることが確認できますが、
DISKPART> LIST PARTITION Partition ### Type Size Offset ------------- ------------------ ------- ------- Partition 1 プライマリ 2794 GB 512 KBある HDD では初期状態でこのように、3.0 TB (2794 GB) のプライマリパーティションの他にパーティションがある場合があります。
DISKPART> LIST PARTITION Partition ### Type Size Offset ------------- ------------------ ------- ------- Partition 1 予約 128 MB 17 KB Partition 2 プライマリ 2794 GB 129 MBパーティションを再設定します。2.0 TB を超えるディスクは GPT 形式に設定する必要があります。
DISKPART> CLEAN DiskPart はディスクを正常にクリーンな状態にしました。 DISKPART> CONVERT GPT DiskPart は選択されたディスクを GPT フォーマットに正常に変換しました。 DISKPART> CREATE PARTITION PRIMARY DiskPart は指定したパーティションの作成に成功しました。 DISKPART> LIST PARTITION Partition ### Type Size Offset ------------- ------------------ ------- ------- Partition 1 予約 128 MB 17 KB * Partition 2 プライマリ 2794 GB 129 MB DISKPART> ASSIGN LETTER=E DiskPart はドライブ文字またはマウント ポイントを正常に割り当てました。- 不可解な小さなパーティションを理解して削除する
- 【HDD】GPT形式でハードディスクをフォーマットしたい (コマンドプロン…
HDD をフォーマットします。アロケーションユニットサイズはデフォルトの 1024 KB にします。クイックフォーマットにチェックを入れましょう。クイックフォーマットじゃないと実行に数時間要してしまいます。
これを 2 台目の外付け HDD に対しても同様にフォーマットします。 2 台の HDD にはそれぞれ次のようなボリュームラベルを付けています。 master HDD: RPHDYUIKO slave HDD: RPHDAYAKA
Step 3. NAS セットアップ2 台の HDD を Raspberry Pi に接続して、NAS の設定をします。 NAS の対象ディスクとして動作するのは、master HDD の 1 台のみです。
まず、Raspberry Pi 上で exFAT を扱うためのパッケージをインストールします。
$ sudo apt-get install exfat-fuse exfat-utilsUSB 接続した 2 台の外付け HDD を Raspberry Pi にマウントして見えるようにします。 まず、接続した状態で lsusb と blkid コマンドで認識されているか確認します。
$ lsusb Bus 001 Device 006: ID 04bb:014a I-O Data Device, Inc. Bus 001 Device 005: ID 0411:0286 BUFFALO INC. (formerly MelCo., Inc.) Bus 001 Device 004: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse Bus 001 Device 007: ID 049f:000e Compaq Computer Corp. Internet Keyboard Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub $ sudo blkid /dev/mmcblk0: PTUUID="8f1eafaf" PTTYPE="dos" /dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="04FE-51E9" TYPE="vfat" PARTUUID="8f1eafaf-01" /dev/mmcblk0p2: UUID="e6e7f776-11a4-4cd7-b4fd-c44ecdbfcf90" TYPE="ext4" PARTUUID="8f1eafaf-02" /dev/sda1: PARTLABEL="Microsoft reserved partition" PARTUUID="95a873df-9f59-4952-a049-d698a05b6a7e" /dev/sda2: LABEL="RPHDYUIKO" UUID="E2A5-2507" TYPE="exfat" PARTLABEL="Basic data partition" PARTUUID="eb35c869-20f5-4a84-89bd-ca2c02aa26f7" /dev/sdb1: PARTLABEL="Microsoft reserved partition" PARTUUID="a711fe31-656d-4411-a0ff-ce25b6078d73" /dev/sdb2: LABEL="RPHDAYAKA" UUID="62F0-8F37" TYPE="exfat" PARTLABEL="Basic data partition" PARTUUID="01e75d3d-4d0a-48fe-9bb5-dd8909cb38a7"Windows で GPT 形式でフォーマットすると、”Microsoft reserved partition” という管理用 (?) のパーティションが生成されてしまいますが、これは不要なので無視します。Mac か Linux でフォーマットすればこの生成は防げると思います。 自動でマウントしてくれるように、 /etc/fstab を編集して次のような記述を追加してリブートします。UUID は上で blkid コマンドで確認した値です。
UUID="E2A5-2507" /mnt/rphdyuiko exfat-fuse async,auto,dev,exec,gid=65534,rw,uid=65534,umask=007 0 0 UUID="62F0-8F37" /mnt/rphdayaka exfat-fuse async,auto,dev,exec,gid=65534,rw,uid=65534,umask=007 0 0 $ sudo df ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置 /dev/root 30854716 3703888 25841788 13% / devtmpfs 469688 0 469688 0% /dev tmpfs 474008 0 474008 0% /dev/shm tmpfs 474008 6452 467556 2% /run tmpfs 5120 4 5116 1% /run/lock tmpfs 474008 0 474008 0% /sys/fs/cgroup /dev/mmcblk0p1 61384 20368 41016 34% /boot /dev/sda2 2930134016 17408 2930116608 1% /mnt/rphdyuiko /dev/sdb2 2930134016 17408 2930116608 1% /mnt/rphdayaka tmpfs 94804 4 94800 1% /run/user/1000大丈夫そうです。 ls -la /mnt でも一応確認しときます。 見えるようになりました。
$ ls -la /mnt 合計 2056 drwxr-xr-x 4 root root 4096 4月 27 14:52 . drwxr-xr-x 21 root root 4096 4月 27 03:35 .. drwxrwx--- 1 nobody nogroup 1048576 1月 1 1970 rphdayaka drwxrwx--- 1 nobody nogroup 1048576 4月 27 14:53 rphdyuiko $ sudo apt-get install sambasudo nano /etc/samba/smb.conf ファイルを編集します。私は、 [global] セクションに次の設定を追加して、
max protocol = SMB2 load printers = no printcap name = /dev/null printing = bsdファイルの末尾に NAS 用の設定を追記しました。
[share] comment = NAS path = /mnt/rphdyuiko read only = no guest ok = yes force user = pi $ sudo /etc/init.d/samba startちなみに、Windows から NAS にアクセスする場合、次の設定をしておかないと大きなサイズのファイルを転送するときにエラーになることがありますので、できれば設定しておきましょう。 WindowsからNASへファイル転送時エラー「アクセス中に問題が発生しました」の解決方法 – Qiita
これで、NAS の構築が完了です。 Windows からはエクスプローラで \\192.168.0.10 (今回の設定の場合) と入力すればファイルサーバにアクセスできます。Mac の場合、 smb://192.168.0.10 で接続できます。 ファイル/フォルダの作成/削除をテストします。 ファイル名/フォルダ名には日本語を含む場合と含まない場合もテストします。 とりあえずOKです。
その他、 /etc/samba/smb.conf で、パスワード認証とか IP アドレス制限とか、いろいろ設定することができます。
構築した NAS を対象に、2 GB 程度のファイルで転送実験したところ、 ローカルからサーバへのファイル転送の速度は、最高で 8 MB / sec ぐらい、 サーバからローカルへのファイル転送の速度は、最高で 12 MB / sec ぐらいでした。
ここで、すでに Raspberry Pi の CPU 使用率はほぼ 100% に達しています。
- RaspberryPi2でMacとWindows両対応のNASを構築する – Qiita
- Samba の導入 – Linux で自宅サーバ [ Home Server Technical. ]
- RaspberryPiにSambaをインストールしてサーバー化する – kentsu tech Lab
- SambaのUnable to open printcap file /etc/printcap for read! がウザイ — どこか遠くでのんびり怠惰に暮らしたい
Raspberry Pi 上で rsync を利用して、master HDD の内容を slave HDD へミラーリングします。 rsync とは ディレクトリ同士を同期させることができるツールです。
rsync は、Raspberry Pi Jessie にデフォルトでインストールされていたので、これを使用します。
今回、master HDD (RPHDYUIKO) は /mnt/rphdyuiko 、slave HDD (RPHDAYAKA> は /mnt/rphdayaka にマウントされているため、次のコマンドがバックアップコマンドになります。
$ sudo rsync -av --inplace --delete /mnt/rphdyuiko/ /mnt/rphdayaka/-z オプションを付けて圧縮して転送するように設定する方法が Web 上にありますが、今回はネットワークを介さない転送なので、圧縮はしないで CPU 負荷をなるべく抑えます。 それから、ディレクトリの末尾のスラッシュが地味に重要なので忘れないようにしましょう。
2016-07-29 追記: –inplace オプションを追加しました。
このコマンドも CPU 使用率がほぼ 100% になります。 適度な頻度でバックアップされるように、cron に登録しておきます。
- rsync でディレクトリの同期(バックアップ) – maruko2 Note.
- rsyncコマンドでデータの同期を行う
完成
Raspberry Pi 部分の拡大です。
samba による NAS サーバ機能と、rsync によるバックアップサーバ機能を 1 つの Raspberry Pi と 2 台の外付け HDD で実現しています。
性能について 目指した機能は実現できたものの、性能は必ずしも良いという評価はできないでしょう。 samba だけでファイル転送中は CPU 使用率がほぼ 100% まで上昇するため、同時に rsync を走らせた場合、かなり CPU パワーがボトルネックになると思います。 専用の NAS サーバには及びません。 しかし、バックアップの頻度を調整する等すれば、個人の実用には十分なシステムです。
より性能を向上させる方法として、samba と rsync の負荷を分散させるために、master HDD と slave HDD をそれぞれコントロールする Raspberry Pi を 2 台用意して、master 側で NAS のサービス、slave 側で rsync の実行を担うことで仕事が分散されると考えられます。
まとめです。 今回は、Raspberry Pi と外付け HDD を用いて、手軽に安価で NAS とバックアップサーバの構築できました。 気になる方は試してみてください。
次回は Raspberry Pi を使って、もっと電子工作っぽいことをやろうと思います。
この記事をシェアする: Related posts- 2015-10-07プログラミング言語によるルービックキューブ (3x3x3) ソルバ実装まとめ
- 2015-03-15WordPress高速化プロジェクト 番外編「クライアントキャッシュの利用と圧縮」
- 2015-11-11WordPressプラグイン「Awesome Flickr Gallery」でFlickrアルバムをawesomeに記事に埋め込む
- 2014-11-29Googleスプレッドシートで条件付き書式を使い近日中に迫る日付を強調表示する
- 2015-03-08WCAデータベースで遊ぶ実践編「自己ベスト記録のリストを作成する」
- 2015-03-04ブログカード風リンク表示WordPressプラグイン「TeraShare」をアップデート (version 0.2.0)
- 2015-02-03「へごへごへごちん!」作った
- 2015-03-14WordPress高速化プロジェクト 手法1「PHP高速化」
- 2015-02-07ブログカード風にリンクを表示するWordPressプラグイン「TeraShare」を作った
- 2015-05-01GitHub push/pull時に「403 Forbidden while accessing」エラーが出たら…
- 2015-07-19[iOS] Javascript でクリップボードにアクセスすることは不可能… ではどうするか
- 2015-06-24あらゆるページの埋め込みコードを提供してくれるWebサービス『Embedly』を試してみる
- パイパイ 2020-01-08
- キヌア料理祭り8品 2019-12-21
- 鶏肉の酒蒸し・ビール蒸し・赤ワイン蒸し・紹興酒蒸し 2019-02-20
- スキレットを買って錆びさせて直して料理して 2019-02-19
- ソックオンサンダルデシュッキンシチャウ 2018-08-16
- RSS of posts
- RSS of comments