जांच डिस्क आगे लिखती है यह जानने के लिए कि कौन सी प्रक्रिया मेरे एसएसडी को लिखती है


11

मैं अपने नए SSD सिस्टम ड्राइव में डिस्क को कम से कम लिखने की कोशिश करता हूं। मैं iostat उत्पादन के साथ फंस गया हूँ:

~ > iostat -d 10 /dev/sdb
Linux 2.6.32-44-generic (Pluto)     13.11.2012  _i686_  (2 CPU)

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               8,60       212,67       119,45   21010156   11800488

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               3,00         0,00        40,00          0        400

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               1,70         0,00        18,40          0        184

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               1,20         0,00        28,80          0        288

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               2,20         0,00        32,80          0        328

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               1,20         0,00        23,20          0        232

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               3,40        19,20        42,40        192        424

जैसा कि मैं देख रहा हूँ sdb को लिखते हैं। मैं कैसे हल कर सकता हूं जो प्रक्रिया लिखती है?

मैं iotop के बारे में जानता हूं , लेकिन यह नहीं दिखाता है कि किस फाइलसिस्टम को एक्सेस किया जा रहा है।

जवाबों:


7

निम्न कर्नेल के वर्चुअल मेमोरी ब्लॉक डंप तंत्र का उपयोग करता है। पहले पर्ल स्क्रिप्ट प्राप्त करें:

wget https://raw.githubusercontent.com/true/aspersa-mirror/master/iodump

फिर ब्लॉक डंप चालू करें:

echo 1 | sudo tee /proc/sys/vm/block_dump

और निम्नलिखित चलाएँ:

while true; do sleep 1; sudo dmesg -c; done  | perl iodump

..और Controlcखत्म करने के लिए दबाएं , आपको निम्न जैसा कुछ दिखाई देगा:

^C# Caught SIGINT.
TASK                   PID      TOTAL       READ      WRITE      DIRTY DEVICES
jbd2/sda3-8            620         40          0         40          0 sda3
jbd2/sda1-8            323         21          0         21          0 sda1
#1                    4746         11          0         11          0 sda3
flush-8:0             2759          7          0          7          0 sda1, sda3
command-not-fou       9703          4          4          0          0 sda1
mpegaudioparse8       8167          2          2          0          0 sda3
bash                  9704          1          1          0          0 sda1
bash                  9489          1          0          1          0 sda3
mount.ecryptfs_       9698          1          1          0          0 sda1

और समाप्त होने पर ब्लॉक डंप बंद करें:

echo 0 | sudo tee /proc/sys/vm/block_dump

इस उपयोगी जानकारी के लिए http://www.xaprb.com/blog/2009/08/23/how-to-find-per-process-io-statistics-on-linux/ का शुक्रिया ।


10

आप कम से कम iotop के साथ शुरू कर सकते हैं। यह आपको नहीं बताएगा कि कौन सी फाइलसिस्टम लिखी जा रही है, लेकिन यह आपको कुछ प्रक्रियाओं की जांच करने के लिए देगी।

sudo apt-get install iotop
sudo iotop

यह तात्कालिक डिस्क को पढ़ता है और लिखता है और कमांड पढ़ने या लिखने का नाम दिखाता है।

यदि आप एक ऐसी प्रक्रिया को पकड़ने की कोशिश कर रहे हैं जो बार-बार लिखती है, तो आप --accumulateविकल्प का उपयोग कर सकते हैं या आउटपुट को फ़ाइल में लॉग कर सकते हैं :

sudo -i
iotop --batch > iotop_log_file

जाहिर है कि लॉग फ़ाइल का लेखन परिणामों में दिखाई देगा, लेकिन आपको डिस्क पर लिखने की अन्य प्रक्रियाओं के लिए भी सक्षम होना चाहिए।

इस बिंदु तक आपको कुछ उम्मीदवार संदिग्ध प्रक्रियाओं को खोजने में सक्षम होना चाहिए। आईपोट में बायां स्तंभ पिड को दर्शाता है। इसके बाद, पता करें कि कौन सी फाइल डिस्क्रिप्टर प्रक्रिया को लिख रही है:

