vFXT kümesine veri taşıma - Paralel veri toplama

Yeni bir vFXT kümesi oluşturduktan sonra, ilk göreviniz verileri Azure'da yeni bir depolama birimine taşımak olabilir. Ancak, verileri taşımanın her zamanki yönteminiz bir istemciden basit bir kopyalama komutu sunuyorsa, büyük olasılıkla yavaş bir kopyalama performansıyla karşınıza gelecektir. Tek iş parçacıklı kopyalama, verileri kümenin arka uç depolama alanına Avere vFXT için iyi bir seçenek değildir.

Veri Azure için Avere vFXT ölçeklenebilir bir çok istemcili önbellek olduğundan, verileri bu kümeye kopyalamanın en hızlı ve en verimli yolu birden çok istemciye sahip olmaktır. Bu teknik, dosya ve nesnelerin alımını paralel hale gösterir.

Çok istemcili, çok iş parçacıklı veri hareketini gösteren diyagram: Sol üst tarafta, şirket içi donanım depolaması simgesinden gelen birden çok ok vardır. Oklar dört istemci makinesine işaret ediyor. Her istemci makineden üç ok, makineye doğru Avere vFXT. Birden çok Avere vFXT, Blob depolamayı işaret etti.

Genellikle bir depolama sisteminden diğerine veri aktarımı için kullanılan veya komutları, aynı anda yalnızca bir dosya kopyalanan tek iş cp copy parçacıklı işlemlerdir. Bu, dosya sunucusunun aynı anda yalnızca bir dosya alan olduğu anlamına gelir. Bu, kümenin kaynaklarını boşa harcanır.

Bu makalede, verileri Avere vFXT kümesine taşımak için çok istemcili, çok iş parçacıklı dosya kopyalama sistemi oluşturma stratejileri açıklanmıştır. Birden çok istemci ve basit kopyalama komutları kullanarak verimli veri kopyalama için kullanılan dosya aktarımı kavramlarını ve karar noktalarını açıklar.

Ayrıca yardımcı olacak bazı yardımcı programları da açıklar. yardımcı programı, veri kümelerini demetlere bölme ve komutlarını kullanma işlemini kısmen msrsync otomatikleştirmek için rsync kullanılabilir. parallelcpBetik, kaynak dizini okur ve kopyalama komutlarını otomatik olarak soruna neden olan başka bir yardımcı programdır. Ayrıca rsync araç, veri tutarlılığı sağlayan daha hızlı bir kopya sağlamak için iki aşamada kullanılabilir.

Bir bölüme atlamak için bağlantıya tıklayın:

Veri veri alımı VM şablonu

Bu Resource Manager paralel veri GitHub otomatik olarak vm oluşturmak için bir sanal makine şablonu kullanılabilir.

blob depolama, donanım depolama ve Azure dosya kaynaklarından her biri birden çok ok gösteren diyagram. Oklar bir "veri veri alımı vm'sinde" işaret etmek için birden çok ok Avere vFXT

Veri veri alımı VM'si, yeni oluşturulan VM'nin Avere vFXT kümeyi bağlaması ve kümeden önyükleme betiği indirmesi öğreticinin bir parçasıdır. Ayrıntılar için Bootstrap a data ingestor VM'lerini okuyun.

Stratejik planlama

Verileri paralel olarak kopyalamak için bir strateji tasarlarken, dosya boyutu, dosya sayısı ve dizin derinliğinde bazı tradeoff'ları anlamanız gerekir.

  • Dosyalar küçük olduğunda, ilgi ölçümü saniye başına dosya sayısıdır.
  • Dosyalar büyük olduğunda (10MiBi veya daha büyük), ilgi ölçümü bayt/saniye olur.

Her kopyalama işleminin aktarım hızı ve dosya aktarım hızı vardır. Bu hız, kopyalama komutunun uzunluğunun zamanlaması ve dosya boyutu ile dosya sayısını çarpanlara katarak ölçülebilir. Oranların nasıl ölçülebilir olduğunu açıklamak bu belgenin kapsamının dışındadır, ancak küçük veya büyük dosyalarla mı uğraşıp ilgilenmey dosyalarınızı anlamak önemlidir.

El ile kopyalama örneği

Önceden tanımlanmış dosya veya yol kümelerine karşı arka planda aynı anda birden fazla kopyalama komutu çalıştırarak istemcide el ile çok iş parçacıklı bir kopya oluşturabilirsiniz.

