كيف يمكنني القطران على ملف يستخدم من قبل عملية أخرى؟

StackOverflow https://stackoverflow.com/questions/560731

  •  05-09-2019
  •  | 
  •  

سؤال

أنا أرشفة دليل. يحتوي هذا الدليل على ملف يتم كتابته بواسطة عملية أخرى. عندما يكون القطران هذا باستخدام وحدة Tar Tar / Perl Linux، في الأرشيف، يوجد إدخال الملف، لكن المحتويات فارغة.

قبل tarring الملفات ...

-rw-r--r--  1 irraju dba 28 Feb 18 02:22 a
-rw-r--r--  1 irraju dba 25 Feb 18 02:23 b
-rw-r--r--  1 irraju dba 29 Feb 18 03:38 c

بعد عدم وقوعه

-rw-r--r-- irraju/dba       28 2009-02-18 02:22:58 a
-rw-r--r-- irraju/dba       25 2009-02-18 02:23:17 b
-rw-r--r-- irraju/dba        0 2009-02-18 03:33:12 c

كيف يمكنني حل هذه المشكلة؟ أريد أن يكون الملف في الأرشيف مع المحتويات التي لديها في لحظة يتم أرشفة. يمكن أن يكون هذا الملف ملف سجل ويفترض أنه لا يمكننا إغلاق مقبض الملف قبل تورينج.

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

المحلول

كما تم وضع علامة على السؤال مع "Linux"، هناك فرصة لاستخدام قسم LVM. إذا كنت تعمل بالفعل على قسم LVM، فيمكنك استخدام ميزة LVM لقطة.

إليك رابطا ذات الصلة وثائق LVM حول كيفية أداء العملية.

هنا جزء من مقدمة LVM LAPSHOT.:

منشأة رائعة تقدمها LVM هي "لقطات". يسمح هذا للمسؤول بإنشاء جهاز كتلة جديد يقدم نسخة محددة من وحدة تخزين منطقية، تجمدت في وقت ما في الوقت المناسب. عادة ما يتم استخدام هذا عند إجراء بعض معالجة الدفعات، النسخ الاحتياطي على سبيل المثال، على الحجم المنطقي، لكنك لا ترغب في إيقاف نظام Live يغير البيانات. عند الانتهاء من جهاز لقطة، يمكن لمسؤول النظام فقط إزالة الجهاز. يتطلب هذا المرفق أن يتم إجراء اللقطة في وقت واحد عندما تكون البيانات الموجودة على وحدة التخزين المنطقية في حالة متسقة - يتأكد التصحيح VFS-Lock ل LVM1 من قيام بعض أنظمة الملفات بالقيام بذلك تلقائيا عند إنشاء لقطة، والعديد من تنظيم أنظمة الملفات في 2.6 Kernel هذا تلقائيا عند إنشاء لقطة بدون تصحيح.

نصائح أخرى

حاول نسخ الملفات أولا ...

cp a a.tmp
cp b b.tmp
cp c c.tmp

... ثم tarball كل شيء معا ...

tar *.tmp abc.tar

... وتنظيف:

rm *.tmp

إذا لم ينجح ذلك، فإن العملية تحمل مقبض الملف لا تريد مشاركة الوصول إلى القراءة ...

قد تجد أن هذا يعتمد على نظام الملفات المستخدمة والتطبيق الذي يتم الوصول إلى الملف. الأقرب إلى حل عام هو استخدام نظام ملفات يدعم اللقطات وإنشاء لقطة قبل تشغيل القطران.

يتم إخراجك الثاني بعد أولا، لا يمكن أن يكون هذا صحيحا. أنا أظن ذلك tar هنا هنا: عندما كانت تقوم بعملها، كان الملف فارغا. قد تكون تتعامل مع حالة السباق هنا.

كما قال آخرون، فإنه يعتمد على نظام الملفات والوسائل التي يتم استخدامها. sync أولا (أو مهما كان المكافئ موجود في نظام الملفات الخاص بك)، انسخ الملفات إلى دليل TEMP ثم قم بالطيران. إذا كان نظام الملفات لن يسمح لك بنسخ ملف مفتوح، فأنت سول؛ لا يمكن أن تتحول بيرل حول قيود نظام الملفات.

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