मैं कैसे / var / log निर्देशिका को स्थानांतरित कर सकता हूं


16

हमारे उत्पादन सर्वर पर रूट माउंट बिंदु के लिए एक छोटी सी ड्राइव है /, /var/logबहुत अधिक जगह ले रही है और मुझे कुछ फ़ाइलों को मैन्युअल रूप से हटाना होगा। मैं कैसे /var/log/कहने के लिए स्थानांतरित करने के /home/logबिना कह सकते हैं ?

यहाँ वह बात है जो मैंने सोचा था:

$ mkdir /home/log
$ rsync -a /var/log /home/log
$ mount --bind /home/log /var/log
$ /etc/init.d/rsyslof restart

लेकिन मुझे पता है कि कुछ सेवाएं फ़ाइल डिस्क्रिप्टर का उपयोग करती हैं, इसलिए वे उपयोग करना जारी रखेंगे /var/logया इनकोड करेंगे।


AskUbuntu पर अधिक मूलतः एक ही प्रश्न के लिए एक विस्तृत जवाब में नहीं है askubuntu.com/a/346579/422224
Eborbob

यह एक उत्तर नहीं बल्कि एक सुझाव है। यदि संभव हो तो वास्तविक समय के साथ फ़ाइल सिस्टम लॉग के लिए उपयोग करें, जैसे btrfs। जब आप इस विभाजन को माउंट करते हैं, तो माउंट विकल्प "सेक = लजो" या "सेक = ज़्लिब" का उपयोग करें। lzo बेहतर प्रदर्शन, zlib बेहतर संपीड़न प्रदान करता है।
मासिमो

जवाबों:


26

उचित डिजाइन

मुझे लगता है कि आप सवाल (उपयोग lvextend && ext2online) में केवल फ़ाइल सिस्टम का विस्तार करने में असमर्थ हैं , क्योंकि आप LVM का उपयोग नहीं करते हैं या गलत फाइल सिस्टम का उपयोग नहीं करते हैं।

आपका दृष्टिकोण

यदि आपने प्रस्तावित किया हो तो यदि आप डेमों को SITEUP (किल -1 पीआईडी) के साथ संकेत देते हैं तो काम कर सकते हैं। जाहिर है कि आपको बाद में "माउंट-बाइ बाइंड / / कहीं" की आवश्यकता होगी और जो माउंटेड / वेर / लॉग के नीचे छोड़ दिया गया है उसे साफ करें। लेकिन यह मेरे लिए एक बुरी गंध है, खासकर उत्पादन के लिए।

डाउनटाइम से बचें, एक साफ परिणाम (लेकिन करने के लिए जटिल)

"माउंट-बाइ बाइंड" विचार के बारे में भूल जाएं, एक नया एलवी / विभाजन बनाएं, लेकिन इसे अभी तक माउंट न करें।

lsof | grep /var/log             # lists open files in /var/log

प्रत्येक डेमॉन के लिए जो कोई भी खुली फाइल है (मैं कम से कम syslog, inetd, sshd) की उम्मीद करूंगा:

  • लॉग इन / var / लॉग करने के लिए डेमॉन को फिर से कॉन्फ़िगर करें
  • डेमन को ताज़ा करें ( kill -1 या /etc/init.d/script reload)
  • इसकी पुष्टि करें lsof | grep /var/log कि डेमन ने अपनी फाइलें बंद कर दी हैं

माउंट / वर / लॉग। पुराने कॉन्फ़िगरेशन को पुनर्स्थापित करें, फिर से लोड करें / फिर से लोड करें।

आसान तरीका (डाउनटाइम)

एक नया LV / विभाजन बनाएँ और इसे / var / / var / log पर ठीक से माउंट करें। आसान तरीका यह है कि सर्वर को मेंटेनेंस मोड (सिंगल-यूजर मोड) में ले जाया जाए, और ऑपरेशन के लिए वास्तविक कंसोल (एसश नहीं) का उपयोग किया जाए।


8

बाकी सभी के उत्तर उत्कृष्ट और सही हैं, और आपको निश्चित रूप से उन्हें पहले पढ़ना चाहिए।

मैंने सोचा था कि मैं इसे साझा करूंगा क्योंकि यह आसान कॉपी-एंड-पेस्ट के लिए बनाता है, अगर आपका मामला मेरी तरह काफी सरल है।

