دليل المادة
قبل يومين، راسلني صديق في وقت متأخر من الليل قائلاً إن خادمه قد تعطل.
كانت الأعراض المحددة غريبة بشكل خاص: فقد بدأ الموقع الإلكتروني فجأة في إظهار الأخطاء، ولم يكن من الممكن كتابة السجلات، وكان إنشاء ملفات جديدة يؤدي على الفور إلى ظهور رسالة تفيد بأن القرص ممتلئ.
لكن عندما فحص القرص باستخدام الأمر `df -h`، صُدم عندما وجد أن القرص يحتوي بوضوح على عشرات الجيجابايت من المساحة الحرة. كيف يمكن أن يكون ممتلئًا؟
قلت له في تلك اللحظة: "يا أخي، أنت لست ممتلئًا بمساحة التخزين فحسب، بل إن ملف Inode الخاص بك مثقل بالأحمال الزائدة."
أجاب بعلامة استفهام: ما هو Inode بالضبط؟
في الواقع، يتفاعل الكثير من الناس بنفس الطريقة التي تفاعل بها هو عندما وقعوا في هذا الفخ لأول مرة، لأنه لم يعلمهم أحد في المدرسة هذه الأمور.
دعونا نوضح أولاً ما هو Inode.
فكّر في الأمر كبطاقة فهرسة مكتبة، وسيكون من السهل فهمه.
مساحة القرص تشبه رف الكتب؛ فعدد الكتب التي يمكنك وضعها عليه يعتمد على سعته، وهو أمر يسهل على الجميع فهمه.
تُشبه عقدة البيانات (inode) بطاقة فهرسة لكل كتاب، حيث تسجل اسمه وموقعه ومن قام بنقله.
في نظام لينكس ، يجب أن يشغل كل ملف وكل دليل عقدة بيانات (inode)، بغض النظر عن مدى صغر حجم الملف.
حتى لو كان الملف فارغًا، سيظل النظام يستخدم بطاقة فهرسة له.
يحتوي النظام على حد أقصى لعدد الملفات التي يمكنه إنشاؤها؛ هذا الحد هو العدد الإجمالي للعقد.
بمجرد استنفاد عقدة البيانات (inode)، حتى لو كان القرص لا يزال يحتوي على مئات الجيجابايت من المساحة الحرة، سيرفض نظام التشغيل إنشاء أي ملفات جديدة.
لا يمكن كتابة السجلات، ولا يمكن إنشاء ذاكرة التخزين المؤقت، ويتعطل الموقع الإلكتروني تمامًا - هذا هو المشهد الغريب الذي تشاهده.
بصراحة، هذا وضع معقد للغاية لأن رسالة الخطأ تُرسل من مكان لا تنظر إليه.
تتمثل الحيلة الأولى في استخدام الأمر `df -i` للحصول على نظرة عامة سريعة.
في بيئة HestiaCP ، يمكنك ببساطة الاتصال بالطرفية عبر SSH وكتابة هذا السطر.
df -iسيسرد العدد الإجمالي للعقد الداخلية، والعدد المستخدم، والعدد المتبقي لكل قسم مثبت.
يوجد في المخرجات عمود يسمى IUse%، وهو المقياس الرئيسي الذي يجب عليك مراقبته.
إذا وصلت نسبة استخدام القرص (IUse%) لقسم ما إلى 100%، حتى لو كان هذا القسم لا يزال يحتوي على مساحة كبيرة على القرص، فلن يكون قادرًا على إنشاء أي ملفات أو سجلات جديدة.
اقترحت على صديقي أن يقوم بتشغيل هذا أولاً، حتى يتمكن من تحديد ما إذا كانت المشكلة تكمن في Inode في ثانية واحدة ، وهو ما سيكون أسرع بكثير من التخمين.
الطريقة الثانية هي استخدام `find` لحساب مستخدم معين بدقة.
بعد التأكد من أن المشكلة تكمن في العقدة الداخلية، فإن الخطوة التالية هي معرفة من يستهلك بطاقة الفهرسة بشكل مفرط.
يحتوي HestiaCP على مجلد رئيسي منفصل لكل مستخدم. يمكنك ببساطة حساب إجمالي عدد الملفات والمجلدات الموجودة ضمن مجلد موقع ويب معين.
find /home/用户名/web/你的域名/public_html | wc -lاستبدل "اسم المستخدم" و"اسم نطاقك" بمسارك الفعلي. الرقم الذي يُرجعه الطرفية هو مجموع جميع الملفات والمجلدات في ذلك المجلد.
يتوافق كل ملف أو دليل مع عقدة بيانات واحدة، لذا يمثل هذا الرقم استخدام عقدة البيانات.

