রেফারেন্সিং প্রক্রিয়াগুলি আরম্ভ না করে মুছে ফেলা ফাইলগুলিতে আমি কীভাবে মুক্ত স্থান পুনরুদ্ধার করব?


12

যখন কোনও সার্ভারে বড় ফাইলগুলি মোছা হয়, তখনও ফাইলগুলি প্রক্রিয়াগুলির দ্বারা উল্লেখ করা যেতে পারে, সুতরাং ফাইল সিস্টেমে আরও ফাঁকা জায়গা নেই।

আমি lsof ব্যবহার করার চেষ্টা করেছি , তবে মনে হয় এটি মুছে ফেলা ফাইলগুলি তালিকাভুক্ত করে নি। fuser -cআরও ভাল কাজ করেছে, তবে প্রতিটি প্রক্রিয়ার জন্য এটি পরীক্ষা করার জন্য প্রক্রিয়াগুলির তালিকা খুব দীর্ঘ is বিশেষত যেহেতু প্রতিটি প্রক্রিয়া একটি ওরাকল প্রক্রিয়া।

bash-3.2# fuser -c /var
/var:      105o   29999o   20444c    3528c   27258o    7715o    3864o    3862o    2494o   18205o   17450co   17445co   14912co   14824co   14818co   14816o   14814o    8532c    8530c    7633com    7118o    6958o    6790c    6784co    6734o    6693o    6689o    6684o    6675o    6635o    6594c    6548o    6547o    6546o    6545o    6544o    6543o    6542o    6541o    6540o    6537o    6535o    6456o    6128co    6113o     335o     245co     229o     161o       8o
bash-3.2# du -hs /proc
 139T   /proc

এটি কখনও কখনও ঘটে থাকে যে কোনও ফাইল কোনও অ্যাপ্লিকেশন বা ব্যবহারকারীর দ্বারা মুছে ফেলা হয়, যেমন একটি লগফাইলে এবং এই ফাইলটি এখনও পুনরায় আরম্ভ করা যায় না এমন একটি প্রক্রিয়া দ্বারা রেফারেন্স করা হয়।

এই মোছা ফাইলটির রেফারেন্স রয়েছে এমন প্রক্রিয়াটি পুনরায় আরম্ভ না করে মুছে ফেলা ফাইলগুলিতে ডিস্কের জায়গাগুলি দাবি করার জন্য কী কী পণ্য পদ্ধতি রয়েছে?


রেফারেন্সের জন্য .. একটি খোলা ফাইল মুছে ফেলার আরও ভাল উপায় হ'ল ফাইলটিতে অনুলিপি / দেব / নাল করাcp /dev/null file
মাইক

@ মাইক cp /dev/nullহ'ল একটি নাল কমান্ড cpযার অনুলিপি করার কিছুই নেই, একটি সাধারণ পুনঃনির্দেশ কঠোর সমতুল্য :>fileবা এমনকি>file
jlliagre

উত্তর:


12
find /proc/*/fd -ls 2> /dev/null | grep '(deleted)'

সমস্ত খোলা ফাইল বর্ণনাকারী সন্ধান করুন।

গ্রেপ মোছা হয়েছে।

স্টাডেরার থেকে / দেব / নাল ull

আউটপুট:

160448715    0 lrwx------   1 user      user            64 Nov 29 15:34 /proc/28680/fd/113 -> /tmp/vteT3FWPX\ (deleted)

অথবা আপনি awk ব্যবহার করতে পারেন

/ proc / * / fd -ls 2> / দেব / নাল | সন্ধান করুন awk '/ মুছে ফেলা / {মুদ্রণ $ 11}';

awk আউটপুট (বাশ উবুন্টু 12.04 এ পরীক্ষিত):

/proc/28680/fd/113

সমস্ত মুছে ফেলা ফাইলগুলি সন্ধান করুন এবং কেটে দিন (ব্যাশ উবুন্টু 12.04 এ পরীক্ষিত):

(আপনি যদি জানেন না তবে এটি করবেন না)

find /proc/*/fd -ls 2> /dev/null | awk '/deleted/ {print $11}' | xargs -p -n 1 truncate -s 0

-p প্রম্পট সামনে চালানো আরোপ করা

ম্যানুয়াল ট্র্যাঙ্কেটের আরও ভাল উপায়

ম্যানুয়াল কাটা:

: > /proc/28680/fd/113

বা:

> /proc/28680/fd/113

বা:

truncate -s 0 /proc/28680/fd/113

উপভোগ করুন;)


+1, তবে এই কমান্ডগুলি চালানোর জন্য
আমারও সুডোর

6

এখানে একটি সাধারণ উদাহরণ সহ less:

ধরা যাক আমাদের একটি ফাইল আছে my10MBfile:

