نقل البيانات إلى نظام مجموعة vFXT - استيعاب البيانات المتوازية
بعد إنشاء مجموعة vFXT جديدة، قد تكون مهمتك الأولى نقل البيانات إلى وحدة تخزين جديدة في Azure. ومع ذلك، إذا كانت الطريقة المعتادة لنقل البيانات هي إصدار أمر نسخ بسيط من عميل واحد، فمن المحتمل أن ترى أداء نسخ بطيء. النسخ أحادي الترابط ليس خيارا جيدا لنسخ البيانات إلى التخزين الخلفي لمجموعة Avere vFXT.
نظرا لأن Avere vFXT لنظام مجموعة Azure هو ذاكرة تخزين مؤقت متعددة العملاء قابلة للتطوير، فإن الطريقة الأسرع والأكثر كفاءة لنسخ البيانات إليها هي مع عملاء متعددين. هذه التقنية توازي استيعاب الملفات والكائنات.
cp
الأوامر أو copy
التي تستخدم عادة لاستخدام لنقل البيانات من نظام تخزين إلى آخر هي عمليات مترابطة واحدة تنسخ ملفا واحدا فقط في كل مرة. وهذا يعني أن خادم الملفات ي استيعاب ملف واحد فقط في كل مرة - وهو مضيعة لموارد نظام المجموعة.
تشرح هذه المقالة استراتيجيات إنشاء نظام نسخ ملفات متعدد العملاء متعدد مؤشرات الترابط لنقل البيانات إلى نظام مجموعة Avere vFXT. وهو يشرح مفاهيم نقل الملفات ونقاط القرار التي يمكن استخدامها لنسخ البيانات بكفاءة باستخدام عملاء متعددين والأوامر البسيطة للنسخ.
كما يشرح بعض الأدوات المساعدة التي يمكن أن تساعد. msrsync
يمكن استخدام الأداة المساعدة لأتمتة عملية تقسيم مجموعة البيانات جزئيا إلى مجموعات واستخدام rsync
الأوامر. parallelcp
البرنامج النصي هو أداة مساعدة أخرى تقرأ الدليل المصدر وتصدر أوامر النسخ تلقائيا. أيضا، rsync
يمكن استخدام الأداة على مرحلتين لتوفير نسخة أسرع لا تزال توفر تناسق البيانات.
انقر فوق الارتباط للانتقال إلى مقطع:
- مثال على النسخ اليدوي - شرح شامل باستخدام أوامر النسخ
- مثال rsync على مرحلتين
- مثال تلقائي جزئيا (msrsync)
- مثال النسخ المتوازي
قالب الجهاز الظاهري لاستيعاب البيانات
يتوفر قالب Resource Manager على GitHub لإنشاء جهاز ظاهري تلقائيا باستخدام أدوات استيعاب البيانات المتوازية المذكورة في هذه المقالة.
يعد الجهاز الظاهري لاستيعاب البيانات جزءا من برنامج تعليمي حيث يقوم الجهاز الظاهري المنشأ حديثا بتحميل نظام مجموعة Avere vFXT وتنزيل البرنامج النصي bootstrap الخاص به من نظام المجموعة. اقرأ Bootstrap a data ingestor VM للحصول على التفاصيل.
التخطيط الاستراتيجي
عند تصميم استراتيجية لنسخ البيانات بالتوازي، يجب أن تفهم المقايضات في حجم الملف وعدد الملفات وعمق الدليل.
- عندما تكون الملفات صغيرة، يكون مقياس الاهتمام هو الملفات في الثانية.
- عندما تكون الملفات كبيرة (10MiBi أو أكبر)، يكون مقياس الاهتمام وحدات البايت في الثانية.
كل عملية نسخ لها معدل نقل ومعدل نقل الملفات، والتي يمكن قياسها عن طريق توقيت طول أمر النسخ وعامل حجم الملف وعدد الملفات. إن شرح كيفية قياس الأسعار خارج نطاق هذا المستند، ولكن من المهم فهم ما إذا كنت ستتعامل مع ملفات صغيرة أو كبيرة.
مثال على النسخ اليدوي
يمكنك إنشاء نسخة متعددة مؤشرات الترابط يدويا على عميل عن طريق تشغيل أكثر من أمر نسخة واحدة في وقت واحد في الخلفية مقابل مجموعات محددة مسبقا من الملفات أو المسارات.
يتضمن الأمر Linux/UNIX cp
الوسيطة -p
للحفاظ على الملكية وبيانات تعريف mtime. إضافة هذه الوسيطة إلى الأوامر أدناه اختيارية. (تؤدي إضافة الوسيطة إلى زيادة عدد استدعاءات نظام الملفات المرسلة من العميل إلى نظام الملفات الوجهة لتعديل بيانات التعريف.)
ينسخ هذا المثال البسيط ملفين بالتوازي:
cp /mnt/source/file1 /mnt/destination1/ & cp /mnt/source/file2 /mnt/destination1/ &
بعد إصدار هذا الأمر، jobs
سيظهر الأمر أن مؤشري ترابط قيد التشغيل.
بنية اسم الملف القابلة للتنبؤ
إذا كانت أسماء الملفات الخاصة بك قابلة للتنبؤ، يمكنك استخدام التعبيرات لإنشاء مؤشرات ترابط نسخ متوازية.
على سبيل المثال، إذا كان الدليل يحتوي على 1000 ملف تم ترقيمها بالتسلسل من 0001
إلى 1000
، يمكنك استخدام التعبيرات التالية لإنشاء عشرة مؤشرات ترابط متوازية يقوم كل منها بنسخ 100 ملف:
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/
بنية اسم ملف غير معروفة
إذا كانت بنية تسمية الملفات غير قابلة للتنبؤ، يمكنك تجميع الملفات حسب أسماء الدليل.
يجمع هذا المثال دلائل بأكملها لإرسالها إلى cp
الأوامر التي يتم تشغيلها كمهام في الخلفية:
/root
|-/dir1
| |-/dir1a
| |-/dir1b
| |-/dir1c
|-/dir1c1
|-/dir1d
بعد تجميع الملفات، يمكنك تشغيل أوامر النسخ المتوازية لنسخ الدلائل الفرعية وكافة محتوياتها بشكل متكرر:
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/ &
متى يتم إضافة نقاط التحميل
بعد أن يكون لديك ما يكفي من مؤشرات الترابط المتوازية التي تسير مقابل نقطة تحميل نظام ملفات وجهة واحدة، ستكون هناك نقطة حيث لا تعطي إضافة المزيد من مؤشرات الترابط المزيد من معدل النقل. (سيتم قياس معدل النقل بالملفات/الثانية أو وحدات البايت/الثانية، اعتمادا على نوع البيانات.) أو الأسوأ من ذلك، يمكن أن يتسبب الترابط الزائد في بعض الأحيان في تدهور معدل النقل.
عند حدوث ذلك، يمكنك إضافة نقاط تحميل من جانب العميل إلى عناوين IP الأخرى لنظام مجموعة vFXT، باستخدام نفس مسار تحميل نظام الملفات البعيد:
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)
تتيح لك إضافة نقاط التحميل من جانب العميل نسخ أوامر النسخ الإضافية إلى نقاط التحميل الإضافية /mnt/destination[1-3]
، ما يحقق المزيد من التوازي.
على سبيل المثال، إذا كانت ملفاتك كبيرة جدا، فقد تحدد أوامر النسخ لاستخدام مسارات وجهة مميزة، وإرسال المزيد من الأوامر بالتوازي من العميل الذي يقوم بالنسخة.
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/ & \
في المثال أعلاه، يتم استهداف جميع نقاط تحميل الوجهة الثلاث بواسطة عمليات نسخ ملف العميل.
متى يتم إضافة عملاء
وأخيرا، عند الوصول إلى قدرات العميل، لن تؤدي إضافة المزيد من مؤشرات ترابط النسخ أو نقاط التحميل الإضافية إلى أي زيادة إضافية في الملفات/الثانية أو وحدات البايت/ثانية. في هذه الحالة، يمكنك نشر عميل آخر بنفس مجموعة نقاط التحميل التي سيتم تشغيل مجموعاتها الخاصة من عمليات نسخ الملفات.
مثال:
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/ &
إنشاء بيانات الملف
بعد فهم الأساليب المذكورة أعلاه (عدة سلاسل نسخ لكل وجهة، وجهات متعددة لكل عميل، وعملاء متعددين لكل نظام ملفات مصدر يمكن الوصول إليه عبر الشبكة)، ضع في اعتبارك هذه التوصية: إنشاء بيانات الملف ثم استخدامها مع أوامر النسخ عبر عملاء متعددين.
يستخدم هذا السيناريو أمر UNIX find
لإنشاء بيانات الملفات أو الدلائل:
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
إعادة توجيه هذه النتيجة إلى ملف: find . -mindepth 4 -maxdepth 4 -type d > /tmp/foo
ثم يمكنك التكرار من خلال البيان، باستخدام أوامر BASH لحساب الملفات وتحديد أحجام الدلائل الفرعية:
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
وأخيرا، يجب صياغة أوامر نسخ الملف الفعلي للعملاء.
إذا كان لديك أربعة عملاء، فاستخدم هذا الأمر:
for i in 1 2 3 4 ; do sed -n ${i}~4p /tmp/foo > /tmp/client${i}; done
إذا كان لديك خمسة عملاء، فاستخدم شيئا مثل هذا:
for i in 1 2 3 4 5; do sed -n ${i}~5p /tmp/foo > /tmp/client${i}; done
ولستة... الاستقراء حسب الحاجة.
for i in 1 2 3 4 5 6; do sed -n ${i}~6p /tmp/foo > /tmp/client${i}; done
ستحصل على الملفات الناتجة N ، واحد لكل عميل من عملاء N الذي يحتوي على أسماء المسار إلى دلائل المستوى الرابع التي تم الحصول عليها كجزء من الإخراج من find
الأمر .
استخدم كل ملف لإنشاء أمر النسخ:
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
سيعطيك ما سبق ملفات N ، كل منها مع أمر نسخ لكل سطر، والتي يمكن تشغيلها كبرنامج نصي BASH على العميل.
الهدف هو تشغيل مؤشرات ترابط متعددة من هذه البرامج النصية بشكل متزامن لكل عميل بالتوازي على عملاء متعددين.
استخدام عملية rsync على مرحلتين
لا تعمل الأداة المساعدة القياسية rsync
بشكل جيد لملء التخزين السحابي من خلال نظام Avere vFXT لنظام Azure لأنها تنشئ عددا كبيرا من عمليات إنشاء الملفات وإعادة تسميتها لضمان تكامل البيانات. ومع ذلك، يمكنك استخدام --inplace
الخيار بأمان مع rsync
لتخطي إجراء النسخ الأكثر حذرا إذا اتبعت ذلك مع تشغيل ثان يتحقق من تكامل الملف.
تقوم عملية النسخ القياسية rsync
بإنشاء ملف مؤقت وتعبئته بالبيانات. إذا اكتمل نقل البيانات بنجاح، تتم إعادة تسمية الملف المؤقت باسم الملف الأصلي. يضمن هذا الأسلوب التناسق حتى إذا تم الوصول إلى الملفات أثناء النسخ. ولكن هذا الأسلوب يولد المزيد من عمليات الكتابة، ما يبطئ حركة الملف من خلال ذاكرة التخزين المؤقت.
يكتب الخيار --inplace
الملف الجديد مباشرة في موقعه النهائي. الملفات غير مضمونة لتكون متسقة أثناء النقل، ولكن هذا ليس مهما إذا كنت تقوم بتصنيم نظام تخزين للاستخدام لاحقا.
تعمل العملية الثانية rsync
كتحقق من التناسق في العملية الأولى. نظرا لأن الملفات قد تم نسخها بالفعل، فإن المرحلة الثانية هي فحص سريع للتأكد من أن الملفات الموجودة على الوجهة تطابق الملفات الموجودة على المصدر. إذا لم تتطابق أي ملفات، يتم إعادة فرزها.
يمكنك إصدار المرحلتين معا في أمر واحد:
rsync -azh --inplace <source> <destination> && rsync -azh <source> <destination>
هذا الأسلوب هو أسلوب بسيط وفعال من حيث الوقت لمجموعات البيانات حتى عدد الملفات التي يمكن لمدير الدليل الداخلي التعامل معها. (عادة ما يكون هذا 200 مليون ملف لمجموعة مكونة من 3 عقد، و500 مليون ملف لمجموعة مكونة من ست عقد، وهكذا.)
استخدام الأداة المساعدة msrsync
msrsync
يمكن استخدام الأداة أيضا لنقل البيانات إلى ملف أساسي خلفي لمجموعة Avere. تم تصميم هذه الأداة لتحسين استخدام النطاق الترددي عن طريق تشغيل عمليات متوازية rsync
متعددة. وهو متاح من GitHub في https://github.com/jbd/msrsync.
msrsync
يقسم الدليل المصدر إلى "مستودعات" منفصلة ثم يقوم بتشغيل عمليات فردية rsync
على كل مستودع.
أظهر الاختبار الأولي باستخدام جهاز ظاهري رباعي النواة أفضل كفاءة عند استخدام 64 عملية. msrsync
استخدم الخيار -p
لتعيين عدد العمليات إلى 64.
يمكنك أيضا استخدام الوسيطة --inplace
مع msrsync
الأوامر. إذا كنت تستخدم هذا الخيار، ففكر في تشغيل أمر ثان (كما هو الحال مع rsync، الموضح أعلاه) لضمان تكامل البيانات.
msrsync
يمكن الكتابة من وإلى وحدات التخزين المحلية فقط. يجب أن يكون المصدر والوجهة قابلين للوصول كتركيبات محلية في الشبكة الظاهرية لنظام المجموعة.
لاستخدام msrsync
لملء وحدة تخزين سحابة Azure بمجموعة Avere، اتبع الإرشادات التالية:
التثبيت
msrsync
ومتطلباته الأساسية (rsync وPython 2.6 أو أحدث)حدد العدد الإجمالي للملفات والدلائل المراد نسخها.
على سبيل المثال، استخدم الأداة المساعدة
prime.py
Avere مع الوسيطاتprime.py --directory /path/to/some/directory
(متوفرة عن طريق تنزيل url https://github.com/Azure/Avere/blob/master/src/clientapps/dataingestor/prime.py).إذا لم تكن تستخدم
prime.py
، يمكنك حساب عدد العناصر باستخدام أداة GNUfind
كما يلي:find <path> -type f |wc -l # (counts files) find <path> -type d |wc -l # (counts directories) find <path> |wc -l # (counts both)
قسم عدد العناصر على 64 لتحديد عدد العناصر لكل عملية. استخدم هذا الرقم مع
-f
الخيار لتعيين حجم المستودعات عند تشغيل الأمر.msrsync
إصدار الأمر لنسخ الملفات:msrsync -P --stats -p 64 -f <ITEMS_DIV_64> --rsync "-ahv" <SOURCE_PATH> <DESTINATION_PATH>
إذا كنت تستخدم
--inplace
، أضف تنفيذا ثانيا دون خيار التحقق من نسخ البيانات بشكل صحيح: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>
على سبيل المثال، تم تصميم هذا الأمر لنقل 11000 ملف في 64 عملية من /test/source-repository إلى /mnt/vfxt/repository:
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
استخدام البرنامج النصي للنسخ المتوازي
parallelcp
يمكن أن يكون البرنامج النصي مفيدا أيضا لنقل البيانات إلى التخزين الخلفي لمجموعة vFXT.
سيقوم البرنامج النصي أدناه بإضافة الملف القابل parallelcp
للتنفيذ . (تم تصميم هذا البرنامج النصي ل Ubuntu؛ إذا كنت تستخدم توزيعا آخر، يجب تثبيته 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
مثال النسخ المتوازي
يستخدم هذا المثال البرنامج النصي للنسخ المتوازي للتحويل البرمجي glibc
باستخدام الملفات المصدر من نظام مجموعة Avere.
يتم تخزين الملفات المصدر على نقطة تحميل نظام مجموعة Avere، ويتم تخزين ملفات الكائن على محرك الأقراص الثابت المحلي.
يستخدم هذا البرنامج النصي برنامج نصي متوازي للنسخ أعلاه. يتم استخدام الخيار -j
مع parallelcp
و 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