1.openwrt的默認方案(squashfs + jffs2)
sysupgrade腳本直接調用default_do_upgrade更新設備樹、內核、根文件系統,那么它是如何保存舊配置的呢?請看default_do_upgrade(定義在package/base-files/files/lib/upgrade/common.sh中):
1 default_do_upgrade() { 2 sync 3 if [ "$SAVE_CONFIG" -eq 1 ]; then 4 get_image "$1" "$2" | mtd $MTD_CONFIG_ARGS -j "$CONF_TAR" write 5 else 6 get_image "$1" "$2" | mtd write - "${PART_NAME:-image}" 7 fi 8 [ $? -ne 0 ] && exit 1 9 }
關注第4行即可,-j參數后面追加了$CONF_TAR,表示在寫鏡像的時候將舊的配置文件合並到jffs2 數據中 (integrate <file> into jffs2 data when writing an image)
2.那么如果只使用ubifs作為根文件系統應該如何備份舊的配置文件呢?
2.1 使用sysupgrade.tar這樣壓縮格式作為sysupgrade固件(也就是將設備樹、內核和根文件系統放在一個目錄下,然后將目錄壓縮)
2.2 使用ubiupdatevol來更新ubi鏡像到當前的根文件系統,然后重新掛載文件系統,緊接着將舊的配置文件復制到剛掛載的文件系統中即可