$ dd if=/dev/zero of=/tmp/my10MBfile bs=1M count=10
10+0 enregistrements lus
10+0 enregistrements écrits
10485760 octets (10 MB) copiés, 0,0454491 s, 231 MB/s

$ ls -l /tmp/my10MBfile
-rw-r--r-- 1 max max 10485760 avril 23 22:49 /tmp/my10MBfile

$ df -m /tmp
/dev/disk/by-uuid/6835b2fd-971d-420c-ba18-3c729ec2e8a0     14637  9225       4662  67% /

এখন আমি ফাইলটি খুলি less(হ্যাঁ, এটি একটি বাইনারি ফাইল ... কিছু মনে করবেন না)

$ less /tmp/my10MBfile &

$ lsof -p $(pidof less) | grep 10MBfile
less    29351  max    4r   REG    8,3 10485760 521464 /tmp/my10MBfile

তারপরে আমি সেই ফাইলটি সরিয়েছি

$ rm /tmp/my10MBfile

$ lsof -p $(pidof less) | grep 10MBfile
less    29351  max    4r   REG    8,3 10485760 521464 /tmp/my10MBfile (deleted)

$ df -m /tmp
/dev/disk/by-uuid/6835b2fd-971d-420c-ba18-3c729ec2e8a0     14637  9225       4662  67% /

এটি এখনও রয়েছে, তবে মুছে ফেলা হয়েছে। Lsof আউটপুট এর চতুর্থ কলাম দেখুন: ফাইল বিবরণী 4 নম্বর পড়ার জন্য উন্মুক্ত (4r)

চলুন জিডিবি চালাও!

$ gdb -p $(pidof less)

GNU gdb (GDB) 7.4.1-debian
....
Attaching to process 29351
....

(gdb) p close(4)
$1 = 0
(gdb) q

এটাই!

$ df -m /tmp
/dev/disk/by-uuid/6835b2fd-971d-420c-ba18-3c729ec2e8a0     14637  9215       4672  67% /

আমাদের 10 এমবি ফিরে স্বাগত :)

$ ls /proc/29351/fd
0  1  2  3

$ ps 29351
29351 pts/0    S+     0:00 less /tmp/my10MBfile

প্রক্রিয়া এখনও চলছে।


2
ঠিক আছে, তবে আর কত দিন? তাদের লগ ফাইলে লিখতে না পারলে অনেকগুলি প্রক্রিয়া কেবল প্রস্থান হয়।
দীর্ঘায়ু

লোগ্রোটেট আপনার জন্য এটি করতে পারে না?
maxxvw

লোগ্রোটেট প্রক্রিয়াটি লগ ফাইলটি বন্ধ করতে এবং একটি নতুন খোলার জন্য একটি সংকেত প্রেরণ করে।
দীর্ঘায়ু

2

এই কমান্ডটি সোলারিস সিস্টেমে মুছে ফেলা সমস্ত ফাইল প্রদর্শন করবে:

find /proc/*/fd -type f -links 0

আপনি নিশ্চিত যে আপনি এই কমান্ডটি দিয়ে চান তা কাটাতে পারেন:

:> /proc/p/fd/x

পি সহ প্রসেস আইডি এবং এক্স ডেস্ক্রিপ্টর প্রথম কমান্ড দ্বারা ফিরে আসে।

কিছু প্রোগ্রামের মাধ্যমে যদি রিপোর্ট করা lsআকারটি কিছুক্ষণ পরে কাটা কাটার আগে আকারে পুনরুদ্ধার করা হয় তবে দুশ্চিন্তা করবেন না , ফাইলটি এখন অপ্রতিরোধী হওয়ায় ডিস্কে ব্যবহৃত প্রকৃত আকারটি আরও ছোট হবে।


0

আপনি /proc/<pid>/fdডিরেক্টরিতে যাওয়ার চেষ্টা করতে পারেন এবং সংশ্লিষ্ট ফাইল বর্ণনাকারীকে ছাঁটাই করতে পারেন । পিডের ফাইল মোছার জন্য fd = 3 পয়েন্ট বলি == 123:

# echo "" >! /proc/123/fd/3

এই পদ্ধতিটি কোথায় কাজ করে আপনার উদাহরণ রয়েছে? সেখান থেকে এফডি পরিবর্তনের কোনও উপায় খুঁজে পাওয়া যায় না
ম্যাক্সএক্সডাব্লু

হ্যাঁ, এটি কাজ করে তবে প্রক্রিয়াটির পিড কীভাবে খুঁজে পাবে?
উজ্জ্বান

-2

এই সমাধানগুলির কোনওোটাই আমার পক্ষে কাজ করেনি। ব্লিচবিটকে মূল হিসাবে ব্যবহার করার পরেই আমি মুছে ফেলা ফাইলগুলির সাথে যুক্ত স্থানটি সঠিকভাবে মুক্ত করতে সক্ষম হয়েছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.