sudo -i
strace -p <pid> 2>&1 | grep write

प्रक्रिया लिखते समय आपको इस तरह आउटपुट देखना चाहिए:

write(1, "\n", 1)                       = 1
write(4, "test\n", 5)                   = 5
write(1, ">>> ", 4)                     = 4

लिखने का पहला तर्क फ़ाइल विवरणक है। हम शायद 2 से अधिक मूल्यों की तलाश कर रहे हैं, क्योंकि 0, 1 और 2 सिर्फ स्टड, स्टडआउट और स्टडर हैं। फ़ाइल डिस्क्रिप्टर 4 दिलचस्प लग रहा है।

अब आप यह जान सकते हैं कि फाइल डिस्क्रिप्टर किस फाइल के साथ है:

lsof -p <pid>

जो उत्पादन की तरह उपज चाहिए:

...
python  23908  rob  mem    REG    8,1    26258 8392656 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
python  23908  rob    0u   CHR  136,5      0t0       8 /dev/pts/5
python  23908  rob    1u   CHR  136,5      0t0       8 /dev/pts/5
python  23908  rob    2u   CHR  136,5      0t0       8 /dev/pts/5
python  23908  rob    3w   REG   0,25      909 9049082 /home/rob/testfile
python  23908  rob    4w   REG   0,25       20 9049087 /home/rob/another_test_file

4 वें कॉलम को देखें। 4wइसका मतलब है कि फ़ाइल डिस्क्रिप्टर 4 लिखने के लिए खुला है और फ़ाइल है another_test_file

यह एक प्रक्रिया को खोलने, लिखने और फिर एक फ़ाइल को बंद करने के लिए संभव है, जिस स्थिति में lsof इसे नहीं दिखाएगा। आप इसे इसके साथ पकड़ सकते हैं:

strace -p <pid> 2>&1 | grep open

मैं के बारे में पता नहीं था --accumulte यह वास्तव में अच्छा फीचर है! उसके लिए बहुत अधिक धन्यवाद!!! iotop --batch आउटपुट रीडायरेक्टिंग UnicodeEncodeError के साथ विफल हो जाती है: 'ascii' कोडेक वर्णों को 92-99 में व्यवस्थित नहीं कर सकता है: फ़ाइल में क्रमिक (128) श्रेणी में नहीं है "/usr/lib/pibodules/python2.6/iotop/ui। py ”, लाइन 405, रिफ्रेश_डिसप्ले में
zuba

मुझे खुशी है कि मेरा जवाब कुछ काम का था। पुनर्निर्देशन मेरे लिए काम करता है; मुझे यकीन नहीं है कि मैं समझा सकता हूं।
रॉब फिशर

ठीक है, मैं एक बिट के आसपास खेला और पाया कि मैं SSD लेखन के लिए प्रक्रियाओं को पकड़ने के लिए कम से कम पर्याप्त जासूसी का काम करने के लिए lsof और स्ट्रेस का उपयोग कर सकता हूं। उम्मीद है कि यह अंततः पूछे गए सवाल का जवाब देता है, हालांकि ऐसा लगता है कि कॉलिन इयान किंग का जवाब आसान है!
रोब फिशर

1
देर से प्रतिक्रिया के लिए क्षमा करें, मेरे पास तब तक कहने के लिए कुछ नहीं था जब तक मैं स्ट्रेस के साथ नहीं खेला। एक और चतुर दृष्टिकोण के लिए धन्यवाद, मैंने मतदान किया। शेल स्क्रिप्ट लिखने में बहुत कम अनुभव होने के कारण, इसे लागू करने के लिए स्क्रिप्ट लिखना मुझे काफी कठिन लगा। यही कारण है कि मैंने एक और उपाय चुना है। अपना ज्ञान साझा करने के लिए आपका धन्यवाद!
19

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