سؤال مدافع في لينكس لا تظهر مساحة حرة صحيحة بعد إزالة الملف


لدي خوادم الملفات التي يتم استخدامها لتخزين الملفات. قد توجد الملفات هناك لمدة أسبوع ، أو لمدة عام. لسوء الحظ ، عندما أزيل الملفات من الخادم ، df لا يعكس الأمر المساحة المحررة. في النهاية ، يتم ملء الخادم (df يظهر 99٪) ، ولا يرسل النص البرمجي أي ملفات أخرى هناك ، باستثناء أنه قد يتوفر بضع عشرات غيغابايت من المساحة الحرة.

أنا أخذت noatime علم على الأقسام التي تم تحميلها إذا كان ذلك يحدث أي فرق.


107
2018-02-08 07:36


الأصل


هل هذا يحدث على قسم واحد أو على جميع الأقسام؟ - Khaled
حسنًا ، إنه يحدث في قسم البيانات الرئيسي ، وهو الجزء الوحيد الذي يهمني ، حيث أنني أقوم فقط بكتابة / إزالة الملفات عليه.
يرجى تنوير لي مع الحل ، أو وصلة لأحد.
ما نظام الملفات (الملفات)؟ DF لا يوجد قانون من superblock ، قد يكون ذلك أن نظام الملفات الخاص بك لا يتم تحديث sb inode. هل جربت مخبأ فلاش؟ - beans
باستخدام ext4. كيف تقوم بمسح ذاكرات التخزين المؤقت؟


الأجوبة:


لا يؤدي حذف اسم الملف إلى حذف الملف. بعض العمليات الأخرى تمسك الملف مفتوحًا ، مما يؤدي إلى عدم حذفه ؛ إعادة تشغيل أو قتل تلك العملية لتحرير الملف.

استعمال

lsof +L1

لمعرفة العملية التي تستخدم ملفًا محذوفًا (غير مرتبط).


183
2018-02-08 07:48



لم يتم الوصول إلى الملفات التي تم إزالتها في أكثر من شهر ، والعمليات الوحيدة التي تصل إليها هي nginx ، لذلك من المشكوك فيه.
+1. أيضا ، سوف يخبرك "lsof + L1" أي برنامج يحمل الملفات مفتوحة. - pehrs
كملف الجذر "lsof -n | grep file" ، ستفاجأ بالوقت الذي يمكن أن تلتصق فيه الملفات بسبب العمليات التي تجعلها مفتوحة لأي سبب من الأسباب. إذا فشل كل شيء آخر ، إعادة التشغيل ، فأنا أشعر بالسوء مما يوحي بذلك ، لكنه بالتأكيد سوف يضمن أن لا شيء يتمسك بالملف. لكل pehrs ، ربما يكون lsof + L1 أفضل طريقة للذهاب. - ScottZ
لقد أنقذتني للتو حذف ملف سجل 93G ولم تحصل على مساحة العودة ولا يمكن معرفة السبب. شكر. - Luke Cousins
إلى جانب نفس السطور وفي حال ساعد هذا الآخرين ، قمت بمسح ملف access.log كبير في nginx ولكنني تمكنت فقط من استعادة المساحة بعد إعادة تشغيل nginx: إعادة تشغيل nginx للخدمة - Nick


كما ذكر Ignacio ، فإن حذف الملف لن يحرر المساحة حتى تقوم بحذف العمليات التي لها مقابض مفتوحة ضد هذا الملف.

ومع ذلك ، يمكنك استعادة المساحة دون قتل العمليات. كل ما عليك القيام به هو إزالة واصفات الملفات.

أولا تنفيذ lsof | grep محذوف لتحديد عملية عقد الملف

[hudson@opsynxvm0055 log]$ /usr/sbin/lsof |grep deleted
java       8859   hudson    1w      REG              253,0 3662503356    7578206 /crucible/data/current/var/log/fisheye.out (deleted)

ثم نفذ:

cd /proc/PID/fd

ثم

[hudson@opsynxvm0055 fd]$ ls -l |grep deleted
total 0
l-wx------ 1 hudson devel 64 Feb  7 11:48 1 -> /crucible/data/current/var/log/fisheye.out (deleted)

سيكون "1" واصف الملف. الآن اكتب "> FD" لاستعادة تلك المساحة

> 1

قد تحتاج إلى تكرار العملية إذا كانت هناك عمليات أخرى تحتفظ بالملف.


21
2018-02-07 01:24



ماذا يكون ال > FD فعل؟ - Pred
يزيل واصف الملف - Adrián Deccico
هل هذا > الأمر له اسم؟ اضطررت للتبديل من zsh إلى bash حتى تتمكن من استخدامه. هل من الممكن تشغيله على zsh؟ - ariera
وهو إعادة توجيه الإخراج وبالتالي يتم اقتطاع الملف. المدة الطويلة ستكون "echo -n> 1" أو "true> 1". لا يزيل FD فعلاً ، فهو يشير إلى ملف فارغ بعد ذلك. - eckes