إذا كنت كسولًا جدًا بحيث لا يمكنك التحقق من كل واحد على حدة وتريد رؤية توزيع استخدام جميع المستخدمين عبر الموقع بأكمله في وقت واحد، فهناك أيضًا أمر حلقة واحد.
for d in /home/*; do echo -n "$d: "; find "$d" 2>/dev/null | wc -l; doneسيقوم هذا السطر بطباعة العدد الإجمالي للملفات في كل دليل مستخدم ضمن /home، مما يسهل تحديد دليل المستخدم الذي يحتوي على عدد كبير بشكل غير طبيعي من الملفات.
تتمثل الاستراتيجية الثالثة في تحديد المجلدات الفرعية التي تستهلك أكبر كمية من اليود.
أحيانًا تعلم أن موقعًا إلكترونيًا لديه قيم Inode عالية بشكل مثير للسخرية، لكنك لا تزال غير قادر على معرفة الخطأ في الشاشة المليئة بالملفات.
في مثل هذه الحالات، تحتاج إلى التعمق إلى مستوى واحد للعثور على المجلدات الفرعية التي تحتوي على عدد كبير من الملفات الصغيرة، مثل مجلدات التخزين المؤقت، ومجلدات الجلسات، ومجلدات السجلات - وهذه هي أكثر المناطق إشكالية.
find /home/用户名/web/你的域名/public_html -type d -exec sh -c 'echo -n "{}: "; find "{}" -maxdepth 1 | wc -l' \; | sort -n -r -k 2 | head -n 10سيقوم هذا الأمر بإدراج أفضل 10 مجلدات فرعية تستهلك أكبر عدد من الملفات.
المسار الموجود في أعلى القائمة هو المكان الذي تتجمع فيه مجموعة كبيرة من الملفات الصغيرة معًا.
أخبرت صديقي أنه ربما كان هناك مكون إضافي للتخزين المؤقت يقوم سراً بإنشاء ملفات صغيرة، وأن تشغيل هذا السطر سيؤكد ذلك بشكل أساسي.
النصيحة الرابعة هي التحقق من حد الحصة باستخدام repquota.
إذا كان خادمك يحتوي على حصص نظام ملفات لينكس مفعلة، فيمكنك النظر إلى المشكلة من منظور مختلف.
repquota -aسيؤدي هذا الأمر إلى عرض حد الملفات والاستخدام الفعلي للملفات لجميع المستخدمين.
انتبه جيداً إلى قسم "حدود الملفات" في المخرجات؛ يشير العمود المستخدم إلى عدد الملفات التي تم استخدامها.
يمثل عمودا "الحد الأدنى" و"الحد الأقصى" عتبتي الحد الأدنى والحد الأقصى. بمجرد وصول "الحد الأقصى" إلى "الحد الأقصى"، سيرفض النظام إنشاء ملفات جديدة بشكل مباشر.
هذا يختلف تماماً عن مقدار المساحة المتبقية لديك على القرص.
وختاماً، دعونا نربط خيوط التحقيق.
لنعد إلى الصديق الذي تسبب في تعطل الخادم في منتصف الليل في البداية.
لقد اتبع الخطوات الأربع التي وصفتها، بدءًا من الأمر `df -i` للتأكد من أن عقدة البيانات ممتلئة بالفعل.
ثم، باستخدام أداة البحث، حددنا موقع دليل ذاكرة التخزين المؤقت لموقع ويب قديم مهجور كان يقوم بإنشاء ملفات صغيرة بشكل جنوني.
وأخيراً، أكد فحص `repquota` أنه قد وصل بالفعل إلى الحد الأقصى.
بعد تنظيف كومة الملفات غير المرغوب فيها، عاد الموقع الإلكتروني إلى العمل على الفور.
لذا في المرة القادمة التي تواجه فيها هذا الموقف الغريب حيث "من الواضح أن القرص يحتوي على مساحة ولكن لا يمكنك كتابة الملفات"، لا تتسرع في إضافة قرص صلب.
أولاً، استخدم الأمر `df -i` لإلقاء نظرة على inode؛ قد تكون الحقيقة مخفية على بطاقة الفهرسة التي لم تلاحظها من قبل.
أعتقد حقاً أن هذه الأجزاء الصغيرة من الحس السليم المخبأة في صميم النظام أكثر فائدة من حفظ مئات قوائم التحسين.
نأمل أن تكون المقالة "كيفية التحقق من استخدام Inode في HestiaCP؟ السبب وراء توفر مساحة القرص ولكن عدم القدرة على كتابة الملفات" المنشورة على مدونة Chen Weiliang ( https://www.chenweiliang.com/ ) مفيدة لك.
لا تتردد في مشاركة رابط هذه المقالة: https://www.chenweiliang.com/cwl-34619.html
