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 스크립트를 작성했습니다.
#!/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
) 추가합니다. 파일이 특정 바이트 수(이 경우 100MB 또는 104857600바이트)보다 큰 경우 packageX.tar
사용자가 파일을 다른 저장소에 복사할 때까지 기다렸다가 packageX.tar
사용자가 을 클릭하면 계속됩니다 Enter
.