序論:なぜファイルサーバーなのか?

ホームサーバーを構築する最大の理由の一つがファイルサーバーです。クラウドサービスも便利ですが、毎月サブスクリプション料金を払わなければならず、保存容量にも制限があります。何より自分の大切なデータが他の会社のサーバーに保存されるという点が不安かもしれません。

自前のファイルサーバーを構築すればこのような心配から解放されます。一度ハードディスクを購入すれば追加費用なしで無制限に使用でき、データは自宅にのみ存在します。家族の写真、動画、文書などを安全に保管しながら、どこからでもアクセスできる自分だけのクラウドを作ってみましょう。

今回の編ではファイルサーバーの核心技術であるSambaとNFSを中心に、様々なデバイスからファイルにアクセスする方法と安定したディスク管理方法まで扱います。

1. ファイル共有プロトコル比較

1.1 主なプロトコル概要

ファイルをネットワークで共有する方法はいくつかあります。それぞれの特徴を理解して状況に合わせて選択することが重要です。

プロトコル 主な用途 長所 短所
Samba (SMB/CIFS) Windowsとの互換 全OSサポート、設定容易 比較的遅い
NFS Linux/Unix環境 高速、低オーバーヘッド Windowsサポート制限的
SFTP セキュアファイル転送 暗号化、ファイアウォール親和的 リアルタイムアクセス不便
WebDAV Webベースアクセス どこからでもアクセス可能 性能制限

1.2 どれを選ぶべきか?

一般的な家庭環境では以下のようにおすすめします:

  • Windows PCがメインなら:Sambaがベストです。エクスプローラーからネットワークドライブとして直接接続されます。
  • LinuxやMacのみ使用するなら:NFSがより速く効率的です。
  • 混在環境なら:SambaとNFSを両方設定すれば良いです。同じフォルダを両方のプロトコルで共有できます。
  • 外部接続が必要なら:VPNを通じて内部ネットワークにアクセスするか、SFTPを使用するのが安全です。

2. Sambaファイルサーバー構築

2.1 Sambaインストール

SambaはWindowsのファイル共有プロトコル(SMB)をLinuxで実装したものです。Windowsエクスプローラーから直接アクセスできるので、最も汎用的に使用されます。

# Sambaインストール
sudo apt update
sudo apt install samba samba-common-bin

# サービス状態確認
sudo systemctl status smbd

# バージョン確認
smbd --version

2.2 共有ディレクトリ作成

ファイルを共有するディレクトリを作成し、適切な権限を設定します。

# 共有ディレクトリ作成
sudo mkdir -p /srv/samba/public
sudo mkdir -p /srv/samba/private

# 公開フォルダ権限設定(全ユーザーアクセス可能)
sudo chmod 777 /srv/samba/public

# 非公開フォルダ権限設定
sudo chmod 770 /srv/samba/private
sudo chown -R root:sambashare /srv/samba/private

2.3 Sambaユーザー作成

Sambaはシステムアカウントとは別に独自のユーザーデータベースを管理します。システムアカウントがあるユーザーのみSambaアカウントとして登録できます。

# システムユーザーがなければまず作成
sudo useradd -M -s /usr/sbin/nologin sambauser

# Sambaユーザー登録とパスワード設定
sudo smbpasswd -a sambauser

# ユーザー有効化
sudo smbpasswd -e sambauser

# ユーザーをsambashareグループに追加
sudo usermod -aG sambashare sambauser

2.4 Samba設定

Samba設定ファイルを編集して共有フォルダを定義します。

# 既存設定バックアップ
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup

# 設定ファイル編集
sudo nano /etc/samba/smb.conf

設定ファイルの最後に以下の内容を追加します:

# 公開共有フォルダ(ゲストアクセス可能)
[Public]
    comment = Public Shared Folder
    path = /srv/samba/public
    browseable = yes
    read only = no
    guest ok = yes
    create mask = 0666
    directory mask = 0777

