【问题标题】:Corrupt TAR archive after replacing a single file: Skipping to next header替换单个文件后损坏的 TAR 存档:跳到下一个标题
【发布时间】:2017-09-08 12:47:14
【问题描述】:

我已经用 TWRP 备份了 Android 系统分区。它包含一个我想自己替换的启动视频。

主要思想是从存档中删除 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/
> ...

您可以看到大小约为 950 KB 的原始 start.mp4。

删除存档中的旧 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/
> ...

解压 /system/media 目录

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

将新的 start.mp4 复制到 /system/media

$ cp start.mp4 system/media/

更新 /system/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 KB),显然发生了错误。

你知道如何替换 start.mp4 吗?

【问题讨论】:

  • tar 是什么版本?
  • tar (GNU tar) 1.27.1
  • 如果其他人想要更改系统分区的文件,我已经找到了一种在 Android 运行时执行此操作的方法(需要 root 访问权限):1)adb shell,2)登录为root su 3) 重新挂载系统分区可写mount -o remount,rw /system 4) 复制你的文件 e. G。 cp /sdcard start.mp4 /system/media。它基于这个 SO anwser:stackoverflow.com/questions/10864907/…

标签: file tar


【解决方案1】:

我遇到了类似的问题,并通过指定块大小(例如 -b 64)来解决它,如 https://web.archive.org/web/20171016165801/http://www.digitesters.com/add-file-to-existing-tar-archive/ 所述

就我而言,我是在 Mac OSX 中创建一个 tar 文件,然后在 Centos Linux 上将新文件添加到该 tar 中。第一个文件添加得很好,但第二个文件给出了Skipping to next header 错误。在 OSX 的 tar 创建中添加 -b 64 似乎可以解决问题。

【讨论】:

    猜你喜欢
    • 2016-10-08
    • 2020-04-04
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多