kenkino’s diary

おそらく技術・グッズ・自転車系 ※当ブログは、Amazonアソシエイトやその他アフィリエイト等の収益メディアを表示しております。

デジタルビデオカメラの収録動画をMacのターミナルだけでmp4に変換する

内容

対面イベントが復活し始めた

これまで3年にわたって人の行動に制限を与えていたコロナの扱いがワクチンの開発や治療薬等の対症療法以外に効果的な手段が出てきたためインフルエンザと同じ扱い(勘違いしてはイケないのが、収束したのではなく対応方法が分かってきたからという点)となりそれに伴ってこれまで自粛気味だった対面イベントが復活し始めてきている、これまでオンラインばかりで、オンラインならではの良さもあったがやはり対面でないとという点もあり対面のイベントが行えるようになってきたというのはいいのだが、それに伴って元々あった問題も復活してきている。

収録動画どうしてます?

自分は、現在もいくつかのイベントでボランティアスタッフとして会場の設営やらセミナー会場の技術的トラブルの対応やセミナー動画の収録・配信をやっている。

その場合、問題になってくるのが収録した動画の公開である。

オンラインもしくはハイブリッド開催であった場合はオンラインミーティングシステムで動画を収録しておけば、イベント終了後に収録した動画を動画配信サービスにアップすればいいだけの話である。

しかし、諸々の事情(会場内に配信用のネットワークが引けなかったり、配信用の設備を持ち込めない)によりデジタルビデオに収録して収録した動画をPC等で編集してアップロードするのだが、これがかなり手間のかかかる作業となる。

具体的には

  1. デジタルビデオ内の記録媒体(SDカード等)を編集用PCに接続

  2. 動画編集ソフトを立ち上げて、収録した動画を取り込み・編集

3.動画配信サービスに対応した動画ファイル形式に変換してアップロード

という手順となるのだが、動画編集ソフトというのが曲者でGUIで操作ができて使いやすくはあるのだがかなりのマシンパワーを消費する上、動作が重いだけならまだしも時には動画の編集途中や変換途中で無反応となったりいきなりソフトが落ちたりして折角の作業が振り出しに戻るということも多いのである。

よく「動画編集は大変」というが、その理由のかなりの部分が動画編集ソフトに起因するのではないだろうか。

どうにかならないかというと

先に書いたように、デジタルビデオから収録動画を動画配信サービスにアップロードするのはかなり大変なのだが「何とかならないか?」かというと下記のような条件であればかなりアッサリと解決する方法がある、条件というのは

  • デジタルビデオに収録した動画を動画配信サービスに対応した動画ファイル形式に変換するだけ

  • 動画の切り出しは秒単位

という条件で、この場合であればかなりの手間を省ける方法があるのである。

これからその方法を説明していこうと思う。

macコマンドライン版動画変換アプリケーションのインストール

まずは、macのターミナルで動画変換を行うアプリケーションをインストールする使うソフトはオープンソースFFmpegというソフトである。

ffmpeg.org

インストール方法としてはいくつかあるのだが、今回はmacのパッケージ管理ソフトを使用してインストールを行う、例としてはHomebrewを使った方法であるが、MacPorts等のmacで使えるパッケージソフト管理アプリなら問題はないと思う

% brew install ffmpeg 

デジタルビデオの動画の実体を探す

次にデジタルビデオの動画ファイルを持ってくる。

動画編集ソフトで編集を行う際に「AVCHD」というものを探して読み込みと動画編集を行なっていると思うが実体はどういうものかはご存知だろうか?

Macに接続したSDカードをターミナルで開いてみてみるとこうなっている

% df -h
Filesystem          Size    Used   Avail Capacity iused ifree %iused  Mounted on
~~ 中略 ~~
/dev/disk4s1        29Gi    20Gi   9.0Gi    69%       1     0  100%   /Volumes/JVCCAM_SD

「/Volumes/JVCCAM_SD」というのが今回接続されたデジタルビデオカメラのSDカードである。 ここに移動して中を見てみよう。

% cd /Volumes/JVCCAM_SD
 % ls
DCIM    EXTMOV  PRIVATE

二つのディレクトリがあるがDCIMというディレクトリが動画関係を保管しているディレクトリになる。 そこに移動して中をみてみるとこういうのが見えてくる。

% ls -l
drwx------@ 1 hogeuser  staff  32768 11  3 09:27 AVCHD
-rwx------  1 hogeuser  staff      8  2 20  2015 AVCID.DAT
-rwx------  1 hogeuser  staff      8  2 20  2015 DCFID.DAT
drwx------  1 hogeuser  staff  32768  2 20  2015 JVC

ディレクトリとして「AVCHD」というディレクトリが出てくる、つまり動画編集ソフトで出てくる「AVCHD」というのは動画ファイルではなくディレクトリなのである。

そこから更にディレクトリを辿っていくとこうなってくる

% cd AVCHD 
% ls -l
drwx------  1 hogeuser  staff  32768  9  5  2015 AVCHDTN
drwx------@ 1 hogeuser  staff  32768  2 20  2015 BDMV
% cd AVCHDTN
% ls
BACKUP  CLIPINF INDEX.BDM   MOVIEOBJ.BDM  PLAYLIST  STREAM
% ls -l
drwx------  1 hogeuser  staff  32768  2 20  2015 BACKUP
drwx------  1 hogeuser  staff  32768  2 20  2015 CLIPINF
-rwx------  1 hogeuser  staff    614 10 31 12:27 INDEX.BDM
-rwx------  1 hogeuser  staff     82 10 31 12:27 MOVIEOBJ.BDM
drwx------  1 hogeuser  staff  32768  2 20  2015 PLAYLIST
drwx------  1 hogeuser  staff  32768  2 20  2015 STREAM
% cd STREAM 
 % ls -lh
-rwx------  1 hogeuser  staff   3.9G 8 20 13:14 00047.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 14:01 00048.MTS
-rwx------  1 hogeuser  staff    74M 8 20 14:01 00049.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 15:00 00050.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 15:46 00051.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 16:33 00052.MTS
-rwx------  1 hogeuser  staff   388M 8 20 16:37 00053.MTS

辿っていくと末尾が「*.MTS」という表記のファイルが入ったディレクトリがあると思うが、そこにある「 *.MTS」というファイルが動画ファイルの実体である。

これらをmac本体のストレージ、もしくは編集用の外付けSSDもしくはHDDにコピーする。 パフォーマンスを考えるならSSDにコピーすると良いだろう。

動画ファイルの結合

持ってきた動画ファイルだがサイズが3.9GBになっているファイルと、それ以下のファイルがあることにお気づきだろうか? 実はSDカードのフォーマット形式により一つのファイルサイズの上限は4GBまでと決まっており、収録中にファイルが上限に近づくと新しいファイルを作成してそこに動画データを保存するということを行なっている。

これを一続きの動画ファイルにする。先ほどの一覧を見ると

% ls -lh
-rwx------  1 hogeuser  staff   3.9G 8 20 13:14 00047.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 14:01 00048.MTS
-rwx------  1 hogeuser  staff    74M 8 20 14:01 00049.MTS ← 3.9GBより小さい
-rwx------  1 hogeuser  staff   3.9G 8 20 15:00 00050.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 15:46 00051.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 16:33 00052.MTS
-rwx------  1 hogeuser  staff   388M 8 20 16:37 00053.MTS ← 3.9GBより小さい

