QNAP TS-230 to UGREEN DXP2800 番外編

前回の記事で書いていたHEIC写真とJPGファイルの重複を何とかできないものかとNASyncの重複写真・類似写真検索やPCツールのDupFileEliminatorなどを試した見たのですが、検出されなかったので、chatGPTに相談した結果、何度かやり取りをした結果スクリプトが完成しました(^_^)/

ただし、もっと簡単な方法はUGREENが取ったバックアップからQNAP QuMagieでバックアップしていた日以前のHEICファイルを消してしまうことです。そうすれば、それ以前のデータはJPGで残っているわけですが重複は発生しません。まぁ、これが一番楽だと思います。

今回は、HEICとJPGの同じ写真を同じ写真として区別できるのかをテーマに実験してみました。

Pythonを使ったプログラムなのですが、Windows版Pythonだと HEICの処理がうまくいかなかったのでWSLのUBUNTU 22.04上で実行しました。

一発で目的の物が出てくることは稀ですがうまくいかない場合はエラー内容などをChatGPTに伝えれば対策を教えてくれます。素晴らしい。

方針

  1. 方針 HEICと JPG をハッシュ比較1して同じ写真を検出する
  2. 比較して同じ写真のペアを作る
  3. 確認用にファイルをコピー
  4. 人が確認して2問題なければ削除実施3

脚注

  1. フォーマットが違うのでハッシュ比較するために一旦、どちらの画像もPIL.Imageという形式に変換してハッシュを取っているようです。 ↩︎
  2. 比較用に./compare_outputフォルダにcompare.htmlと対象写真のコピーを作成してくれる仕様なんですが、写真が大きいので大量に読み込むとブラウザが固まってしまって使いもにならなかったので比較はExplorerで特大アイコンモードで見比べました。1つも間違ってませんでした。素晴らしい。 ↩︎
  3. 削除は比較スクリプトが吐き出したmatched_files.txtというリストをもとに削除します。 ↩︎
比較スクリプト
import os
from PIL import Image
import pyheif
import imagehash
from pathlib import Path
import shutil

# === 設定 ===
HEIC_ROOT = Path("<HEICファイルのパス>")
JPG_ROOT = Path("<JPGファイルのパス>")
OUTPUT_DIR = Path("compare_output")
MATCH_LIST_FILE = Path("matched_files.txt")
HASH_FUNC = imagehash.phash

# === 準備 ===
OUTPUT_DIR.mkdir(exist_ok=True)
heic_hashes = dict()
matched_pairs = []
heic_total = 0
jpg_total = 0
heic_errors = 0
jpg_errors = 0

print("🔍 HEICファイルをスキャン中...")
#print(f"📁 HEICルート: {HEIC_ROOT}")
#if not HEIC_ROOT.exists():
#    print("❌ 指定したHEICフォルダが存在しません。パスを確認してください。")
#    exit(1)
#else:
#    print("📂 HEICフォルダ一覧:")
#    for path in HEIC_ROOT.rglob("*"):
#        print("   ", path)

#for heic_file in HEIC_ROOT.rglob("*.heic"):
for ext in ["*.heic", "*.HEIC"]:
    for heic_file in HEIC_ROOT.rglob(ext):
        try:
            heif = pyheif.read(heic_file)
            image = Image.frombytes(heif.mode, heif.size, heif.data, "raw", heif.mode)
            h = str(HASH_FUNC(image))
            heic_hashes[h] = heic_file
            heic_total += 1
        except Exception as e:
            print(f"⚠️ HEICエラー: {heic_file} → {e}")
            heic_errors += 1

print(f"📸 HEIC読み込み成功: {heic_total} 件 / エラー: {heic_errors} 件")

print("📋 JPGファイルと照合中...")
for ext in ["*.jpg", "*.JPG"]:
    for jpg_file in JPG_ROOT.rglob(ext):
        try:
            with Image.open(jpg_file) as image:
                h = str(HASH_FUNC(image))
                if h in heic_hashes:
                    matched_pairs.append((jpg_file, heic_hashes[h]))
                jpg_total += 1
        except Exception as e:
            print(f"⚠️ JPGエラー: {jpg_file} → {e}")
            jpg_errors += 1

print(f"📸 JPG読み込み成功: {jpg_total} 件 / エラー: {jpg_errors} 件")
print(f"🔗 一致したペア数: {len(matched_pairs)}")

# === HTMLと画像出力 ===
html_lines = [
    "<html><head><meta charset='utf-8'>",
    "<style>body{font-family:sans-serif;} img{max-width:300px; margin:5px;} .pair{margin-bottom:40px;}</style>",
    "</head><body><h1>HEIC vs JPG 比較結果</h1>"
]