# 非公開共有フォルダ(認証必要)
[Private]
    comment = Private Shared Folder
    path = /srv/samba/private
    browseable = yes
    read only = no
    guest ok = no
    valid users = @sambashare
    create mask = 0660
    directory mask = 0770

# ユーザー別ホームディレクトリ
[homes]
    comment = Home Directories
    browseable = no
    read only = no
    create mask = 0700
    directory mask = 0700
    valid users = %S

設定を確認してサービスを再起動します:

# 設定文法検査
testparm

# Sambaサービス再起動
sudo systemctl restart smbd nmbd

# 起動時に自動開始
sudo systemctl enable smbd nmbd

2.5 ファイアウォール設定

# Sambaポート許可
sudo ufw allow samba

# または個別ポート許可
sudo ufw allow 139/tcp
sudo ufw allow 445/tcp
sudo ufw allow 137/udp
sudo ufw allow 138/udp

3. クライアントからSamba接続

3.1 Windowsから接続

方法1:ファイルエクスプローラーから直接アクセス

  1. ファイルエクスプローラーを開いてアドレスバーに\\192.168.1.100を入力(サーバーIP)
  2. 共有フォルダ一覧が表示される
  3. Privateフォルダアクセス時にユーザー名とパスワードを入力

方法2:ネットワークドライブ接続

  1. ファイルエクスプローラーで「PC」を右クリック
  2. 「ネットワークドライブの割り当て」を選択
  3. ドライブ文字を選択(例:Z:)
  4. フォルダに\\192.168.1.100\Privateを入力
  5. 「別の資格情報を使用して接続する」をチェック
  6. サインイン時に再接続するにチェックすれば自動マウント

3.2 macOSから接続

  1. Finderメニューから「移動」> 「サーバへ接続」(Cmd+K)
  2. サーバアドレスにsmb://192.168.1.100を入力
  3. 接続するボリュームを選択
  4. ユーザー名とパスワードを入力

自動マウント設定:

  1. システム環境設定 > ユーザとグループ
  2. 現在のユーザーを選択 > ログイン項目
  3. 接続されたネットワークドライブをリストに追加

3.3 Linuxから接続

一時マウント:

# CIFSユーティリティインストール
sudo apt install cifs-utils

# マウントポイント作成
sudo mkdir -p /mnt/samba

# マウント(ユーザー指定)
sudo mount -t cifs //192.168.1.100/Private /mnt/samba -o username=sambauser,password=yourpassword

# またはパスワード入力プロンプト
sudo mount -t cifs //192.168.1.100/Private /mnt/samba -o username=sambauser

自動マウント(fstab):

# 資格情報ファイル作成(セキュリティのため)
sudo nano /etc/samba/credentials

# 内容
username=sambauser
password=yourpassword

# 権限設定
sudo chmod 600 /etc/samba/credentials

# fstab編集
sudo nano /etc/fstab

# 以下の行を追加
//192.168.1.100/Private /mnt/samba cifs credentials=/etc/samba/credentials,iocharset=utf8,uid=1000,gid=1000 0 0

# マウントテスト
sudo mount -a

4. NFSファイルサーバー構築

4.1 NFSとは?

NFS(Network File System)はUnix/Linux環境で標準として使用されるネットワークファイルシステムです。Sambaよりオーバーヘッドが少ないので、Linux間のファイル共有に最適化されています。

4.2 NFSサーバーインストールと設定

# NFSサーバーインストール
sudo apt update
sudo apt install nfs-kernel-server

# 共有ディレクトリ作成
sudo mkdir -p /srv/nfs/shared
sudo chown nobody:nogroup /srv/nfs/shared
sudo chmod 755 /srv/nfs/shared

NFSエクスポート設定:

# exportsファイル編集
sudo nano /etc/exports

以下の内容を追加します:

# 形式:共有パス 許可IP(オプション)

# 特定IPのみ許可
/srv/nfs/shared 192.168.1.0/24(rw,sync,no_subtree_check)

# 特定クライアントのみ許可
/srv/nfs/shared 192.168.1.50(rw,sync,no_subtree_check,no_root_squash)

