سؤال

هل هناك طريقة لجعل Linux يقرأ مسبقًا عند استنساخ قرص؟أستخدم البرنامج المسمى "dd" لاستنساخ الأقراص.في المرة الأخيرة التي قمت فيها بذلك، بدا كما لو أن نظام التشغيل كان يقرأ ثم يكتب ولكن ليس في نفس الوقت أبدًا.من الناحية المثالية، سوف يقوم القرص الوجهة بالكتابة باستمرار دون انتظار، وهذا بالطبع إذا كان القرص المصدر يمكنه مواكبة ذلك.

تحديث:عادةً ما أختار حجمًا كبيرًا للكتلة عند الاستنساخ (على سبيل المثال.16 م أو 32 ميجابايت).

هل كانت مفيدة؟

المحلول

إن العميد البحري جايجر على حق فيما يتعلق بما يلي:

dd if=/dev/sda of=/dev/sdb bs=1M

كما أن ضبط "القراءة الأمامية" على محركات الأقراص يؤدي عادةً إلى تحسين الأداء.قد يكون الإعداد الافتراضي مثل 256، والأمثل 1024.يختلف كل إعداد عن الآخر، لذا سيتعين عليك تشغيل معايير للعثور على أفضل قيمة.

# blockdev --getra /dev/sda
256
# blockdev --setra 1024 /dev/sda
# blockdev --getra /dev/sda
1024
# blockdev --help
Usage:
  blockdev -V
  blockdev --report [devices]
  blockdev [-v|-q] commands devices
Available commands:
    --getsz (get size in 512-byte sectors)
    --setro (set read-only)
    --setrw (set read-write)
    --getro (get read-only)
    --getss (get sectorsize)
    --getbsz    (get blocksize)
    --setbsz BLOCKSIZE  (set blocksize)
    --getsize   (get 32-bit sector count)
    --getsize64 (get size in bytes)
    --setra READAHEAD   (set readahead)
    --getra (get readahead)
    --flushbufs (flush buffers)
    --rereadpt  (reread partition table)
    --rmpart PARTNO (disable partition)
    --rmparts   (disable all partitions)
#

نصائح أخرى

يمكنك محاولة زيادة حجم الكتلة باستخدام الوسيطة bs؛افتراضيًا، أعتقد أن dd يستخدم حجم كتلة مساويًا لحجم الكتلة المفضل للقرص، مما يعني المزيد من عمليات القراءة والكتابة لنسخ القرص بأكمله.يدعم dd الخاص بنظام التشغيل Linux اللواحق التي يمكن قراءتها بواسطة الإنسان:

dd if=/dev/sda of=/dev/sdb bs=1M

الأسرع بالنسبة لي:

dd if=/dev/sda bs=1M iflag=direct | dd of=/dev/sdb bs=1M oflag=direct

يصل إلى ~100 ميجا بايت/ثانية، في حين أن الخيارات الأخرى (عملية واحدة، غير مباشرة، حجم الكتلة الافتراضي 512 بايت، ...) لا تصل حتى إلى 30 ميجا بايت/ثانية...

لمشاهدة التقدم، قم بالتشغيل في وحدة تحكم أخرى:

watch -n 60 killall -USR1 dd

ربما يمكنك استخدام عمليتين

dd if=indevfile | dd of=outdevfile

سأفترض أنه يمكنك ضبط خيارات dd الأخرى بالشكل الذي يناسبك.هذا له بعض النفقات العامة ولكن يجب أن يسمح بالتزامن بين قراءة قرص واحد وكتابة الآخر.

إذا كان القرصان يستخدمان قناة مختلفة (على سبيل المثال، SATA) فيمكنك استخدام أداة عالية الأداء مثل fastDD.يدعي المؤلفون:

"في هذا العمل ، قمنا بمراجعة مشكلة نسخ البيانات بشكل موثوق وكفاءة ، مع استدعاء جميع آليات الأجهزة والبرامج التي تتدخل والتدخل في عملية النسخ.تم ترميز نظرنا في FastDD ، وهو برنامج C ++ قادر على نسخ البيانات بكفاءة كبيرة ، كما نظهر في اختبارنا. "

علاوة على ذلك، تحافظ الأداة على بناء جملة مشابه جدًا للصيغة القديمة dd.

http://www.dei.unipd.it/~zagonico/fastdd/

https://github.com/zagonico86/fastdd

هل أنت متأكد من أنها لا تفعل ذلك في نفس الوقت؟أتوقع أن تتأكد ذاكرة التخزين المؤقت على القرص من حدوث ذلك.إذا لم يكن الأمر كذلك، فقد تساعد عمليات القراءة/الكتابة غير المحظورة أو حتى غير المتزامنة،

حول التحديث الخاص بك:ما هو حجم ذاكرة التخزين المؤقت لأقراصك الصلبة؟(خاصة الكتابة).قد يكون هذا كثيرًا وقد تحتاج إلى تقليله لمنع الحظر غير الضروري.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top