with open(MATCH_LIST_FILE, "w", encoding="utf-8") as f:
    for i, (jpg_path, heic_path) in enumerate(matched_pairs):
        base = f"pair_{i}"
        jpg_out = OUTPUT_DIR / f"{base}_jpg.jpg"
        heic_out = OUTPUT_DIR / f"{base}_heic.jpg"

        try:
            shutil.copy2(jpg_path, jpg_out)

            heif = pyheif.read(heic_path)
            heic_img = Image.frombytes(heif.mode, heif.size, heif.data, "raw", heif.mode)
            heic_img.save(heic_out, "JPEG")

            html_lines.append(f"<div class='pair'><h3>{base}</h3>")
            html_lines.append(f"<p><b>JPG:</b> {jpg_path}<br><b>HEIC:</b> {heic_path}</p>")
            html_lines.append(f"<img src='{jpg_out.name}' alt='JPG'>")
            html_lines.append(f"<img src='{heic_out.name}' alt='HEIC'>")
            html_lines.append("</div>")

            f.write(str(jpg_path) + "\n")
        except Exception as e:
            print(f"⚠️ 出力失敗: {jpg_path} / {heic_path} → {e}")

html_lines.append("</body></html>")
with open(OUTPUT_DIR / "compare.html", "w", encoding="utf-8") as f:
    f.write("\n".join(html_lines))

print(f"✅ 完了!{len(matched_pairs)} ペアを {OUTPUT_DIR}/ に保存しました。")
print("🖼 `compare_output/compare.html` をブラウザで開いて確認してください。")
print(f"📝 削除対象候補リスト: {MATCH_LIST_FILE}")

削除スクリプト

from pathlib import Path

MATCH_LIST_FILE = Path("matched_files.txt")
deleted = 0

if not MATCH_LIST_FILE.exists():
    print("❌ matched_files.txt が見つかりません。先に比較スクリプトを実行してください。")
    exit(1)

with open(MATCH_LIST_FILE, "r", encoding="utf-8") as f:
    jpg_paths = [Path(line.strip()) for line in f if line.strip()]

print(f"🗑 削除対象 JPG 数: {len(jpg_paths)}")
for jpg_path in jpg_paths:
    if jpg_path.exists():
        try:
            jpg_path.unlink()
            print(f"✅ 削除: {jpg_path}")
            deleted += 1
        except Exception as e:
            print(f"⚠️ 削除失敗: {jpg_path} → {e}")
    else:
        print(f"⚠️ ファイル存在しない: {jpg_path}")

print(f"✅ 削除完了: {deleted} 件")

まとめ

Python書けない私ですがChatGPTを使えば実用的なものができてしまうという素晴らしいですね。ただし、HEICとJPGではアルゴリズムの違いにより復元したRAWデータに差異が出てしまい完全には拾いきれず、結構違う写真として判断されてしまってるものが残ってしまいます。これは中々難しい問題です。まぁ、実用的には撮影情報からその日以前のHEICファイルを消した方が速いと思います(あるいは逆の方法でJPGを)

蛇足

何枚かHEICファイルじゃないってエラーが出たので調べてみたのですが、iPhoneの画像ファイルで.HEICなのにJPGなものがあるようです。iPhoneのBUG?

$ file IMG_xxxx.HEIC: ISO Media, HEIF Image HEVC Main or Main Still Picture Profile

$file IMG_yyyy.HEIC: JPEG image data, JFIF standard 1.01, aspect ratio, density 72×72, segment length 16, Exif Standard: [TIFF image data, big-endian, direntries=12, manufacturer=Apple, model=iPhone 12, xresolution=174, yresolution=182, resolutionunit=2, software=16.6, datetime=2023:09:11 15:33:46, hostcomputer=iPhone 12], baseline, precision 8, 4032×3024, components 3

さらに蛇足ですが、Pythonってループとかの構造を{}で囲ったりせず、インデントで判断するんですね。。。新鮮でした。インデントずれてたらエラーになったのでビビりました。

中華製無線802.11ahブリッジを買ってみた

我が家のガレージにはWiFiは届かない。まぁ、携帯電波は入るのでそれでもいいのだが。ふと、Amazonで900MHz帯のIEEE 802.11ah(Wi-Fi HaLowtm)を見つけたのでつい買ってしまった(笑)

早速、接続テスト

TXとRXと書いた見た目同じ箱が2つ。TXからRXを複数繋ぐこともできる様だ。設定は特に要らず、ただ電源とLANケーブル繋ぐだけ。今回はTP-LinkのRE200という中継器をAPとして繋いで測定しました。

