自建 TrueNAS

由於現有 NAS 空間逐漸不夠,加上相機 RAW 檔越來越多,終於要採購新的 NAS 了。由於對 ZFS 以及其快照功能很有興趣,但又懶得從頭開始處理,也沒有特別想做虛擬化,所以選擇了 TrueNAS Scale 這個以 Debian Linux 為基礎的開源 NAS 作業系統。

配備:

  • 電源供應器:海韻 Focus PX-550
  • 處理器:AMD Ryzen 5 PRO 5650 G
    (APU 要 Pro 才有支援 ECC unbuffered 記憶體)
  • 主機板:華碩 PRIME B550M-A WIFI II
  • 記憶體:金士頓 32GB 3200MHz DDR4 ECC CL22 DIMM 2R*8 x 2
  • 硬碟:Seagate Exos X18 18TB x 4
    (OEM 拆機品,好便宜,意者洽)
  • 開機碟:美光 Micron Crucial BX500 240GB x 2
  • SATA 擴充卡:AUMLMASIG 全通碩 PCIe to 6xSATA3
    (這個有 PCI-E Gen3 x1)

機殼是最難找的(選擇困難)。本來屬意銀欣 CS382,但有點貴,好像也不需要那麼多硬碟插槽。最後在淘寶上買了御夫座,有 6 個插槽也支援 M-ATX 主機板,不必再買沒什麼選擇的 ITX 主機板,白金電源供應器也比較便宜。

TrueNAS Scale 安裝非常簡單,和一般 Linux 文字安裝沒什麼不同。不過在這張主機板上開進 kernel 之後會沒有 HDMI 畫面輸出,在 grub2 中修改啟動參數可以解決:

nomodeset amd_pstate.shared_mem=1 amd_pstate=passive acpi_enforce_resources=lax 

(nomodeset 在安裝完成設定好網路之後要拿掉,否則會導致 amdgpu kernel module 無法載入)

後面多設定了 AMD P-state scaling driver,在 kernel 6.1 之後引入,啟動之後耗電可以降低,性能也較好。這張主機板好像 ACPI 有衝突lm-sensors 沒辦法正常讀取及調整 PWM 風扇,透過 acpi_enforce_resources=lax 略過之後可以強迫忽略衝突。

修改完 P-state 之後,可以使用 cpupower 指令確認是否生效:

# cpupower frequency-info
analyzing CPU 0:
  driver: amd-pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 20.0 us
  hardware limits: 400 MHz - 4.46 GHz
  available cpufreq governors: performance schedutil
...
  current CPU frequency: 2.35 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: yes
    AMD PSTATE Highest Performance: 166. Maximum Frequency: 4.46 GHz.
    AMD PSTATE Nominal Performance: 145. Nominal Frequency: 3.90 GHz.
    AMD PSTATE Lowest Non-linear Performance: 88. Lowest Non-linear Frequency: 2.37 GHz.
    AMD PSTATE Lowest Performance: 15. Lowest Frequency: 400 MHz.

在 TrueNAS 裡面要調整開機參數,必須透過 CLI 修改,否則照一般的 Linux 修改邏輯,重開之後會被復原:

$ midclt call system.advanced.update '{"kernel_extra_options": "nomodeset amd_pstate.shared_mem=1 amd_pstate=passive acpi_enforce_resources=lax "}'

在設定定時快照任務之後,目前運作良好且穩定,滿足家用需求,也保留了未來升級網路的擴充性。

自建 TrueNAS

Darktable 不專業新手入門

Update: Darktable 4.4.0 已經釋出了,提供了繁體中文界面以及大量的更新,最重要的是「場景參照 (S 形曲線階調映射)」。
此功能使用了 sigmoid function 來映射全黑和全白到相片的色彩空間,比電影式階段映射來得易用許多,在過曝的地方也比較貼近相機直出的色彩,推薦可以使用。

Darktable 是一款開放原始碼的修圖軟體。從名字就可以猜到功能和 Lightroom 類似,界面編排也很類似。不過,各種工具邏輯有天差地遠的差別。會想要學習的原因,主要是我很小氣,不想花錢訂閱 Lightroom。

在我努力嘗試用這個軟體好一陣子之後,開始比較上手了,因此寫了這篇文章記錄我的想法,也希望可以幫助其它準備跳入火坑的人。幸運的是,在最新的 4.0.1 版本,支援了繁體中文,可以稍稍降低一點學習曲線。

