एक btrfs सबवोल्यूम को हटाकर कितना स्थान मुक्त किया जाएगा?


11

क्या कोई गणना करने का कोई तरीका है कि अगर मैं एक Btrfs डिस्क पर (वास्तव में उन्हें हटाए बिना) एक (या कई) सबवूल्म्स को हटाऊंगा तो मैं कितना स्थान खाली करूंगा? मुझे पता है कि "वर्तमान में कोई कोड नहीं है जो आपके लिए गणना करेगा" , लेकिन आप इसे कैसे करेंगे?

मुझे यह भी आश्चर्य है कि वे क्यों कह रहे हैं कि यह इतना धीमा होगा? दोनों वास्तव में एक तोड़फोड़ को हटाते हैं और मुक्त स्थान के बारे में पूछते हुए मेरे अनुभव में बहुत तेज है, एक ही चीज को काल्पनिक रूप से इतना धीमा क्यों किया जाएगा?


2
मुझे आशा है कि आपको पता है, कि btrfs.wiki.kernel.org/index.php/Btrfs_mailing_list , btrfs (या किसी अन्य कर्नेल घटक) के आंतरिक कामकाज के बारे में सवाल पूछने के लिए एक बेहतर जगह हो सकती है। अगर आपको जवाब मिल जाता है तो कृपया यहाँ भी पोस्ट करें। मैं खुद जवाब को लेकर उत्सुक हूं।
एडम रिक्ज़ोस्की

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

जवाबों:


3

आपको 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 (सामान्य रूप से) में एक स्नैपशॉट बनाते हैं, तो नए बनाए गए सबवोल्यूम में सभी वास्तविक डेटा जिसमें स्नैपशॉट होता है, स्नैपशॉट के स्रोत के साथ साझा किया जाता है। केवल जब कोई फ़ाइल स्रोत में बदल दी जाती है या बदल दी जाती है, तो यह अलग-अलग सामग्री (विस्तार) की ओर इशारा करती है। इससे यह आकलन करना बहुत मुश्किल हो जाता है कि अगर एक सबवोल्यूम को हटा दिया जाता है तो वास्तव में कितनी जगह खाली हो जाएगी क्योंकि आपको उन सभी अंतरिक्षों के लिए ध्यान देना होगा जो अन्य सबवोल्यूम के साथ साझा किए गए हैं।

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