आपको btrfs quotaऔर btrfs qgroups(कोटा समूहों) पर एक नज़र डालनी चाहिए ।
मूल रूप से qgroupsठीक वही करें जो आपने अनुरोध किया था, वे ट्रैक करते हैं कि सबवोल्यूम द्वारा कितना स्थान आवंटित किया गया है। आपके पास qgroupएक btrfsफाइल सिस्टम के लिए कार्यक्षमता को सक्षम करने के लिए
# btrfs quota enable /path/to/btrfs/filesystem
हालाँकि, इससे पहले कि आपको यह चेतावनी दी जाए कि यह qgroupडेटा के पूर्ण पुन: संगणना को ट्रिगर करता है जो विशेष रूप से कई सबवोल्यूम के साथ बड़े फाइल सिस्टम के लिए कुछ समय लेगा। यह प्रक्रिया पृष्ठभूमि में अतुल्यकालिक रूप से चलती है। आप पहले से ही की स्थिति की जांच कर सकते हैं qgroupsसाथ
# btrfs qgroup show /path/to/btrfs/filesystem
यह आपको इस तरह से कुछ आउटपुट देगा:
WARNING: rescan is running, qgroup data may be incorrect
qgroupid rfer excl
-------- ---- ----
0/5 843.69GiB 61.91MiB
0/4881 811.06GiB 9.34GiB
0/7990 867.32GiB 329.91MiB
0/8400 867.17GiB 37.64MiB
(पहली पंक्ति में चेतावनी तब तक मौजूद है जब तक कि रेसकान अभी भी चल रहा है।)
Btrfs स्वचालित रूप से qgroupप्रत्येक सबवोल्यूम के लिए बनाता है । इस मामले में सबवॉल्म आईडी 4881, 7990, और 8400 के साथ तीन उपवृत्त हैं। फॉरवर्ड स्लैश से पहले का हिस्सा स्तर है qgroup। प्रत्येक उपवृत्त qgroupस्तर 0. पर है। इसके अतिरिक्त qgroupस्तर 0 पर एक विशेष है जिसमें हमेशा ID 5 है और यह btrfs फाइल सिस्टम की जड़ से मेल खाता है।
qgroupउपरोक्त प्रत्येक आउटपुट से पता चलता है कि इसके द्वारा कितना स्थान संदर्भित है। इसका मतलब यह है कि संबंधित उपवृत्त में फाइलें होती हैं जिनका कुल आकार प्रदर्शित संख्या के बराबर होता है।
हालाँकि, स्नैपशॉट और btrfs सबवॉल्म्स की कॉपी-ऑन-राइट प्रकृति के कारण फाइलें साझा की जा सकती हैं। इसका मतलब यह है कि फ़ाइलों की सामग्री (या वास्तव में extents) को एक से अधिक सबवोल्यूम द्वारा संदर्भित किया जा सकता है। यह दूसरे नंबर द्वारा व्यक्त किया जाता है जो दर्शाता है कि प्रत्येक उपविकास द्वारा विशेष रूप से कितना स्थान आवंटित किया गया है और किसी अन्य उपवृत्त के साथ साझा नहीं किया गया है। यदि आप एक सबवोल्यूम को हटाते हैं तो यह वह स्थान है जिसे वास्तव में मुक्त किया जाएगा।
यदि आप यह जानना चाहते हैं कि यदि आप कई सबवोल्यूम को हटाते हैं तो कितनी जगह खाली हो जाएगी, तो आप उपर्युक्त स्तरों का उपयोग कर सकते हैं। qgroupsकर रहे हैं एक पदानुक्रम में आयोजित ऊपरी स्तरों पर और समूहों (0 से अधिक) निचले स्तर की सूचनाएं एकत्र करते।
इस प्रकार, यह पता लगाने के लिए कि उप-स्थान 4881 और 7990 (उपरोक्त उदाहरण में) को हटा दिया जाएगा तो कितनी जगह खाली हो जाएगी (एक qgroupआईडी के साथ मनमाने ढंग से बनाएं) , लेकिन आप स्तर 1 पर यहां जो कुछ भी चाहें उसे चुन सकते हैं।
# btrfs qgroup create 1/0 /path/to/btrfs/filesystem
फिर उन नए उपखंडों qgroupको एक अभिभावक के रूप में असाइन करें जिन्हें qgroupsआप हटाना चाहते हैं
# btrfs qgroup assign 0/4881 1/0 /path/to/btrfs/filesystem
# btrfs qgroup assign 0/7990 1/0 /path/to/btrfs/filesystem
यह कोटा जानकारी के एक और पुनः स्कैन को ट्रिगर करेगा जिसमें कुछ समय लग सकता है। यदि यह समाप्त हो गया है और आप अब जारी करते हैं
# btrfs qgroup show -p /path/to/btrfs/filesystem
आपको इस तरह एक आउटपुट मिलता है:
qgroupid rfer excl parent
-------- ---- ---- ------
0/5 1.38TiB 2.51GiB ---
0/4881 1.11TiB 10.86GiB 1/0
0/7990 1.23TiB 502.41MiB 1/0
0/8400 1.34TiB 1.69GiB 1/0
1/0 1.51TiB 132.23GiB ---
(मैंने -pउस parentकॉलम को आउटपुट में जोड़ने के लिए ध्वज जोड़ा, जो माता-पिता / बच्चे के संबंध को दर्शाता है qgroups।)
अब qgroup 1/0आपके साथ वाली रेखा बताती है कि आपके द्वारा हटाए जाने वाले दोनों उपवर्गों द्वारा कितना स्थान संदर्भित है और इससे भी महत्वपूर्ण बात यह है कि यह बताता है कि उनके द्वारा विशेष रूप से कितना स्थान आवंटित किया गया है । यह अंतरिक्ष की मात्रा है जिसे यदि आप दोनों सबवोल्यूम हटाते हैं तो मुक्त कर दिया जाएगा।
मुझे यह भी आश्चर्य है कि वे क्यों कह रहे हैं कि यह इतना धीमा होगा?
यह स्नैपशॉट्स के साथ-साथ btrfs की कॉपी-ऑन-राइट प्रकृति के कारण है। यदि आप btrfs (सामान्य रूप से) में एक स्नैपशॉट बनाते हैं, तो नए बनाए गए सबवोल्यूम में सभी वास्तविक डेटा जिसमें स्नैपशॉट होता है, स्नैपशॉट के स्रोत के साथ साझा किया जाता है। केवल जब कोई फ़ाइल स्रोत में बदल दी जाती है या बदल दी जाती है, तो यह अलग-अलग सामग्री (विस्तार) की ओर इशारा करती है। इससे यह आकलन करना बहुत मुश्किल हो जाता है कि अगर एक सबवोल्यूम को हटा दिया जाता है तो वास्तव में कितनी जगह खाली हो जाएगी क्योंकि आपको उन सभी अंतरिक्षों के लिए ध्यान देना होगा जो अन्य सबवोल्यूम के साथ साझा किए गए हैं।