LoginSignup
8
9

More than 3 years have passed since last update.

自宅で個人用ファイルサーバを作る

Last updated at Posted at 2019-05-18

勉強中の学生が,頭の中を整理しながら書いたメモです.
セキュリティ面で誤り・不適切な操作が含まれるかも知れません.
参考にされる場合は自己責任でお願いします.

概要

自宅でファイルサーバを構築して,各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インストール

  1. ubuntuをダウンロードして,USBメモリに焼いて,インストール開始.
  2. システム用のHDDのパーティションは次の通りに設定する:
    • 1MB: /boot
    • 80GB: /
    • rest: /mnt/Storage
      (LVMは設定しない)
      (swapは不要と判断)
  3. ここで以下にチェックを入れインストール
    • 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]に登録.

/etc/fstab
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].
(行番号は目安程度)

/etc/samba/smb.conf
(略)

#======================= 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 ####

(略)

さらに,ファイル末尾にあるprintersprint$の項目は不必要なので全てコメントアウトする.

/etc/samba/smb.conf
(略)

#[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.

(略)

代わりに,その下に使用したい設定を追記する.

/etc/samba/smb.conf
(略)

[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
/usr/local/bin/sync.sh
rsync -auv /mnt/Storage /mnt/Backup/

※Dry-runで動作を確かめておく.誤動作すると最悪死ぬ(データが).

このスクリプトを毎日午前4時に実行するように登録する.

$ sudo crontab -u root -e

開かれたファイルの末尾に以下を追記する.

crontab
0 4 * * * sh /usr/local/bin/sync.sh

まとめ

サーバ構築にあたって,必要なもの,構築手順,バックアップの自動化までを記載した.
時間があれば,メインドライブが故障した際の,バックアップからのリストア手順についても記載したい.

参考文献

Ubuntuでファイルサーバーをたてる(Samba)

[1] blkidコマンド(UUIDに対応するディスクパーティション確認)

[2] fstabについて

[3] Sambaのユーザー認証とファイルアクセス権の設定 (1/4)

[4] /etc/samba/smb.conf 日本語訳

[5] 【 rsync 】コマンド(その1)――ファイルやディレクトリを同期する

[6] cronの設定方法

更新履歴

2019年6月10日

lsblk の結果に不要なものが含まれていたため修正.

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9