二つ3.9GBより小さいファイルがあり、これから考えると

動画1: 00047.MTS 00048.MTS 00049.MTS

動画2: 00050.MTS 00051.MTS 00052.MTS 00053.MTS

が一続きの動画ファイルと考えられるのでそれらを一つにする、どうするかというとcatコマンドで展開して出力をファイルに保存するだけで完了する。

※一つのコマンドの終了に時間がかかることがあるので注意

% cat 00047.MTS 00048.MTS 00049.MTS > movie_01.MTS
% cat 00050.MTS 00051.MTS 00052.MTS 00053.MTS > movie_02.MTS

そうすると下記のようになると思う

% ls -lh
-rwx------  1 hogeuser  staff   3.9G 8 20 13:14 00047.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 14:01 00048.MTS
-rwx------  1 hogeuser  staff    74M 8 20 14:01 00049.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 15:00 00050.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 15:46 00051.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 16:33 00052.MTS
-rwx------  1 hogeuser  staff   388M 8 20 16:37 00053.MTS
-rwx------  1 hogeuser  staff   7.9G 8 20 17:01 movie_01.MTS
-rwx------  1 hogeuser  staff   12G 8 20 17:06 movie_02.MTS

そして結合した動画ファイルを、動画のサイズが気になるのなら別の動画ファイル形式に変換していく

※ 追記:当初はここから先も必要だと思っていたのですが、この記事をアップした後「結合した状態だけでアップできますよ」との指摘があり、ただ動画共有サイトにアップしたいのでしたら上記作業のみで大丈夫な様です。Kさんありがとうございました。

結合ファイルの変換

動画共有サイトにアップロードできる動画ファイル形式への変換だが先にインストールしたffmpegを使っていく基本的には下記のようなコマンドになる

% ffmpeg -i movie_01.MTS -vcodec h264 movie_01.mp4

このコマンドはGPUを使用することも可能で、下記オプションを追加するとGPUを使った変換も可能となる、この場合通常と比べると3〜4倍くらいのスピードで変換が行われる。

% ffmpeg -i move_01.MTS -vcodec h264_videotoolbox movie_01.mp4

画質を落とさずに変換することも -c copyをついかすることで可能となる、この場合サイズは元の動画と同じサイズになるが、変換がかなり早くなる

% ffmpeg -i movie_01.MTS -vcodec h264 -c copy movie_01.mp4

また、動画の一部を切り出したいという場合、-ssオプションで切り出しを開始する秒数を-tオプションで切り出す部分の秒数を指定することで可能である

% ffmpeg -ss 3600 -i movie_01.MTS -t 900 -vcodec h264 -c copy movie_01_15min.mp4

※ 上記例は動画の開始1時間(3600秒)から15分(900秒)部分を切り出すという意味合いになる。

変換後は、変換した動画ファイルを動画教諭サービスにアップロードすればよい。

ターミナルで処理を行うことの利点

以上動画変換をコマンドラインで行う方法を書いてきたが「ただGUIでやっていたことをコマンドに置き換えただけなのでは?」と思う方もいるかもしれないが、これをするだけでかなり大きく違ってくるのだ。

変換ソフトが応答不能になったり落ちたりしない

まずは編集ソフトがほぼほぼ落ちたりしないということである。

GUIの動画編集ソフトを使っていた方は経験があるかと思うのだが、編集を行っている最中に編集ソフトが応答しなくなったり途中で落ちてしまうといったことがある、しかしコマンドラインベースで行った場合はほぼほぼ落ちることもなく変換が行える。

恐らくGUIの編集ソフトの場合、編集中の動画を表示する部分やその他の機能がかなりマシンに負担をかけているのではと考えられる。CUIだとそういった負担が存在しないため応答不能や落ちたりすることなく処理ができるためと考えられる。

変換中に編集を行っているマシンで別の作業ができる

負担が少ないということは別の利点がある。

通常GUIの動画編集ソフトで変換を行っているとそのマシンで別の作業を行おうとしても重くて作業が行えないことがあるのだが、この方法だとターミナルで変換コマンドを実行した後別の作業を行なっていても問題なく作業が行える。

なのでいままで編集用と作業用と分けていた場合は変換のみを行うのであれば一台で変換を行いつつ別の作業を行えるということで、空いたマシンを別の作業に使ったりすることも可能となる。

変換速度が早い

これは正確に時間を測っていたわけではないのだが、CUIで変換を行うと圧倒的に早く変換を行うことが可能になる。

感覚的にはGUI動画編集ソフトで2〜3時間かかっていた作業が大体30分〜1時間、もっと早い場合は10〜20分で終わる場合があったりで圧倒的に早く処理が終わる。 これまで1日がかりだった作業が2〜3時間で終わってしまうこともあったりで、作業の負担軽減等にかなり効果があると思う。

まとめ

ということでMacのターミナルでデジタルビデオカメラの動画を変換する方法を紹介したが、今回紹介したcatコマンドについてはLinuxffmpegコマンドはmacだけでなくLinuxwindowsでも使うことが可能である、LinuxWindowsであればもっと協力なCPUやGPUを搭載しているマシンもあったりするのでそちらを使えば更に早く作業を行えるのではと思う。

これまでデジタルビデオで収録した動画を動画共有サービスにアップロードするのに苦戦していた方がいたら試していただければと思う。

4K ディスプレイを買ってみた

内容

prf.hn

テレワークが始まった

前回の投稿で書いた通り、テレワークが始まり現在もテレワーク中なのであるが 一つ困った問題が出てきた。

テレワークに当たっては勤め先からPCを支給されてマシンのCPUとメモリ的には問題はなかったのだがサイズとしては標準のモバイルPCといったところで、本体のディスプレイサイズがコマンドラインメインでターミナルを使ったり、Officeを使う分には問題ないのだが、今回の仕事はGUIベースの作業が多く並行して複数のウィンドウとかを開く必要があり、それだとかなり手狭になってしまう状態になってしまった。

最初の一週間は何とかなったが、この後を考えるとかなりフラストレーションが溜まることは必須で「やはり外部ディスプレイを使わないと」と思ったのだが、自宅にあるのは結構昔に買ったEIZOの1600x1200の20インチで現在使っているPCよりも解像度が低く改善策を考えあぐねていた。

よろしい、ならば購入だ

「以前の仕事みたいに4Kだと楽なんだが、値段高いだろうし今の生活も赤字続きだしな・・・」と思っていたのだが、以下の条件でダメもとで探してみることにしてみた。

  • サイズは27インチ以上(以前の仕事で使っていた4Kディスプレイが27インチだったため)
  • 対応フレームレート(1秒間に描画できるコマ数)は60以上
  • 可能であれば日本のメーカー(まぁ、ここら辺はあまり拘っていなかった)

まず、日本で現在あるディスプレイメーカーとしては

  • EIZO(古い人達ならナナオと言えばご理解いただけるだろうか)
  • IO-DATA(確か飯山(これも古い人ならわかるだろうか)のディスプレイ部門を吸収したはず)
  • JAPANNEXT(比較的最近設立のメーカーだが、最近色々と製品を出してきている)

