क्या ext4lazyinit की प्रगति को मापने का एक तरीका है?


17

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

एक ही तरीका है आप जानते हैं या कर सकते हैं उपाय निगरानी की जाती है कि ext4lazyinitमें iotop। क्या प्रतिशत के रूप में इसकी प्रगति पाने का एक तरीका है?


2
इस पैच चर्चा की जाँच करें
Krzysztof Stasiak

क्या आपने बार [1] या पीवी [२] उपयोगिताओं की कोशिश की? [१]: [ archlinux.org/packages/community/any/bar/] [२]: [ archlinux.org/packages/community/x86_64/pv/]
mattia.b89

@ Mattia.b89 ext4lazyinit एक यूजरस्पेस प्रोग्राम नहीं है, यह एक पृष्ठभूमि कर्नेल प्रक्रिया है। जानकारी के लिए इस बारे में शिरीष के मूल प्रश्न की ओर इशारा करते हुए प्रश्न में लिंक की जाँच करें।
ऑस्टिन हेमेलर्गरन

इसके अलावा, मैं पैच चर्चा में टेड टी के एओ के आकलन से सहमत होना चाहूंगा कि @KrzysztofStasiak जुड़ा हुआ है, अगर आप ऐसी स्थिति में हैं, जहां आपको इसे खत्म करने के लिए इंतजार करना होगा, तो आपको शायद इसका उपयोग नहीं करना चाहिए।
ऑस्टिन हेमेलर्गरन

@ KrzysztofStasiak क्या आप इसे एक उत्तर बना सकते हैं, मुझे लगता है कि यह निकटतम है जो मुझे उत्तर में मिल सकता है, एफडब्ल्यूआईडब्ल्यू टेड ट्सो एक्सट्रीम का पर्याय है * इसलिए उनकी मान्यताएं जो भी हैं, वे महत्वपूर्ण हैं।
शिरीष

जवाबों:


1

इस पैच चर्चा की जाँच करें । आप आलसी के बिना सिस्टम को इनिशियलाइज़ कर सकते हैं, लेकिन इसे माप नहीं सकते। यदि आपके पास प्रतीक्षा करने का समय है, तो बस प्रतीक्षा करें। आप चर्चा से पैच की कोशिश कर सकते हैं, लेकिन पैचवर्क के अनुसार यह "अस्वीकार" राज्य है।


1

मुझे लगता है कि ext4lazyinit की प्रगति का अनुमान लगाने का एक तरीका मिल गया है।

TL; DR: नीचे स्क्रिप्ट देखें।

यह विधि मानती है कि विभाजन को माउंट किए जाने के बाद से डिस्क को कभी भी डिस्कनेक्ट नहीं किया गया है (और न ही सिस्टम को रिबूट किया गया है), और यह कि आपने विभाजन पर ठीक उतना ही डेटा लिखा है जितना उस पर उपयोग में है (इसलिए कोई डिलीट नहीं) या फ़ाइलों का संशोधन)।

चरण 1 : df में दिखाए गए 1K- ब्लॉक की संख्या के लिए fdisk (kiB में परिवर्तित) में विभाजन आकार की तुलना करें। प्राप्त करने के लिए (इनकोड तालिका का लगभग आकार) पाने के लिए (kiB में विभाजन आकार) से घटाएँ (1K- ब्लॉक की संख्या)।

संपादित करें: उदाहरण, fdisk:

Sector size (logical/physical): 512 bytes / 4096 bytes
(...omitted...)
Device     Start         End     Sectors  Size Type
/dev/sdd1   2048 11720978398 11720976351  5.5T Linux filesystem

df:

Filesystem              1K-blocks       Used  Available Use% Mounted on
/dev/mapper/workbackup 5813233164 1217095176 4596121604  21% /mnt/backup_work

