Verileri vFXT kümesine taşıma - Paralel veri alma

Yeni bir vFXT kümesi oluşturduktan sonra, ilk göreviniz verileri Azure'da yeni bir depolama birimine taşımak olabilir. Bununla birlikte, normal veri taşıma yönteminiz tek bir istemciden basit bir kopyalama komutu verirse, büyük olasılıkla yavaş bir kopyalama performansı görürsünüz. Tek iş parçacıklı kopyalama, Avere vFXT kümesinin arka uç depolama alanına veri kopyalamak için iyi bir seçenek değildir.

Azure kümesi için Avere vFXT ölçeklenebilir bir çok istemcili önbellek olduğundan, bu kümeye veri kopyalamanın en hızlı ve en verimli yolu birden çok istemcidir. Bu teknik, dosyaların ve nesnelerin alımını paralelleştirir.

Çok istemcili, çok iş parçacıklı veri hareketini gösteren diyagram: Sol üst kısımda, şirket içi donanım depolama alanı simgesinden birden çok ok geliyor. Oklar dört istemci makinesine işaret eder. Her istemci makinesinden üç ok Avere vFXT'ye işaret eder. Avere vFXT'den birden çok ok Blob depolamayı işaret eder.

Bir cp depolama sisteminden diğerine veri aktarmak için yaygın olarak kullanılan veya copy komutları, tek seferde yalnızca bir dosyayı kopyalayan tek iş parçacıklı işlemlerdir. Bu, dosya sunucusunun bir kerede yalnızca bir dosya aldığı anlamına gelir ve bu da küme kaynaklarının boşa harcandığı anlamına gelir.

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çıklanmaktadır. Birden çok istemci ve basit kopyalama komutları kullanılarak verimli veri kopyalama için kullanılabilecek dosya aktarımı kavramlarını ve karar noktalarını açıklar.

Ayrıca yardımcı olabilecek bazı yardımcı programlar da açıklanmaktadır. yardımcı msrsync programı, bir veri kümesini demetlere bölme ve komutları kullanma rsync işlemini kısmen otomatikleştirmek için kullanılabilir. Betik parallelcp , kaynak dizini okuyan ve kopyalama komutlarını otomatik olarak veren başka bir yardımcı programdır. Ayrıca araç, rsync 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 alma aracı VM şablonu

GitHub'da bu makalede bahsedilen paralel veri alımı araçlarıyla otomatik olarak bir VM oluşturmak için bir Resource Manager şablonu sağlanır.

blob depolama, donanım depolama ve Azure dosya kaynaklarından gelen birden çok oku gösteren diyagram. Oklar bir

Veri alma sanal makinesi, yeni oluşturulan VM'nin Avere vFXT kümesini bağladığı ve bootstrap betiğini kümeden indirdiği öğreticinin bir parçasıdır. Ayrıntılar için Bootstrap a data ingestor VM (Veri alma vm'sini önyükleme ) makalesini okuyun.

Stratejik planlama

Verileri paralel olarak kopyalamak için bir strateji tasarlarken, dosya boyutu, dosya sayısı ve dizin derinliğindeki dengeleri anlamanız gerekir.

  • Dosyalar küçük olduğunda, ilgi çekici ölçüm saniyedeki dosyalardır.
  • Dosyalar büyük olduğunda (10MiBi veya üzeri), ilgi alanı ölçümü saniyedeki bayt sayısıdır.

Her kopyalama işleminin bir aktarım hızı ve dosya aktarım hızı vardır. Bu hız kopyalama komutunun uzunluğu zamanlanarak ve dosya boyutu ile dosya sayısı dikkate alınarak ölçülebilir. Oranların nasıl ölçüldiğinin açıklanması bu belgenin kapsamı dışındadır, ancak küçük veya büyük dosyalarla uğraşıp ilgilenmeyeceksiniz anlamak önemlidir.

El ile kopyalama örneği

Önceden tanımlanmış dosya veya yol kümelerinde 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 mtime meta verilerini korumak için bağımsız değişkenini -p 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şkenin eklenmesi, 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ığını gösterir.

Tahmin edilebilir dosya adı yapısı

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

Örneğin, dizininiz için sıralı olarak 00011000numaralandırılmış 1000 dosya içeriyorsa, her birinde 100 dosya kopyalayan on paralel iş parçacığı oluşturmak için aşağıdaki 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 öngörülebilir değilse, dosyaları dizin adlara göre gruplandırabilirsiniz.

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

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

Dosyalar toplandıktan sonra, alt dizinleri ve tüm içeriklerini yinelemeli olarak kopyalamak için paralel kopyalama komutlarını ç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 eklenir?