といったところで、個人的にはEIZOかIO-DATAを考えていたのだが4Kはお値段的にキビしいなということで断念、残るJAPANNEXTについては「どうかな?」という部分があったのだが機種を探してみたところ個人的にはお得感のある価格で28インチの4Kディスプレイがあり、レビューをいくつか見てみたところ「標準でついてくるスタンドのネックが細いためちょっとした振動でもブレまくる」というのがあったが「ここら辺は買ってみてチェックかな?」ということでひとまずネットで購入し翌日配送ということで注文翌日受け取った

モノは来た。しかし・・・

受け取ったディスプレイを設置、その日のリモートワーク終了後に自宅のMacBook Proに接続してみて見たところアッサリ接続成功し、MacBook ProYouTube の4K動画をみて「おおっ!!」とか見ていてこれならイケそうだということになり、翌日のテレワークから使い始めてみたところやはり作業効率が段違いに上がり、かなり満足のいく結果になった。

しかしちょっと困った点もあり、一つはやはりスタンドのネックが細くてちょっとした操作でもディスプレイがエラい揺れるのと、スタンドが狭い自宅のデスクを更に狭くしてしまったことで「いいんだけどこれは何とかならんかな〜〜」といったところだった。

アームをつけたら

そう思い悩んでいてネットでちょこっと話したところ「ディスプレイアーム、いいっすよ」という話が

「でも、お高いんでしょう?」と思ってみて見たところ結構買えそうな値段で出ており、最近の液晶ディスプレイは規格的にディスプレイアームにも対応しているということで家電量販店に見に行ったところデスクのサイドにクランプで止めるタイプで良さそうなアームを発見、ちょうどその量販店の株主優待券も持っていたことから即購入してアームを設置してディスプレイを取り付けた。

「少しはマシになるかな」と思っていたのだが思いの外ディスプレイもしっかり固定され、加えてアームの設置場所がデスクのサイドになったためスタンドが占有していたスペースが空いたためかなり満足のいく状態となった

その後

現在は、業務時間はリモートワーク用PC、業務時間後はMacBook Proを繋げており、これまでMacBook Proで使ってたUSBハブのHDMIが4K30Hzまで対応だったのを4K60Hzまで可能なハブに買い替え

付け替えて試してみたところ、やはり動画に違いがありすこぶる快適で現在この構成で使用している。

唯一の悩みは週一くらいで出社して業務をしているのだが勤務先に設置されている外部ディスプレイが自宅の環境よりやや劣る環境のためどうしようかというところくらいであり、リモートワークを行うのならここら辺の環境整備は大事だなと実感した。

今回のことで言えるのは

  • GUIで仕事をするなら27インチ以上の4Kディスプレイを使うと世界が変わる
  • 可能であるならディスプレイアームも買った方が幸せになれる

といったところで、テレワークでGUIを使っていてフラストレーションが溜まっているという方で4Kディスプレイを持っていない方は購入してみた方が良いかと思う。

go.getproton.me

自宅JCOMが繋がらなくなって自力で復旧させた話

7月に突然JCOMが繋がらなくなり、色々やって復旧した話をこれからしていこうと思う。

内容

不具合発生 

7月上旬、自宅で使っているChrome Bookで電子書籍をダウンロードしようとしたらネットワークエラーで途中終了し「なんだダウンロード失敗したか、再度ダウンロードだな」とダウンロードをかけたところ今度は全くダウンロードができず「サーバが混んでるか、混むのが解消するまでSNSでも見るか」とSNSのビューワーを立ち上げたらこちらも接続できないという表示が。

「???」となりながらWebブラウザを立ち上げてYahooやGoogleを見ようとしたら軒並み接続できず。

J-COMの障害か?」と思い、スマホのモバイル接続でDowndetectorという障害情報が掲載されるサイトでJCOMをチェックしたのだが障害の情報は無く「まぁしばらくしたら回復するかな」と思い、夜も遅い時刻だったので寝る事にした。 しかしこれが1ヶ月近くも続いた騒動の始まりだった。

障害状況と確認 

翌日起床後にネットワークの状態を確認したところ、昨日と変わらず「やけに長引くな」と思いつつ状況の確認を始めた。

自宅は以前書いたように自宅のネットワーク構成を変更している。

kenkino.hatenablog.jp

ネットワーク不具合発生時の構成はザッと書くとこのようになっていた。

通常自宅のネットワークが繋がらないという場合は以下の場合が考えられる。

1.使っているPCのファイアウォールの設定ミスでPCがネットワークから来るパケットを全て遮断している

2.アクセスポイントが機能せずに自宅のルータまで繋がらなくなっている

3.ルータの設定ミスでインターネットに繋がらなくなっている

4.DNSというサーバーと接続できなくなってドメイン名とIPアドレスの変換ができなくなっている

ということで上記1、2を確かめるため無線LAN経由で自宅ケーブルモデムルーターの管理画面へアクセスしたところ問題なくアクセスができており1と2の可能性が消えた。

そして3と4の可能性を探るためにMacBookのターミナルからpingコマンドを実行してみた。

このコマンドはコマンドを実行したマシンとネットワークのとあるサーバが通信できるかを確かめるコマンドで、通信ができる場合はサーバから返答が返ってきたことと要した時間等が表示されるコマンドである。

まずは3の可能性を確かめるためにGoogleDNSサーバのIPアドレスである「8.8.8.8」へコマンドを実行した。

IPアドレスというのはコンピュータ個々のネットワークデバイスが持っているアドレスで実はコンピューター同士はこのIPアドレスがわからないもしくはアドレスに到達しないと通信ができないため、返答が返ってこないということはネットワーク的に問題があるということなのだが、結果としては問題なく返答が返ってきていた。

次はDNSだが、DNSとは簡単に言うとIPアドレスでしか接続できないコンピューター同士がWebブラウザ(EdgeやらChromeとかのインターネットのホームページをみるソフト)でホームページをみるためのhttp://以降の文字は実はIPアドレスと紐づいており「この名前のサーバのIPアドレスはこれ」と伝えるサーバでこれと通信ができていないということはhttp://以降の文字を入れてもIPアドレスが取れずに通信ができないということになる。

4の可能性を確かめるためにはwww.yahoo.co.jpやwww.facebook.comにpingコマンドを実行して返答が返ってくるかを確かめる(ただしpingコマンドは下手なアドレスに対して実行するとネットワーク攻撃と見なされることもあり、実行する場合は上記のようなメジャーなところにして欲しい)結果としては返答が返ってきており、ネットワーク接続的には問題はないということになり、状況は暗礁に乗り上げてしまった。

サポートその1~~ケーブルモデム交換

上記のような状況であることまで確認してJCOMのサポートに連絡、やり取りをした結果ケーブルモデルルーターを交換ということになり、日時を調整してサポートの方が到着してケーブルモデムルーターを交換、交換直後は問題なく接続ができていたため「ケーブルモデムルーターの不具合だったか」と思っていたのだが、2〜3時間後に状況が元に戻ってしまいその日のうちにサポートに連絡するという事態になってしまった。

サポートその2~~ケーブルTV関係接続機器の交換

ケーブルモデムルーターで状況が改善しないということで、再度サポートのお世話になることに、実の話7月の半ばからリモートワークが始まる事が決まっており、このままでは業務ができない状況に陥る恐れがあったためかなり焦っていた。 再度サポートが訪問して今度は自宅の接続機器の交換ということになり、交換をしてもらったのだが状態は解消せずサポート要員の方もできることはここが限界ということで終了。