Linux/UNIX cp komutu sahipliği ve -p mtime meta verilerini korumak için bağımsız değişkenini içerir. Bu bağımsız değişkeni aşağıdaki komutlara eklemek isteğe bağlıdır. (Bağımsız değişkeni eklemek, meta veri değişikliği için istemciden hedef dosya sistemine gönderilen dosya sistemi çağrılarının sayısını artırır.)

Bu basit örnek iki dosyayı paralel olarak kopyalar:

cp /mnt/source/file1 /mnt/destination1/ & cp /mnt/source/file2 /mnt/destination1/ &

Bu komutu verdikten sonra, jobs komut iki iş parçacığının çalıştırlı olduğunu gösterir.

Tahmin edilebilir dosya adı yapısı

Dosya adlarınızı tahmin edilebilir ise, paralel kopyalama iş parçacıkları oluşturmak için ifadeleri kullanabilirsiniz.

Örneğin, dizininiz ile arasında sıralı olarak numaralanır 1000 dosya içeriyorsa, her biri 100 dosyayı kopyalayıp on paralel iş parçacığı oluşturmak için aşağıdaki 0001 1000 ifadeleri kullanabilirsiniz:

cp /mnt/source/file0* /mnt/destination1/ & \
cp /mnt/source/file1* /mnt/destination1/ & \
cp /mnt/source/file2* /mnt/destination1/ & \
cp /mnt/source/file3* /mnt/destination1/ & \
cp /mnt/source/file4* /mnt/destination1/ & \
cp /mnt/source/file5* /mnt/destination1/ & \
cp /mnt/source/file6* /mnt/destination1/ & \
cp /mnt/source/file7* /mnt/destination1/ & \
cp /mnt/source/file8* /mnt/destination1/ & \
cp /mnt/source/file9* /mnt/destination1/

Bilinmeyen dosya adı yapısı

Dosya adlandırma yapınız tahmin edilebilir durumda değilse, dosyaları dizin adlarına göre grupabilirsiniz.

Bu örnek, arka plan görevleri olarak çalıştırilen komutlara cp göndermek için tüm dizinleri toplar:

/root
|-/dir1
| |-/dir1a
| |-/dir1b
| |-/dir1c
   |-/dir1c1
|-/dir1d

Dosyalar top edildikten sonra, alt dizinleri ve bunların tüm içeriğini tekrar tekrar kopyalamak için paralel kopyalama komutları çalıştırabilirsiniz:

