在 Android 设备上恢复 tar 存档时出现错误“无法 utime:不支持操作”

在 Android 设备上恢复 tar 存档时出现错误“无法 utime:不支持操作”

我把手机(三星 Galaxy S4 Mini,运行带加密的 CyanogenMod 11)中的 MicroSD 卡换成了更大的。在取出旧卡之前,我将其内容备份到 tar 文件中:

/run/user/1000/gvfs/mtp:host=%5Busb%3A001%2C016%5D/SD card$ tar czvf ~/tmp/sgm4/sdcard.tar.gz *

然后更换了卡,格式化了新卡并尝试恢复我的文件:

/run/user/1000/gvfs/mtp:host=%5Busb%3A001%2C017%5D/SD card$ tar xzvf ~/tmp/sgm4/sdcard.tar.gz

文件已恢复,但对于每个文件我都收到一条错误消息,例如:

00001.vcf
tar: 00001.vcf: Cannot utime: Operation not supported

告诉我tar无法恢复文件的原始时间戳。这已得到证实ls -l- 它显示了当前日期和时间。

我通常不会担心这个,但 Android/data 下属于应用程序的文件可能对时间戳敏感。

是否有任何挂载选项或其他魔法可以允许在已挂载的 mtp 文件系统上设置文件的时间戳?

该问题是否与我使用加密有关?

使用 lubuntu 15.04。

更新

事实证明,MicroSD 卡本身已使用 vfat 文件系统格式化,没有任何加密。我将其从手机中取出,插入另一台计算机(Ubuntu 14.04),并能够解压另一个 tarball,没有任何错误。解压文件的时间戳已正确恢复。

看起来无法设置文件时间戳是 mtp 特有的。有人知道如何解决这个问题吗?

答案1

当您在目标目录(在本例中为 /tmp )中没有适当的权限,或者您正在提取到非 Linux 文件系统(vfat 或 ntfs)时,就会出现此错误。

将档案提取或存档到您拥有的位置,例如您的主目录。

答案2

除了从存档中恢复文件外,它还尝试恢复时间戳和权限。如上所述,某些文件系统(可能是非 Linux,可能是网络驱动器)不支持 UNIX 客户端设置时间戳或设置 UNIX 权限。这可能导致 tar 出现以下错误:

  • 无法超时:操作不允许
  • 无法将模式更改为 rwxrwxr-x:操作不允许

如果您无论如何都想继续提取文件并且不关心原始时间戳或权限,那么您可以在 tar 中使用这些附加选项:

-m, --touch 不提取文件修改时间。

-no-overwrite-dir 保留现有目录的元数据。

咨询man tar以获取更多信息。

相关内容