勉強中の学生が,頭の中を整理しながら書いたメモです.
セキュリティ面で誤り・不適切な操作が含まれるかも知れません.
参考にされる場合は自己責任でお願いします.
概要
自宅でファイルサーバを構築して,各OSのPC(windows,mac,linux)から参照できるようにすることが目的.
目標
-
ubuntu上で, sambaを用いてファイル共有する.
-
保存領域として3TB弱の大きさを用意し,RAIDではなく,cron[6]とrsyncコマンド[5]による定期バックアップを行う.
-
他の家族に中身を覗かれない程度に認証・セキュリティに気をつける.
ハードを交換した時に再構築しやすいようにする.
RAID1を大容量でやると,リカバリーに時間がかかりすぎるのでしない.
用意したもの
サーバを構成するもの
- 適当なマシン
- ストレージ要件
- 3TBのHDDを,OS・データ領域用に1本,バックアップ用に1本
- ネットワーク要件
- 自宅のネットワークに属すること.GbE対応なら快適に使えるだろう.
- ストレージ要件
扱うソフトウェア
- ubuntu server 18.04.2 LTS (Bionic Beaver)
- samba Version 4.7.6-Ubuntu
構築中に用いるもの
- USBメモリ(用意したのは16GB)
- 同じネットワークに属する適当なPC
構築手順
OSインストール
- ubuntuをダウンロードして,USBメモリに焼いて,インストール開始.
- システム用のHDDのパーティションは次の通りに設定する:
- 1MB: /boot
- 80GB: /
- rest: /mnt/Storage
(LVMは設定しない)
(swapは不要と判断)
- ここで以下にチェックを入れインストール
- OpenSSH
- canonical livepatch
OS及びドライブの設定
まず更新.
$ sudo apt update && sudo apt upgrade -y
接続されているドライブの確認
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop1 7:1 0 91M 1 loop /snap/core/6350
loop2 7:2 0 8.4M 1 loop /snap/canonical-livepatch/77
sda 8:0 0 2.7T 0 disk
└─sda1 8:1 0 2.7T 0 part
sdb 8:16 0 2.7T 0 disk
├─sdb1 8:17 0 1M 0 part
├─sdb2 8:18 0 80G 0 part /
└─sdb3 8:19 0 2.7T 0 part /mnt/Storage
この例では,/dev/sdb
がシステムとストレージを含むHDDで,/dev/sda
がバックアップ用HDDになっている.
バックアップ用HDDをまだフォーマットしていないなら,ext4
とかでフォーマットしておく.
$ sudo mkfs -t ext4 /dev/sda1
バックアップ用HDDは/mnt/Backup
にマウント.
マウントポイントを作成.UUIDを確認[1]してからfstabを修正.
$ sudo mkdir /mnt/Backup
$ blkid
/dev/sda1: UUID="5086b0d0-4e74-4e16-842b-c1f209f40ff3" TYPE="ext4" PARTLABEL="backup" PARTUUID="49f38838-948e-40fb-bf87-428b55e35e63"
/dev/sdb2: UUID="b847f20f-4576-4f27-b973-cbd907eec174" TYPE="ext4" PARTUUID="7017a20a-0818-4118-a025-88e50713440b"
/dev/sdb3: UUID="706ceb00-77ac-4698-9186-d14fe1112ebc" TYPE="ext4" PARTUUID="e2c3472f-f1f7-4281-af36-2967eb956988"
バックアップパーティションのUUIDは5086b0d0-4e74-4e16-842b-c1f209f40ff3
である.これをfstab[2]に登録.
UUID=b847f20f-4576-4f27-b973-cbd907eec174 / ext4 defaults 0 1
UUID=706ceb00-77ac-4698-9186-d14fe1112ebc /mnt/Storage ext4 defaults 0 2
UUID=5086b0d0-4e74-4e16-842b-c1f209f40ff3 /mnt/Backup ext4 defaults 0 2 # この行を追加
/swap.img none swap sw 0 0
登録が終わったら,再起動を行ない,正しくマウントされることを確認.
samba サーバを建てる
共有するディレクトリ(今回は/mnt/Storage
)の所有権とアクセス権を変更.
$ sudo chown `whoami` /mnt/Storage
$ chmod 777 /mnt/Storage
sambaをインストールする.
$ sudo apt install samba -y
/etc/samba/smb.conf
を編集する[3][4].
(行番号は目安程度)
(略)
#======================= Global Settings =======================
[global]
unix charset = UTF-8 # 26行目 行を追加
dos charset = CP932 # 27行目 行を追加
## Browsing/Identification ###
(略)
# It is recommended that you enable this feature if your Samba machine is
# not protected by a firewall or is a firewall itself. However, this
# option cannot handle dynamic or non-broadcast interfaces correctly.
; bind interfaces only = yes
map to guest = Never # 61行目 Neverに変更
#### Debugging/Accounting ####
(略)
さらに,ファイル末尾にあるprinters
とprint$
の項目は不必要なので全てコメントアウトする.
(略)
#[printers]
# comment = All Printers
# browseable = no
# path = /var/spool/samba
# printable = yes
# guest ok = no
# read only = yes
# create mask = 0700
# Windows clients look for this share name as a source of downloadable
# printer drivers
#[print$]
# comment = Printer Drivers
# path = /var/lib/samba/printers
# browseable = yes
# read only = yes
# guest ok = no
# Uncomment to allow remote administration of Windows print drivers.
# You may need to replace 'lpadmin' with the name of the group your
# admin users are members of.
(略)
代わりに,その下に使用したい設定を追記する.
(略)
[NASbi] # 外から見える名前.お好きにどうぞ.
path = /mnt/Storage
writable = yes
guest ok = no
create mode = 0777
directory mode = 0777
(EOF)
sambaユーザのパスワード登録をする.
$ smbpasswd -a `whoami`
最後に,sambaデーモンを再起動する.
$ sudo systemctl restart smbd
他のデバイスから読み書きできればok.
運用・保守
samba設定ファイルの控え
編集した/etc/samba/smb.conf
をgithubとかに保管しといて,構築しなおすときに使えるようにしておく.
定期バックアップ
適当な場所にバックアップ用のシェルスクリプトを書く.
$ sudo vim /usr/local/bin/sync.sh
rsync -auv /mnt/Storage /mnt/Backup/
※Dry-runで動作を確かめておく.誤動作すると最悪死ぬ(データが).
このスクリプトを毎日午前4時に実行するように登録する.
$ sudo crontab -u root -e
開かれたファイルの末尾に以下を追記する.
0 4 * * * sh /usr/local/bin/sync.sh
まとめ
サーバ構築にあたって,必要なもの,構築手順,バックアップの自動化までを記載した.
時間があれば,メインドライブが故障した際の,バックアップからのリストア手順についても記載したい.
参考文献
[1] blkidコマンド(UUIDに対応するディスクパーティション確認)
[2] fstabについて
[3] Sambaのユーザー認証とファイルアクセス権の設定 (1/4)
[5] 【 rsync 】コマンド(その1)――ファイルやディレクトリを同期する
[6] cronの設定方法
更新履歴
2019年6月10日
lsblk の結果に不要なものが含まれていたため修正.