結果、1F-2F間で普通にWiFi飛ぶ範囲なのにアンテナ強度「中」。

通信速度は下り 8.42Mbps、上り 7.53Mbps。理論値が16Mbpsなので、まぁ、こんなもんか。にしても1F-2Fはアンテナ強度「高」になって欲しかった。。。

で、問題のガレージへ。アンテナ強度「低」、写真撮り忘れた。。。速度は倉ぢ2.45 Mbps、上り1.47Mbps。まぁ、通信できてるっちゃできてるんだけど。

ちなみに、楽天モバイルでの通信はこんな感じです。

結論

まぁ、使えるっちゃ使えるけど、これ、7000円くらいするんだよね。。。あんまりコスパよくないかも。。。

QNAP TS-230 to UGREEN DXP2800 使い勝手レポート編

まだ、QNAP TS-230から完全な移行はできてないのですが、使ってみた感触をレポートしていきたいと思います。

写真

  • iPhoneで写真のバックアップをすると、HEICのままバックアップされるのだが、サムネイルの作成は問題なし。写真をクリックするとなぜか小さな写真が表示される。「元の画像を見る」ボタンを押すと元の写真が表示される。負荷低減ってことなのかな。
  • 共有写真を作りたい場合、ファイルアプリからフォルダを作ると写真アプリから見えない。写真アプリから共有ギャラリーを作るという仕様のようだ。
  • 人物識別はQuMagieよりは正確だと思う。識別速度もすぐにって訳にはいかないけど、ちょっと待てば反映される感じなのでストレスはない感じ。ただし、識別が間違っている場合、認識したグループとグループを結合することは可能だが、同じグループに分類してしまっているものを分けたり、新たに顔を指定して認識させたりといったことはできない様だ。GooglePhotosの様にこれは同じ人物ですか?とか聞いて精度を上げる仕組みを入れて欲しい。それと、AI認識系の処理にほとんどGPUを使ってない様に見える。認識がバリバリに走ってるときでもGPU使用率が20%程度なので、是非活用して処理速度を上げて欲しい。
  • QuMagieから写真の撮影日付を変えるとファイルのEXIF情報じゃなくてQuMagieのメタファイルに記録するので、他の写真管理ソフトに取り込むと全部消えるのですが、UGREENの写真アプリはちゃんとファイルのEXIF情報を書き換えていた。ただし、複数の写真を選択して一気に日付を変えることはできない。
  • AI認識ジョブがどこまで進んでるかは各ルーザーの写真アプリでしか分からない。管理者アカウントのタスクセンターに出して欲しい。
要望
  • 人物識別の修正をできるようにして欲しい。これは同じ人物ですか?の機能も付けて欲しい。
  • 複数の写真を選択して撮影日を変更できるようにして欲しい→これはできた。右クリックとかではなく、選択中は黒帯のメニューが出ていて、・・・から「撮影日時を編集する」で直せる。→が、大量に選択して日時を変更すると何枚かが変更されずに残る。。。BUG?
  • AI処理にGPUを利用する様にして欲しい(速くなるなら)
  • AI処理の進行状況を管理者のタスクセンターに表示して欲しい
  • HEICとJPGで同じ写真を重複検出できるようにして欲しい(これ、類似写真検出にも引っかからない。。。)
  • 写真お回転させてもその場の表示が回転するだけで保存はされないので写真を回転して保存して欲しい

バージョンマネージャー

  • バージョンマネージャーは同期とバックアップでバージョン保持を有効にする必要があると書いてあるんだけど、有効にしなくてもバージョンマネージャー側の設定でバージョン保留を有効にすれば履歴が見えてる気がする。。。どっちが正しいんだろ?「保持」と「保留」ってのは翻訳の揺れなのかなぁ。。。

あと、これSMBでPCから見てる時にWIndows側から以前のバージョンからは見えないのね。残念。

https://support.ugnas.com/#/detail/eyJpZCI6MjgyLCJ0eXBlIjoidGFnMDAxIiwicGF0aENvZGUiOiJwcm8wMDIsYVR0cjlhLHlVUlRWdSIsImxhbmd1YWdlIjoiemgtQ04iLCJjbGllbnRUeXBlIjoiUEMiLCJhcnRpY2xlVmVyc2lvbiI6IiJ9

要望
  • Windowsの以前のバージョンから履歴が見えるようにして欲しい

同期とバックアップ