# 読み取り専用共有
/srv/nfs/readonly 192.168.1.0/24(ro,sync,no_subtree_check)

主なオプション説明:

  • rw:読み書き許可
  • ro:読み取り専用
  • sync:変更を即座にディスクに書き込み
  • no_subtree_check:サブディレクトリチェック無効化(性能向上)
  • no_root_squash:クライアントのrootをサーバーのrootにマッピング
# エクスポート適用
sudo exportfs -a

# 現在のエクスポートリスト確認
sudo exportfs -v

# NFSサービス再起動
sudo systemctl restart nfs-kernel-server

# 起動時に自動開始
sudo systemctl enable nfs-kernel-server

4.3 ファイアウォール設定

# NFSポート許可
sudo ufw allow from 192.168.1.0/24 to any port nfs

# または特定ポート許可
sudo ufw allow 2049/tcp
sudo ufw allow 2049/udp

4.4 NFSクライアント設定

# NFSクライアントインストール
sudo apt install nfs-common

# マウントポイント作成
sudo mkdir -p /mnt/nfs

# 一時マウント
sudo mount 192.168.1.100:/srv/nfs/shared /mnt/nfs

# マウント確認
df -h | grep nfs

自動マウント(fstab):

# fstab編集
sudo nano /etc/fstab

# 以下の行を追加
192.168.1.100:/srv/nfs/shared /mnt/nfs nfs defaults,_netdev 0 0

# マウントテスト
sudo mount -a

5. ユーザー別アクセス権限管理

5.1 Sambaグループベース権限

複数のユーザーがいる場合、グループで権限を管理すると便利です。

# グループ作成
sudo groupadd family
sudo groupadd work

# ユーザーをグループに追加
sudo usermod -aG family user1
sudo usermod -aG family user2
sudo usermod -aG work user3

# ディレクトリグループ所有権設定
sudo chown -R root:family /srv/samba/family
sudo chown -R root:work /srv/samba/work

# グループ書き込み権限設定
sudo chmod -R 2770 /srv/samba/family
sudo chmod -R 2770 /srv/samba/work

smb.confにグループ別共有設定を追加:

[Family]
    comment = Family Shared Folder
    path = /srv/samba/family
    browseable = yes
    read only = no
    valid users = @family
    create mask = 0660
    directory mask = 0770
    force group = family

[Work]
    comment = Work Shared Folder
    path = /srv/samba/work
    browseable = yes
    read only = no
    valid users = @work
    create mask = 0660
    directory mask = 0770
    force group = work

5.2 個別ユーザー権限設定

# 特定ユーザーのみ書き込み可能
[Reports]
    comment = Reports - Admin Write Only
    path = /srv/samba/reports
    browseable = yes
    read only = yes
    write list = admin
    valid users = admin, user1, user2

6. ディスク管理とRAID基礎

6.1 ディスク状態確認

# 接続されたディスク一覧
lsblk

# ディスク詳細情報
sudo fdisk -l

# ディスク使用量
df -h

# SMART状態確認(ディスク健康状態)
sudo apt install smartmontools
sudo smartctl -a /dev/sda

6.2 新しいディスクのフォーマットとマウント

# ディスクパーティション作成
sudo fdisk /dev/sdb
# n:新規パーティション
# p:プライマリパーティション
# Enter:デフォルト値使用
# w:保存

# ext4ファイルシステム作成
sudo mkfs.ext4 /dev/sdb1

# マウントポイント作成
sudo mkdir -p /mnt/data

# マウント
sudo mount /dev/sdb1 /mnt/data

# UUID確認(fstabに使用)
sudo blkid /dev/sdb1

# fstabに自動マウント追加
sudo nano /etc/fstab
# UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/data ext4 defaults 0 2

6.3 RAID基礎概念

RAID(Redundant Array of Independent Disks)は複数のディスクを一つにまとめて性能や安定性を高める技術です。