要先自清一下,我不是專業攝影師,純粹出於興趣喜歡拍照。修圖也不是我的專長,基於相關軟體的認知可能都是道聽途說加上多年累積起來的誤解。若文章內容有不正確的地方,歡迎留言指正。

在下載並安裝軟體之後,可以看到軟體主要分為兩個操作界面:燈箱 LightTable 以及暗房 Darkroom。這兩個分別對應到瀏覽以及修圖,和 Lightroom 非常類似。

LightTable 燈箱

LightTable 的組合,左上方是匯入已經存在的照片,可以原地匯入,或者複製到特定的資料夾。Darktable 也是透過類似編目資料庫的方式在管理照片,不過和照片本身的修改會存放在同資料夾同檔名的 .xmp 檔案,即使移除收藏庫,再次匯入,修改也會存在。RAW 檔案本身並不會被修改。
左下角有批次匯出照片的選單,中間就是已經匯入的照片,右邊是一些簡單的編輯功能,也可以套用之前儲存的風格檔。

若是選取了照片,雙擊就會進入 Darkroom 暗房編輯界面。在此界面,可以對相片做全面性的編輯。

需要注意的是,若是照片剛才才從相機匯入,則這裡所顯示的會是內嵌在 RAW 檔裡面的點陣圖縮圖。並不是 Darktable 所解讀並運算出的結果。也就是說,剛匯入的 RAW 檔看起來顯示會很正常,但一旦點進去到暗房,會重頭從 RAW 裡面運算,再產出預覽,此結果和從相機直出的 JPEG 會有落差。在 Nikon 的例子上,會顯示的比從相機直出的 JPEG 暗很多,需要額外調整曝光。

Darkroom 暗房

建議的偏好設定

在右上角燈箱 LightTable 的大分頁下面,有齒輪⚙️的圖示,可以進入應用程式的偏好設定。

運算方法:內部運算工作流程預設值:Scene-referred workflow 場景參照

這個是我花最多時間理解的部分。這裡的選項有場景參照和顯示參照。

我的解讀:一般的軟體都是顯示參照的修圖流程。所謂的顯示參照,就是先將 RAW 檔記錄到的灰階資訊,轉換為螢幕上可以顯示的 RGB 色域,再進行修改以及調色。好處是直覺,但壞處是由於先轉換到非線性空間再進行修改,在極端場景有可能遺失一些細節,或者容易產生斷階等。

若是使用場景參照的修圖流程,是將 RAW 檔的資訊,先對應到一個接近無上限的線性 RGB 色彩空間,所以就不會被螢幕所能顯示的 RGB 色域、灰階所限制。接著,各個模組在這個色彩空間裡面對 RAW 檔做各種處理。由於最終還是要輸出到螢幕上,因此還是需要轉換,只是轉換的流程會儘可能在修圖流程往後拉,儘可能保留足夠多的細節。

由於我並不是多年的 Lightroom 使用者,因此我也不好判斷此修圖流程的結果和 Lightroom 會有什麼差異,但總之 Darktable 是推薦使用這個流程。

更詳細的說明,可以參考這個 YouTube 影片,還有官方文檔

在 4.4.0 更新中,新增了「場景參照 (S 形曲線階調映射)」,可以在場景參照的前提下,使用 S 形曲線映射。

運算方法:白平衡校正預設模組:現代

官方軟體以及開發者是推薦使用現代的設定。現代的設定,會牽涉到兩個模組,「白平衡」以及「色彩矯正」。

我覺得這兩個似乎沒有特別的差異,但是如果是使用了現代的白平衡修正,在 Darkroom 暗房修圖裡面的白平衡模組,需要選擇「相機基準白點」,接著,再使用色彩矯正模組設定適合的白平衡、色溫以及光線種類。否則,會看到白平衡套用兩次的錯誤。

色彩校正模組可以調整的範圍非常大,邏輯應該是可以讓你選擇光線的種類、色溫。若是懶,也可以直接選擇套用相機設定,或使用右邊的滴管工具直接自動計算。

資料儲存:XMP

「為每張影像儲存附屬檔案」這裡建議選擇「編輯後」。這樣一來,僅有編輯過後的檔案才會儲存 XMP 檔案,不然只要匯入 Darktable 就會產生 .xmp 檔案,有點雜亂。

其它設定:界面配置

「使用滑鼠滾輪滾動模組面板」建議啟用。預設的模式是使用滑鼠滾輪調整選項之類的,有點不是那麼直覺,當然看個人啦。

繼續閱讀 “Darktable 不專業新手入門”
Darktable 不專業新手入門

Nikon Snapbridge 使用心得

數週前購入了 Nikon Z6ii 相機,

