VirtualBox शुरू करने के बाद, कंप्यूटर सुस्त हो गया और फिर OOM के कारण पूरी तरह से लटका दिया गया। आमतौर पर, ओओएम को कुछ जगह खाली करने के लिए हत्या की प्रक्रिया शुरू करनी चाहिए, लेकिन ऐसा नहीं हुआ (यह दूसरी बार जब मैंने अनुभव किया)।
मैं किसी पाठ संपादक में कुछ न सहेजे गए महत्वपूर्ण काम था, इसलिए मैं प्रणाली रैम में वापस का उपयोग कर मौजूदा कंसोल में सभी प्रक्रियाओं की हत्या के बाद यह पता लगाने के लिए उम्मीद कर रही थी SysRq+ K। विचाराधीन मशीन 8 GiB RAM वाला लैपटॉप है जिसमें लक्ष्य डिस्क के रूप में SSD के साथ लिनक्स x86_64 3.7.5 है।
मेरा पहला प्रयास था dd if=/dev/mem of=memory
, लेकिन 1MiB डेटा पढ़ने के बाद यह विफल रहा। अगला, मैंने कोशिश की dd if=/dev/fmem of=memory bs=1M
, लेकिन यह 3010461696 बाइट्स (2871 MiB) पढ़ने के बाद बंद हो गया। देखने के बाद /proc/mtrr
(नीचे दिखाया गया है), मैंने जोड़ने की कोशिश करने का फैसला किया skip=4096
। यह अंततः धीमा हो गया, केवल 3 MiB / सेकंड की गति से पढ़ना, इसलिए मैंने इसे बाधित कर दिया (5.8 GiB की एक फ़ाइल उपज)। (फ़ाइल के कम से कम अंतिम 100 MiB में FF
s है)
reg01: base=0x000000000 ( 0MB), size= 2048MB, count=1: write-back
reg02: base=0x080000000 ( 2048MB), size= 1024MB, count=1: write-back
reg03: base=0x100000000 ( 4096MB), size= 4096MB, count=1: write-back
reg04: base=0x200000000 ( 8192MB), size= 1024MB, count=1: write-back
reg05: base=0x23c000000 ( 9152MB), size= 64MB, count=1: uncachable
reg06: base=0x0b4000000 ( 2880MB), size= 64MB, count=1: uncachable
reg07: base=0x0b8000000 ( 2944MB), size= 128MB, count=1: uncachable
मुझे पाठ संपादक में कुछ घंटों के लिए खुला डेटा नहीं मिला, इसलिए मुझे विश्वास है कि मैंने डंप करते समय कुछ मेमोरी को छोड़ दिया है। तो, मेरा लक्ष्य (उपयोगकर्ताओं के कार्यक्रमों से डेटा की वसूली) को देखते हुए, सिस्टम मेमोरी को फ़ाइल में डंप करने का सबसे कुशल तरीका क्या है? ऐसे कुछ बिंदु हैं जो इस तरह के डंप करते समय विचार किए जाने चाहिए?
CONFIG_DEVKMEM
अक्षम है, स्रोत कोड को देखते हुए यह अप्रतिबंधित पहुंच की अनुमति देता है, लेकिन मुझे अभी भी यकीन नहीं है कि यह ऐसा करने का सबसे अच्छा तरीका है (IO मेम एक्सेस?)