RAIDレベル 最小ディスク 特徴 容量効率
RAID 0 2台 速度向上、安定性なし 100%
RAID 1 2台 ミラーリング、完全複製 50%
RAID 5 3台 分散パリティ、1台故障許容 (n-1)/n
RAID 6 4台 二重パリティ、2台故障許容 (n-2)/n
RAID 10 4台 ミラー+ストライプ組み合わせ 50%

6.4 ソフトウェアRAID構成(mdadm)

例としてRAID 1(ミラーリング)を構成してみましょう:

# mdadmインストール
sudo apt install mdadm

# RAID 1アレイ作成(sdbとsdcを使用)
sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

# アレイ状態確認
cat /proc/mdstat
sudo mdadm --detail /dev/md0

# ファイルシステム作成
sudo mkfs.ext4 /dev/md0

# マウント
sudo mkdir -p /mnt/raid
sudo mount /dev/md0 /mnt/raid

# mdadm設定保存
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u

# fstabに追加
echo '/dev/md0 /mnt/raid ext4 defaults 0 2' | sudo tee -a /etc/fstab

重要:RAIDはバックアップを代替しません。RAIDはハードウェア障害への備えに過ぎず、誤ってファイルを削除したりランサムウェアに感染したりするとRAIDも役に立ちません。必ず別途のバックアップを維持してください。

7. SFTPを利用したセキュアファイル転送

7.1 SFTP設定

SFTPはSSHベースのセキュアファイル転送プロトコルです。SSHがインストールされていれば別途インストールなしですぐに使用できます。

# SFTP専用ユーザー作成
sudo useradd -m -s /usr/sbin/nologin sftpuser
sudo passwd sftpuser

# SFTP専用ディレクトリ設定
sudo mkdir -p /home/sftpuser/files
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
sudo chown sftpuser:sftpuser /home/sftpuser/files

SSH設定でSFTP chroot設定:

sudo nano /etc/ssh/sshd_config

ファイル末尾に追加:

Match User sftpuser
    ChrootDirectory /home/sftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
# SSH再起動
sudo systemctl restart ssh

7.2 SFTPクライアント接続

コマンドライン:

# SFTP接続
sftp sftpuser@192.168.1.100

# 基本コマンド
ls          # リモートディレクトリ一覧
lls         # ローカルディレクトリ一覧
cd files    # ディレクトリ移動
put file.txt    # アップロード
get file.txt    # ダウンロード
bye         # 終了

おすすめGUIクライアント:

  • Windows:WinSCP、FileZilla
  • macOS:Cyberduck、FileZilla
  • Linux:FileZilla、Nautilus(内蔵)

8. まとめと次のステップ

今回の編ではホームサーバーを本格的なファイルサーバーにする方法を学びました。SambaでWindowsと互換するファイル共有を設定し、NFSでLinuxクライアントと高速に接続し、RAIDを通じてデータの安定性を確保する方法まで扱いました。

ファイルサーバー構築チェックリスト

  • Sambaが正常にインストールされて動作しているか?
  • Windows/Macからネットワークドライブとして接続されるか?
  • ユーザー別アクセス権限が正しく設定されているか?
  • NFSがLinuxクライアントでマウントされるか?
  • ファイアウォールで必要なポートが許可されているか?
  • ディスク状態は正常か?(SMART確認)
  • 重要データのバックアップ計画があるか?

性能最適化のTip

  • ギガビットイーサネット:最低1Gbpsネットワーク環境を構築してください。ファイルサーバー性能の90%はネットワークにかかっています。
  • SSDキャッシュ:頻繁にアクセスするファイルはSSDに、大容量保存はHDDに配置してください。
  • ジャンボフレーム:ネットワーク機器がサポートするなら、MTUを9000に設定すると大容量転送時に効率が上がります。

次の編ではDockerを利用した様々なサービス構築について見ていきます。Nextcloudで自分だけのクラウドストレージを作り、PlexやJellyfinでメディアサーバーを構築する方法など、実用的なサービスを扱う予定です。