Time MachineでのバックアップをNASを使わず無線にしたい!!【CentOS 8 & Samba】

f:id:skyzi000:20200524032906p:plain

注意事項(2021/12/19追記)


この記事の内容は古くなっています。

特にCentOS Linuxは2021年末でEOL(サポート終了)になります。

現在、僕は仮想OS上でのSambaをやめ、サブPCに直接Ubuntuを入れてそのままSambaサーバを立てて使っています。

でもまあこの記事もTime Machine用ディレクトリの作成以降は多少参考になるのではと思います……。

はじめに


macOSに付属するバックアップ機能「Time Machine」を無線で使いたい!!!
でもNASを買うのはお金がかかるので嫌だ!!!!

というわけで、Linux(CentOS 8)のSambaを使ってTime Machineに対応したファイルサーバーを立てることができるとの情報を得たので試してみた記録です。

ついでにWindowsからアクセスできるようにもします。

全部やってから備忘録として残すために書いてる記事なので、書き忘れてる情報があったりとかそもそも間違った設定をしてる可能性があったりします。
書いてる僕もLinux初心者なので、なにか気付いたこと等があればコメントとかで教えていただけるとありがたいです。

また、この記事を参考にする場合は自己責任でお願いします。

主に使用したソフトのバージョンとか


ソフト/OS バージョン
CentOS 8.1.1911
macOS Catalina 10.15.4
Samba 4.10.4
VMware Workstation Player 12.5.9

仮想化ソフトのインストール


WindowsなどでCentOSを仮想OSとして立ち上げるのに使います。

クリーンインストールしたり、デュアルブートさせたりするなら要りませんが、今回は仮想OSとして立ち上げたCentOSを扱います。

VirtualBoxVMwareなどがありますが、今回は昔に導入していたVMwareを使っています。(古いバージョンですみません……)

VMware Workstation Player のダウンロード | VMware | JP

VMware Workstation Playerは非営利目的の場合、無償で使えます。

VirtualBoxオープンソース*1な上、macOSでも動かせるのでVirtualBoxのが良いかもしれないです。

Oracle VM VirtualBox

まあ多分どっちでもできると思います。

CentOSのインストール


ここではサーバー用のOSとして、CentOS 8を使います。

CentOSは公式サイトからisoをもらってきます。

Download

isoはStreamLinuxがありますが、Linuxの方が安定版のようなのでLinuxを選択しました。

簡易インストールは使用せずにCDドライブとしてisoを指定してインストールします。

ちなみにVMware上での設定は下記の通り。*2

バイス 概要
メモリ 8GB
プロセッサ 4
ハードディスク 20GB
ハードディスク2 1024GB
CD/DVD CentOS-8.1.1911-x86_64-dvd1.iso
ネットワーク アダプタ ブリッジ(自動)

ハードディスクはSSD上に、ハードディスク2の.vmdkはHDD上に置いてあります。

ソフトウェアの選択ではベース環境に「サーバー」を選択、選択した環境のアドオンでは「開発ツール」のみを選択しました。

インストール先は20GBの方のハードディスクで、パーティションは自動構成。

ネットワークは自動でつながったので自動のままにしました*3

ホスト名は適当に決めます。*4

インストール中にrootのパスワードを設定します。*5

インストール後の初期設定


前提として、基本的にどのコマンドもroot権限で行います。

一般ユーザでログインしている場合は、

sudo su -

でrootになっておきます。

SELinuxの無効化


SELinuxというセキュリティ関係の機能があるんですが、有効にしてると面倒そうだったのでとりあえず最初に無効にしました。*6

vi /etc/selinux/config

で設定ファイルを開いて、*7

SELINUX=enforcing

の行を

SELINUX=disabled

に変更

getenforce

Disabledと表示されることを確認します。

一般ユーザの作成


普段はSSHでrootに直接ログインすることはせず、直接コンソールで作業するか一般ユーザでSSH接続して作業します。(SSHはサーバー等を安全に遠隔操作するための手段です。)

というわけで一般ユーザを作ります。(インストール時にユーザを作成してるなら必要ないと思います。)

useradd username
passwd username

usernameのところは好きな名前にしてください。

passwd usernameを入力すると設定したいパスワードを要求されるので、要求通りに2回打ち込めばユーザの作成は完了です。

