...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

作者:casatift

哈嘍,艾瑞巴蒂。我是你們的智慧家居領路人CT。在過去的幾個月裡,我分別給大家介紹了利用N1,章魚星球,以及移動魔百和CM311-1A安裝openwrt或armbian來執行home assistant以及相關的一些應用。相信安裝這方面大家透過之前的教程也已經掌握,如果有需要也可以翻看之前相關內容。而本篇我們首先要講的是系統應用全部部署完成之後如何進行版本升級。其次就是我們該如何應對當升級失敗,或者盒子發生硬體故障時如何能迅速的利用備份檔案和備用硬體迅速頂上原有系統。將家裡自動化中斷時間減到最低。

系統升級

通常情況下,我是不建議大家對任何智慧家居相關應用進行升級的,特別是Home Assistant,一直在更新,一個月就有6,7個版本,每隔幾個月還會再來個大版本更新。所以我之前一直戲稱HA的玩家不是在升級,就是在升級的路上。所以我這裡給大家的建議是非必要,不升級,除非新版擁有你確實需要的新功能和新特性,不然咬死不更新,因為每次更新都可能帶來原有整合不能使用,或是yaml配置規則修改需要重寫配置檔案等問題。目前我自己在跑的HA還停留在2022。4版,這是因為4月這版新增了apple tv和homepod的支援:

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

而我估計我的下一次升級應該是等HA支援matter協議了。但是有些人說,我有強迫症,不更新渾身難受怎麼辦,那我這裡給的建議就是不要更新結尾為。0的大版本,基本上大版釋出以後,再等個2-3個小版,等版本號到。3 。4了之後再做更新,一則是系統自有的bug基本都會被修復,二是整合作者也會在這段時間內更新整合版本以適配新版系統。下面我們就來說說如何對現有系統進行升級:

按照我的教程,目前安裝在盒子內的home assistant基本都是基於docker容器執行的,其中openwrt自帶DockerMan管理外掛,而armbian安裝的,我也推薦使用portainer ce進行docker的管理,兩者都帶有非常便捷的UI介面。在portainer下,我們只要非常簡單的點選容器內的Recreate按鈕:

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

然後在彈出的對話方塊內開啟Pull latest image開關,再點選紅色的Recreate即可:

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

這時原先的Recreate按鈕就會變成Recreation in progress的資訊,此時,portainer會對容器進行停止,刪除,拉取最新映象,以及重建容器的一系列操作。

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

等完成之後,你就有了一個最新版本的容器:

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

當然,這裡大家不要忘記,去image選單裡把老版本的映象刪除:

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

不過這裡需要提醒的是,使用這個方法升級,必須確保在首次建立容器時,使用的映象版本是latest,stable等,如果建立的是指定具體版本號的容器,就不能依據這個方法簡單升級,只能手動升級了。

而在openwrt的dockerman下同樣也是一鍵升級。

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

系統備份

因為按照我的教程,所有的應用都是跑在容器上的,所以理論上非常簡單的,只要把各個容器映射出來的檔案複製出來,就相當於做了備份:

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

但是這裡有一個問題就是,docker的資料備份需要停止容器後才能備份,如果不停止容器的話,很容易就丟失檔案內容。

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

如果每天備份的話,等於我每天都要中斷一次HA,這個說實話,有點難受。而如果不關閉容器直接用cp命令複製檔案,則經常會出現部分檔案只有檔名,沒有內容的情況。而使用rsync命令則會丟失自定義整合的配置。當然,其實HA Core有自己的備份途徑,可以透過自動化非常方便的建立定時備份,例如下面的自動化就是每天晚上3點自動建立一個備份:

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

建立好的備份會自動儲存在homeassistant對映目錄的backups資料夾裡:

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

