我正在嘗試想出一種有效的方法來創建 Android 上各種系統分區的壓縮存檔,將所有內容通過管道傳輸到標準輸出,以便能夠在通過gpg
.
工作流程如下圖所示:
adb shell "/data/dobackup.sh" | gpg --output suchbackup.tar.gz.gpg --encrypt --sign --recipient [email protected]
shell 腳本基本上需要執行以下操作:
cat /dev/block/platform/msm_sdcc.1/by-name/recovery > recovery.img
cat /dev/block/platform/msm_sdcc.1/by-name/system > system.img
...
然而,如所見,我想透過 adb shell 執行來完成整個事情,以便所有內容都透過 USB 傳輸到記憶體中,并快速加密然後寫入磁碟,不留下未加密的痕跡。
我遇到的問題是,我不確定如何將腳本的內部結構製作成由多個檔案/來源組成的 tar.gz 檔案。基本上,我希望從該腳本的 stdout 輸出一個 tar.gz 文件,其中包含以下文件:
/recovery.img
/system.img
/userdata.img
/cache.img
/...
我有什麼辦法可以做到這一點嗎?到目前為止,我的旅行中還沒有遇到這樣的問題。
答案1
假設您想要使用 tar 建立存檔並將其傳送到標準輸出,那麼如果您不使用f
將輸出傳送到檔案的選項,預設會發生這種情況:
tar cz /{recovery,system,userdata,cache}.img | ...
如果問題是歸檔檔案系統上實際上不存在的“檔案”,那麼由於 tar 檔案的格式,這會有點棘手:每個檔案都是之前透過包含檔案大小的標頭。標頭中的檔案大小必須正確,因為這是tar
必須知道下一個標頭條目從哪裡開始的唯一方法。
因此,只有當您可以精確預測生成的文件物件的大小時,才可行。如果你能做到這一點,你應該能夠使用標準 python 庫等來建立 tar 文件壓縮包檔案模組。