QNAPのHBS3はローカルのRsyncなどの他にもS3などへのバックアップが可能になっている。しかしUGREENの同期とバックアップはRsync同期はある様だけどクラウドストレージへのバックアップ機能はない様だ。他に、クラウドドライブというアプリもあるのだけどこちらもS3への同期は不可(現時点でGoogle DriveとOneDriveだけ対応)

要望
  • S3 Deep Archiveなどへのバックアップ機能を作って欲しい。

テキストエディター

  • 複数ファイル開いている時にマウスホイールでスクロールすると全部のタブでスクロールしちゃう?
要望
  • マウスホイールでスクロールはカレントタブだけにして欲しい
  • 置換機能で選択範囲だけの置換ができるようにして欲しい

Docker

  • dockerフォルダーをSMB共有掛けるとDockerコンテナから読めなくなることがある?原因よよくわからない。。。

温度

室温30℃湿度63%の環境でCPU温度が80℃まで上がることがある。FANが高速になりすぐに下がるので問題ないと思うけど、FAN設定をフルスピードにすると75℃くらいまでしか上がらなくなるけど、それなりにうるさい(笑) 消費電力はピークで40Wくらいかな。構成はM.2 SSD Gen3 256GB x2 HDD 12TB 7200rpm x2 です。

もう1つ気になるのがHDD1がHDD2より2,3℃高いことですね。SSDスロットがHDD1の側面にあるのでその影響だと思うのですが、HDD温度が50℃ってのはちょっと高いと思います。

トラブル

  • SMR HDDは使わない方がいい

トラブル編にも書いたけど、SMRのディスクはやめた方がよさそうです。QNAP TS-230では大丈夫だったんですが、高速な分、HDDへの要求も高いみたいです。不安案人は互換リストにあるHDDを利用しましょう。

Y!mobileやめたらSoftbank光の値段が上がった

モバイルをY!mobileから他社に乗り換えたら一緒に入ったSoftbank光の値段が6,660円(税抜き)に上がった。。。なんか1000円くらい上がってるんですけど。。。

どうも、サポートに聞くとY!mobileをやめたことにより、Wifiマルチパックが外れて個別オプション契約になっていると。。。なんじゃそりゃ。

もういいや。Softbankさんさようなら。

という訳で、元々移行しようと思っていた、マネーフォワード光に移行することにしました。戸建て1Gで税込み4950円です。

が。大丈夫だろうとたかをくくっていたんですが、まさかのルーターが対応してねー(笑)

私のルーターはYAMAHA RTX810というかなりのお年寄りなのですが、最近もう新しいファームも出ておらず機能アップの対象からは外れている機器ですね。

前に楽天モバイルでクロスパス接続はできたので問題ないだろうと思っていたのですが、マネーフォワード光はv6プラスという形式が使えないとだめだと。しかも、PPPoEも提供されないそうで。。。これやばいじゃん。

ま。考えても仕方ないのでメルカリでRTX1210を買うことにw

RTX830と悩んだんですが、RTX 830 は19,000円くらいが相場で、RTX1210が16000円くらいが相場みたいで、私は15000円程度で出てる業者払下げのちょっと傷物君を買うことに。

まぁ、LANマップやSNMPの64bitカウンターなんかも使えなくて困っていたのでまぁ、いいか(笑)

マネーフォワード光繋いでみたらまたレポートしまーす。

ちなみに、今のSoftbank光はこんな感じ。結構早いんですよね。しかもこれ、PPPoEだよ。

2025/7/15 18:30ごろ

p.s. 2025/7/16

やっちまった。perplexityのハルシネーションに引っかかった。。。RTX1210は64bitカウンターに対応してないじゃん。

YAMAHA RTX810はSNMPの64bitカウンター(ifHCInOctets/ifHCOutOctets)には対応していません
ヤマハ公式FAQによると、64bitカウンターに対応している機種は限定されており、RTX810は含まれていません1

また、RTX810のSNMP機能について解説している他の資料でも、64bitカウンターに関する記載はなく、32bitカウンターのみの対応となっています45