不過這個有個問題就是,我是在盒子上執行的HA,一是每天備份不及時移出的話,會導致盒子的EMMC沒多久就被寫滿。二是EMMC的壽命有限,每天這樣備份,也不知道盒子能撐多久。如果不嫌麻煩的話,最簡單的方式就是在升級或是大改前自己備份。不過這顯然不符合我們智慧家居自動化的需求。於是經過多次嘗試,我發現透過直接使用tar命令將整個對映檔案打包的方式,就能將資料夾內所有檔案都成功複製出來,不會丟失任何資料,所以我這裡就寫了一個簡單的指令碼配合crontab計劃任務來實現每天自動備份所有配置到NAS上,當然,你也可以直接在盒子上插個優盤進行備份。不過我自己吃過優盤的虧,所以就不搞優盤了。當然還有個選擇就是docker在建立一個雲盤的應用,把雲盤直接對映到本地,然後直接把檔案複製到雲盤,不過我自己有nas,所以就不折騰這些了。指令碼內容如下:

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

首先我做的是ping我的nas主機,看看主機是否線上,如果線上,返回OK資訊,然後把NAS上的共享資料夾(//192。168。10。178/casatift_M2_1/backup)掛載到本機/home/share/backup資料夾,這樣本機backup資料夾內的檔案實際就是nas遠端目錄下的檔案,然後把要備份的檔案根據日期名對其進行打包,放入backup資料夾(tar -zcPvf /home/share/backup/backup$(date +%Y%m%d)。tar。gz /home/share/backup/temp),我這裡不光備份了HA,之後再查詢backup資料夾下超過6天沒修改的檔案,將其刪除(find /home/share/backup/ -mtime +6 -name “*。tar。gz” -exec rm -rf {} ;),也就是我每天備份一次,然後保留最近7天的備份。最後等待30秒,斷開掛載。

最初的時候我是想盒子啟動就自動掛載的,後來考慮到每次開機的時候nas究竟在不線上其實也不是100%,並且即使開機時線上,執行過程中也有可能斷,所以我這裡就直接改成了每次備份前檢測nas狀態,然後掛載遠端目錄,備份完成後斷開。程式碼寫完之後儲存成。sh檔案,然後chmod +x賦予可執行許可權。

可以使用 bash 檔名執行下指令碼測試。如果沒有問題,使用crontab -e命令,修改計劃任務表:

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

新增紅線內容,這條內容的意思是每天凌晨3點執行我們剛才建立的指令碼。

然後重新載入cron,命令為/etc/init。d/cron restart

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

然後我們的自動備份設定就完成了,每晚的3點,nas上就會自動生成一個新的備份打包檔案,並刪除6天前的備份:

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

而如果我們想復原備份,也僅僅只需要解壓縮打包檔案,將裡面的內容複製到新的docker容器對應的掛載資料夾裡執行即可。而因為docker的特性,所以這裡並不要求備用盒子的硬體與主盒子相同,也就是說,你日常可以用N1,但還原備份的時候可以用魔百和或章魚星球甚至X86,只要是docker,你就能完美復原備份。

不過這裡還有個小問題,就是如果docker上還跑有mqtt服務的話更換硬體之後mqtt服務的IP地址會變,如果去設定每一個裝置不管怎麼樣都是比較麻煩的,這裡有兩個簡單的方式,一是將備用主機的IP手動設定成原有主機的IP地址,第二如果你使用openwrt一類可以做DNS劫持的路由的話,就可以在區域網內使用域名替代IP地址:

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

這個域名你可以隨便設,因為僅在區域網內有效。然後所有有關mqtt伺服器的地址設定全部使用此域名就好了,如果更換IP,也只需要在路由器裡更新下就好。

...玩轉全屋智慧 篇十六:各類盒子安裝Home assistant的日常維護與災備

總結

得益於盒子們低廉的價格,所以我自己日常家裡都會多備上一臺應急用的盒子,裡面docker的容器都配置好,只要插上電,解壓縮備份檔案,然後複製進備用盒子,必要時可能還要升級下盒子裡的容器映象版本,只要不超過5分鐘的時間,就能恢復整個家庭的智慧家居應用。最後祝大家玩的開心。

頂部