一次編寫並傳輸 gzip 壓縮的 tar 檔案

一次編寫並傳輸 gzip 壓縮的 tar 檔案

我正在嘗試想出一種有效的方法來創建 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 文件壓縮包檔案模組。

答案2

您可能想要查看的主題哈克5論壇將展示正在開發的項目的使用方式mkfifo以及其他 Bash 魔法...我發現一旦設置好,它就可以輕鬆加密幾乎所有內容,並且有用於批量解密的工具。

教授在布丁中,所以特拉維斯-CI目前用於顯示所有工作功能,包括測試字串、檔案和目錄的復原。這已經在 Android 上使用 Busybox 和 chroot Linux 進行了測試,但您可能只需要 busybox(如果禁用了到電子郵件的輸出輪換),因為大多數原始程式碼是圍繞有限的系統設計的。

具體提示tar,檢查過去幾天的建置日誌,你會發現它可以是頭髮拉如果您忘記將尾隨-或弄亂v進行測試,請體驗一下。

相關內容