বিটিআরএফএসে প্রচুর জায়গা থাকা সত্ত্বেও "ডিভাইসে কোনও স্থান বাকি নেই" ত্রুটি


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)

ডোভকোট ইমেল লগগুলি:

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

এর কারণ কি হতে পারে? আমি একটি বেস লিনাক্স এএমআই ইসি 2 কার্নাল সংস্করণ ব্যবহার করছি 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

ম্যানুয়ালি ~ 1 গিগাবাইট ডলার মোট বৃহত ফাইলগুলি মুছার পরে আমি মেশিনটি রিবুট করেছি এবং আবার চেষ্টা করেছি, নিশ্চিত হয়েছি যে আমি সুডো ব্যবহার করছি এবং কমান্ডটি কার্যকর করা হয়েছে। আমি তখন ভাল মাপার জন্য আবার আমার মেশিনটি পুনরায় বুট করেছি এবং মনে হচ্ছে সমস্যাটি সমাধান হয়েছে


আপনার কি কোনও ধরণের কোটা সেটআপ আছে?
জোরেডেচি

জেনেরিক সরঞ্জামগুলি বিটিআরএফএস সঠিকভাবে বুঝতে পারে না, আপনার বিটিআরএফএস নির্দিষ্ট সরঞ্জামের প্রয়োজন। অনুগ্রহ করে "বিটিআরএফএস ফাই শো" এবং "বিটিআরএফএস ফাই ডিএফ / এমএনটি / টেকসই"
পিটার গ্রিন

@ পিটারগ্রিন বিটিআরএস এর আউটপুট যুক্ত করেছে ... দেখে মনে হচ্ছে আপনি অপরাধীকে খুঁজে পেয়েছেন।
অস্টিন 21

আমার প্রস্তাবিত দ্বিতীয় কমান্ডের আউটপুটও যুক্ত করতে পারেন?
পিটার গ্রিন

2
কার্নেল সংস্করণটি এখানে বেশ গুরুত্বপূর্ণ, কারণ বিটিআরএফগুলির কাছে অতীতে খালি জায়গা নিয়ে বেশ কয়েকটি সমস্যা ছিল এবং যদি ভবিষ্যতে পাঠকরা সেই তথ্য থেকে উপকৃত হতে পারে তবে এরকম আরও একটি উদাহরণ রয়েছে।
প্লাজমাএইচএইচ

উত্তর:


19

বিটিআরএফএসের বিশ্বে আপনাকে স্বাগতম। এটিতে কিছু কলঙ্কিত বৈশিষ্ট্য রয়েছে তবে কিছু উত্সাহজনক সমস্যা রয়েছে।