sudoできるユーザの追加


初期状態ではsudo出来ないので、とりあえず管理用のユーザがsudoできるようにしておきます。

インストール時にユーザを作成してるならこの作業は必要ないかもしれません。

とりあえずwheelグループにユーザーを追加します。

wheelグループは管理者権限を持ってるユーザのグループみたいな感じのやつです。*8

usermod -aG wheel username

でユーザ「username」をwheelグループに追加します。*9
id username所属グループを確認できます。

ちなみに、wheelグループを使わなくてもvisudousername ALL=(ALL) ALLを追記するという方法もあります。

SSHでのrootログインを禁止


今回の用途だとやらなくても良い(?)と思うんですが、やっとく方が良いのでやっておきます。 *10

vi /etc/ssh/sshd_config

SSHの設定ファイルを開きます。

PermitRootLogin yesPermitRootLogin noに変更

systemctl restart sshd

SSHを再起動します。

ハードディスク2のマウント


一つのディスクだけならこの作業は必要ないです。

今回はフォーマットされていないまっさらなディスクをマウントして使えるようにします。

ざっくりした順序

  1. マウントしたいディスクのバイス名を確認
  2. cgdiskでパーティション作成(GPTパーティションを作りたかったので)
  3. mkfsでファイルシステムを作成(今回はxfsを選択)
  4. /mnt/以下にディレクトリを作ってそこにマウント

Linuxのファイル構造


WindowsならCドライブとかDドライブとかのドライブレターがあるじゃないですか。

f:id:skyzi000:20200524000217p:plain
Windowsでのハードディスク

Linuxではこれが無いので/以下の任意のディレクトリにマウントされます。*11

f:id:skyzi000:20200524031704p:plain
Linuxのストレージ構成

Windowsに慣れてると違和感がすごくて戸惑いました……。

マウントしたいディスクのデバイス名を確認


fdisk -lとかlsblkとかdmesgとかを使ってバイス名を確認します。

基本的にHDDとかの類は/dev/以下にsdaとかsdbとかのsdなんちゃらって感じの名前で認識されるようです。

なお現在使用しているドライブのデバイス名はdfで分かります。

dmesgを使う際はdmesg | grep sd等で出力を絞り込んでやると見やすいと思います。

f:id:skyzi000:20200524120157p:plain
マウント後にdmesg | grep sdを実行した結果

今回マウントしたいドライブのバイス名は/dev/sdbだとわかりました。

cgdiskでパーティションの作成


fdiskとかcfdiskとかgdiskとか似たようなコマンドがいろいろありますが、今回は一番簡単にGPTパーティションが作れそうだと思ったのでcgdiskを使いました。

cgdisk /dev/sdb

(/dev/sdbは先ほど調べたデバイス名を入力します) でcgdiskを起動します。

すると「このディスクはGPTじゃないよ!」っていう警告が出ますが、まっさらなので当たり前です。

そのままエンターで続行します。

そうしたらcgdiskのメインメニューが現れます。

f:id:skyzi000:20200524014044p:plain
cgdiskメインメニュー画面

バイス名やサイズなどがあってることを確認したら、カーソルキーで[ New ]を選びます。

First sectorとかSize in sectorsとか色々要求されますが、とりあえず一つのパーティションで良い場合は、何も入力せずにエンターを押してるだけで大丈夫のようです。たぶん。

最後にpartition nameを訊かれるのでTimeMachineと入力しておきました。(これは入力しなくても良いはず)

正しく設定出来たら上の画像のような感じになってると思うので、[ Write ]を選択して完了します。

間違えた場合は[ Quit ]を選択すると無かったことに出来ます。*12

ファイルシステムを作成


CentOSでよく使われるファイルシステムext4XFSらしいです。

今回は、ちょっと調べてパフォーマンスが良さそうだったXFSを採用しました。

mkfs.xfs /dev/sdb1

バイス名の末尾に1を付け足したのがパーティション名になるみたいなので、ここではそれを指定します。

ext4を使いたい場合はmkfs.ext4みたいな感じでxfsのところを変えて下さい。

マウントする


