我要在 9GB 驱动器上备份 7GB。意思是,我只有大约 2GB 的空闲空间。
但tar
相关的解决方案需要首先 - 将所有内容放入一个文件中,然后 - 将其拆分。
是否有可能进行存档(可能但不一定压缩)和拆分,以便能够逐块传输到远程驱动器。
我是说
当第一个文件准备好时,我要将其移动到外部驱动器并从系统中删除。
当第二个文件准备好时,我要搬家......
答案1
从源头将其分成多个档案。
使用 du 发现一些最大的目录并首先归档/压缩这些目录(使用 tar | gzip 或直接 tar 压缩选项)。将该 .tgz 文件复制到远程驱动器,检查大小,然后从主光盘中删除。
对其他大目录重复此操作,直到您归档了大约 5GB 的文件。
最后,归档并压缩基目录,但使用 tar 中的排除选项来命名已归档的目录。
或者,您可以通过管道进行 tar 和 gzip,然后通过管道输入 ssh 将其写入远程驱动器。类似于(检查选项):
tar cfz - myBaseDir | ssh myRemote 'cat > myArchive.tg z'
答案2
据我所知,没有一言以蔽之。但我编写了一个小的 bash 脚本,它将所有文件放入几个 tar 包中。
#!/bin/bash
package_i=1
all_files=$(find . -name "*" -type f)
# stop on every 100 MB for now
max_size=104857600
for f in $all_files; do
#
# add file to current tar file
#
tar -rvf package${package_i}.tar $f
#
# check if the size is more than 100 MB
# if so, then wait till current package tar
# was moved by user to another storage
# and then proceed
#
size_of_current_package=$(stat --printf="%s" package${package_i}.tar)
if [ $size_of_current_package -ge $max_size ]; then
read -p "Will wait when you moved package${package_i}.tar to another storage ..."
package_i=$(( $package_i + 1 ))
echo "=== Package iterator is now '${package_i}' ==="
fi
done
该脚本将文件逐个添加到当前packageX.tar
文件中(package1.tar
、package2.tar
等)。如果该packageX.tar
文件超过一定数量的字节(在本例中该数量为 100MB 或 104857600 字节),那么它将等到用户将文件复制packageX.tar
到另一个存储并在用户点击后继续Enter
。