أحد الاحتمالات هو أن الملف (الملفات) الذي قمت بحذفه يحتوي على مزيد من المراجع في نظام الملفات. إذا قمت بإنشاء ارتباطات ثابتة ، فإن العديد من أسماء الملفات تشير إلى نفس البيانات ، ولن يتم وضع علامة على البيانات (المحتويات الفعلية) على أنها حرة / قابلة للاستخدام حتى تتم إزالة جميع الإشارات إليها. قبل أن تقوم بحذف الملفات ، قم إما بإدراجها (إدخال المسمى "ارتباطات") أو قم بعمل ls -l عليها (يجب أن يكون العمود الثاني).

إذا تبين أن الملفات يتم الرجوع إليها في مكان آخر ، أعتقد أنه سيكون عليك أن تقوم بـ li -i الملف (الملفات) للعثور على رقم inode ، ثم قم بالبحث باستخدام -inum <inode-number> للعثور على إشارات أخرى إلى هذا الملف (ربما تريد أيضا استخدام -mount للبقاء ضمن نفس نظام الملفات كذلك).


8
2018-02-08 10:01





لا يزال الملف مقفلاً من خلال عملية فتحه. لتحرير مساحة ، قم بإجراء الخطوات التالية:

  1. يركض sudo lsof | grep deleted ومعرفة أي عملية تمسك الملف. نتيجة المثال:

    $ sudo lsof | grep deleted
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
    cron     1623 root    5u   REG   0,21        0 395919638 /tmp/tmpfPagTZ4 (deleted)
    
  2. اقتل العملية باستخدام sudo kill -9 {PID}. في عينة أعلاه ، PID هو 1623.

    $ sudo kill -9 1623
    
  3. يركض df لمعرفة ما إذا تم تحرير مساحة بالفعل. إذا كان لا يزال ممتلئًا ، فربما تحتاج إلى الانتظار لبضع ثوانٍ والتحقق مرة أخرى.


3
2018-02-16 05:31





إذا تم تكوين التقسيم لحجز جزء معين من مساحة القرص لاستخدام الجذر فقط ، df لن تشمل هذه المساحة المتوفرة.

[root@server]# df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/optvol           625G  607G     0 100% /opt
...

حتى بعد أن تتم استعادة المساحة عن طريق حذف الملفات / الأدلة ، لن يتمكن المستخدم غير الجذر من الكتابة لقسم معين.

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

بالإضافة إلى ذلك ، يمكنك التحقق من تكوين نظام الملفات عن طريق التشغيل

tune2fs -l <device> | egrep "Block count|Reserved block count

وحساب النسبة الفعلية الخاصة بك.

لتغيير القرص٪ محجوز للاستخدام الجذر فقط ، تنفيذ

tune2fs -m <percentage> <device>

2
2018-05-08 10:31





الإجابات الأخرى صحيحة: إذا قمت بحذف ملف ، ولم يتم تحرير مساحة ، فعادةً ما يرجع ذلك إلى أن الملف لا يزال مفتوحًا أو هناك روابط أخرى إليه.

للمساعدة في استكشاف الأخطاء وإصلاحها ، استخدم أداة تخبرك أين يتم إنفاق مساحة محرك الأقراص: يمكنك استخدامها du للحصول على نظرة عامة عن المكان الذي تسير فيه. أفضل من ذلك ، استخدم أداة رسومية مثل xdiskusage (هناك الكثير من هذا القبيل) لمطاردة الجاني. يسمح لك xdiskusage والأصدقاء بالانتقال إلى أكبر الخنادق الفضائية للعثور على المكان الذي تسير فيه.

وبهذه الطريقة ، ستجد الملفات التي لا تزال تشغل مساحة بسرعة بسبب ارتباط ثابت آخر. سيظهر أيضًا مساحة مشغولة بالملفات المحذوفة ، لكن المفتوحة (كما هو (تم رفض الإذن) ، كما أعتقد ، لأنه لا يمكنه قراءة اسم الملف).


1
2018-02-08 10:11





بما أنني أعرف أن الكثير منكم يفعلون ذلك لـ redhat in /var و gzipping الملفات تتوقع أن يتقلص FS ، ولكن بدلا من ذلك ينمو ، فقط تأكد من إعادة تشغيل خدمة syslog. و

lsof -v file

سوف تظهر لك هذا على أي حال.


1
2018-03-23 15:02



هذا لا يضيف الكثير غطت الإجابة المقبولة المنطق وراء ذلك في عام 2001. عندما يكون لديك 50 مندوب ، استخدم التعليقات إذا كنت ترغب في إضافة مؤهلات إلى الإجابات الموجودة. - Andrew B


خيار واحد آخر: قد يكون القرص ممتلئاً بسبب عملية تقوم باستمرار بإنشاء البيانات: السجلات ، النوى وما شابه ذلك. من الممكن أن يتم تحرير المساحة بالفعل ولكن يتم ملؤها في الحال. لقد رأيت بالفعل مثل هذه الحالة. df في هذه الحالة ببساطة لا يعطي صورة الثقب. استعمال du لتعلم المزيد.


0
2017-07-17 12:01





أنا باستخدام EXT2 ، ساعدني FSCK في هذه الحالة. حاول التراجع -F الآن ، بعد بعض إعادة تشغيل و fscks ، أرى نصف المساحة المستخدمة.


0
2018-01-16 09:00



عزيزي Marcellus ، يتم تضمين الحل الخاص بك عن طريق الإجابة المقبولة ؛ وأحيانًا لا ترغب في إجراء إعادة تشغيل إذا لم تضطر إلى ... - Deer Hunter