ただし訪問していただいたサポートの方の話によると、基地局から自宅マンションのケーブル回線(自宅マンションは、地上デジタル化の際に電波対策地域となっていたためケーブル回線が引きまわされている)と自宅までの通信はできているのは確認できているが、通常一定を値を示す通信状況が自宅のみ振幅しているとの話で、接続機器の不調を疑ったが交換しても不調なためそれが何が原因かはわからないという話で、現状では対応できるのはここまでが限界という話だった。

ということで、自宅の回線が不調のため旅行の際に使っているポケットWiFiルーターにリモートワーク用のPCを接続して当面はリモートワークを行うことにして、対応を考えることにした。

意外なキッカケ

自宅のネットワークが不調のためポケットWiFiルーターでリモートワークが始まり、リモートワーク用のPCは一応問題なく接続が行えていて一安心といったところだったのだが、ある時仕事中にリモートワーク用のPCのステータスを確認したところ自宅のネットワークに繋がっていることに気づき「自宅ネットワークが不調なはずなのに何で繋がって使えてるんだ?」となり、業務終了後にリモートワーク用のPCを調べていたところリモートワーク時には勤務先のネットワークとVPNというPCと勤務先のネットワークをソフトウェアを使って仮想的に勤務先のネットワーク内にいる状態になっていると問題なくインターネットのサービスが使えることに気いた。

「もしかして」と以前自宅のストレージに問題があった際にProtonDriveというサービスに申し込んでいて、登録した際にProtonVPNというVPNサービスが使える様になっていた。

go.getproton.me

そのため試しに自宅のMacBookProでProtonVPNに接続してみたところMacBookProで問題なくWebやメールが使えるという状況になった。

その頃たまたまネットワーク関係の人と飲む機会があり自宅の状況を説明したところ「もしかしてケーブルモデムルーターのNATテーブルが溢れてない?」という話に。

※この先は自分のちょっと曖昧なネットワークの知識を元にして書いているので、これより先はネットワーク系の皆さん間違っていたらご指摘お願いいたします。

NATというのは、家庭のネットワークは内線電話とすると、インターネットという外線に繋ぐ場合、自宅のPCのIPアドレスを一旦自宅のルーターに割り振られた外線のIPアドレス置き換えて繋ぐ仕組みというと分かりやすいだろうか

NATテーブルというのは「現在のインターネットサービスを利用している(これをセッションといったりする)リスト」といったところで、これが一杯になってしまうと内部のネットワークから外部のサービスへ繋げなくなってしまい結果的にネットワークが使えなくなってしまうということになる。

試しに自宅のRTX1200でNATのセッションを見てみると6000くらいのセッションがあり、RTX1200は20000セッションが限界なので問題ないがケーブルモデムルーターのNATテーブルが溢れているということであれば説明がつく。

他のネットワーク関係の方に聞いてみたところ家庭用のルーターだとNATテーブルは大体2000前後で設定されているのではとのことで、これはほぼ確定ではなかろうかということになった。

VPNを使うと繋がるのはVPNのクライアントとサーバを接続するとその間にトンネル接続という接続がなされてVPNの接続先のネットワークを介してインターネットに接続される状態になるため、自宅のNATの制約を受けなくなるからであると考えられる。

完全復旧?

ということでVPNを使えば個々のPCは問題なく使えるのだが、自宅内にはPCの他にインターネットを使っているマシンがあったことからインターネットの繋ぎ先であるケーブルモデムルーターで対処しないとダメだろうという結論になり、ケーブルモデムルーターのNAT関連の設定を見たが、テーブル操作に関する設定は存在しなかった。

どうするかと思ったが、現在自宅のネットワークはケーブルモデムルーターにはRTX1200がつながっているのみなのでケーブルモデムルーターのNATを含めたルーター機能を停止してインターネットの繋ぎ先になるブリッジモードに変更して、ルーティングはRTX1200に任せればと思い立ち、設定を行ってみたところネットワーク接続が復旧し、とりあえずは以前と同様に使える様になった。

このように、自宅でのJCOMの接続は復旧したが、この解決策を取ろうとすると

  • 自分のPCもしくはスマホからインターネットにどの様な機器を介してつながっているかを把握しているか?
  • ネットワーク接続機器がどの様なものがあり、どの様に使うか?
  • IPアドレスの知識
  • ネットワーク調査用のコマンドの知識
  • ネットワーク接続トラブルの対処経験

が必要で、先に示した知識が全く無い人がこれをやろうとすると事態が悪化するためオススメはできない、あえて作業を行う場合は自宅のネットワークをダメにする覚悟で自分でそこら辺の知識を勉強するか、その様なことを知っている人に頼んだ方がいいだろう。

このような方法で解決後にJCOMのサポートに連絡、ケーブルモデムルーターのNATテーブルに関してセッション数の限界について聞いてみたのだが、サポートにもNATテーブルの限界セッションの情報はないとのことで、他に自宅のネットワークについて確認をしてみたところ原因不明の回線の不安定状況は継続しているとのことで、当面は問題なさそうだがまた繋がらなくなりそうな気配もあり、その際の代替経路も準備しないとダメなのか考えているところである。

暑さ対策グッズを試す ~ ソニーReon Pocket 4 編 ~

内容

自宅の片付けをしていたら

最近、自宅の片付けをしていたら某家電量販店の株主優待券を見つけてしまい、加えて優待券の期限がもう直ぐということで「何を買おう」と思っていたらフト「サンコーのセナクールはあるけど、優待券使えば手に届く価格になるな」ということで以前から気になっていたソニーが販売しているReon Pocketの最新モデルを購入することにした。

商品について

この商品は大体の人が知っていると思うが、ソニーが発売しているペルチェ素子式の冷却・加熱デバイスである。

4の名前が示す通りこれまで四回モデルチェンジが行われており、モデルチェンジを行うたびに色々と改良が加えられていて最初のうちは「う〜んこれだとあまり使いたくないな〜〜」と思っていたのだが最近のは「ちょっと使ってみたいな」と思うほど改良が加えられていて気になっていた。

というのも報道を見る限りだと、最初は装着するために作られたのウェアに入れて使うようになっていて時間が経つと自動的に停止するものだったのだが、最近のはネックバンドで服装に構わず取り付けられるようになっていたり、外付けの外部環境センサーで外部の環境によって自動的に冷却・加熱が行えるようになっていたりで急速に進歩しており

「これなら使ってみてもいいかな」という性能になってきていたタイミングで優待券を見つけたので購入した次第である。

今回購入したのは外部環境センサーなしのモデルであるが、本体についた温度センサーで運転モードにより最適な温度にするモードが付いていたらしい。

購入したものが到着してチェックしたところ、セナクールに比べると全体的に大きめであるがペルチェ素子の冷却部分も大きくネックバンドもシッカリした作りになっており、耐久性のありそうなデザインになっている。

加えて排気口の延長ノズルが付属しており少し襟の高い服でも排熱ができるように配慮されているところは、モデルチェンジを繰り返したフィードバックの結果かと思われるがよく考えられているなと思った。

使ってみて

動作については、本体にスイッチがあるのでそちらを使って操作することもできるが、スマートフォンにアプリをインストールしてBluetoothで接続して使うのが圧倒的に使いやすい。

操作は

1.電源を入れたReon Pocketを首につける