cp /mnt/source/* /mnt/destination/
mkdir -p /mnt/destination/dir1 && cp /mnt/source/dir1/* mnt/destination/dir1/ &
cp -R /mnt/source/dir1/dir1a /mnt/destination/dir1/ &
cp -R /mnt/source/dir1/dir1b /mnt/destination/dir1/ &
cp -R /mnt/source/dir1/dir1c /mnt/destination/dir1/ & # this command copies dir1c1 via recursion
cp -R /mnt/source/dir1/dir1d /mnt/destination/dir1/ &

Bağlama noktaları ne zaman ekli?

Tek bir hedef dosya sistemi bağlama noktasına yönelik yeterli paralel iş parçacığınız olduktan sonra, daha fazla iş parçacığı eklemenin daha fazla aktarım hızı vermey olduğu bir nokta olacaktır. (Aktarım hızı, veri türünüze bağlı olarak dosyalar/saniye veya bayt/saniye cinsinden ölçülür.) Daha da kötüsü, aşırı iş parçacığı kullanımı bazen aktarım hızının düşmesine neden olabilir.

Bu durumda, aynı uzak dosya sistemi bağlama yolunu kullanarak diğer vFXT kümesi IP adreslerine istemci tarafı bağlama noktaları eklemek için:

10.1.0.100:/nfs on /mnt/sourcetype nfs (rw,vers=3,proto=tcp,addr=10.1.0.100)
10.1.1.101:/nfs on /mnt/destination1type nfs (rw,vers=3,proto=tcp,addr=10.1.1.101)
10.1.1.102:/nfs on /mnt/destination2type nfs (rw,vers=3,proto=tcp,addr=10.1.1.102)
10.1.1.103:/nfs on /mnt/destination3type nfs (rw,vers=3,proto=tcp,addr=10.1.1.103)

İstemci tarafı bağlama noktaları eklemek, ek bağlama noktalarına ek kopyalama komutlarının kopyasını alamanıza ve daha fazla /mnt/destination[1-3] paralellik eldenıza olanak sağlar.

Örneğin, dosyalarınız çok büyükse kopyalama komutlarını farklı hedef yolları kullanmak üzere tanımlayabilir ve kopyalamayı gerçekleştiren istemciden paralel olarak daha fazla komut gönderebilirsiniz.

cp /mnt/source/file0* /mnt/destination1/ & \
cp /mnt/source/file1* /mnt/destination2/ & \
cp /mnt/source/file2* /mnt/destination3/ & \
cp /mnt/source/file3* /mnt/destination1/ & \
cp /mnt/source/file4* /mnt/destination2/ & \
cp /mnt/source/file5* /mnt/destination3/ & \
cp /mnt/source/file6* /mnt/destination1/ & \
cp /mnt/source/file7* /mnt/destination2/ & \
cp /mnt/source/file8* /mnt/destination3/ & \

Yukarıdaki örnekte, üç hedef bağlama noktası da istemci dosya kopyalama işlemleri tarafından hedef haline gelmektedir.

İstemciler ne zaman ekli?

Son olarak, istemcinin özelliklerine ulaştıkça, daha fazla kopyalama iş parçacığı veya ek bağlama noktası eklemek ek dosya/sn veya bayt/sn artışına neden olmaz. Bu durumda, kendi dosya kopyalama işlemleri kümelerini çalıştıracak aynı bağlama noktaları kümesine sahip başka bir istemci dağıtabilirsiniz.

Örnek:

Client1: cp -R /mnt/source/dir1/dir1a /mnt/destination/dir1/ &
Client1: cp -R /mnt/source/dir2/dir2a /mnt/destination/dir2/ &
Client1: cp -R /mnt/source/dir3/dir3a /mnt/destination/dir3/ &

Client2: cp -R /mnt/source/dir1/dir1b /mnt/destination/dir1/ &
Client2: cp -R /mnt/source/dir2/dir2b /mnt/destination/dir2/ &
Client2: cp -R /mnt/source/dir3/dir3b /mnt/destination/dir3/ &

Client3: cp -R /mnt/source/dir1/dir1c /mnt/destination/dir1/ &
Client3: cp -R /mnt/source/dir2/dir2c /mnt/destination/dir2/ &
Client3: cp -R /mnt/source/dir3/dir3c /mnt/destination/dir3/ &

Client4: cp -R /mnt/source/dir1/dir1d /mnt/destination/dir1/ &
Client4: cp -R /mnt/source/dir2/dir2d /mnt/destination/dir2/ &
Client4: cp -R /mnt/source/dir3/dir3d /mnt/destination/dir3/ &

Dosya bildirimleri oluşturma

Yukarıdaki yaklaşımları (hedef başına birden çok kopya iş parçacığı, istemci başına birden çok hedef, ağdan erişilebilen kaynak dosya sistemi başına birden çok istemci) anlayıp şu öneriyi göz önünde bulundurabilirsiniz: Dosya bildirimleri derleme ve ardından bunları birden çok istemcide kopyalama komutlarıyla kullanma.

Bu senaryo, UNIX find veya dizinlerin bildirimlerini oluşturmak için UNIX komutunu kullanır:

user@build:/mnt/source > find . -mindepth 4 -maxdepth 4 -type d
./atj5b55c53be6-01/support/gsi/2018-07-22T21:12:06EDT
./atj5b55c53be6-01/support/pcap/2018-07-23T01:34:57UTC
./atj5b55c53be6-01/support/trace/rolling
./atj5b55c53be6-03/support/gsi/2018-07-22T21:12:06EDT
./atj5b55c53be6-03/support/pcap/2018-07-23T01:34:57UTC
./atj5b55c53be6-03/support/trace/rolling
./atj5b55c53be6-02/support/gsi/2018-07-22T21:12:06EDT
./atj5b55c53be6-02/support/pcap/2018-07-23T01:34:57UTC
./atj5b55c53be6-02/support/trace/rolling

Bu sonucu bir dosyaya yeniden yönlendirin: find . -mindepth 4 -maxdepth 4 -type d > /tmp/foo

Ardından, dosyaları saymak ve alt dizinlerin boyutlarını belirlemek için BASH komutlarını kullanarak bildirimde yinelersiniz:

ben@xlcycl1:/sps/internal/atj5b5ab44b7f > for i in $(cat /tmp/foo); do echo " `find ${i} |wc -l` `du -sh ${i}`"; done
244    3.5M    ./atj5b5ab44b7f-02/support/gsi/2018-07-18T00:07:03EDT
9      172K    ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-18T05:01:00UTC
124    5.8M    ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-19T01:01:01UTC
152    15M     ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-20T01:01:00UTC
131    13M     ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-20T21:59:41UTC_partial
789    6.2M    ./atj5b5ab44b7f-02/support/gsi/2018-07-20T21:59:41UTC
134    12M     ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-20T22:22:55UTC_vfxt_catchup
7      16K     ./atj5b5ab44b7f-02/support/pcap/2018-07-18T17:12:19UTC
8      83K     ./atj5b5ab44b7f-02/support/pcap/2018-07-18T17:17:17UTC
575    7.7M    ./atj5b5ab44b7f-02/support/cores/armada_main.2000.1531980253.gsi
33     4.4G    ./atj5b5ab44b7f-02/support/trace/rolling
281    6.6M    ./atj5b5ab44b7f-01/support/gsi/2018-07-18T00:07:03EDT
15     182K    ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-18T05:01:00UTC
244    17M     ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-19T01:01:01UTC
299    31M     ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-20T01:01:00UTC
256    29M     ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-20T21:59:41UTC_partial
889    7.7M    ./atj5b5ab44b7f-01/support/gsi/2018-07-20T21:59:41UTC
262    29M     ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-20T22:22:55UTC_vfxt_catchup
11     248K    ./atj5b5ab44b7f-01/support/pcap/2018-07-18T17:12:19UTC
11     88K     ./atj5b5ab44b7f-01/support/pcap/2018-07-18T17:17:17UTC
645    11M     ./atj5b5ab44b7f-01/support/cores/armada_main.2019.1531980253.gsi
33     4.0G    ./atj5b5ab44b7f-01/support/trace/rolling
244    2.1M    ./atj5b5ab44b7f-03/support/gsi/2018-07-18T00:07:03EDT
9      158K    ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-18T05:01:00UTC
124    5.3M    ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-19T01:01:01UTC
152    15M     ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-20T01:01:00UTC
131    12M     ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-20T21:59:41UTC_partial
789    8.4M    ./atj5b5ab44b7f-03/support/gsi/2018-07-20T21:59:41UTC
134    14M     ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-20T22:25:58UTC_vfxt_catchup
7      159K    ./atj5b5ab44b7f-03/support/pcap/2018-07-18T17:12:19UTC
7      157K    ./atj5b5ab44b7f-03/support/pcap/2018-07-18T17:17:17UTC
576    12M     ./atj5b5ab44b7f-03/support/cores/armada_main.2013.1531980253.gsi
33     2.8G    ./atj5b5ab44b7f-03/support/trace/rolling

Son olarak, istemcilere gerçek dosya kopyalama komutlarını da sizinzin.

Dört istemciniz varsa şu komutu kullanın:

for i in 1 2 3 4 ; do sed -n ${i}~4p /tmp/foo > /tmp/client${i}; done

Beş istemciniz varsa aşağıdakine benzer bir şey kullanın:

for i in 1 2 3 4 5; do sed -n ${i}~5p /tmp/foo > /tmp/client${i}; done

Ve altı... Gerektiğinde tahminde bulundur.

for i in 1 2 3 4 5 6; do sed -n ${i}~6p /tmp/foo > /tmp/client${i}; done

Komutun çıkışının bir parçası olarak elde edilen dört düzey dizine giden yol adlarının yer alan N istemcinizin her biri için bir tane olan N sonuç dosyası find elde edilir.

Copy komutunu derlemek için her dosyayı kullanın:

for i in 1 2 3 4 5 6; do for j in $(cat /tmp/client${i}); do echo "cp -p -R /mnt/source/${j} /mnt/destination/${j}" >> /tmp/client${i}_copy_commands ; done; done

Yukarıdaki, her biri satır başına kopyalama komutu olan ve istemcide BASH betiği olarak çalıştırılana N dosya sağlar.

Amaç, bu betiklerin birden çok iş parçacığını birden çok istemcide paralel olarak istemci başına eşzamanlı olarak çalıştırmaktır.

İki aşamalı rsync işlemi kullanma

Standart yardımcı program, veri bütünlüğünü garanti etmek için çok sayıda dosya oluşturma ve yeniden adlandırma Azure için Avere vFXT sistemi aracılığıyla bulut depolama alanını doldurmak için rsync iyi çalışmıyor. Ancak, dosya bütünlüğünü kontrol edecek ikinci bir çalıştırmayla bunu takip ederseniz daha dikkatli kopyalama yordamını atlamak için ile seçeneğini --inplace rsync güvenli bir şekilde kullanabilirsiniz.

Standart rsync kopyalama işlemi geçici bir dosya oluşturur ve bu dosyayı verilerle doldurur. Veri aktarımı başarıyla tamamlanırsa, geçici dosya özgün dosya adı olarak yeniden adlandırılır. Bu yöntem, dosyalara kopyalama sırasında erişilse bile tutarlılık garantisi sağlar. Ancak bu yöntem, önbellekte dosya taşımayı yavaşlatan daha fazla yazma işlemleri üretir.

seçeneği --inplace yeni dosyayı doğrudan son konuma yazar. Dosyaların aktarım sırasında tutarlı olması garanti edilemez, ancak daha sonra kullanmak üzere bir depolama sistemi hazırlarsanız bu önemli değildir.

İkinci rsync işlem, ilk işlemde tutarlılık denetimi olarak görev sağlar. Dosyalar zaten kopyalanmış olduğundan, ikinci aşama hedefte yer alan dosyaların kaynak dosyalarıyla eş olduğundan emin olmak için hızlı bir taramadır. Herhangi bir dosya eşleşmezse, bunlar yeniden yalıtıldı.

Her iki aşamayı da tek komutta birlikte ve hatta bir arada ve sonra da tek bir komutla veserle ve sonra da tek bir komutla birlikte veser

rsync -azh --inplace <source> <destination> && rsync -azh <source> <destination>

Bu yöntem, iç dizin yöneticisinin işleyene kadar olan dosya sayısına kadar olan veri kümeleri için basit ve zaman etkili bir yöntemdir. (Bu genellikle 3 düğümlü bir küme için 200 milyon dosya, altı düğümlü bir küme için 500 milyon dosya ve bu şekilde devam etti.)

msrsync yardımcı programını kullanma

Araç msrsync ayrıca Avere kümesi için bir arka uç çekirdek dosya dosyasına veri taşımak için de kullanılabilir. Bu araç, birden çok paralel işlem çalıştırarak bant genişliği kullanımını iyileştirmek rsync için tasarlanmıştır. bu, GitHub https://github.com/jbd/msrsync kullanılabilir.

msrsync kaynak dizini ayrı "demetlere" ayırıyor ve ardından her rsync demette ayrı işlemler çalıştırıyor.

Dört çekirdekli bir VM kullanan ön test, 64 işlem kullanırken en iyi verimliliği gösterdi. İşlem msrsync sayısını -p 64 olarak ayarlamak için seçeneğini kullanın.

bağımsız değişkenlerini komutlarla --inplace da msrsync kullanabilirsiniz. Bu seçeneği kullanırsanız, veri bütünlüğünü sağlamak için ikinci bir komut (yukarıda açıklanan rsyncile olduğu gibi) çalıştırmayı göz önünde bulundurabilirsiniz.

msrsync yalnızca yerel birimlere ve yerel birimlerden yazabilir. Kaynak ve hedef, kümenin sanal ağındaki yerel başlatmalar olarak erişilebilir olmalıdır.

Bir msrsync Azure bulut birimini bir avere kümesiyle doldurmak için kullanmak üzere aşağıdaki yönergeleri izleyin:

  1. Yüklemesi msrsync ve önkoşulları (rsync ve Python 2,6 veya üzeri)

  2. Kopyalanacak toplam dosya ve dizin sayısını belirleme.

    Örneğin, avere yardımcı programını prime.py bağımsız değişkenlerle prime.py --directory /path/to/some/directory (URL 'yi indirerek kullanılabilir) kullanın https://github.com/Azure/Avere/blob/master/src/clientapps/dataingestor/prime.py .

    Kullanmıyorsanız prime.py , GNU aracıyla birlikte öğe sayısını find aşağıdaki şekilde hesaplayabilirsiniz:

    find <path> -type f |wc -l         # (counts files)
    find <path> -type d |wc -l         # (counts directories)
    find <path> |wc -l                 # (counts both)
    
  3. İşlem başına öğe sayısını öğrenmek için öğe sayısını 64 göre bölün. -fKomutu çalıştırdığınızda demetlerin boyutunu ayarlama seçeneğiyle bu numarayı kullanın.

  4. msrsyncDosyaları kopyalamak için komutu verme:

    msrsync -P --stats -p 64 -f <ITEMS_DIV_64> --rsync "-ahv" <SOURCE_PATH> <DESTINATION_PATH>
    

    Kullanıyorsanız --inplace , verilerin doğru şekilde kopyalanıp kopyalanmayacağını denetlemek için seçeneği olmadan ikinci bir yürütme ekleyin:

    msrsync -P --stats -p 64 -f <ITEMS_DIV_64> --rsync "-ahv --inplace" <SOURCE_PATH> <DESTINATION_PATH> && msrsync -P --stats -p 64 -f <ITEMS_DIV_64> --rsync "-ahv" <SOURCE_PATH> <DESTINATION_PATH>
    

    Örneğin, bu komut, 11.000 64 dosyalarını/test/source-Repository 'den/mnt/vfxt/Repository dizinine taşımak için tasarlanmıştır:

    msrsync -P --stats -p 64 -f 170 --rsync "-ahv --inplace" /test/source-repository/ /mnt/vfxt/repository && msrsync -P --stats -p 64 -f 170 --rsync "-ahv --inplace" /test/source-repository/ /mnt/vfxt/repository

Paralel kopya betiğini kullanın

parallelcpBetik Ayrıca, vFXT kümenizin arka uç depolamasına veri taşımak için de yararlı olabilir.

Aşağıdaki komut dosyası yürütülebilir dosyayı ekleyecek parallelcp . (Bu betik Ubuntu için tasarlanmıştır; başka bir dağıtım kullanılıyorsa ayrı olarak ' yi yüklemelisiniz parallel .)

sudo touch /usr/bin/parallelcp && sudo chmod 755 /usr/bin/parallelcp && sudo sh -c "/bin/cat >/usr/bin/parallelcp" <<EOM
#!/bin/bash

display_usage() {
    echo -e "\nUsage: \$0 SOURCE_DIR DEST_DIR\n"
}

if [  \$# -le 1 ] ; then
    display_usage
    exit 1
fi

if [[ ( \$# == "--help") ||  \$# == "-h" ]] ; then
    display_usage
    exit 0
fi

SOURCE_DIR="\$1"
DEST_DIR="\$2"

if [ ! -d "\$SOURCE_DIR" ] ; then
    echo "Source directory \$SOURCE_DIR does not exist, or is not a directory"
    display_usage
    exit 2
fi

if [ ! -d "\$DEST_DIR" ] && ! mkdir -p \$DEST_DIR ; then
    echo "Destination directory \$DEST_DIR does not exist, or is not a directory"
    display_usage
    exit 2
fi

if [ ! -w "\$DEST_DIR" ] ; then
    echo "Destination directory \$DEST_DIR is not writeable, or is not a directory"
    display_usage
    exit 3
fi

if ! which parallel > /dev/null ; then
    sudo apt-get update && sudo apt install -y parallel
fi

DIRJOBS=225
JOBS=225
find \$SOURCE_DIR -mindepth 1 -type d -print0 | sed -z "s/\$SOURCE_DIR\///" | parallel --will-cite -j\$DIRJOBS -0 "mkdir -p \$DEST_DIR/{}"
find \$SOURCE_DIR -mindepth 1 ! -type d -print0 | sed -z "s/\$SOURCE_DIR\///" | parallel --will-cite -j\$JOBS -0 "cp -P \$SOURCE_DIR/{} \$DEST_DIR/{}"
EOM

Paralel kopya örneği

Bu örnek, glibc avere kümesinden kaynak dosyaları kullanarak derlemek için paralel kopyalama betiğini kullanır.

Kaynak dosyalar avere kümesi bağlama noktasında depolanır ve nesne dosyaları yerel sabit sürücüde depolanır.

Bu betik, yukarıdaki paralel kopya betiğini kullanır. Seçeneği -j parallelcp paralel hale getirme kazanmak için ve ile birlikte kullanılır make .

sudo apt-get update
sudo apt install -y gcc bison gcc binutils make parallel
cd
wget https://mirrors.kernel.org/gnu/libc/glibc-2.27.tar.bz2
tar jxf glibc-2.27.tar.bz2
ln -s /nfs/node1 avere
time parallelcp glibc-2.27 avere/glibc-2.27
cd
mkdir obj
mkdir usr
cd obj
/home/azureuser/avere/glibc-2.27/configure --prefix=/home/azureuser/usr
time make -j