Yer kazanmak için birden çok aşamada bölünmüş katran arşivi nasıl oluşturulur?

Jan 08 2021

Tar arşivi oluşturmaya çalıştığım çok büyük bir klasörüm var. Sorun şu ki, tüm arşivi depolamak için yeterli boş alanım yok, bu yüzden bir seferde örneğin 100-200 GB arşiv parçalarını oluşturmak ve bunları ayrı ayrı bulut depolamaya aktarmak istiyorum. Yeni yığınların ne zaman oluşturulacağını kontrol edebilmem gerekiyor, böylece HDD'm dolmaz, ancak bölünmüş tarball'ları oluşturmak için bulduğum tüm komutlar her zaman hepsini aynı dizinde aynı anda oluşturur.

Bulduğum en yakın çözüm bu soruydu, ancak tüm yanıtlar arşivleri dosya sayısına dayandırıyor, dosya boyutlarım eşit olmayan bir şekilde dağıtıldığı için kullanım durumum için önemli olan boyuta değil.

Yanıtlar

2 EduardoTrápani Jan 08 2021 at 10:09

Şu tarseçeneklerle kullanıcı yapabilirsiniz :

--new-volume-script=COMMAND
--tape-length=N

Her cildin sonunda, hangi birimin henüz işlendiğini bilmek için bazı ortam değişkenlerine sahip olan komut dosyanızı arayacaktır. Kontrol kılavuz sayfasını çıkış dosyayı yeniden adlandırmak veya geçerli hacminin izlemek nasılsa tutmak zorunda tam listesi için, ama en azından değişken TAR_VOLUME durumda oldukça yararlıdır:

TAR_VOLUME İşlenen hacim katranının sıra numarası (çok ciltli bir arşiv okuyorsanız ayarlayın).

Komut dosyası dönmeye 0 tardevam edecekse , aksi takdirde duracaktır.

Örneğin, bu, maksimum 20M boyutunda her bir birimi oluşturur ve sınıra her ulaşıldığında komut dosyanızı çağırır:

tar cvf /tmp/volume.tar /path/to/files/ --new-volume-script=/path/to/myscript.sh --tape-length=20M

Komut dosyası basit echo "Next volume";readolabilir veya hatta aktarımı ondan bile yapabilirsiniz (birimi yeniden adlandırın, çünkü çıktığınızda /tmp/volume.tarüzerine yazılır).

Diğer tarafta, --multi-volume bayrağını kullandığınızdan emin olun. Bunu yapmazsanız, tar hatalarla durur (birisinin hatayı araması durumunda bırakırım):

tar: Arşivde beklenmeyen EOF

tar: Hata düzeltilemez: şimdi çıkılıyor

tar xvf /path/to/transferred.volume --multi-volume

/Path/to/transferred.volume için 2 numaralı birimi hazırlayın ve return tuşuna basın:

taryeni birim için sizden bilgi isteyecektir. Enter tuşuna bastığınızda /path/to/transferred.volumetekrar açılır ve bu böyle devam eder.

1 JoshHarrison Jan 09 2021 at 01:30

Eduardo-trápani'nin mükemmel cevabının ardından , aşağıda, GNU Sayfasında bulunan ve her cilt için kullanıcı girdisini bekleyen ve bir cilt bulunamazsa yeniden deneyen bir betiğin biraz değiştirilmiş bir sürümü var :

Tamlık için arşivi oluşturmak için kullanılan komut budur:

tar cvf /tmp/volume.tar /path/to/files/ --new-volume-script=./myscript.sh --tape-length=1000M

Ve bu, bölünmüş arşivi çıkarmak için kullandığım komut:

tar xvf /tmp/volume.tar --multi-volume --new-volume-script=./myscript.sh

myscript.sh:

#!/bin/bash
# For this script it's advisable to use a shell, such as Bash,
# that supports a TAR_FD value greater than 9.

echo "Press enter to continue to next volume"

read

echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE.

name=`expr $TAR_ARCHIVE : '\(.*\)-.*'` case $TAR_SUBCOMMAND in
-c)       ;;
-d|-x|-t) test -r ${name:-$TAR_ARCHIVE}-$TAR_VOLUME || echo "Failed to find volume" ;; *) exit 1 esac echo ${name:-$TAR_ARCHIVE}-$TAR_VOLUME >&$TAR_FD

Düzenleme: Bu, yalnızca macOS (w / Homebrew) üzerine kurulabilen GNU Tar ile çalışır:

brew install gnu-tar

Bunu varsayılan katranınız olarak kullanmak için yolunuza şu şekilde eklemeniz gerekir:

export PATH="$(brew --prefix)/opt/python/libexec/bin:$PATH"