2.スマホのアプリを起動する

3.アプリが起動しているReon Pocketと接続

といったところで、アプリで冷却・加熱の切り替え、動作のON/OFFと動作モードの選択が行える。

デフォルトの場合はSMARTモードという周りの温度や設定温度に合わせて動作を変えるモードになっており、そのモードでもいいのだが、もう少し冷たくしたいという場合も手動で調整が可能である。

内蔵バッテリーの持ちというところではSMARTモードでは7~8時間となっているが、自分の場合だと朝6~7時くらいから使い始めて昼の1〜2時くらいに動作が止まっていてほぼメーカー公式性能通りで、普通に勤めている人ならお昼の休憩時に充電して1日使えるといったぐらいになるのかと思う。

内蔵バッテリーだけでなく、モバイルバッテリーを接続して使うことも可能で、本体からケーブル等が伸びてしまうが最近のモバイルバッテリーの容量(10000mA)くらいなら一日中つけたままで使用可能になる。

排熱についてはダクトが付属しており、これが結構効果的で付けている時はほとんど排熱を感じなかったのだが、自分の場合はいつの間にか脱落orz、結構効果があると思うのでダクト単体で長めとか角度を付けたタイプとか売ってくれると助かるなと思った。

動作音については、SMARTモードだとものすごく静かで、静かなオフィスで動作させていても空調の音に紛れる位の大きさで、オフィスでスーツを着て働いている人には結構いいのではと感じた。

セナクールと比較して

前回投稿したセナクールと比較すると、セナクールが動作時に常時フルパワーで冷やすといったところに対してReon Pocketはセンサーで細かく冷却モードを変更しながら外気温や動作モード等の最適点で冷やすといったところで、セナクールの倍以上のお値段だがそのお値段分の機能が盛り込まれている感はあるなと感じた。

使い方としては、セナクールがバッテリーなしならちょっとした外出、モバイルバッテリーをつけて長時間の野外作業で使うに向いているかなというのに対して、Reon Pocketはモバイルバッテリーを付ければセナクールと同じ使い方はできるが、この時期とかでもスーツ着用必須(どんなブラック職場だ)で節電設定されたオフィスにいても暑いなという人たちが付けて冷却の補助に使うといった使い方に向くのかなと思った。(まぁスーツ着用必須の場合、こういうのを付けるのも許されない気はするが....)

そういう相違点はあるのだが、両方とも排熱が少し問題で背中にあたる角度によっては冷却プレートではなく排気口だけ背中に当たって暑いだけ(火傷するほどではないが)だったり、電源ボタン・充電コネクタが右側にあり、外付けモバイルバッテリーのコードをつけた場合スイッチが押しにくいし、外付けバッテリーは胸ポケットに入れるはずで大抵のポケット付きの服は胸の左側にポケットがあるのに何故電源コネクタが右側に付いているのかと思うことがあり、ここら辺はオプションの排気対策パーツを用意したり、電源コネクタの位置を変更したりと双方ともも少し考えた方が良いのではと思う。

いずれにせよ「ネッククーラーは付けずらいが、シッカリ冷えるものが欲しい」とか「一見して冷却デバイスを使っているのが見えると差し障りがあるところで使いたい」という場合はオススメできる製品だと思う。

最近は異常に暑く熱中症で病院へという話も増えているのでこういう製品を買ってできるだけ凌ぐのも一つの方法なのではないかとも思う、皆さんも気をつけて過ごしていただきたい。

暑さ対策グッズを試す ~ サンコー セナクール 編 ~

内容

何故かこの時期になると

昨年末に転職してとある仕事をやっていたのだが、リモートワークではあったのだが色々合わないところがあり契約期間で終了させてもらい、現在は転職サイトで声をかけてもらった別のところで仕事をさせてもらっている。

現在の仕事の方はリモートワークも行えるが現在のところは通勤している状況で、これから暑くなる中も通勤するということで暑さ対策グッズを常時持ち歩いているという状況になっている。

ここ最近、何故かこの季節になると新しい暑さ対策グッズを買ってきて「今年は無くてもいいか」と思いつつ購入していて今年も「ファン付きウェアもある、冷却ベストもある、ネッククーラもあるからもういいだろう」と思っていた。

kenkino.hatenablog.jp

kenkino.hatenablog.jp

kenkino.hatenablog.jp

しかしサンコーのサイトを見ていたら面白そうな製品がでていたのでまた買ってしまったという次第であるorz

商品について

商品について説明すると本体部分にペルチェ素子と排熱及び周辺への送風用のファンと首に掛けるネックアームがついており、ネックアームを首に引っ掛けると背中にペルチェ素子が密着してスイッチを入れると冷却が始まると言ったものである。

電源ボタンは本体横に付いており、一回長押しすると連続動作モードで動作開始、電源が入った状態で一回短く押すとエコモード(1分間冷えた後、3分間ファンのみ駆動)で動作というものである。

本体バッテリーは連続動作モードで1時間、エコモードで2時間となるが、外部バッテリーを接続可能でメーカのマニュアルによると10000mAで連続動作モードが5時間、エコモードで10時間駆動できるとのことで、付属のUSB Type-Cケーブルを接続することで充電や外部バッテリー駆動を行う、ただし付属のUSB Type-C充電ケーブルは形状がL型でケーブルをつけた状態で電源ボタンを押そうとするとかなり押しづらい上にコネクタが右側にあり、普通の服は大体左側にポケットがあるものが多く外部バッテリーを使う場合は大体そこに入れるはずなのに何故ケーブルの取り回しが面倒になる右側なのかが謎だったりする。

使ってみて

5月くらいに購入して、暑くなりそうなときを見計らって使っていたのだが背中につけることもあり、ネッククーラのようなつけ外しの面倒さも無くペルチェ素子は結構冷たくなりかなり効果はあると感じていた。

初めの頃はファンの部分が密着してしまいペルチェだけで無く本体自体が相当熱くなり「これ、設計ミスでは?」と思ってマニュアルを読んでみたらスペーサー付属していたことが判明、単にマニュアルをよく読んでいなかっただけだった。orz

スペーサをつけたところ、常時排熱できるからかペルチェの冷たい感覚が得られてペルチェ周辺は冷え続けている感覚があり「これは良いか」と思っていた。

しかし長時間使っているとペルチェの排気口から当たる熱風で冷や熱いと言った状況となり、おまけに排気口周辺も熱を持ってくるのか「ペルチェ周辺は冷たいが排気口の熱で台無しになる」感覚で短いバッテリー動作時間や意外に音も大きいというのも相まって「これ、ハズレだったかな」と考えてしまうようになっていった。

意外な組み合わせ

「なんか冷や熱いし本体バッテリーも持たないしビミョーだな〜〜」と思っていたのだが、とある気温の高い休日に野外で行動しようと思いファン付きウェアを着ようとしたところ「このウェアってファンはUSB駆動だし、バッテリー大容量のを使っているからセナクールと組み合わせるといいんじゃないか?」フト思い立った。

kenkino.hatenablog.jp

今年ウェアの電源を強化しておりバッテリーを入れる場所もウェアの右の裏ポケットなのでケーブルの取り回しも面倒では無く、おまけにペルチェの排熱はウェアのファンで吹き飛ばせるのでいいのではないかと思ったのだ。

