क्या मैं एक 'सिंक' ऑपरेशन की प्रगति देख सकता हूँ?


103

मैंने async के साथ एक लिनक्स सिस्टम पर मुहिम शुरू की USB डिस्क के लिए एक बड़ी फ़ाइल की प्रतिलिपि बनाई है। यह अपेक्षाकृत तेज़ी से एक कमांड प्रॉम्प्ट पर लौटता है, लेकिन जब मैं टाइप करता हूं sync, तो निश्चित रूप से, सभी को डिस्क पर जाना पड़ता है, और इसमें लंबा समय लगता है।

मैं समझता हूं कि यह धीमा होने जा रहा है, लेकिन क्या कहीं ऐसा है जहां मैं एक काउंटर को शून्य पर नीचे जाने के लिए देख सकता हूं? देखने buffersमें topमदद नहीं करता है।


अधिक जानकारी के लिए देखें: lwn.net/Articles/572911
lanoxx

जवाबों:


162

देखते ही देखते समय के साथ संख्या कम होती /proc/meminfoजाएगी Dirtyक्योंकि सभी डेटा बाहर हो जाते हैं; इसमें से कुछ में भी फैल सकता है Writeback। यह सभी उपकरणों के खिलाफ एक सारांश होगा, लेकिन उन मामलों में जहां सिस्टम पर एक डिवाइस बाकी की तुलना में बहुत धीमी है, आप आमतौर पर उस कतार में जहां सब कुछ उससे संबंधित है, समाप्त हो जाएगा। Dirtyजब आप शुरू करेंगे तो संभवतः आपको बड़ी संख्या मिलेगी और syncयह उसी समय के करीब खत्म हो जाएगा जब तक यह 0. एक इंटरेक्टिव प्रदर्शन प्राप्त करने के लिए प्रयास करें:

watch -d grep -e Dirty: -e Writeback: /proc/meminfo

नियमित डिस्क के साथ मैं सामान्य रूप से अनदेखा कर सकता हूं Writeback, लेकिन मुझे यकीन नहीं है कि यह यूएसबी ट्रांसफर पथ में अधिक बार शामिल है। यदि यह केवल स्पष्ट प्रवृत्ति के बिना ऊपर और नीचे उछलता है, तो आप संभवतः Dirtyसंख्या को देख सकते हैं ।


4
मेरे सिस्टम पर, राइटबैक अंत तक सही पास होने तक कुछ हीगों पर रहता है, जब डर्टी खाली होती है, जिस समय वह भी जाने लगती है।
Mattdm

24

/sys/block/<device>/statजब आप सिंक कर रहे हों, तब आप उपयुक्त डिवाइस के लिए फ़ाइल को देख सकते हैं। 9 वें कॉलम डिवाइस पर इन-फ्लाइट अनुरोधों की संख्या को इंगित करेगा, जो सिंक किए जाने पर शून्य से नीचे जाना चाहिए।
एक तरह से कई बाइट्स का अनुवाद करने का तरीका नहीं पता है, लेकिन यह आपको एक मोटा विचार देना चाहिए कि "सामान" अभी भी लंबित है।

कुछ और जानकारी के लिए कर्नेल डॉक्यूमेंट में stat.txt फ़ाइल देखें । ( inflightमेरे सिस्टम पर उस निर्देशिका में एक फ़ाइल भी है जो ऐसा लगता है कि इसमें इन-फ्लाइट अनुरोधों को पढ़ना और लिखना शामिल हो सकता है, लेकिन मुझे उसके लिए डॉक्स नहीं मिल सकते हैं।)


3
बस आसान संदर्भ के लिए, एक विचार को दूसरे उत्तर से जोड़कर:watch -t -n1 'awk "{ print \$9 }" /sys/block/sdd/stat'
1

4
मेरे यूएसबी स्टिक के लिए, यह कॉपी ऑपरेशन की अवधि के दौरान और उसके syncबाद लगभग 150 होवर करता है । यह 0 पर जाता है, लेकिन केवल बहुत अंत में। प्रगति को अधीरता से देखने के लिए अन्य उत्तर को अधिक उपयोगी बनाता है।
mattdm

1
(हालांकि सिद्धांत रूप में मुझे
सिस्टमविहीन

क्या बाइट्स की राशि प्राप्त करने का एक तरीका है (सिंक किया गया, फ्लाइट में फ्लश नहीं किया गया) या ड्राइव करने के लिए लिखा जा सकता है? यदि मेरे पास ड्राइव के लिए एक राइट-कैश आकार है तो मैं duउस वास्तविक डेटा की गणना करने के लिए उपयोग कर सकता हूं जो ड्राइव पर समन्वयित है।
unfa

10

ग्रेग के उत्तर का उपयोग करके, आप syncस्मृति में डर्टी ब्लॉक की स्थिति को प्रदर्शित करते हुए बस पृष्ठभूमि में चला सकते हैं ।

इसे प्राप्त करने के लिए, बस इस कमांड को चलाएं:

sync & watch -n 1 grep -e Dirty: /proc/meminfo

यह फ्रंट में syncनिष्पादित करते समय पृष्ठभूमि में कॉल करेगा watch। जब syncकमांड समाप्त हो जाएगा (जब डर्टी ब्लॉक का आकार 0 तक पहुंच गया है), तो आपके पास एक आउटपुट होगा जो इस तरह दिखता है:

1]  + 27260 done        sync

इसका मतलब है कि कमांड समाप्त हो गया है और आप watchकमांड को Ctrl+ से मार सकते हैं C


BTW: मुझे पता है कि यह एक पुराना प्रश्न है, लेकिन यह पहला ऐसा है जो Google पर पॉप-अप होता है जब कोई इसे ढूंढता है, और मैं उस समाधान को जोड़ना चाहता था जो मुझे मिला।
jflemieux

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