Syslog बंद करें और वर्तमान लॉग आउट की प्रतिलिपि बनाएँ:

service rsyslog stop
mkdir -p /tmp/varlog
cp -r /var/log/* /tmp/varlog

फिर, अपना नया स्थान माउंट करें /var/log। कहते हैं कि यह एक नया उपकरण है/dev/sdb

mount /dev/sdb /var/log

अब आप फ़ाइलों को वापस कॉपी कर सकते हैं और syslog को पुनः आरंभ कर सकते हैं:

cp -r /tmp/varlog/* /var/log
rm -rf /tmp/varlog
service rsyslog start

यह मानते हुए कि यह सब आपके मशीन के जीवन में काफी पहले से होता rsyslogहै, केवल चलने की संभावना है। YMMV!

पुनश्च - आप इसे अपने fstabसाथ ही जोड़ना चाहेंगे । यहाँ ऐसा करने का एक तरीका है, फिर से एक बहुत सीधा माउंट मानकर:

cat /etc/mtab |grep /var/log >>/etc/fstab

(cf /server//a/267610/80606 mtab to fstab के बारे में)


5
अच्छा समाधान है। एक चीज जो मैं बदलूंगा, वह है कि आपके cp -rसाथ sudo tar cpf- साथ sudo tar xpfफ़ाइल स्वामित्व और अनुमतियों को संरक्षित करने के लिए बंद मौके पर रूट के अलावा किसी अन्य उपयोगकर्ता द्वारा बनाए गए लॉग हैं।
ब्रेंडा बेल

2

एक और चीज जो आप कर सकते हैं वह है:

  • उन प्रक्रियाओं को बंद करें जिनके पास खुली फाइलें हैं /var/log
  • सत्यापित करें कि खुली फ़ाइलों के साथ कोई प्रक्रिया नहीं है /var/log( lsofkubanskamac के रूप में सुझाव दिया गया है)
  • /var/logपर्याप्त मुक्त स्थान के साथ दूसरे विभाजन में जाएं (आपके उदाहरण के बाद, यह होगा /home/log)
  • / Var / log / / home / log ( ln -s /home/log /var/log) से एक प्रतीकात्मक लिंक बनाएं
  • उन प्रक्रियाओं को पुनः आरंभ करें जिन्हें आपने पहले चरण में रोका था

कृपया ध्यान दें कि यह वह है जो मैं एक अच्छे अभ्यास के रूप में मानता हूं। यह सिर्फ एक वर्कअराउंड है ताकि आपको सर्वर को बंद न करना पड़े। सही समाधान पर्याप्त स्थान के साथ एक नया /varया /var/logविभाजन बनाने के लिए होगा (या वर्तमान एक का विस्तार करें),


अगर लॉगरेट चलाया जाता है तो क्या लिंक विचार करने से कोई प्रभाव पड़ेगा? मुझे नहीं पता था कि यह फाइलों के स्थानों को अधिलेखित या पेंच कर देगा यदि वे पहले से ही लिंक नहीं थे ... जिसका मतलब बाद में अधिक रखरखाव सिरदर्द हो सकता है।
बार्ट सिल्वरस्ट्रिम

हां, अंत में ऐसा लगता है कि सर्वर चालू रहते हुए यह ऑपरेशन करना उतना अच्छा नहीं है। मैं तब नहीं देख पाऊंगा कि कौन सी प्रक्रिया अभी भी पुराने / var / log / log का उपयोग करती है और इसके अलावा मुझे लगता है कि कुछ एप्लिकेशन आसानी से प्रतीकात्मक लिंक के साथ सौदा नहीं करते हैं ताकि अंततः लॉग को खराब कर सकें। शायद मुझे एक रखरखाव मोड शेड्यूल करना चाहिए। वास्तव में मैं मैन्युअल रूप से फ़ाइलों को हटा रहा हूँ जब बाईं जगह छोटी हो जाती है। mriedman: अगर मैं उस विभाजन का आकार बदल सकता / सकती हूँ
रसिक

0

@Hwjp पर आधारित एक अन्य समाधान, यदि आप उन्हें स्थानांतरित करने के लिए किसी अन्य ड्राइव वॉल्यूम का उपयोग नहीं कर सकते हैं, तो आप वर्चुअल वॉल्यूम वॉल्यूम को किसी अन्य वॉल्यूम में बना सकते हैं, जिसके पास अधिक स्थान उपलब्ध है (जो मेरा मामला है):

वर्चुअल वॉल्यूम बनाएं:

ए) करते हैं: sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200

  • यदि = / dev / शून्य: इनपुट फ़ाइल डेटा संग्रहण को शुरू करने के लिए एक चरित्र स्ट्रीम प्रदान करने के लिए
  • of = VHD.img: /volumeofyourchoice पर स्टोरेज वॉल्यूम के रूप में बनाई जाने वाली छवि फ़ाइल
  • bs = 1M: एक समय में 1M तक पढ़ें और लिखें
  • count = 1200: प्रतियां केवल 1200M (1GB) इनपुट ब्लॉक

बी) करते हैं: sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.imgवीएचडी-लॉग छवि फ़ाइल में EXT4 फ़ाइल सिस्टम प्रकार को mkfs उपयोगिता के साथ प्रारूपित करें।

सी) करो: sudo mkdir /thevolumeofyourchoice/vlogमाउंट वीएचडी-एक निर्देशिका में प्रवेश करें (माउंट पॉइंट)

डी) करते हैं: sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /thevolumeofyourchoice/vlog

D1) सिस्टम बूट पर VHD- लॉग को अंतिम निर्देशिका में माउंट करने के लिए, इस प्रविष्टि को / etc / fstab फ़ाइल में जोड़ें।

/thevolumeofyourchoice/VHD-log.img  /var/log/  ext4    defaults        0  0

पुरानी लॉग फ़ाइलें ले जाएँ:

ई) करते हैं:

  • service rsyslog stop
  • lsof | grep /var/log / var / लॉग में खुली फ़ाइलों को सूचीबद्ध करता है और आवश्यक डेमॉन को बंद कर देता है (apach2, freshclam in my case)
  • cp -rp /var/log/* /thevolumeofyourchoice/vlog (cp -p same के रूप में --preserve = मोड, स्वामित्व, टाइमस्टैम्प)

एफ) करते हैं:

  • sudo umount /thevolumeofyourchoice/vlog
  • sudo mv /var/log /var/log-old
  • sudo mkdir /var/log
  • sudo chgrp syslog /var/log
  • sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /var/log

जी) करते हैं: service rsyslog startऔर आपके द्वारा रोकी गई अन्य सेवाओं को पुनरारंभ करें

अंत में डबल चेक:

आप ca / ​​a करते हैं - lsof | grep /var/logखुली फाइलों को / var / log में सूचीबद्ध करते हैं और सत्यापित करते हैं कि वे / var / log और नहीं / var / log-old हैं

आप सब ठीक होने के बाद mv, बैकअप या डिलीट / var / log-old कर सकते हैं।


-1

मैं बस:

apt install lsyncd
mv /var/log /varlog.root
mkdir /var/log /home/log
mount --bind /home/log /var/log

# set up lsyncd appropriately to sync real-time between /varlog.root & /var/log
service lsyncd start
sleep 3m

service rsyslog restart
# Proceed with all the other daemons
# to switch them over to the new /var/log and release /varlog.root
sleep 3m

# Then do this a few times until no processes use the old dir
lsof +D /varlog.root && rm -rf /varlog.root

यह है के रूप में /var/logघुड़सवार छोड़ अच्छा /home/logहै? यह पूरा सवाल अनुभवी लोगों के लिए नहीं है, मुझे लगता है।
कुबंझक

क्या मतलब? / होम / लॉग पर / वर / लॉग लगाया जाता है, अन्य तरीके से नहीं। और हां, इसे छोड़ना कोई समस्या नहीं है, बस यह सुनिश्चित करें कि यह प्रत्येक बूट पर स्वचालित रूप से पुनर्स्थापित हो और सभी प्रक्रियाओं के लिए पर्याप्त रूप से खाली / var / log माउंट बिंदु में कुछ नए लॉग बनाने का प्रयास न करें।
अलेक्जेंडर शेकब्लिकिन

वास्तविक अलग-अलग आरोह बिंदुओं पर कई बार सुरक्षा आवश्यकताओं की आवश्यकता होती है / var / log और / var / log / ऑडिट। अन्यथा उन्हें छोड़ दें और अनावश्यक डिस्क उपयोग से बचने के लिए बस उचित लॉग रोटेशन सेट करें।
ब्राड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.