"अंतरिक्ष पर कोई स्थान नहीं बचा है", बहुत सारे स्थान होने के बावजूद, btrfs पर


17

लगभग हर जगह मुझे लॉग्स में विफलताएं मिल रही हैं जिनके बारे में शिकायत कर रहा हूं No space left on device

गिटलब लॉग्स:

==> /var/log/gitlab/nginx/current <==
2016-11-29_20:26:51.61394 2016/11/29 20:26:51 [emerg] 4871#0: open() "/var/opt/gitlab/nginx/nginx.pid" failed (28: No space left on device)

Dovecot ईमेल लॉग:

Nov 29 20:28:32 aws-management dovecot: imap(email@www.sitename.com): Error: open(/home/vmail/emailuser/Maildir/dovecot-uidlist.lock) failed: No space left on device

का आउटपुट df -Th

Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/xvda1     ext4      7.8G  3.9G  3.8G  51% /
devtmpfs       devtmpfs  1.9G   28K  1.9G   1% /dev
tmpfs          tmpfs     1.9G   12K  1.9G   1% /dev/shm
/dev/xvdh      btrfs      20G   13G  7.9G  61% /mnt/durable
/dev/xvdh      btrfs      20G   13G  7.9G  61% /home
/dev/xvdh      btrfs      20G   13G  7.9G  61% /opt/gitlab
/dev/xvdh      btrfs      20G   13G  7.9G  61% /var/opt/gitlab
/dev/xvdh      btrfs      20G   13G  7.9G  61% /var/cache/salt

ऐसा लगता है कि वहाँ भी बहुत सा स्थान है। का आउटपुटdf -i

Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/xvda1     524288 105031 419257   21% /
devtmpfs       475308    439 474869    1% /dev
tmpfs          480258      4 480254    1% /dev/shm
/dev/xvdh           0      0      0     - /mnt/durable
/dev/xvdh           0      0      0     - /home
/dev/xvdh           0      0      0     - /opt/gitlab
/dev/xvdh           0      0      0     - /var/opt/gitlab
/dev/xvdh           0      0      0     - /var/cache/salt

का आउटपुट btrfs fi show

Label: none  uuid: 6546c241-e57e-4a3f-bf43-fa933a3b29f9
        Total devices 4 FS bytes used 11.86GiB
        devid    1 size 10.00GiB used 10.00GiB path /dev/xvdh
        devid    2 size 10.00GiB used 9.98GiB path /dev/xvdi
        devid    3 size 10.00GiB used 9.98GiB path /dev/xvdj
        devid    4 size 10.00GiB used 9.98GiB path /dev/xvdk

का आउटपुट btrfs fi df /mnt/durable

Data, RAID10: total=17.95GiB, used=10.12GiB
Data, single: total=8.00MiB, used=0.00
System, RAID10: total=16.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, RAID10: total=2.00GiB, used=1.74GiB
Metadata, single: total=8.00MiB, used=0.00
unknown, single: total=272.00MiB, used=8.39MiB

इसका कारण क्या हो सकता है? मैं बेस लाइन का उपयोग कर रहा हूँ AMI ec2 kernal संस्करण 4.4.5-15.26.amzn1.x86_64

अपडेट करें

नीचे btrfs fi balance start -dusage=5 /mnt/durableदिए गए आदेश को चलाने से मुझे निम्नलिखित में से एक त्रुटि मिली:

ERROR: error during balancing '/mnt/durable' - No space left on device There may be more info in syslog - try dmesg | tail

मैन्युअल रूप से ~ 1GB की कुल बड़ी फ़ाइलों का एक गुच्छा हटाने के बाद मैंने मशीन को रिबूट किया और फिर से कोशिश की, यह सुनिश्चित करते हुए कि मैं sudo का उपयोग कर रहा था, और कमांड निष्पादित किया गया। मैंने फिर अच्छे उपाय के लिए अपनी मशीन को एक बार फिर से रिबूट किया और लगता है कि इस समस्या का समाधान हो गया है


क्या आपके पास किसी प्रकार का कोटा सेटअप है?
21

जेनेरिक उपकरण BTRFS को ठीक से नहीं समझ सकते हैं, आपको BTRFS विशिष्ट उपकरण चाहिए। कृपया "btrfs fi show" और "btrfs fi df / mnt / टिकाऊ" का आउटपुट जोड़ें
पीटर ग्रीन

@PeterGreen ने btrfs का आउटपुट जोड़ा ... ऐसा लगता है जैसे आपने अपराधी को ढूंढ लिया है।
ऑस्टिन

क्या आप मेरे द्वारा सुझाई गई दूसरी कमांड का आउटपुट भी जोड़ सकते हैं।
पीटर ग्रीन

2
कर्नेल संस्करण यहाँ बहुत महत्वपूर्ण है, क्योंकि btrfs के पास अतीत में मुक्त स्थान के साथ बहुत सारे मुद्दे थे, और इस मामले में भविष्य के पाठकों को उस जानकारी से लाभ हो सकता है।
9

जवाबों:


19