Tek bir hedef dosya sistemi bağlama noktasına karşı yeterli paralel iş parçacığına sahip olduktan sonra, daha fazla iş parçacığı eklemenin daha fazla aktarım hızı sağlamadığı bir nokta olacaktır. (Aktarım hızı, veri türünüz bağlı olarak dosya/saniye veya bayt/saniye cinsinden ölçülür.) Daha da kötüsü, iş parçacığı üzerinde iş parçacığı 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ı ekleyebilirsiniz:

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 kopyalama komutlarını ek bağlama noktalarına /mnt/destination[1-3] çatallamanızı ve daha fazla paralellik elde etmenizi sağlar.

Örneğin, dosyalarınız çok büyükse, ayrı hedef yolları kullanmak için kopyalama komutlarını 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ının tümü istemci dosya kopyalama işlemleri tarafından hedeflenmektedir.

İstemciler ne zaman eklenir?

Son olarak, istemcinin özelliklerine ulaştığınızda, daha fazla kopya iş parçacığı veya ek bağlama noktası eklemek herhangi bir ek dosya/sn veya bayt/sn artışı sağlamaz. Bu durumda, kendi dosya kopyalama işlemi 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ğ tarafından erişilebilen kaynak dosya sistemi başına birden çok istemci) anladıktan sonra şu öneriyi göz önünde bulundurun: Dosya bildirimleri oluşturun ve bunları birden çok istemcide kopyalama komutlarıyla kullanın.

Bu senaryo, dosya veya dizin bildirimlerini oluşturmak için UNIX find 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 yineleme yapabilirsiniz:

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ı oluşturmanız gerekir.

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ı için.... Gerektiğinde tahminde bulun.

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

Komutun çıkışının find bir parçası olarak elde edilen dördüncü düzey dizinlere yol adlarını içeren her N istemciniz için bir tane olmak üzere N sonuç dosyalarını alırsınız.

Kopyalama komutunu oluşturmak 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ıdakiler, her biri satır başına kopyalama komutuna sahip olan ve istemcide BASH betiği olarak çalıştırabileceğiniz N dosyası verir.

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

İki aşamalı rsync işlemi kullanma

Standart rsync yardımcı program, veri bütünlüğünü garanti etmek için çok sayıda dosya oluşturma ve yeniden adlandırma işlemi oluşturduğundan Azure için Avere vFXT sistemi aracılığıyla bulut depolamayı doldurmada iyi çalışmaz. Ancak, dosya bütünlüğünü denetleen ikinci bir çalıştırmayla rsync bunu izlerseniz daha dikkatli kopyalama yordamını atlamak için ile seçeneğini güvenle kullanabilirsiniz--inplace.

Standart rsync kopyalama işlemi geçici bir dosya oluşturur ve bunu verilerle doldurur. Veri aktarımı başarıyla tamamlanırsa, geçici dosya özgün dosya adıyla yeniden adlandırılır. Bu yöntem, kopyalama sırasında dosyalara erişiliyor olsa bile tutarlılığı garanti eder. Ancak bu yöntem, önbellekte dosya hareketini yavaşlatan daha fazla yazma işlemi oluşturur.

seçeneği --inplace yeni dosyayı doğrudan son konumuna yazar. Aktarım sırasında dosyaların tutarlı olacağı garanti değildir, 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 görevi görür. Dosyalar zaten kopyalandığından, ikinci aşama, hedefte yer alan dosyaların kaynak dosyalarla eşleştiğinden emin olmak için hızlı bir taramadır. Herhangi bir dosya eşleşmezse, bunlar yeniden kapsamlandırılır.

Her iki aşamayı da tek bir komutta birlikte yayımlayabilirsiniz:

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

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

msrsync yardımcı programını kullanma

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

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

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

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

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

msrsync Bir Azure bulut birimini Avere kümesiyle doldurmak için şu yönergeleri izleyin:

  1. Yükleme msrsync ve önkoşulları (rsync ve Python 2.6 veya üzeri)

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

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

    kullanmıyorsanız prime.py, GNU find aracıyla öğe sayısını aşağıdaki gibi 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ı belirlemek için öğe sayısını 64'e bölün. Komutu çalıştırdığınızda -f demetlerin boyutunu ayarlamak için bu sayıyı seçeneğiyle kullanın.

  4. msrsync Dosyaları kopyalamak için komutunu çalıştırın:

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

    kullanıyorsanız --inplace, verilerin doğru kopyalandığını denetleme 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 64 işlemdeki 11.000 dosyayı /test/source-repository'den /mnt/vfxt/repository'ye 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 kopyalama betiğini kullanma

Betik, parallelcp verileri vFXT kümenizin arka uç depolama alanına taşımak için de yararlı olabilir.

Aşağıdaki betik yürütülebilir parallelcpdosyasını ekler. (Bu betik Ubuntu için tasarlanmıştır; başka bir dağıtım kullanıyorsanız ayrı olarak yüklemeniz parallel gerekir.)

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 kopyalama örneği

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

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

Bu betik yukarıdaki paralel kopyalama betiğini kullanır. seçeneği -j ve ile parallelcpmake paralelleştirme elde etmek için kullanılır.

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