প্রথমে, আপনার সেটআপের কিছু তথ্য, দেখে মনে হচ্ছে আপনার কোনও বিটিআরএফএস "রাইড 10" ভলিউমে চারটি ড্রাইভ রয়েছে (তাই সমস্ত ডেটা বিভিন্ন ডিস্কে দু'বার সংরক্ষণ করা হয়)। এই বিটিআরএফএস ভলিউমটি বিভিন্ন মাউন্ট পয়েন্টগুলিতে সাবভলিউমগুলিতে উত্কীর্ণ। সাবভলিউমগুলি ডিস্ক স্পেসের একটি পুল ভাগ করে তবে পৃথক ইনোড নম্বর থাকে এবং বিভিন্ন জায়গায় মাউন্ট করা যায়।

বিটিআরএফএস "খণ্ডগুলিতে" স্থান বরাদ্দ করে, তথ্য বা মেটাডেটা কোনও নির্দিষ্ট শ্রেণিতে একটি অংশ বরাদ্দ করা হয়। কি ঘটতে পারে (এবং আপনার ক্ষেত্রে এরকম হয়েছে বলে মনে হচ্ছে) হ'ল মেটাডাটার কোনও জায়গা ছাড়াই সমস্ত খালি স্থান ডেটা অংশগুলিতে বরাদ্দ হয়ে যায় is

এটিও মনে হয় (কারণগুলির জন্য আমি পুরোপুরি বুঝতে পারি না) যে বিটিআরএফগুলি মেটাডেটা স্থানের অনুপাতের সূচক ব্যবহৃত 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 গিগাবাইট মোছার পরেও
অস্টিন

আপনি কি পুনরায় চালু করার চেষ্টা করেছেন (আমার যখন একই ধরণের সমস্যা হয়েছিল তখন ক্লিনআপের পরে রিবুট করা)।
পিটার গ্রিন

dmesg | tailপুনরায় বুট করার পরে একটি নতুন ত্রুটি পাওয়ার পরে @ পেটারগ্রিন আমার পোস্টে লিখিত সামগ্রী যুক্ত করেছে।
অস্টিন

4

আপনি যেহেতু একটি রেড সেটআপ দিয়ে বিটিআরএফ চালাচ্ছেন, তাই ভারসাম্য পরিচালনা চালানোর চেষ্টা করুন।

btrfs balance start /var/opt/gitlab

যদি এটি পর্যাপ্ত জায়গা না থাকার বিষয়ে ত্রুটি দেয় তবে এই বাক্য গঠনটি দিয়ে আবার চেষ্টা করুন:

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

আপনি স্থান সম্পর্কে ত্রুটি দেখতে পাচ্ছেন এমন প্রতিটি বিটিআরএফএস ফাইল সিস্টেমের জন্য এই অপারেশনটি পুনরাবৃত্তি করুন। যদি আপনার স্থান সমস্যাটি মিররড ডিস্কগুলিতে মেটাটাটা বিতরণ না করার কারণে হয় তবে এটি আপনার জন্য কিছু জায়গা খালি করতে পারে।


আমি স্থান সম্পর্কে একটি ত্রুটি পেয়েছিলাম। অন্যান্য বাক্য গঠন চেষ্টা করার সময় এটি আমাকে সতর্কতার মতো দেখতে বলে মনে করে: এটি করা Refusing to explicitly operate on system chunks. Pass --force if you really want to do that.কি ঠিক?
অস্টিন

-susage=0বিকল্প ছাড়া এটি চেষ্টা করুন ।
ভাইর্টেক্স

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

এটি বিটিআরএফএসের সাথে এতটা সমস্যা নয়, এটি এই সিস্টেমে এমন কিছু হয়েছে। এটি একটি 'একক' বরাদ্দ নীতি থেকে 'রেড 10' বরাদ্দ নীতিতে অসম্পূর্ণ ভারসাম্যের ফলাফলের মতো বলে মনে হচ্ছে, যেমন প্রচুর পরিমাণে একক বরাদ্দকৃত ব্লক প্রমাণিত হয়। এটি সম্ভবত একক হিসাবে শুরু হয়েছিল এবং তারপরে একটি রূপান্তর বাধাগ্রস্ত হয়েছিল। এই ধরণের অসঙ্গতিযুক্ত বরাদ্দ সহ একটি পুল ... ভাল, বরাদ্দের সমস্যা থাকতে বাধ্য।

আপনার পুলটি 61% গ্রাস করেছে তা বিবেচনা করুন। আপনার বরাদ্দ নীতিটি RAID10, যার ফলে পূর্ণরূপে পৌঁছানোর আগে সর্বাধিক 50% পুল খরচ হওয়া উচিত, কারণ সবকিছুই প্রতিলিপি 2 This এ কারণেই আপনার একক থেকে RAID 10 এ রূপান্তর ব্যর্থ হয়েছে (এবং অব্যাহত রয়েছে)। আমি কেবল অনুমান করতে পারি, তবে এটি সম্ভবত একটি ভারসাম্যের মাঝে বরাদ্দ দেওয়া হয়েছিল। আপনার ডিস্কের সাথে একটি RAID 10 এর ভারসাম্য রক্ষার জন্য আপনার ডিভাইসে কোনও স্থান অবশিষ্ট নেই। আপনি 61১% এ যাওয়ার একমাত্র কারণ হ'ল আপনার ডিস্কগুলি অসম্পূর্ণতা বরাদ্দ করা হয়েছে, কিছু রৈখিকভাবে একক বরাদ্দ সহ এবং বেশিরভাগ RAID 10 এ।

আপনি যদি কিছু কিছু না বদলে জায়গা অর্জন করতে চান তবে আপনি একক বরাদ্দ নীতিতে পুনরায় ভারসাম্য বজায় রাখতে পারেন। আপনি আরও ডিস্ক যুক্ত করতে বা ডিস্কগুলির আকার বাড়াতে পারেন। অথবা আপনি যেমনটি করতে পেরেছেন ঠিক তেমন একটি গুচ্ছ ফাইলগুলি মুছুন যাতে আপনার পুলটি আসলে RAID 10 এর সাথে ভারসাম্য বজায় রাখতে পারে (এটি সামগ্রিকভাবে 50% এর চেয়ে কম খরচ হবে)। ফাইলগুলি মুছে ফেলার পরে আপনি পুনরায় ভারসাম্য নিশ্চিত করে নিন বা আপনার এখনও এই জাঙ্কি বরাদ্দ নীতি থাকবে।

বিশেষত, সেই সমস্ত একক বরাদ্দকৃত ব্লকগুলি যেমন আপনি পরিত্রাণ পেয়েছেন তা নিশ্চিত করার জন্য এই ফাইলগুলি মুছে ফেলার পরে পুনরায় সামঞ্জস্য করার সময় RAID 10 প্রয়োগ করুন:

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.