早速ウェアのバッテリーと接続してテスト、突入電流の関係で時間差でスイッチを入れて使ってみたところ狙い通りにファンの風がペルチェの熱風を吹き飛ばしているのと同時に、本体もファンの風で冷却されるためか排気口にあまり熱がこもらずかなり冷感が改善された。

最近サンコーとワークマンでペルチェ素子付きのファン付きウェアが出ているが

これらはペルチェ部分はアンダー一枚隔てて接触するのに対して、今回の方式だとペルチェ素子が直接背中につくのでこっちの方が効果が高い&お値段もお得であり、ファン付きウェアだけでは暑い時にこれを付ければこれをつけた部分は確実に冷たいので、双方の微妙な点を補う形になり、更に冷却ベストを付ければかなり効果があるのではと思う。

暑い時期の通勤用として使うのは微妙だがファン付きウェアを使う野外作業でウェアのサポートとして使ういったところでかなりの効果を発揮するアイテムだと思うので、USB接続のファン付きウェアを使っているがウェアだけでは物足りないという方がいたらこれを購入して使ってみるのがいいのではと思う。

FreeBSD 13.1にZabbix 6.0を入れてみた


内容

自宅環境の監視 

自宅ネットワークの再構築や

kenkino.hatenablog.jp

Minisforumを入れて仮想化環境を入れたりしていて、色々と試したりしていたのだが

kenkino.hatenablog.jp

監視についてはネットワークのモニタのみでその他の監視を行っておらず

kenkino.hatenablog.jp

「仮想化環境も揃ったことだし、何か監視用のサーバを立ててみるかな?」

ということで、オープンソースの監視ならLinuxでZabbixを何度もインストールしていたりしたので、Zabbixを立ち上げようと思ったのだが「これまでLinuxで立ち上げはやったが自宅で主に使っているFreeBSDでいれてみるのはどうなのだろう?」ということで、FreeBSD仮想マシンを立ち上げてZabbixのインストールを試してみることにした。

Zabbixのダウンロード・インストールについて調べる 

Linuxの場合、最近はOSとアーキテクチャ、OSバージョン・DB・Webサーバを指定すればインストール方法が表示されるページがあるのだが、生憎FreeBSDはそのようなモノが用意されおらず、いろいろ手順を探しながらのインストールなる。

www.zabbix.com

といってもZabbixのインストールの大まかな流れとしては

  • Zabbix-server、frontend、DB、Webサーバをインストール
  • DBサーバにZabbix用のテーブルを追加
  • Webサーバのphp用設定を有効にして起動

というところを押さえておけば、OSが違ってもインストールは行えるハズである。

今回は下記のような構成でFreeBSD 13.1にインストールを行うことにした。

Zabbix : 6.0 LTS

DBサーバ : PostgreSQL

Webサーバ: nginx

インストール前調査

まず最初に行うのはFreeBSDのインストールパッケージであるpkgの依存関係を確認である、ここでパッケージ間の依存関係が自分のインストールしたい設定となっていればいろいろと全自動で行ってもらえるので、かなりの作業を省くことが可能となる。

# pkg search -d zabbix6-server
zabbix6-server-6.0.12
Comment        : Enterprise-class open source distributed monitoring (server)
Depends on     :
    fping-5.0_2
    net-snmp-5.9.1_2,1
    curl-7.87.0
    pcre2-10.40
    libevent-2.1.12
    unixODBC-2.3.11
    mysql80-client-8.0.31
 # pkg search -d zabbix6-frontend-php81
zabbix6-frontend-php81-6.0.12
Comment        : Enterprise-class open source distributed monitoring (frontend-php81)
Depends on     :
    php81-session-8.1.13
    php81-xmlwriter-8.1.13
    php81-xmlreader-8.1.13
    php81-xml-8.1.13
    php81-simplexml-8.1.13
    php81-dom-8.1.13
    php81-ctype-8.1.13
    php81-fileinfo-8.1.13
    php81-filter-8.1.13
    php81-sockets-8.1.13
    php81-ldap-8.1.13
    php81-snmp-8.1.13
    php81-bcmath-8.1.13
    php81-8.1.13
    php81-gd-8.1.13
    php81-gettext-8.1.13
    php81-mysqli-8.1.13
    php81-mbstring-8.1.13

パッケージの依存関係でDBはMySQL前提だったorz

これで方法はないのかと思う方もいるかもしれないが、FreeBSDにはportsというネット上のソースをダウンロードしてビルド・インストールする機能が用意されており、今回はこちらよりインストールすることにした。

FreeBSDのインストール前準備

インストール前にまずはOS本体とパッケージの更新を行う。

セキュリティアップデート

# freebsd-update fetch
# freebsd-update install
# shutdown -r now
# freebsd-update install
# pkg update -f
# pkg upgrade -y
# freebsd-update install

portsのアップデート

下記コマンドでportsの内容を最新にする。

# portsnap fetch
# portsnap extract

Zabbixに必要なパッケージのインストール 

Zabbix6-server インストール

portsの存在するディレクトリに移動してインストールを行う

# cd /usr/ports/net-mgmt/zabbix6-server/
# make install

インストール途中でncursesの画面が出てくるが、使うDBをpostgresqlに変更する以外は、デフォルトの状態でOKを押せば問題はない。

zabbix6-frontend インストール 

zabbix-frontendのディレクトリに移動してインストール

# cd ../zabbix6-frontend
# make install 

こちらは全てデフォルトで

PostgreSQL インストール

DBはPostgreSQL13を使う

# cd /usr/ports/databases/postgresql13-server/
# make install

こちらも全てデフォルトで構わない

nginx インストール

# cd /usr/ports/www/nginx
# make install

こちらも全てデフォルトで

DBの設定

PostgreSQLユーザーの確認

PostgerSQLのデフォルトユーザーが登録されているかを確認する

# cat /etc/passwd | grep postgres
postgres:*:770:770:PostgreSQL Daemon:/var/db/postgres:/bin/sh

rc.confへPostgreSQLの起動設定を追加

下記コマンドでFreeBSDのサービスを司る/etc/rc.confというファイルにPostgreSQLの起動設定を追加する。

# sysrc postgresql_enable=YES

DB初期化

下記コマンドでPostgreSQLの初期データベースを作成する

# service postgresql initdb

postgresql 起動

既に起動しているかもしれないが、改めて起動を行う。

# su - postgres
$ /usr/local/bin/pg_ctl -D /var/db/postgres/data13 -l logfile start
pg_ctl: another server might be running; trying to start server anyway
waiting for server to start.... stopped waiting
pg_ctl: could not start server
Examine the log output.

postgres パスワード設定

下記コマンドでpostgresの初期ユーザがDBにアクセスする際のパスワードを設定する

$ psql -c "alter user postgres with password 'postgresユーザーパスワード'"
ALTER ROLE

zabbix ユーザー作成

DBにアクセスするzabbixユーザーを作成する。

# su - postgres
$ createuser --pwprompt zabbix
Enter password for new role: zabbixユーザーのパスワード

DBにzabbix用のテーブルを作成する

portsでインストールした場合 /usr/local/share/zabbix6/server/database/postgresql/にテーブルのテンプレートが存在するので、postgresユーザーに入って下記コマンドでテーブルを作成する。