11720976351 सेक्टर * 512 बाइट्स / सेक्टर / 1024 = 5860488175.5 kiB (लगभग 5.5 TiB, जैसे fdisk कहते हैं)। अनुमानित डायोड टेबल के आकार के लिए माइनस df का 5813233164 बराबर 47255011.5 kiB (कुछ 45 GiB) है।

चरण 2 : प्राप्त करें (विभाजन के लिए लिखा गया कुल kiB):

awk '{ print $3"\t"$10 }' /proc/diskstats

अपने विभाजन के लिए सही लाइन चुनें और इसे kiB में बदलें।

संपादित करें: उदाहरण:

sdb     260040
sdb1    260040
sdd     2530109116
sdd1    2530108940

मेरे मामले में sdd1 का उपयोग करते हुए, कुल kiB लिखा = 2530108940 सेक्टर * 512 बाइट्स / सेक्टर / 1024 = 1265054470 kiB (लगभग 1.2 TiB)।

चरण 3 : केवल तभी आवश्यक है जब आपने पहले से ही फाइल सिस्टम के लिए कोई डेटा लिखा हो। प्राप्त करने के लिए (लगभग kiB से विभाजन के लिए) कुल मिलाकर (1K- ब्लॉक उपयोग किए गए, df में दिखाया गया है) (लगभग kiB इनकोड तालिका में लिखा है)।

संपादित करें: उदाहरण: लगभग kiB इनोड टेबल = 1265054470 (चरण 2 से) लिखा हुआ - 1217095176 (चरण 1 में df आउटपुट देखें) = 47959294 kiB (45.7 GiB)

चरण 4 : (kiB में इनोड तालिका का अनुमानित आकार) द्वारा विभाजित (लगभग kiB इनोड तालिका) और प्रतिशत के रूप में प्रगति प्राप्त करने के लिए 100 से गुणा करें।

संपादित करें: उदाहरण: लगभग प्रगति = 47959294 / 47255011.5 * 100% = 101.5%

लिपि

या यह लिखने के लिए कि एक आंशिक स्क्रिप्ट के रूप में (जहां मैं सुरक्षा कारणों से fdisk पर कॉल करने से इनकार करता हूं):

let sectorsize=$(cat /sys/block/sda/queue/hw_sector_size)
let partsize=$2*$sectorsize/1024
let fssize=$(df -- "$3" | tail -n -1 | awk '{print $2}')
let approxinodetablesize=$partsize-$fssize
let tkw=$(awk "/$1/"' {print $10}' /proc/diskstats | head -n 1)*$sectorsize/1024
let used=$(df -- "$3" | tail -n -1 | awk '{print $3}')
let tkw_inodetable=$tkw-$used
echo "Approximate progress: $(bc -l <<< "$tkw_inodetable*100.0/$approxinodetablesize") %"

$ 1 = "विभाजन का नाम" (उदाहरण के लिए sdd1), $ 2 = "विभाजन के अनुसार fdisk के अनुसार सेक्टर", $ 3 = "माउंट पॉइंट विदाउट ट्रेलिंग स्लैश"

परीक्षण के परिणाम

मैंने केवल एक बार अपनी विधि का परीक्षण किया है। सेट अप:

  • 6 टीबी का विभाजन

  • क्रिप्टसएटअप का उपयोग कर एन्क्रिप्शन

  • फ़ाइल सिस्टम डिफ़ॉल्ट पैरामीटर को छोड़कर बनाया गया है -m 0

  • Ext4lazyinit के पूर्ण होने से पहले विभाजन को लिखी गई फ़ाइलों की 279 GiB।

परिणाम : पूरा होने के समय 99.7% का पठन :-)

EDIT: समान डिस्क, डेटा के लगभग एक और TiB लिखने के बाद, अब 101.5% का अनुमान लगाता है। पर्याप्त उपयोगी होने के लिए, मुझे लगता है।


यह एक उदाहरण दिया गया होता है, इसलिए हमें एक विचार मिलता है कि हम वास्तव में क्या देख रहे हैं।
शिरीष

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