まずマウントするためのディレクトを作ります。((ここでは、マウントする仮想ディスクが置いてあるのがSeagateの2TBHDDなので、ディレクトリ名を"sea2t"としました。)

cd /mnt  
mkdir sea2t

マウントする前に、分かりやすいラベル(今回は”TimeMachine”)を付けておきます。

xfs_admin -L "TimeMachine" /dev/sdb1

でさっき作ったパーティションにラベルを付けます。(ext4の場合はe2label /dev/sdb1 TimeMachine)

再起動時に自動的にマウントさせるために、/etc/fstabの最後の行

LABEL=TimeMachine /mnt/sea2t xfs defaults 0 0

を追記します。

mount /dev/sdb1 /mnt/sea2t/

でマウントして完了です。

Time Machine用ディレクトリの作成


以下のコマンドを1行ずつ入力します。

cd /mnt/sea2t/
mkdir timemachine
chmod -R 0777 timemachine
chown -R nobody:nobody timemachine

ディレクトリを作った後、パーミッションと所有者も変更しているけど、これは必要なかったかもしれない……。

Sambaインストール


ようやくメインのSambaをインストールします。

と言っても簡単です。

dnf -y install samba
systemctl start smb nmb
systemctl enable smb nmb

これでSambaを起動(start)した上、自動で起動されるように設定(enable)できます。*13

自動起動が有効になっているかはsystemctl is-enabled smb nmbで確認できます。

Sambaの設定


設定の概要

  • WindowsmacOSからホスト名の入力でアクセスできるようにする
  • プリンター関連の共有機能はとりあえず無効化する
  • アクセス時はユーザ名とパスワードで認証するようにする

Sambaにアクセスするためのユーザを設定


Sambaにアクセスしたい人の分だけuseraddpasswdLinuxユーザを追加します。

pdbedit -a -u username

でSambaにアクセスする用のユーザーを設定できます。(ここで設定したユーザ名とパスワードをアクセス時に使用します。)

/etc/samba/smb.conf の編集


まず、バックアップを取っておきます。

cd /etc/samba
cp -p smb.conf smb.conf.org

その後、vi smb.confで編集します。

とりあえず今のところこんな感じに設定しています。

[global]
    workgroup = WORKGROUP
    server string = SAMBA SERVER Version %v
    netbios name = sagittarius
    security = user

    passdb backend = tdbsam

    vfs objects = catia fruit streams_xattr
    fruit:metadata = netatalk
    fruit:encoding = native
    dos charset = CP932
    wins support = yes
    # printing = cups
    # printcap name = cups
    load printers = no
    disable spoolss = yes
    # cups options = raw

[homes]
    comment = Home Directories
    valid users = %S, %D%w%S
    browseable = No
    read only = No
    inherit acls = Yes

[TimeMachine]
    comment = Backup for Mac Computers
    path = /mnt/sea2t/timemachine
    writable = Yes
    browsable = Yes
    guest ok = Yes
    fruit:time machine = yes
    fruit:time machine max size = 1T

[global]のnetbios nameや[TimeMachine]のpathfruit:time machine max sizeとかは環境に合わせて設定してください。

netbios nameにはサーバーのホスト名を、pathには先ほど作ったTime Machine用のディレクトリのパスを設定します。

fruit:time machine max sizeではTime Machineで使う最大容量を指定します。500GBなら500Gという感じです。

TimeMachine以外に複数のユーザーで共有できるディレクトリを作って追加すると便利かもしれないのでそのうちやります。*14

とりあえず設定が終わればtestparmコマンドで確認します。

正常なら

systemctl restart smb nmb

Sambaを再起動します。

ファイアウォールの設定


たぶんこのままだと、接続しようとしてもファイアウォールに弾かれるのでSambaへのアクセスを通すよう設定します。

firewall-cmd --add-service=samba --permanent

これでファイアウォール接続許可サービスにSambaを追加します。

successと表示されたらOK。

firewall-cmd --reload

ファイアウォールをリロードします。

これも完了するとsuccessと表示されます。

接続する


ここまで来たらおそらく接続できる状態になってると思います。

MacならFinderのサーバーへ接続で、

smb://hostname

と入力すると接続できるはずです。

接続した状態ならTime Machineの環境設定の利用可能なディスクにSambaのディスクが表示されます。

暗号化も選択できます。

Windowsでは、「Win + R」のファイル名を指定して実行

\\hostname

と入力すると接続できます。

参考URL(順不同)


速度


Wi-Fi接続のMacBook Pro (2018)からスピードテストを行ったところこんな感じでした。

f:id:skyzi000:20200524023419p:plain
MacBook Proからのスピードテスト結果

メインPCのWindows(有線接続)からアクセスするとこんな感じ。

f:id:skyzi000:20200524023602p:plain
Windowsからのスピードテスト結果

……おそい、遅すぎる……。 これはサーバーを有線接続してないのがボトルネックになってる感じなんですかね……スイッチングハブ(有線LANを分岐するやつ)買おうかな……。

ルーターから遠い部屋で、何本もケーブルを引いてくるわけにもいかないのでこういうのが一つ欲しい……。


(追記)

iperf3を使ってルータに直接有線接続しているメインPCから速度テストしてみたところ、約60~70Mbps(≒8MB/s)くらいでした。

f:id:skyzi000:20200525212151p:plain
メインPCからの`iperf3`実行結果

まあ普通にネット接続するだけなら十分な速さではあると思います。(ファイルサーバーにするには遅いかな……)

問題のMacBook Proからiperf3してみたところ、20Mbps(≒2.5MB/s)くらいしか出ませんでした……。

f:id:skyzi000:20200525212640p:plain
MacBook Proからの`iperf3`実行結果

なんでや……同時に5GHz帯のWi-Fi使ってるせいかも……。*15

その後、調べてみるとバッファロースイッチングハブコスパ良さそうだったので注文しました……。↓

https://www.amazon.co.jp/dp/B00I5871DI

新しいモデルが出て安くなってるみたいですが、8ポートの電源内蔵金属筐体で2,480円(2020年5月25日時点)ってなかなかお得なのでは……?

新型はこっち。前面のライトが少なくなった以外の違いってあるんでしょうか……?

ついでにcat6Aのケーブルも2本ほど買ったので届くのが楽しみです……。

(追記終わり)


とりあえず「Time Machineのバックアップを無線で取る」という目的は一応達成されたので速度とかはまた今度考えます。

f:id:skyzi000:20200524130259p:plain
バックアップ完了通知

これが出るまで長い時間かかりますがサーバーを落とさず、MacBookも電源につないだまま待ちましょう……。

あれ、これ外付けHDDの方が速くて安定してて良いのでは……?

さいごに(ファイルサーバを立てるに至った本当の経緯など)


ここまで読んでいただきありがとうございます。

最初はWindowsの共有フォルダに無理やり.spacebundle*16を置く方法でやろうとしてたんですが、これは対応してないのを無理やり動かしてるせいか認識されないことがあったり、macOSのバージョンアップとかで動かなくなったりして、不安定な感じでした。

仕方がないので外付けHDDにバックアップを取ろうかと思いましたが空いてる外付けHDDなんてありません。

かといって内臓HDDを増設できる環境で、割高な外付けHDDを買うのはあまり気が向きません。(しかしノートPCのバックアップなら、おそらく2TBか4TBあたりの外付けHDDを買うのが一番楽で安定した選択でしょう……)

いや、メインPCのバックアップ用のHDDをメインPCに増設して、ノートパソコンバックアップ用の外付けHDDを一つ空けるのが一番良い選択なのでは……!?

などと思いましたが、HDDを買うオカネもありませぬ。

というわけで、少し容量が余り気味のサブPCにバックアップ用のファイルサーバーを立てることを思いついた次第でございます。はい。*17

Windowsの共有フォルダにイメージバックアップできるいい感じのmacOS用無料ソフトがあれば良いんですけどTime Machineが強すぎて見つからないんですよね……。

あ、Windows用のバックアップソフトについても最近めっちゃ調べたのでまた記事にしたいと思います。

そのうちゲーム開発用のGitサーバーも立てたい……今はGitHubにGit LFS使ってプライベートリポジトリを置いてるんですが画像や音声で容量がかさんでやばいんですよね……。*18

蛇足的あとがき(近況報告的な)


どうもスカイジです。イキテマス。

最近はプリコネとかシャニマスとか始めてしまってやばいです。やばい。

大学のオンライン授業も始まったし、挙句の果てにEpicがCiv6とかいうえげつないゲームを無料配布してるじゃないですか……。手を出すと絶対やばいですよこれは。

シドマイヤーズ シヴィライゼーション® VI | いますぐダウンロードして購入 - Epic Games Store

とりあえず貰ってはおきましたがインストールしてないのでセーフですセーフ(?)

学校がしばらくなくて完全に堕落しきった4月を送っていましたが、そろそろ動画も作りたくて仕方がなくなってきた今日この頃です。でもどうやって動画作ってたんだっけ(

動画とかゲームとか作ってないと心身共に悪循環に陥ってダメですね。完全に何か作ってないとダメな体になってしまった。

きりたんとか弓鶴くんとかも使ってやりたいし……。

そういえば新しいボイロ発表されましたね……小春六花さん……やばいですよこれ……金欠なのに絶対買ってしまう……ヤバイ……。

そんな感じです。

脚注


*1:オープンソースでないExtensionPackなどもあるらしいけど本体はGPLv2のオープンソース

*2:適当に設定したけど多分メモリ8GBはちょっと過剰

*3:が、ここでIPアドレスとかを設定しておいても良かったかもしれない

*4:僕は今回「sagittarius」にしました。ホスト名についてちょっと調べてみたら、サーバーに担わせる機能でつける場合もあったり、神や天使の名前だったり、数学者の名前だったり、いろいろな付け方があって面白かったです。今度付ける機会があったら「kotonoha」とかボイロの名前を付けたいな……。

*5:なおここで一般ユーザも作るつもりだったがrootを作ってる間にインストールが完了してしまったので作れなかった模様

*6:もちろんセキュリティ的には無効化するのは望ましくないと思いますが、公開サーバーでもないので多分問題にはならないと思います。たぶん。そのうち勉強して使ってみたいと思いますが今回はとりあえず無効ということで。

*7:viはLinuxに付属するテキストエディタです。 (Windowsで言うとこのメモ帳みたいな感じ?) viの使い方について、最低限のところだけ書いておきます。 起動直後は文字が打ち込めないノーマルモードになってるので、「i」キーで挿入モードにします。
挿入モードなら普通に文字の挿入や削除ができるので、そのまま編集します。
編集し終わったらエスケープキーでノーマルモードに戻ります。
ノーマルモードで「:w」を打ち込んでからエンターを押すと保存できます。
同じように「:q」でファイルを閉じます。(「:wq」で保存してから終了が同時に出来ます。)
ここまでできたら大体何とかなりますが、いろいろと便利なコマンドもあるので詳しい使い方についてはググってください。

*8:ネットで調べると/etc/sudoersを編集しないといけないみたいな情報が散見されますが、CentOS 8では/etc/sudoersの%wheel ALL=(ALL) ALLの行が初めから有効になってるみたいなので、wheelにユーザを追加するだけでsudoできるようになります。たぶん。

でもその下にある%wheel ALL=(ALL) NOPASSWD: ALLの行のコメントアウトを外せば一々パスワードを入れなくて良くなるので便利かもしれません。
まあ一度sudo suしたらrootになれるので、そんなに手間は変わらないかもしれませんが。

*9:-aGオプションは副グループを追加するもので、主グループをwheelに変更したい場合はオプションに-aGではなく-gを指定します。

*10:出来ればパスワードログインも禁止したいところですが、公開鍵認証をここで説明するのはちょっと大げさ(本音を言えば面倒)だしハマりかねないので、パスワードログインはとりあえず有効にしておきます。

*11:今回はとりあえず/mnt/sea2tというディレクトリを作ってそこにマウントします。

*12:Writeを選択するまでは何も書き込まないので

*13:smbがSambaのメインのサービスで、nmbが名前解決のためのサービスらしい。試しにnmbを起動しなかったらホスト名ではアクセスできなかった。

*14:まあ自宅でそんなの構築しても、家族同士でファイルを共有するくらいにしか使わないんですけどね……それだって普通のクラウドストレージで十分だし……

*15:あとスピードテストしてるときにCentOSでdstatを見てるとCPUのアイドルが10%台になることがあるのですが、これはCPU性能が足りてない可能性があるということなんですかね……。
一応i7-6700の4スレッドを与えてるはずなんですが……。(今となってはi3に負けかねないi7ですが)

*16:今は.backupbundleになってるみたいですね

*17:サブPCを売れば少しばかりのお金になるのでは……?

*18:無料では1GBしか使えないのでUnityのデータを置いておくのは厳しい