# su - postgres
$ cd /usr/local/share/zabbix6/server/database/postgresql/
$ psql -U zabbix -W zabbixのDBユーザーのパスワード < postgresql/schema.sql
$ psql -U zabbix -W zabbixのDBユーザーのパスワード < postgresql/images.sql
$ psql -U zabbix -W zabbixのDBユーザーのパスワード < postgresql/data.sql

Zabbixの設定

zabbixのタイムゾーンの設定

/usr/local/etc/php/zabbix-required.inをエディタで開いて、下記の箇所を Asia/Tokyoに設定する。

[Date]
date.timezone = Asia/Tokyo

DBのパスワードを追加

/usr/local/etc/zabbix6/zabbix_server.conf のDBPasswordを下記設定に変更する。

### Option: DBPassword
DBPassword=zabbixのDBユーザーのパスワード
#   This option can only be used if DBUser and DBPassword are not specified.

サーバの起動、しかし

/etc/rc.confに下記コマンドでサーバの起動設定を追加する

# sysrc zabbix_server_enable="YES"
# sysrc php_fpm_enable="YES"
# sysrc nginx_enable="YES

下記コマンドでサーバを起動

# service zabbix_server start
# service php-fpm start
# service nginx start

これで起動したハズということでWebブラウザhttp://ZabbixサーバのIPアドレス/zabbix6/にアクセスしたのだがエラーとなってしまったorz

原因の調査、そして起動成功

nginxのログを調べたところ、php関連のスクリプトが動いていないとのことでphp-fpmのステータスを確認したところエラーに

調べてみたところphp-fpmでnginx関連の設定がすっぽ抜けていたらしいorz

nginxユーザー作成

nginxユーザーを作成、shellはnologinで構わない

# adduser nginx
Username: nginx
Full name: nginx
Uid (Leave empty for default): 
Login group [nginx]: 
Login group is nginx. Invite nginx into other groups? []: 
Login class [default]: 
Shell (sh csh tcsh nologin) [sh]: nologin
Home directory [/home/nginx]: 
Home directory permissions (Leave empty for default): 
Use password-based authentication? [yes]: 
Use an empty password? (yes/no) [no]: 
Use a random password? (yes/no) [no]: 
Enter password: 
Enter password again: 
Lock out the account after creation? [no]: 
Username   : nginx
Password   : *****
Full Name  : nginx
Uid        : 1002
Class      : 
Groups     : nginx 
Home       : /home/nginx
Home Mode  : 
Shell      : /usr/sbin/nologin
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (nginx) to the user database.
Add another user? (yes/no): no
Goodbye!

php-fpmの設定変更

ユーザーを作成したら /usr/local/etc/php-fpm.d/www.confのuserとgroupをnginxに変更

user = www
group = www
↓
user = nginx
group = nginx

加えてlistenの項目も変更する

listen.owner = www
listen.group = www
listen.mode = 0660
↓
listen.owner = nginx
listen.group = nginx
listen.mode = 0666

再び起動したところ、ソケットが存在しないというエラーが出た

# service php-fpm start
Performing sanity check on php-fpm configuration:
[20-Mar-2023 04:16:59] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful

Starting php_fpm.
[20-Mar-2023 04:16:59] ERROR: unable to bind listening socket for address '/var/run/php-fpm/php-fpm.sock': No such file or directory (2)
[20-Mar-2023 04:16:59] ERROR: FPM initialization failed
/usr/local/etc/rc.d/php-fpm: WARNING: failed to start php_fpm

/var/run以下にphp-fpmのディレクトリを追加

# cd /var/run
# mkdir php-fpm

再びphp-fpmを起動したところ起動に成功したのだが、ブラウザでZabbixにアクセスできずnginxのログにもphp関係でエラーが発生していた。

nginxの設定変更

