替换单个文件后损坏的TAR归档:跳到下一个标题

问题描述:

我已经使用TWRP对Android系统分区进行了备份。它由我想要替换的启动视频组成。替换单个文件后损坏的TAR归档:跳到下一个标题

主要想法是从存档中删除start.mp4,提取文件夹,复制该文件夹中的新start.mp4并更新存档目录。但之后,档案似乎是腐败的。

这里是一个更详细的说明我做了什么:

列表中的原始文件的内容

$ tar -tvf system.ext4.tar 
> ... 
> -rw-r--r-- root/root  1822 2014-08-22 11:22 /system/media/silence.wav 
> -rw-r--r-- root/root 970069 2016-11-29 12:19 /system/media/start.mp4 
> drwxr-xr-x root/root   0 2016-11-29 13:58 /system/preload/ 
> ... 

你可以看到它的大小为原start.mp4〜 950千字节。

删除旧start.mp4在存档

$ tar --delete --file=system.ext4.tar /system/media/start.mp4 

确保文件被删除

$ tar -tvf system.ext4.tar 
> ... 
> -rw-r--r-- root/root 619252 2008-08-01 14:00 /system/media/poweroff_land.mp4 
> -rw-r--r-- root/root  1822 2014-08-22 11:22 /system/media/silence.wav 
> drwxr-xr-x root/root   0 2016-11-29 13:58 /system/preload/ 
> ... 

提取/系统/ media目录

$ tar -xvf system.ext4.tar /system/media 
> tar: Removing leading `/' from member names 
> /system/media/ 
> /system/media/audio/ 
> ... 

复制新start.mp4到/系统/媒体

$ cp start.mp4 system/media/ 

更新/系统/ media目录

$ tar --update --verbose --file=system.ext4.tar system/media 
> tar: Removing leading `/' from member names 
> system/media/start.mp4 

列表更新存档的文件

$ tar -tvf system.ext4.tar 
> ... 
> -rw-r--r-- root/root  1822 2014-08-22 11:22 /system/media/silence.wav 
> -rw-r--r-- root/root 970069 2016-11-29 12:19 /system/media/start.mp4 
> drwxr-xr-x root/root   0 2016-11-29 13:58 /system/preload/ 
> ... 
> tar: Skipping to next header 
> tar: Exiting with failure status due to previous errors 

正如你所看到的,有一个start.mp4,但与原始存档中的大小相同(新的大小约为50 KByte),并且显然发生了错误。

你有什么想法如何替换start.mp4?

+0

什么版本的'tar'? –

+0

tar(GNU tar)1.27.1 – Vertex

+0

如果有人想更改系统分区的文件,我已经找到了一种在Android运行时(根访问需要)的方法:1)'adb shell',2 )以root用户身份登录'su' 3)将系统分区重新挂载为可写'mount -o remount,rw/system' 4)复制你的文件e。 G。 'cp/sdcard start.mp4/system/media'。它基于这个SO anwser:https://stackoverflow.com/questions/10864907/android-adb-copy-file-to-system-permission-denied#answer-13339661 – Vertex

我有一个类似的问题,并通过指定的块大小(如-b 64)截至http://www.digitesters.com/add-file-to-existing-tar-archive/

在我的情况进行了说明,我是创造了Mac OSX上一个tar文件,然后添加新文件到解决它tar在Centos Linux上。第一个文件添加正常,但第二个文件给出了Skipping to next header错误。在OSX的tar创建中加入-b 64似乎解决了这个问题。