Nikon 的 Snapbridge app 真的非常好用,難得在 App store 上面可以看到評價不是低於三顆星的某種硬體支援 app。
只要配對好藍牙裝置,在手機開啟背景自動下載,相機也開啟關機狀態下傳送照片,就好了。

Snapbridge-app

真的這樣就好了。之後,只要拍完照,在背景相機就會自動連結手機並且上傳低畫質版本的照片到手機。
雖然是低畫質,但也是有兩百萬畫素,上傳 Facebook/Twitter/Instagram 綽綽有餘,套個濾鏡根本攝影大師。

nikon-settings

更棒的是,若是有啟動地理位址同步的功能,手機會定期在背景定期更新 GPS 資訊到相機,相機在拍照的時候會打上 GPS tag。

由於相機本身沒有內建 GPS 功能,因此啟動此功能會消耗更多手機的電力,但比起以前要額外準備 GPS 記錄器記錄軌跡,回家再使用不知道什麼軟體將 GPS 軌跡和照片檔案結合起來的複雜程序,實在是方便太多了。

沒想到在消費型數位相機逐漸被手機取代的今天,也能看到這樣的軟硬體整合的方案,瞄準很多顧客還是想要有相機的拍照品質但也希望可以方便的上傳社群媒體,不必什麼事情都回家拆記憶卡才能做。

雖然以前有一些古怪的產品號稱可以整合兩個世界,但大多數都只是懶惰的直接在相機上裝一個巨大螢幕和舊版本的 Android 作業系統,雖然勉強可以使用但兩邊的順暢度都很差,使用體驗很糟糕。

這個 app 真的值得我發一篇廢文來推廣。

Nikon Snapbridge 使用心得

RouterOS v7 vlan-filtering

雖然 RouterOS v7 啟動了對 MT7621 VLAN HW offloading 硬體加速的支援:
https://help.mikrotik.com/docs/display/ROS/Bridge#Bridge-BridgeHardwareOffloading

然而因為此 bug,若是你在 bridge 裡面對封包上 tag / 解 tag,依然還是會吃掉 CPU IRQ:
https://forum.mikrotik.com/viewtopic.php?f=1&t=177092#p878135

目前的替代方案,依然還是只能把 vlan interface 疊加在 bridge 上面,也就是官方文檔裡面提到的 VLAN on a bridge in a bridge:
https://wiki.mikrotik.com/wiki/Manual:Layer2_misconfiguration#VLAN_on_a_bridge_in_a_bridge

運作起來是也沒什麼問題,只是就醜了些,感覺沒有那麼優雅…

好消息是官方說此功能正在積極開發中了。

Update

似乎 DHCPv6-PD 也修好了?

/ipv6 address
add from-pool=hinet_ipv6_pool interface=bridge_vlan100_HOME
/ipv6 dhcp-client
add add-default-route=yes interface=pppoe-out2-dynamic pool-name=hinet_ipv6_pool rapid-commit=no request=prefix use-peer-dns=no
/ipv6 firewall filter
add action=accept chain=output
add action=accept chain=forward connection-limit=100,64 connection-state=established,related connection-type="" dst-limit=1,5,dst-address/1m40s headers=\
    :exact limit=1,5:packet time=0s-1d,sun,mon,tue,wed,thu,fri,sat
/ipv6 firewall mangle
add action=change-mss chain=forward dst-prefix=::/0 new-mss=clamp-to-pmtu passthrough=no protocol=tcp src-prefix=::/0 tcp-flags=syn
/ipv6 nd
add interface=bridge_vlan100_HOME managed-address-configuration=yes
/ipv6 settings
set max-neighbor-entries=8192

RouterOS v7 vlan-filtering

研發替代役新訓日記

我是第 47 梯次的研發替代役。9/17 入營,10/2 放出來。來寫一下在成功嶺裡面的日記與注意事項。

9/17 Day 1

先到家裡附近的廟集合,然後民政局科科長帶各位役男拜拜,並且贈送電話卡一張。搭乘遊覽車到成功嶺報到。