調べてみたところnginxのロケーションに問題がありそうで /usr/local/etc/nginx/nginx.confのロケーション関係の項目を下記に修正した

        location / {
            root   /usr/local/www;
            index  index.html index.htm index.php;
        }
   location ~ \.php$ {
            root           /usr/local/www;
            fastcgi_index  index.php;
            fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

改めてnginxを再起動してWebブラウザでアクセスしたところ、Zabbixの設定ページが開きZabbixが使えるようになった。

設定を一通り行ったところ管理画面が表示されてZabbixの設定は一通り完了した。

日本語化

これまでの手順で一通り動作するまでに持ち込んだのだが、そのままでは表示が英語なので日本語表記にしたい方々はこちらも行うとよい。

フォントのインストール

下記コマンドで日本語フォントをインストールする

# pkg install ja-font-ipa
# pkg install ja-font-ipa-uigothic

インストール後、リンクを作成

# ln -s /usr/local/share/fonts/ipa-uigothic/ipagui.ttf /usr/local/www/zabbix6/assets/fonts/ipagui.ttf

Zabbixの設定を変更

エディタで/usr/local/www/zabbix6/include/defines.inc.phpの下記設定を変更する

define('ZBX_GRAPH_FONT_NAME',         'DejaVuSans');   この行を変更

         ↓

define('ZBX_GRAPH_FONT_NAME',           'ipagui');  変更後

変更後にZabbixを再起動してWebブラウザを再度接続すると表記が日本語化になっている。

インストール後

現在、ネットワークの監視やMacのバックアップサーバを行っているraspberry pi にエージェントを入れて状態をモニターしているが、そのほかに動いているマシンがいくつかあるので、適宜監視対象を増やしていく予定でいる。

まぁ、FreeBSDにZabbixのサーバーをインストールして監視に使おうとする人はあまりいないとは思うが、何かの参考になれば幸いである。

先日、久々にオフラインでOSCが開催された際にZabbixのブースに立ち寄って色々話していたら「これもできませんかね?」とZabbixの方々から色々提案されたので、そちらも機会があったら試してみようかと思う。

raspberry pi でMacのバックアップサーバを作ってみる

内容

Macのバックアップどうしてる?

現在、自分使いのメインPCはMacBook Proで色々活用しているといった具合で、色々と便利なのではあるが「ちょっとここら辺どうしよう?」という部分もなくはない、その内の一つとしてあるのが現在使っているデータ等のバックアップである。

Mac公式では

macOSにはTimeMachineというバックアップ機能があり、外付けストレージもしくはmacOSのバックアップに対応しているNASをバックアップの対象に指定すれば、自動的に現在使っているmacOSの情報を定期的にバックアップする仕組みがあり、トラブルでMacにOSからインストールしなければならない場合でもTimeMachineでバックアップを取ってあれば復元できるという便利な機能である。

しかし、外付けストレージは据え置きの型のiMacMac Proならいいが、MacBook系で頻繁に持ち運ぶ場合、一旦外付けストレージをOSから取り外し&物理的に取り外してて持ち運ばないと何かの拍子にストレージが外れた場合、ストレージ内のアクセス情報に問題が生じてアクセスできなくなったり、書き込み途中のデータ情報の矛盾が生じてデータが読めなくなったりHDDの場合だとごく稀にヘッドが記録面に接触してに破損するすることがある。

SSDなら機械的な動作機構もないので大丈夫だろう」と考える方もいるかもしれないが、書き込み途中でストレージが外れてしまった場合のデータ情報の矛盾については状態が小規模であれば修復してアクセスするのだが、それらが修正しきれないものになるとのOSがそれを検知した時点でストレージを読まなくなることが多いのでSSDでも結構危険だったりする。

Windows に関しては最近抜き差ししても問題ないということをアナウンスしているようだが、アクセスを行っている際に抜き差しするとやはり問題があるようなのでやはりUSBで接続したストレージデバイスは雑に扱わない方がいいだろう。

ということでUSBメモリースティックとかではともかく、ケーブル経由で繋いでいるストレージだと何かの拍子にケーブルが外れる場合もあり、持ち運びを考えるとちょっと手間だったりする。

かといってNASを使おうとすると、バックアップだけではなく他の用途に使いたくなったりするのが人情で、そうなると選択に困ってしまうという事もあるかもしれない。

丁度いいのがないなら作ってみよう

「一々ストレージ外すのも面倒くさいし、かといってNASをバックアップに使うのはなぁ」と思っていたのだが自宅に何も使っていないRaspberry Pi 4が転がっており、「これにUSBストレージ繋いで使うとよくないか?」ということでRaspberry Pi 4でMacBook Proのバックアップサーバーを作ってみよういうことで情報を集めていたところお手軽そうな方法があったので、その方法を元に作ってみることにした。

qiita.com

これから説明となる前に最初に断っておくが、これは自分の環境でこのようにすれば動作したという記録なので挑戦する場合は自己責任ということでお願いしたい。

まず必要なものとしては、これらになる。

Raspberry Pi 4 : 今回使ったのは自宅に転がっていた2GBモデル

USB接続ストレージ : 自分が使っているMacのストレージの2倍の容量のモノを用意

Raspberry Piについては3までは、USBは2.0でLANについては100MbpsでLANについてはまぁまぁといったところだったがUSBについては、遅くはないが100GB以上を保存するとなるとどうだろうといったところではあった。

しかしRaspberry pi4になってからLANは1Gbps、USBも3.0となりその部分の心配はあまりせずに使えるものになってきている、これくらいの性能だとちょっとした用事を済ますためのPCとしても使えそうで、今後そういう用途で使い始めるところも出てくるだろうと思う。

USBストレージについては、大昔からある「バックアップデバイスはPC内蔵ストレージ容量の2倍の容量を用意すべし」という原則に基づき内蔵ストレージ容量の2倍サイズのUSB3.0接続モバイルHDDを用意した。

予算を注ぎ込めるのであればUSB3.0接続のモバイルSSDでも良いかもしれないが、一つご注意を。

最近通販でTBと表記があっても実際の容量はかなり少ないSSDバイスが出回っており、しかも大手通販サイトで頻繁に掲載されているため購入する際は注意が必要になる。

見分けるポイントとしては、通販サイト内でブランドメーカー(ウェスタンデジタル(WD)、SanDisk、Crucial等)の同じ容量の製品の10分の1くらいの価格で出ており、ブランドメーカーの同容量の製品と比べて異常に安いのならその製品は購入を見合わせた方がいいだろう、判断を付けられる自信がない場合は家電量販店で購入するのが確実である。

USBストレージの初期設定

まずは、USBストレージを接続、Finderを立ち上げて

  • アプリケーションをクリック
  • 一覧の下にある[ユーティリティ]をクリック
  • 表示される一覧から[ディスクユーティリティ]をダブルクリックして起動

ディスクユーティリティを開いたら接続されているUSBストレージをクリックして[消去]ボタンをクリック。フォーマット形式は[Mac OS 拡張(ジャーナリング)]を選択して[消去]ボタンを押して消去とフォーマットを行う。

消去後、FinderでUSBストレージを右クリックして情報を表示してデバイスの書き込み権限で「everyone」に対して「読み/書き」の権限を設定した後USBストレージを取り出す。

raspberry pi の設定

Raspberry pi 4についてはmicroSDraspberry pi OSを書き込んで起動し、セキュリティやネットワーク等について設定しておく

パッケージのインストール

設定が終わったら下記のコマンドでパッケージをインストール

# apt install avahi-daemon
# apt install hfsprogs hfsplus ←Macでフォーマットしたストレージの中身を閲覧できるようにするパッケージ
# apt install netatalk ←Macで使われるネットワークファイルシステムサーバーとして動作するパッケージ

USBストレージの接続設定

USBストレージのマウント用ディレクトリを作成する。

# mkdir /media/timemachine ←USBストレージマウント用ディレクトリ

その後raspberry pi にUSBストレージを接続して 下記コマンドでUSB HDDのIDを確認

$ blkid

表示されたストレージ一覧でhfsplusと表示されたストレージのIDを控えて /etc/fstabに記述する

UUID=USBストレージのID  /media/timemachine  hfsplus force,rw,user,auto,nofail 0 0
             ↑マウントするディレクトリ

下記コマンドを実行したあと

# mount /media/timemachine

下記コマンドの表示で /media/timemachineが表示されていれば問題はない

# df 

その他の設定

これまでの作業が終わったら下記ファイルを作成・設定する

/etc/netatalk/afp.conf 一番最後の行にTimeMachineとして使うディレクトリとTimeMachineとして使用可能とする設定を入れる

[TimeMachine]
  path = /media/timemachine
  time machine = yes

/etc/nsswitch.conf hostsの行にmdns4とmdnsを追加(mdns4はいらないかもしれない)

# hosts:          files mdns4_minimal [NOTFOUND=return] dns
hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4 mdns

/etc/avahi/services/afpd.serviceというファイルを作成、内容についてはqiitaの記事にあった通りにした。

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
    <name replace-wildcards="yes">%h</name>
    <service>
        <type>_afpovertcp._tcp</type>
        <port>548</port>
    </service>
    <service>
        <type>_device-info._tcp</type>
        <port>0</port>
        <txt-record>model=TimeCapsule</txt-record>
    </service>
</service-group>

サービス起動

これまでの設定が終わったらサービスを起動してみる

# service avahi-daemon start
# service netatalk start

サービスのステータスを確認してactiveであれば動作している

# service avahi-daemon status
# service netatalk status

下記コマンドで raspberry pi 起動時にサービスが起動するようになる。

# systemctl enable avahi-daemon
# systemctl enable netatalk

使ってみる

Qiitaではraspberry piへ接続するという作業が必要とあったが、自分の環境ではraspberry pi でサービス起動後Macの方で見つけて接続できたので下記の作業を行なった。

  • Macの「システム設定」→「一般」→「Time Machine」でバックアップの設定を開く
  • +をクリックしてraspberry piにマウントしたディスクが出てくるのでバックアップ用に設定

しばらくすると、バックアップ用に指定したディスクにバックアップが開始される。

といったところで、これらの設定で raspberry piMac用のバックアップサーバとしての構築は完了である。

しかし、現在このような構成を組もうとするとRaspberry pi 自体が品薄なのに加えて価格が高騰しており、USB接続のストレージやその他の手間を考えると安いNASを購入してMacのバックアップ専用にした方が良いかもしれない。

自分の場合、たまたま自宅にRaspberry pi 4があり、USBストレージも何故か安く手に入ったのでやってみたといったところだが、こういうことをすることにより色々とOSやストレージ・ネットワークの勉強になる面もあるので、挑戦したい方はやってみるのが良いのではと思っている。

しかし先日この報告をとあるLinuxユーザーズグループに出した際「Sambaを使った方がいいのでは?」という指摘もあり、こちらの方も機会があったら挑戦してみようかと考えていて、それが成功した場合そちらの方も報告しようかと思う。