Mon*_*edi 7 linux tar backup archive
我有一些包含超过 100Gb 数据的目录。我正在尝试将它们归档到较小的卷中,即每个独立/独立的10Gb 。
问题是如果我使用tar
+ split
,它会导致多个不独立的 tar 部分。我不能只从其中一个部分提取文件,除非我先将所有文件合并/合并回一个大文件。
我也尝试使用tar -c -L1000M ...
分割卷,但这也不起作用,并且长文件名被截断存在问题。
也尝试star
过,但似乎它的拆分卷也不是独立的;而 7zip 不保留 unix 中的权限。
我希望拥有独立的拆分档案的原因是为了安全起见,如果其中一个拆分文件损坏,我仍然可以从其他档案中检索数据。如果我只想提取特定的文件/文件夹,而不需要将所有档案合并回一个大卷,它也会快得多。
我如何最好地实现这一目标?谢谢你。
找到解决方案
正如@Haxiel 的回答所建议的那样,我找到了一个使用 tar 的解决方案。答案已发布在下面。
请注意,如果它跨越卷的边界并且您没有可用的下一个卷,则可能仍有一两个文件丢失,但即使其他部分丢失,至少可以独立提取单独的卷。
我已经找到了使用 tar 的解决方案,正如 @Haxiel 的答案所建议的。使用的命令是这样的:
tar -c -L1G -H posix -f /backup/somearchive.tar -F '/usr/bin/tar-volume.sh' somefolder
Run Code Online (Sandbox Code Playgroud)
-L:定义存档大小限制,即1 Gb
-H:必须使用 posix 格式,否则长文件名会被截断
-F:需要卷脚本来生成 tar 的连续归档文件名
该命令将创建一个多卷存档,格式为somearchive.tar、somearchive.tar-2、somearchive.tar-3...
下面是我的tar-volume.sh,改编自本教程。
#!/bin/bash
echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE
name=`expr $TAR_ARCHIVE : '\(.*\)\(-[0-9]*\)$'`
case $TAR_SUBCOMMAND in
-c) ;;
-d|-x|-t) test -r ${name:-$TAR_ARCHIVE}-$TAR_VOLUME || exit 1
;;
*) exit 1
esac
echo ${name:-$TAR_ARCHIVE}-$TAR_VOLUME >&$TAR_FD
Run Code Online (Sandbox Code Playgroud)
要列出第三个存档卷的内容:
tar -tf /backup/somearchive.tar-3
Run Code Online (Sandbox Code Playgroud)
要提取特定的存档卷:
tar -xf /backup/somearchive.tar-3
Run Code Online (Sandbox Code Playgroud)
请注意,如果您仅提取 1 个卷,则可能存在不完整的文件,这些文件在存档的开头或结尾处被分割到另一个卷。Tar 将创建一个名为GNUFileParts.xxxx/filename 的子文件夹,其中包含不完整的文件。
要在 Unix 中提取整个卷集,您需要再次通过卷脚本运行它:
tar -xf /backup/somearchive.tar -F '/usr/bin/tar-volume.sh'
Run Code Online (Sandbox Code Playgroud)
如果您在 Windows 中提取它们,tar 命令无法正确运行卷脚本,因为这需要 bash shell。您需要首先运行以下命令,在命令行手动输入卷文件名:
tar -xf somearchive.tar -M
Run Code Online (Sandbox Code Playgroud)
-M表示这是一个多卷存档。当 tar 完成提取第一个卷时,它会提示您输入下一个卷的名称,直到提取所有卷。
如果有很多卷,您可以先键入所有卷名称序列,然后在提取第一个卷后将整个批次复制并粘贴到 tar 的命令行提示符中:
n somearchive.tar-2
n somearchive.tar-3
n somearchive.tar-4
Run Code Online (Sandbox Code Playgroud)
注意前面的n,是tar命令,表示后面的参数是新的卷文件名。
如果文件跨越卷的边界并且您没有可用的下一个卷,则仍然可能会丢失一两个文件,但即使其他部分丢失,至少可以独立提取单独的卷。
有关详细信息,请参阅tar 文档。H
归档时间: |
|
查看次数: |
2064 次 |
最近记录: |