BTRFS की दुनिया में आपका स्वागत है। इसमें कुछ टैंटलिंग फीचर्स हैं, लेकिन कुछ इंसुरेटिंग मुद्दे भी हैं।

सबसे पहले, अपने सेटअप के बारे में कुछ जानकारी, ऐसा लगता है कि आपके पास BTRFS "छापे 10" वॉल्यूम में चार ड्राइव हैं (इसलिए सभी डेटा को अलग-अलग डिस्क पर दो बार संग्रहीत किया जाता है)। यह BTRFS वॉल्यूम तब अलग-अलग माउंट पॉइंट्स पर सबवॉल्म्स में उकेरा जाता है। सबवॉल्म्स डिस्क स्थान का एक पूल साझा करते हैं, लेकिन अलग-अलग इनोड संख्या होते हैं और विभिन्न स्थानों में माउंट किए जा सकते हैं।

BTRFS "चंक्स" में स्थान आवंटित करता है, एक चंक को डेटा या मेटाडेटा के एक विशिष्ट वर्ग को आवंटित किया जाता है। क्या हो सकता है (और ऐसा लगता है कि आपके मामले में ऐसा हुआ है) यह है कि मेटाडाटा के लिए कोई जगह नहीं छोड़े जाने वाले सभी डेटा रिक्त स्थान को आवंटित किए जाते हैं

ऐसा भी लगता है कि (कारणों से मुझे पूरी तरह से समझ में नहीं आता है) कि मेटाडाटा अंतरिक्ष के अनुपात के संकेतक से पहले BTRFs "रन आउट" करता है, जिसका उपयोग मेटाडेटा स्थान के अनुपात में 100% तक पहुंच जाता है।

ऐसा प्रतीत होता है कि आपके मामले में क्या हुआ है, बहुत सारे मुफ्त डेटा स्थान हैं, लेकिन कोई भी खाली स्थान नहीं है जो मौजूदा मेटाडेटा विखंडू में चंक्स और अपर्याप्त मुक्त स्थान के लिए आवंटित नहीं किया गया है।

फिक्स "रिबैलेंस" चलाना है। यह डेटा को चारों ओर ले जाएगा ताकि कुछ विखंडू को "वैश्विक" मुक्त पूल में लौटाया जा सके जहां उन्हें मेटाडेटा विखंडू के रूप में पुनः प्राप्त किया जा सके।

btrfs fi balance start -dusage=5 /mnt/durable

-dusageरिबैलेंस कितना आक्रामक है, यह निर्धारित करने के बाद संख्या यह है कि ब्लॉक को खाली करने के लिए करीब कैसे लिखना है। यदि शेष राशि कहती है कि यह फिर से लिखा गया है तो 0 ब्लॉक फिर से उच्च मूल्य के साथ प्रयास करते हैं -dusage

यदि संतुलन विफल रहता है, तो मैं फ़ाइलों को हटाकर कुछ जगह रिबूट करने और / या खाली करने की कोशिश करूंगा।


9
पुनर्संतुलन नया अवहेलना है।
नाथन उस्मान

1
ERROR: error during balancing '/mnt/durable' - No space left on deviceड्राइव से लगभग 1 जीबी हटाने के बाद भी हो रही है
ऑस्टिन

क्या आपने रिबूट करने की कोशिश की है (सफाई के बाद रिबूट करना मेरे लिए काम किया जब मेरे पास एक समान मुद्दा था)।
पीटर ग्रीन

@PeterGreen ने dmesg | tailरिबूट के बाद एक नई त्रुटि प्राप्त करने के बाद मेरी पोस्ट की सामग्री को जोड़ा ।
ऑस्टिन

4

चूँकि आप एक RAID सेटअप के साथ btrfs चला रहे हैं, एक संतुलन ऑपरेशन चलाने का प्रयास करें।

btrfs balance start /var/opt/gitlab

यदि यह पर्याप्त स्थान नहीं होने के बारे में एक त्रुटि देता है, तो इस सिंटैक्स के साथ फिर से प्रयास करें:

btrfs balance start -musage=0 -dusage=0 -susage=0 /var/opt/gitlab 

प्रत्येक btrfs फ़ाइल सिस्टम के लिए इस ऑपरेशन को दोहराएं जहाँ आप अंतरिक्ष के बारे में त्रुटियाँ देख रहे हैं। यदि आपकी अंतरिक्ष समस्या मेटाडेटा के कारण प्रतिबिंबित दर्पणों में वितरित नहीं की जा रही है, तो यह आपके लिए कुछ स्थान खाली कर सकता है।


मुझे अंतरिक्ष के बारे में एक त्रुटि मिली। दूसरे सिंटैक्स की कोशिश करते समय यह मुझे दिखाता है कि चेतावनी जैसा क्या दिखता है: Refusing to explicitly operate on system chunks. Pass --force if you really want to do that.क्या ऐसा करना ठीक है?
ऑस्टिन

-susage=0विकल्प के बिना इसे आज़माएं ।
virtex

2

अपने सिस्टम पर, मैंने निम्नलिखित कार्य को cron.monthly में जोड़ा।