そのため、RTX810で1Gbps以上のトラフィックを正確に監視する場合、32bitカウンターのラップアラウンド問題を回避する方法はありません
より新しい機種(例:RTX830、RTX1210など)では64bitカウンターに対応しているため、高速回線の監視にはこれらの機種を利用することが推奨されます1

  1. https://www.rtpro.yamaha.co.jp/RT/FAQ/SNMP/snmp-counter.html
  2. https://www.rtpro.yamaha.co.jp/RT/docs/snmp/index.html
  3. https://www.harumaki.net/2011/05/12/snmp_32-bit_counters_rtx120/
  4. https://www.mikan-tech.net/entry/2020/05/22/210135
  5. https://changineer.info/network/yamaha_router_rtx/yamaha_router_rtx_snmp_example.html
  6. https://shop.emission.jp/categories/4503272
  7. https://nttwest.ssdl1.smartstream.ne.jp/nttwest/flets/solution/kiki_info/software/firmware/rtx830/ReleaseNotes_Rev.15.02.05.pdf
  8. https://www.ysk.co.jp/yskfair2024/cms/wp-content/uploads/2024/04/274e3a53e55c37b36a1f8b4b3b86e0cb.pdf
  9. https://ex1.m-yabe.com/archives/6786

っていうからリスト見てみたら
64bitのMIBカウンターに対応している機種は以下になります。それ以外の機種は32bitとなります。ってばっちり書いてあるじゃん。。。(;_;

vRXシリーズすべてのリビジョン
RTX3510
RTX1300
RTX83015.02.03 以降

RTX830にしとけば64bitカウンター行けたのねしょぼーん。

まぁ、本命のv6プラスには間違いなく対応してる様なので良しとするか。。。

QNAP TS-230 to UGREEN DXP2800 トラブル編2

前回からの続きです。結局、戻ってこず、諦めました。今は、HDDがRead-Onlyになっちゃってるので抜いて挿しなおしたら復帰しないかとダメ元でやってみたら。。。見事に死亡(笑)よい子の皆さんは消してまねしないですください。

まぁ、ここまで壊れればサクッと諦めて新たに買ったHDDで新規にストレージプールを組むことに(笑)

新しいディスクは昨日お話しした通りSkyHawk AI 12TBという監視カメラとか用に開発されたHDDでそもそもエンタープライズ向けのHDDを整備して払い下げてる?感じなんだと思います。型番がST12000VE007とあんまり見かけない型番でした。まぁ、CMRだし結構早くてエラーも出てないです。ちなみに、再生備品といってもS.M.R.Tを見る限り新品でした。

今回は2本あるので最初からRAID1で組みます。同期には13時間かかると出てました。この状態でも既に利用可能です。ただし同期が遅くなります。試しに200GB弱コピーしてみたら、同期完了予定が16時間21分に伸びてしまった(笑)おとなしく待っているのが良いでしょう。

といいつつ、ついやってしまう。ベンチマーク。裏で同期が走ってるので(といっても優先順位を下げてるのでユーザアクセスがあると同期を後回しにしてくれる)少し影響あるかもしれないけど、結構早かった。SSDキャッシュはまだ入れてません。

買ったディスクも中々速いです。これ、SSD要らなかったんじゃ。。。

うん。やっぱSSDキャッシュ要らないな。。。というか、買った安物のSSDがランダムアクセス遅いんだね。。。でもRND4Kはもう少し早くなってもいい気がするよなぁ。キャッシュアルゴリズム問題?

SSDをストレージプールとしてアクセスした場合

まぁ、なんにしてもこれで晴れてフル装備状態になりました。これから使い倒してみようと思います 🙂

QNAP TS-230 to UGREEN DXP2800 トラブル編

朝見たらDXP2800がエラーを起こしてました。。。アプリが利用できない状態になっており、調べてみるとストレージシステムの状態が「重大」と。。。

エラーが起きてるからリードオンリーになってるよと。

HDD、SSDの状態は正常??

ここで昨日追加したSSDキャッシュがエラってるかと思って、SSDキャッシュの削除を実施しちゃったんですよね。。。これが悪手でした。ずっと、SSDをカリカリ読んでるけど、書き戻しが一向に進まない。。。

ここでサポートに連絡してヘルプを求めたのですが、原因はHDD側でした(;_; とりあえず、手元にあったArchiveHDDっていうSMRのディスクを使ったのですが、こいつが頻繁にエラーを起こしているようで。確かにRsync中に少し固まることが何度かあったんですよね。。。

HDDは互換リストにあるものを利用してくださいと。まぁ、ごもっともで。。。

https://nas.ugreen.jp/pages/compatibility

実はもう互換性にないHDD買っちゃったんですよね。アマプラで(笑)

一応CMRだけとNAS用という訳ではなく、監視カメラとか用のSkyHawkってディスクですね。当然サポートは保証しないやつですね。

こっちも互換リストにはないですがNAS用って明記されてて14TBでそんなに値段変わらないのでこれのがよかったかなぁ。。。まぁ、あんまり変わらないと思うけど。

まぁ、不安な人は互換リストに載ってるHDDを使ってください(笑)

さて、どうしたものか。まぁ、データはまだQNAPにあるので、大丈夫なんですが、コンテナとかも作り直しだしめんどくさいよね(-_-;

実はQNAPの方も1本HDDが怪しくなってきててS.M.A.R.Tで以上セクターが32あるって出てるんですよね。。。

まぁ、このあたりが自宅NASを持つってことですよね。私は趣味なので問題ないですが、これ、一般の人管理できるのかなぁ?とも思いますね。RAIDは間違うとデータ飛ばしますからね。特にRAID5。私は怖いのでRAID1しか組まないですが。今回、SSDキャッシュ一抹の不安はあったんですよねぇ。問題はHDD側でしたが、仮にHDDの問題でも単なるRAID1のディスク不良ならディスク交換すれば再同期して終了なので。やっぱ、シンプルにRAID1だけで組もうかなぁ。。。

明日まで待って復帰しなかったら明日届く、HDDを入れて新規に作り直そう。。。

QNAP TS-230 to UGREEN DXP2800 SSDキャッシュ編

結局SSDも買ってしまいました(笑)。SSDのライトキャッシュを有効にするためには2枚いるそうなのでfanxiangなる中華メーカーの安い250GB SSDを2枚買いました。

DXP2800ってSSDスロットがHDDスロットの側面にあるんですが。想像はしてましたがいやー入れんくいですね。まぁ、慣れれば大丈夫ですが。

まずはSSDの速度測定

SSDキャッシュに組み込む前にまずはRAID1を組んでストレージプールとして使ってみます。はい。シーケンシャルは問題なく、ワイヤーレート付近まで出てんすね。ランダムは遅いですね。安物TLCだからこんなもんか。

SSDキャッシュ設定

HDDのストレージプールにSSDをキャッシュを追加するにはストレージプールの右上の「・・・」をクリックしてSSDキャッシュ管理へ行きます。

あとは、メニューに沿って進めば、SSDキャッシュの設定ができます。もちろん書き込むキャッシュ利用で。こんな感じ。

では早速、測ってみますか。

参考までにSSDキャッシュ入れる前の状態はこんな感じ。

結論

うーん。シーケンシャルは早いですねぇ。でもシーケンシャルはHDDも結構早いので別にSSD入れなくても。。。

なんでランダムリードがこんなに遅いんだ?なんかキャッシュアルゴリズムが悪いのかも。

これ。SSDをキャッシュで使うより、別にSSDのプールを作って速さが必要な用途用に使った方がいいのでは。。。例えば仮想マシンのバックエンド用とか。

QNAP TS-230 to UGREEN DXP2800 コンテナ編

移行編に続き、QNAPでもやっていたMRTGをコンテナで動かしてみようと思います。

Dockerアプリ

DXP2800ではコンテナを動かすためにはDockerアプリをインストールします。コンテナの動かし方はQNAP TS-230とほぼ同じです。ただ、TS-230はARMアーキテクチャなのでsk278/rpi-mrtgを使っていたのですが、今回はfboaventura/dckr-mrtgにしてみました。

ついでに前回は手組でコンテナを作ったのですが、今回はDocker-Composeを使って作ってみました。Docker Hubサイトにdocker-composeの記載があるのでほぼそのまま使えます。

---
services:
  mrtg:
    image: fboaventura/dckr-mrtg:latest
    hostname: mrtg
    restart: always
    ports:
      - "8880:80"
    volumes:
      - "./conf.d:/etc/mrtg/conf.d"
      - "./html:/mrtg/html"
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/timezone:/etc/timezone:ro"
    environment:
        TZ: "Asia/Tokyo"
        HOSTS: "コミュニティ名:ルーターIP"
        WEBDIR: "/mrtg/html"
        USERID: 1000
        GROUPID: 1000
        REGENERATEHTML: "yes"
        INDEXMAKEROPTIONS: "--section=descr"
        CFGMAKEROPTIONS: ""
        MRTG_COLUMNS: 2
    tmpfs:
      - "/run"

こんな感じで、プロジェクトからcomposeを張り付けて今すぐデプロイ!

これで、http://DXP2800のIP:8880/ でMRTGが立ち上がります。

コンフィグはDockerアプリをインストールすると共有フォルダにdockerフォルダができるのでその中のmrtg/conf.d/にルータIP.cfgができています。これを使うもよし自分でいじったcfgを使うもよし。*.cfgファイルを読んでくれるので、ここに自分で作ったhoge.cfgを置けばOKです。ただし、ルーターIP.cfgはないと勝手に作られちゃうのでダミーでも置いとく必要があります。データはmrtg/htmlに吐き出されます。

はい。動きました。簡単ですね(笑)

こんな感じです。

蛇足

原因がいまいちはっきりしないのですが、どうやっても403 Forbidnになってしまう現象が発生しました。やったことを書くともともと一般ユーザーだったユーザーを管理者に格上げしてそのユーザーでdockerを操作したらなぜか、MRTGのグラフが表示されず、403 Forbidnになってしまいました。ファイルパーミションは実は全部、777で作られるようで、実際の権限管理は別途やってるみたいですね。ただ、ユーザーは確かにUNIX的に別のユーザーなので何等か想定しない操作をしてしまったんだと思います。結局、コンテナを作り直したら戻りました。ファイルは元のコンテナからコピーすればOKでした。

QNAP TS-230 to UGREEN DXP2800 移行編

DXP2800が届きました~

早速使ってみる

セットアップはYoutube見ればいっぱい動画があるので。省略。

ファイルシステムはスナップショットを取るためにext4じゃなくてBtrfsを選んでいます。

とりあえず、手持ちのSeagate ST8000AS-0002(ArchiveHDD)を1台だけ入れて試しています。ローカルにUSB3.2で繋いで計ってみたらこんな感じのディスクです。

これを、DXP2800に挿して計ってみるとこんな感じでした。測定マシンとDXP2800は2.5Gイーサーで接続しています。まぁ、これは明らかキャッシュでしょうね。

という訳で8GiBでテスト掛けてみました。うーん。ローカルでも8GiBでテストしてみればよかったんですが、やってないのでなんとも言えませんが、HDDの特性くらいまではほぼ出てるって感じですかね。(多分、ローカルでやった時もキャッシュ効果は入ってる?)

ちなみに同条件でTS-230はこんな感じです。(ディスクはSeagate ST8000DM004です)

データ移行

QNAP TS-230のデータをrsyncを使ってコピーすることにしました。

まず、DXP2800にはコントロールパネル-ファイルサービスrsyncを有効にします。アカウントはすべての領域にアクセスできる管理アカウントを指定しておきます。

次に、QNAP TS-230側ではHBS3(Bybrid Backup Sync)でrsyncのジョブを作ります。移行元と移行先を1セットづつしか指定できないので共有分だけJOBを作ります。

あとは実行!

TS-230側は送ってるだけでアップアップですね。他のこと全然できない感じです。

対してDXP2800は余裕で、実は裏でインデックス作成、サムネイル作成が流れているんですが、楽勝な感じです。メモリが多いのでふんだんにキャッシュしてるのか、HDDへのアクセスもまとめて書いてる感じでHDD負荷も低いです。

あと、割とどうでもいいことではあるのですが、ネットワーク同じグラフが2枚出るんですよね。。。DXP2800はNICは1ポートなので1つでいいのですが、UGOSが共通で2つある前提のUIなんでしょうね(笑)

というわけで、写真アプリも稼働させてみました。サムネイル作成と顔認証を同時に走らせています。

さすがにCPU温度は高めになって静かだったFANが時々速く回って前面から熱い空気が出てました。しばらく見てましたが、最大CPU使用率は80% 程度、温度は75度程度といった感じですね。まぁ、問題ないかと。

ちなみに、消費電力は12W~33Wくらいでした。HDDが1つしか入ってないので、もう1個足すと+5Wくらいになると思います。

そして写真機能QuMagieより機能多いですね。

人物識別、写真内テキスト識別、類似識別、オブジェクト識別、ペット識別、センシティブなコンテンツ自動判別、画面識別、モデルトレーニングなどのモジュールをインストールできるようです。まだ全部は使ってみてないですが、特定の映像に反応するようなカスタマイズ学習もできるようなので、そのうちやってみようと思います。

スマホからのリモートアクセスも快適。やっぱりハードリソースに余裕があるとぬるぬる動く感じですな。TS-230はメモリ不足で多分、スワップインしてからリモート接続って感じなんだと思うんですよね。そりゃ遅いは。。。

HDDミラーは遅いのでSSDキャッシュを入れようかと思っていたのですが、この感じだと要らなそうですね。持つべきものはメモリかな(笑)

総評

  • 裏で写真識別などが動いていても普通に使える
  • 写真アプリ思ったよりすげー
  • スマホアプリも結構快適

次回

コンテナ上のMRTGとかを移行していこうと思います。

QNAP TS-230 to UGREEN DXP2800 ポチリ編

中華の誘惑に勝てませんでした。。。とりあえず。今の思いを綴りつつ、商品が届くのを待ちたいと思います。

1.背景

今までずっとQNAPを乗り継いできて機能的には全く不満はなかったのですが、最近、古いフィルム写真をデジタル化していておりまして、GooglePhotosの容量を増やさないといけなくなりました。。。それでもよかったのですが、今後も増え続けるわけでここらで、一旦、脱Googleとまではいかないまでも無償プランに戻してみようかと。。。

やってみたのですが、TS-230写真のインデックス化、サムネイル作成、人物判別、もの判別、重複判別が遅い!

というか、サムネイル作成なんかが遅いのは我慢できるのですが、それが走ってる間、他のことが何もできないくらい重くなるんですよね。これはあかん。

これを解決すべく、TS-213Gに上げようかとも思ったのですが、遅い原因がディスクIOな気もしていてその場合、キャッシュSSDを入れないとどうにもならない気もします。その場合、TS-264になるわけですが、高い! NASに10万は出したくないわ。

と迷っていたところ、UGREENのDXP2800がクラファンで爆売れ。と聞いてまぁ、興味は持っていました。

が、中華製いやだな。電池やケーブルならまだしも。NASウェアを中華製で大丈夫か?とスゲー不安だったのと、Youtuberの絶賛ぷりにちょっとおなか一杯な感じでした。NASの時代が来たー的な。

でもね。この手のNASは10年前からQNAPが出してて、最近はSynologyやAsustorとかも出てきて別に特別じゃないよね。QNAPの凄いところはアプリでしょ。と思ってたんですが、

TS-264レベルのハードDXP2800が5万円で買える!

しかも、普通に写真のAI認識とかもあるらしいぞ!?(精度はいまいちとも聞くけどそれはQNAPのQuMagieも大差ない)。自宅外アクセスもできるし、仮想マシンもDockerコンテナも動くらしいぞ!?

もぅ。これはポチっちゃうよね。(笑)

正直、仮想マシン動くならなんでもありじゃん。メモリも16GB積めるみたいだし。これ、もうNAS用PCだよね。(笑)

2.比較

QNAP TS-264UGREEN NASync DXP2800
CPUIntel Celeron N5105 (クアッドコア, 最大2.9GHz)Intel Celeron N5105 (クアッドコア, 最大2.9GHz)
RAM8GB DDR4 (最大16GB拡張可能)8GB DDR4 (最大16GB拡張可能)
ネットワーク2 x 2.5GbE (Intelチップ) + PCIeスロットで10GbE拡張可2 x 2.5GbE (Intelチップ)
M.2 NVMe2スロット (キャッシュ、ボリューム用)2スロット (キャッシュ、ボリューム用)
その他ポートUSB 3.2 Gen2 x2, USB 2.0 x2, HDMIUSB 3.2 Gen2 x2, USB 2.0 x1, HDMI
人物判別QuMagie (Edge TPUで高速化可)1AI Photo Album (今後の改善に期待)
S3バックアップネイティブ対応Docker経由での実現は可能だが、ネイティブ対応は要確認
Docker対応 (Container Station)対応
スナップショット対応対応 (Btrfs)2
RAID構成変更対応対応3
現時点での最安値69,980円443,263円
  1. TS-264は5000円くらいのGoogleのTPUを利用できてそれを入れるとAI処理がかなり早くなるらしい。ちょっと魅かれたけど。。。 ↩︎
  2. Btrfsで構築すればSnapShot取れるっぽい。 ↩︎
  3. 移行の都合上、8TBのHDDが3本しかなくて、1本余ってるHDDをDXPにさして構築したのち動作確認が終わったらTS-230のディスクを移植したいと思っている。故にシングルHDD→RAID1の変更は必須。 ↩︎
  4. 2025/7/6時点の価格。価格ドットコムで見てみたら旧NTT-Xで意外と安く売ってた。DXP2800の方はUGREENの直販サイトで値引きキャンペーン後の価格。 ↩︎

3.気になるところ

  • OS、アプリの完成度はまだまだって話もあるけど、どうなんでしょうねぇ。
  • 前面排気なんだよね。。。まぁ、机の上に置くわけでは二のでいいのだけれど。背面排気のがよかったな。
  • 私だけかもしれないですが、直販サイトで購入するとき、2000円割引のクーポンコードが発行されるのですが、製品選んでGooglePayでの支払いに進みとコード入力画面ないで決済に進んじゃったんですよね。。。サポートにお願いしてキャンセルして再購入したのですが、それでも入力画面出ませんでした。ただ、たまたま、決済エラーが出て決済実行画面に戻ったのでそこでコードを入れられたという。。。なんんだったんでしょうね。。。