體檢時每位役男都被看了蛋蛋,不過沒有觸診。

  • 每個長官或是分隊長、勤務役男講話都很大聲很凶(訴諸音量)。不仔細聽的話就會被臭罵,建議把耳朵帶出門並且好好使用。
  • 沒有叫你做的事情不要做、沒有要你寫的資料不要寫,這裡是講求一個口令一個動作的。
  • 領取了非常多的公發物品。建議運動鞋一定要仔細套量,尺寸不對的話以後跑步會很辛苦。其它衣物例如制服、皮鞋等尺寸大一點沒關係,即使沒有你的尺寸幹部也會隨便換大一點的給你。
  • 到營站建議一定要採買:多合一沐浴乳(洗澡省時)、備用毛巾(檢查用)x1、備用內衣 x1、袖珍包面紙 xN(實際使用)、抽取式面紙(檢查用)
  • 時程很趕,有問題一定要馬上舉手發文,不然會被幹。
  • 不能攜帶書籍,但 強烈建議 攜帶數獨,可以撕成紙張的形式或是抄在筆記本上,殺時間非常好用。
  • 建議購買至少兩盒喉糖,這是這幾天唯一可以吃的含有高糖分的東西,同時也可以拿來交朋友。
  • 需要縫名條,建議練習一下怎麼打結。
  • 只能使用手動刮鬍刀,建議提早購買並且練習如何使用。
  • 建議購買方正的牙刷,放在地板上的時候可以刷毛朝上放置不會滾來滾去的那種,避免被扣分。
  • 可攜帶防蚊液。
  • 建議不用攜帶額外的便服,穿身上那一套進去出來就好。
  • 金錢攜帶 1000~1500 即可,建議帶百元鈔與許多零錢,零錢可用於打電話,這樣就不用與別人排隊等 IC 卡電話機。
  • 若非體力過人,建議不需要擔任公差,例如打飯班與器材班,出營時間沒差多少。
  • 建議攜帶感冒藥,醫護所開的藥沒什麼用。
  • 可以攜帶手機與行動電源,會統一收到貴重物品櫃保管(自己會有鑰匙),洗澡時固定時間可以開機打電話,但是手機一定要將所有鬧鐘關閉,也不要在指定的場所以外的地方開機。成功嶺訊號很差,基本上也不用想上網或是講 Line 這種事情。

繼續閱讀 “研發替代役新訓日記”

研發替代役新訓日記

Tomato 無法 PPPoE 撥接上網問題

心血來潮在家裡的 ASUS RT-N66U 上刷了 Shibby Tomato,版本是 tomato-RT-N66U_RT-AC6x--130-AIO-64K,結果遇到了 PPPoE 無法上網的怪問題。

網頁顯示撥接成功,但是透過 ppp 拿到的是自己在內網設定的 gateway IP,覺得非常奇怪。之前用 DD-WRT 或是官方韌體沒有遇到類似的問題。

在 pppoe Options 裡面加了 debug 觀察一下建立連線的 log,發現了以下的片段:

daemon.notice pppd[4953]: peer from calling number 00:22:AA:90:D3:C3 authorized
daemon.debug pppd[4953]: sent [IPCP ConfReq id=0x1 <addr 192.168.0.1> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
daemon.debug pppd[4953]: rcvd [IPCP ConfReq id=0x1 <addr 192.168.16.1> <ms-dns1 0.0.0.0> <ms-wins 0.0.0.0> <ms-dns2 0.0.0.0> <ms-wins 0.0.0.0>]
daemon.debug pppd[4953]: sent [IPCP ConfRej id=0x1 <ms-dns1 0.0.0.0> <ms-wins 0.0.0.0> <ms-dns2 0.0.0.0> <ms-wins 0.0.0.0>]
daemon.debug pppd[4953]: rcvd [IPCP ConfNak id=0x1 <addr 192.168.0.1> <ms-dns1 168.95.192.1> <ms-dns2 168.95.1.1>]
daemon.debug pppd[4953]: sent [IPCP ConfReq id=0x2 <addr 192.168.0.1> <ms-dns1 168.95.192.1> <ms-dns2 168.95.1.1>]
daemon.debug pppd[4953]: rcvd [IPCP ConfReq id=0x2 <addr 192.168.16.1>]
daemon.notice pppd[4953]: local IP address 192.168.0.1
daemon.notice pppd[4953]: remote IP address 192.168.16.1
daemon.notice pppd[4953]: primary DNS address 168.95.192.1
daemon.notice pppd[4953]: secondary DNS address 168.95.1.1

發現了在 pppd 撥接的時候,router 送出了自己在 LAN 內的 gateway IP,而對方居然允許了,理論上應該不會發生這種事情才對,因為我希望對方給我一個動態配發的 IP 位置。

上網查了 pppd 的設定檔,發現在 pppoe options 裡面加上 noipdefault 就可以強迫 pppd 不送出自己在 LAN 的 IP 位置,如此一來就會拿到正確的 IP 位置了。

Tomato 無法 PPPoE 撥接上網問題