使用 ZIP

使用 ZIP

我正在尝试将我的 Ubuntu 笔记本电脑的 /home 目录备份到使用 NTFS 格式化的外部存储驱动器。由于 NTFS 不支持目录权限,我尝试使用 tar 创建备份:

tar -cvpf backup.tar /home

完成备份后,我发现对档案部分内容的访问(例如列出档案中单个目录的内容)非常慢。

tar -tf backup.tar someuser/Documents

由于整个 /home 目录并不小(大约 120 GB),我猜想这是因为 tar 针对将文件安全保存到备份磁带而不是真实磁盘进行了优化,因为没有为包含文件创建索引 [1]。请注意,空间不是问题,因此我没有压缩 tar 文件!

由于 NTFS 驱动器上已经有文件,我想避免重新格式化驱动器并为备份创建 ext4 分区。

我如何才能更快地存储和读取我的备份?

Zip 和 7z 似乎不保留目录权限,因此它们似乎不适合这项工作。我不敢相信没有一种存档格式支持 UNIX 样式权限并允许快速访问存档中的单个文件...

[1]http://www.cyberciti.biz/faq/extracting-single-file-directory-from-tarball-2/

答案1

我有几个想法...

使用 ZIP

ZIP 格式存储权限信息(至少是 Info-ZIP 实现,如 Mint/Ubuntu/Debian 所使用的),但显然不是用户/组(至少是 Mint 上的版本“这是 Zip 3.0(2008 年 7 月 5 日),由 Info-ZIP 提供。”)。如果这些文件都属于你的用户,没有特殊用户或组,然后压缩应该工作得足够好。

使用目录进行测试,同样使用 Archive Manager 3.10.2.1,文件和目录的权限保存正常。用户:组显然设置为 you:you。

维基百科关于 Zip 文件格式的信息

.ZIP 格式的 Info-ZIP 实现增加了对 Unix 文件系统功能的支持,例如用户和组 ID、文件权限以及对符号链接的支持。Apache Ant 实现了解这些功能,因此它可以创建具有预定义 Unix 权限的文件。Info-ZIP 实现还知道如何使用 .ZIP 压缩格式内置的纠错功能。某些程序(例如 IZArc)不具备此功能,因此无法处理有错误的文件。

Info-ZIP Windows 工具还支持 NTFS 文件系统权限,在提取文件时会尝试将 NTFS 权限转换为 Unix 权限或反之亦然。这可能会导致潜在的意外组合,例如在拒绝可执行权限的情况下在 NTFS 卷上创建 .exe 文件。

7z似乎也可以存储文件和目录权限,但也没有用户/组信息。

使用文件中的文件系统

特别是因为空间不是问题,您可以创建一个非常大的文件并将其作为一个大分区,将其格式化为 ext(或您最喜欢的 linux 格式)来存储所有文件。

一旦安装,Linux 将会把它当作另一个分区,您可以复制并读取文件,同时保留所有权限/用户。

步骤基本上

  1. 创建一个大的空/零文件。head有效,或dd等等。此示例创建一个充满零的 5M 文件:

    head -c 5M /dev/zero > bigfile
    

    (将 5M 替换为您想要的大小,使用您喜欢的乘数后缀:“b 512、kB 1000、K 1024、MB 1000*1000、M 1024*1024、GB 1000*1000*1000、G 1024*1024*1024,T、P、E、Z、Y 依此类推。”)

  2. 格式化文件。有些说明说要先使用 设置循环文件,losetup但现代发行版可以自己完成循环部分。

    $ mke2fs -v bigfile
    mke2fs 1.42.9 (4-Feb-2014)
    bigfile is not a block special device.
    Proceed anyway? (y,n) y
    ...
    Writing superblocks and filesystem accounting information: done
    
  3. 挂载文件系统并使用它

    $ sudo mount -v bigfile mountpoint
    mount: enabling autoclear loopdev flag
    mount: going to use the loop device /dev/loop1
    mount: you didn't specify a filesystem type for /dev/loop1
           I will try type ext2
    /home/user/bigfile on /home/user/mountpoint type ext2 (rw)
    

我见过一些可以读取扩展分区的 Windows 程序,但我不确定是否有任何程序可以从这样的文件执行此操作,因此这些文件可能无法从 Windows 访问。

相关内容