我主要将服务器设置为 NAS。它运行 Ubuntu Server 22.04 LTS,数据存储在硬件控制的 RAID 上。
显然我想为异地存储创建备份并使用\
tar -cvpzf \
/backup/location/backup1.tar.gz \
--exclude=/some/files/* \
/source/directory/
问题描述:
使用一小部分数据进行测试,我获得了成功的备份。在尝试整个驱动器后,备份过程在某个时刻停止,并给我留下了一个损坏的 tar 文件。
- 故障点发生在不同的文件上。到目前为止,这似乎是在对 .iso 和 .exe 文件进行去皮时发生的。
- 当时存档的大小为 5.4 GB
tar -tf /backup/location/backup1.tar.gz
返回:
gzip: stdin: unexpected end of file
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
问题0: 您会在这个用例中使用 tar 吗?
...或者完全推荐另一种解决方案?
问题一: 存档被破坏的原因是什么?
到目前为止,我猜测这可能与存档文件类型或整体大小有关。然而我并没有碰巧看到讨论这个的话题。
问题2: 如何避免这种崩溃?
从问题 1 中得出,如何才能在不崩溃的情况下进行备份,最好在备份过程中自动检查完整性?
问题3: 我可以修复损坏的存档(不包括最后一个/损坏的文件)吗?
有没有办法或者我需要在备份损坏后重新创建备份吗?
答案1
使用一小部分数据进行测试,我获得了成功的备份。在尝试整个驱动器后,备份过程在某个时刻停止,并给我留下了一个损坏的 tar 文件。
您可能应该调查失败的原因。读取源文件?写入目标文件?是因为目标文件系统已满吗?或者是因为任一存储设备都不可靠?
好处是 tar 是一种非常简单的格式。它实际上只是一个文件描述头、文件内容、填充到下一个 512B 的倍数、下一个文件描述头……
因此,除了最后一个尝试存储的文件之外的所有文件都完全正常。
糟糕的是 tar 是一种非常幼稚的格式。没有校验和,只有文件的长度,存储在标头中,因此您无法知道文件是否写入正确。
- Q0:我个人不喜欢
tar
;它在很多方面都是低效的。我更喜欢squashfs,因为它实际上包含一个目录,因此您不必阅读所有存档文件来知道最后一个文件的名称是什么 - 就像在tar中一样。它还具有内置压缩功能,无需事后应用,这又具有能够进行搜索的优点,而无需解压缩大量档案,只是为了知道要搜索到哪里。它只存储相同的数据一次。最后,您可以简单地将您的 squashfs 存档安装为文件系统,而不必提取它。更加用户友好。
但是,这是假设您实际上每次都想将完整的内容存档为存档。通常你不希望这样,但是增量备份。您使用什么工具取决于您的具体用例和目标。实际上这里有很多关于如何备份的讨论;只是链接到一个使用 btrfs 内置快照功能的解决方案:用于增量备份的 Linux 备份实用程序 - Q1:我们确实不知道。 “在某个时刻停止”不足以描述。您必须自己进一步调查一下!
- Q2:参见Q1。
- Q3:没有什么需要修复的:直到(不包括)最后一个文件的存档都处于完美的顺序。只需
x
从档案中提取文件即可。
顺便说一句,你已经有了一个现代系统:使用时不要使用-z
压缩tar
;这就是 gzip,与同样可用的--zstd
.