前幾天發現裝在 Raspberry Pi 的 AdGuardHome 無法自動更新,不過因為之前有過一次按照文件說明自己手動更新的經驗,當時是從 Mac 以 VNC 方式操作 GUI + command line 完成,想說等假日有空再來走一次。
沒想到這次一開始就不太順利,VNC 竟然連不上,於是打開 Terminal 以 SSH 連線讓 Raspberry Pi 重新開機,之後雖然 VNC 可以連線,畫面卻是一片黑,只顯示「Cannot Currently Show the Desktop」訊息,我 google 後逐一排除原因,發現可能是 Micro SD 卡的空間滿了。這令我很困惑,因為這台機器除了跑 AdGuardHome 完全沒別的用途,怎麼會 32GB 的空間就用完了呢?
被超大 err 檔攻佔!
後來我在檔案系統裡一個一個查,很快就發現 var/log 裡有一個超級大的檔案「AdGuardHome.err」,一個檔案就佔了 22GB!雖然我也順便學了 scp 指令,想要把檔案搬出來,但中間因為很搞笑的原因一直沒成功,索性直接把檔案刪掉。重新開機之後,我又打開 AdGuard Home web app,想說再按一次自動更新看看,很神奇的這次就成功了 XD 結果繞了一大圈我解決的是別的問題,哈哈。(我查了一下,似乎自動更新會失敗不必然是因為空間不足,但因為我把 .err 給刪掉了,所以⋯⋯ XD)
為了避免下次又出現這種 22GB 的檔案,我學到可以用 logrotate 處理,而且我發現其實 Raspberry Pi OS 很多軟體都有設定 log rotation,不知為何 AdGuard Home 沒有這個設計。
另外講一件有趣的事,前面提到的一些指令和操作,例如 scp 和 logrotate,都是我向 ChatGPT 問來的,但我也不是直接把 ChatGPT 講的指令拿來用。我的流程如下:
- 先提出我的問題,包含對電腦環境的描述、幾個一定不可少的關鍵字,還有遭遇的問題,請 ChatGPT 告訴我是否有方法,有的話也請它解釋。(通常不必提醒它也會解釋。)
- 拿著 ChatGPT 給的指令去 google,以我這次遇的幾個問題來說都蠻容易找到資料。而且對於那些毫無頭緒的問題,問過 ChatGPT 之後至少你知道初步的搜尋方向。
- 如果有看不懂的地方,可以再問 ChatGPT,利如請它解釋指令或是某個功能。
- 綜合以上的資訊,經過自己的判斷後實際使用。
過去一年我發現這樣的做法很方便,也的確可以解決不少問題。當然我並不是真的就懂了,這種「爆竹」(Squib)式學習法(其實應該更偏向麻瓜(Muggle)吧?XD)其實也常常讓我踢到鐵板。
踢到鐵板
前面提到說我使用 scp 指令過程很搞笑,就是因為我上傳了一張 Terminal 截圖,畫面是 ncdu 顯示檔案列表,我問 ChatGPT:「It’s my Raspberry Pi, how do I move the 22GB file out of it? (I can access it through SSH on my Mac.)」它說你可以用 scp 指令,接著給我 example code 並且附上詳細的解釋。以下是它提供的指令:
scp @:/mnt/var/log/AdGuardHome.err
於是我就把指令改成:
scp XX@XXX.XXX.XXX:/mnt/var/log/AdGuardHome.err ~/Desktop/temp/sites
當我在 Mac 上「已經透過 SSH 連線 Raspberry Pi」的 Terminal 輸入那個指令後,我的 Mac 桌面毫無動靜,反倒是 VNC 視窗裡 Raspberry Pi 的桌面出現了那個檔案,相信真正懂的讀者早就看出問題在哪裡。我後來發現原來 google 有篇文章的教學寫著:
NOTE: This is done from the Mac Terminal window without being logged in to the Raspberry Pi over SSH. I am forever forgetting this and try doing it from an SSH session.
笑死,對吧?🤣事後想起來覺得 ChatGPT 並沒有發現我已經以 SSH 連線到 Raspberry Pi 了(不然我哪來的 ncdu 截圖呢?),這時它應該要建議我另外開啟一個 Termainl,在 Mac 這邊執行 scp 才對啊,或是修改成別的指令。又或者我在 google 的時候如果沒輸入 Raspberry Pi 或 Mac 等關鍵字,第一個結果「How to Use SCP Command to Securely Transfer Files | Linuxize」其實就會讓我知道可以輸入 source 跟 destination 的 IP。