clear_cacheरिमाउंट कुछ भ्रष्टाचार का कोई मुद्दा btrfs मुक्त नक्शे के साथ हो रही थी के कारण है। (मुझे लगता है कि उन्हें आखिरकार मुद्दा मिल गया, लेकिन यह मुद्दा इतना परेशान करने वाला है, मैं महीने में एक बार नक्शे के पुनर्निर्माण के लिए भुगतान करने को तैयार हूं।)

मैं usageबड़े और बड़े शेष के लिए धीरे-धीरे अंतरिक्ष को मुक्त करने के विकल्पों को रैंप करता हूं ।

#!/bin/sh

for mountpoint in `mount -t btrfs | awk '{print $3}' | sort -u`
do
    echo --------------------------
    echo Balancing $mountpoint :
    echo --------------------------
    echo remount with clear_cache...
    mount -oremount,clear_cache $mountpoint
    echo Before:
    /usr/sbin/btrfs fi show $mountpoint
    /usr/sbin/btrfs fi df $mountpoint
    for size in 0 1 5 10 20 30 40 50 60 70 80 90
    do
        time /usr/sbin/btrfs balance start -v -musage=$size $mountpoint 2>&1
        time /usr/sbin/btrfs balance start -v -dusage=$size $mountpoint 2>&1
    done
    echo After:
    /usr/sbin/btrfs fi show $mountpoint
    /usr/sbin/btrfs fi df $mountpoint
done

यदि आप उस बिंदु पर पहुंचते हैं जहां आप असंतुलित नहीं हो सकते हैं क्योंकि आपके पास अपर्याप्त स्थान है, तो सिफारिश अस्थायी रूप से पुनर्वित्त की अवधि के लिए अपने वॉल्यूम के लिए किसी अन्य प्रकार के ब्लॉक डिवाइस (या किसी अन्य डिस्क पर लूपबैक डिवाइस) को जोड़ने के लिए है, और फिर इसे हटा दो।


बहुत बहुत धन्यवाद @ श्रुवन्जा! आपकी स्क्रिप्ट ने वास्तव में मेरा दिन बचाया। मेरे मामले में संतुलन कमान 60 से ऊपर की दूरी पर
चोक

1

यह btrfs के साथ बहुत अधिक समस्या नहीं है, इसलिए यह कुछ ऐसा है जो इस प्रणाली के लिए किया गया है। यह 'एकल' आवंटन नीति से 'छापे गए 10' आवंटन नीति के अधूरे असंतुलन के परिणाम के रूप में दिखता है, जैसा कि एकल आवंटित ब्लॉकों की बड़ी राशि द्वारा दर्शाया गया है। यह संभवतः एकल के रूप में शुरू हुआ और फिर एक रूपांतरण बाधित हुआ। इस तरह के असंगत आवंटन के साथ एक पूल के लिए बाध्य है ... ठीक है, आवंटन मुद्दे।

विचार करें कि आपके पास अपने पूल का 61% खपत है। आपकी आवंटन नीति RAID10 है, जिससे पूर्ण पहुंचने से पहले अधिकतम 50% पूल खपत का परिणाम होना चाहिए, क्योंकि सब कुछ दोहराया गया है। यही कारण है कि सिंगल से RAID 10 में आपका रूपांतरण विफल रहा है (और अभी भी जारी है)। मैं केवल अनुमान लगा सकता हूं, लेकिन यह संभवतः एक असंतुलन के बीच में आवंटित किया गया था। आपके डिवाइस पर एक रिबैलेंस के लिए कोई जगह नहीं बची है RAID 10 आपके पास मौजूद डिस्क के साथ। एकमात्र कारण जो आपको 61% पर मिला है क्योंकि आपके डिस्क में असंगति आवंटित है, कुछ रैखिक रूप से एकल आवंटन के साथ, और अधिकांश RAID 10 में।

यदि आप बिना किसी चीज़ के बहुत कुछ बदले बिना स्थान प्राप्त करना चाहते हैं, तो आप एक एकल आवंटन नीति के लिए असंतुलन पैदा कर सकते हैं। आप अधिक डिस्क भी जोड़ सकते हैं या डिस्क का आकार बढ़ा सकते हैं। या आप कर सकते हैं, जैसा कि आपने इस मामले में किया है, बस फ़ाइलों का एक गुच्छा हटा दें ताकि आपका पूल वास्तव में RAID 10 को संतुलित कर सके (क्योंकि यह कुल मिलाकर उपभोग किए गए 50% से कम होगा)। सुनिश्चित करें कि आप फ़ाइलों को हटाने के बाद असंतुलित हो गए हैं, या आपके पास अभी भी यह जानदार आवंटन नीति होगी।

विशेष रूप से, लागू करें RAID 10 जब उन फ़ाइलों को हटाने के बाद असंतुलन सुनिश्चित करें कि आप उन एकल आवंटित ब्लॉकों से छुटकारा पाएं, जैसे:

btrfs fi balance start -dconvert=raid10 -mconvert=raid10 /home

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.