1.問題與需求
問題:
- 新部署的機器設備(主控RK3588), 沒有經過燒錄定制鏡像, 研發部署, 直接組裝發送到客戶現場
- 需要通過frpc遠程部署: 安裝ros2 + python包 + docker鏡像 + 環境配置 + 自啟動配置 + SN設備信息
- 寫自動部署腳本, 實現一鍵部署升級
- 無奈物聯網卡做了白名單限制, apt 和 pip 在線安裝依賴庫失敗, 需要現場人員支持, 開放手機熱點,
- 在線安裝速度較慢, 需要30~40分鐘, 才能安裝, 部署, 調試好一臺設備
需求:
期望能有一種不依賴現場人員 介入/操作, 更快速的部署方式
2.方案選擇_與_實現
1.方案匯總
優點 | 缺點 | |
---|---|---|
RKDevTool.exe 燒錄 | 1.官方工具, 燒錄鏡像速度最快 | 1.需要現場人員支持, 讓主控rk3588進入 dload/maskrom 模式 2.需要現場人員, 攜帶筆記本電腦+usb線, 安裝瑞芯微usb驅動, 進行固件燒錄 |
dd備份,還原 | 1.還原速度極快 | 1.系統運行時, dd 還原 rootfs分區, 覆寫根文件系統分區, 導致命令失敗; 需要進入recovery模式還原 2.需現場人員支持, 按recovery鍵+重啟, 讓系統進入recovery模式(類似PC電腦進入Live CD模式), dd還原分區 |
tar備份,還原 | 1.部署速度中等 | 1.系統運行時, tar覆蓋根文件系統文件, 概率導致進程運行異常; 導致部署失敗 2.同dd還原, 需要現場人員支持, 讓控制器進入recovery模式(類似PC Live CD模式), tar 還原才能安全還原成功 |
rsync備份,還原 | 1.屬于增量升級 2.部署成功率較高, 較為安全 | 1.第一次部署速度較慢, 后續增量更新速度較快 |
一鍵部署腳本 | 部署成功率高 | 1.部署速度慢 2.物聯網卡有白名單限制, apt和pip安裝命令失敗, 需求現場人員手機熱點, 或連接其它可上網網絡 |
2.各方案命令實現
[!info] 說明
系統磁盤: /dev/nvme0p1
rootfs分區: /dev/nvme0p1p8
第二磁盤(擴展磁盤): /dev/sda3, 掛載目錄/mnt/disk
1.dd 系統備份_還原命令
備份
# 備份
dd if=/dev/nvme0p1p8 of=/mnt/disk/rootfs.img
# 修復文件錯誤
e2fsck -f -p rootfs.img
# 減少鏡像大小
resize2fs -M rootfs.img
還原
# 還原
dd if=rootfs.img of=/dev/nvme0p1p8
# 分區擴容
resize2fs /dev/nvme0p1p8
ssh遠程dd_備份_還原
# 遠程主機磁盤備份到本地
ssh user@ip "dd if= /dev/nvme0p1p8" | dd of=rootfs.img# 本地備份恢復到遠程主機
dd if=rootfs.img | ssh user@ip "dd of=/dev/sda"
ssh遠程dd_備份_還原_壓縮版
# 備份
ssh usr@ip "sudo dd if=/dev/sda | gzip -c" | dd of=rootfs.img.gz# 還原
dd if=rootfs.img.gz | ssh user@ip "gunzip | dd of=/dev/sda"
2.tar 系統備份_還原命令
備份
# 備份
tar -pcf /mnt/disk/rootfs.tar --exclude={"/dev","/proc","/sys","/tmp","/var","/run","/mnt","/media","/lost+found"} /# 備份+壓縮為gz
tar -zpcf /mnt/disk/rootfs.tar.gz --exclude={"/dev","/proc","/sys","/tmp","/var","/run","/mnt","/media","/lost+found","/bak"} /
還原
# 還原
tar -pxf /mnt/disk/rootfs.tar -C /# 解壓gz + 還原
tar -zpxf /mnt/disk/rootfs.tar.gz -C /
3.rsync 系統備份_還原命令
備份
# 備份
sudo rsync -aAX --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/var","/run/*","/mnt/*","/media/*","/lost+found","/bak"} / /mnt/disk/rootfs# 壓縮
tar -zpcf /mnt/disk/rootfs.tar.gz /mnt/disk/rootfs
還原
# 解壓
tar -zpxf /mnt/disk/rootfs.tar.gz -C /mnt/disk/rootfs# 還原
sudo rsync -aHAXx --no-perms --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /mnt/disk/rootfs/ /
rsync遠程備份_還原
# 備份到其它設備上
rsync -aAXvz --delete --progress -e ssh \--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/var/cache/*","/var/tmp/*"} \/ usr@ip:/home/xxx/rootfs# 從遠程設備還原到本地
sudo rsync -aAXvz --delete -e ssh usr@ip:/home/xxx/rootfs /
3.方案確認
經過20~30臺機器設備部署, 實測rsync升級_部署_較快,較安全(在系統已經運行情況下)成功率100%
1.rsync本質上, 屬于增量備份_還原, 系統已有的文件不會被復寫, 只有新文件+變更文件, 才會被更新同步;
- 在系統已經運行狀態下:
- dd 還原命令失敗
- tar 覆寫系統文件, 會導致系統服務/進程異常, 已運行進程禁止寫, 導致失敗
2.rsync解壓與還原速度中等, 慢于RKDevTool.exe燒錄, 和 dd還原
3.優點是: 不需要人工介入/操作, 只需要下載 + 解壓 + 還原 (注: 燒錄,dd,tar 需要人工操作, 進入指定模式)
注:
rsync同步也同樣推薦在recovery模式(類似PC Live CD模式), 安全性才最高
4.其它想法
- 能否夠通過修改uboot配置, 讓系統進入recovery模式 --> 從而實現dd還原
- 假設 / 和 /boot 掛載到不同的分區, 創建一個新根文件分區, 并有一個基礎的linux系統環境, 通過修改grub/uboot參數, 讓系統從另一個 根文件分區啟動(類似recovery分區) --> 從而實現dd還原
- 想嘗試新一代文件系統: zfs, brtfs 快照, 導出, 部署功能; 文件系統支持特性, 實現快速導出, 部署到其它設備
uboot修改 根文件分區
vim /boot/extlinux/extlinux.conf
console=ttyFIQ0,1500000 root=/dev/mmcblk1p5 rw rootwait
console=ttyFIQ0,1500000 root=/dev/mmcblk1p6 rw rootwait
grub修改 根文件分區
vim /boot/grub/grub.cfg
linux /vmlinuz-5.19.0-32-generic root=UUID=19cceeeb-61f6-43e4-afbd-1bff9940bac5 ro recovery nomodeset dis_ucode_ldr
linux /vmlinuz-5.19.0-32-generic root=UUID=19cceeeb-61f6-43e4-afbd-1bff9940xxxx ro recovery nomodeset dis_ucode_ldr