/ Var / log dizinini nasıl taşıyabilirim


16

Üretim sunucusunda orada root için küçük sürücü bağlama noktası olduğunu /, /var/logçok fazla yer alıyor ve elle bazı dosyaları silmeniz gerekir. Nasıl taşıyabilirsiniz /var/log/diyelim etmek /home/logyeniden başlatmadan?

İşte düşündüğüm şey:

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

Ancak bazı hizmetlerin dosya tanımlayıcıları kullandığını biliyorum, bu yüzden kullanmaya /var/logveya inode kullanmaya devam edecekler .



Bu bir cevap değil, bir öneri. mümkünse btrfs gibi gerçek zamanlı sıkıştırmalı bir dosya sistemini günlüğe kaydeder. Bu bölümü bağladığınızda, "sıkıştır = lzo" veya "sıkıştır = zlib" bağlama seçeneğini kullanın. lzo daha iyi performans, zlib daha iyi sıkıştırma sunar.
Massimo

Yanıtlar:


26

Uygun tasarım

lvextend && ext2onlineLVM veya yanlış dosya sistemi türünü kullanmadığınız için söz konusu dosya sistemini (kullanarak ) genişletemeyeceğinizi varsayıyorum .

Yaklaşımınız

Ne önerdiğimiz kudreti Eğer SIGHUP ile (öldürmek -1 pid) cinleri sinyal eğer işi. Açıkçası daha sonra "bağlama -o bağlama / / bir yere" ve monte / var / log altında kalan ne temizlemek gerekir. Ama özellikle üretim için benim için kötü bir kokusu var.

Kesinti sürelerinden kaçının, temiz bir sonuç alın (ancak yapılması karmaşık)

"Mount -o bind" fikrini unutun, yeni bir LV / bölüm oluşturun, ancak henüz monte etmeyin.

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

Herhangi bir açık dosya olan her daemon için (en azından syslog, inetd, sshd beklenir):

  • / var / log'da oturum açmak için arka plan numarasını yeniden yapılandırın
  • arka plan sunucusunu yenile ( kill -1 veya /etc/init.d/script reload)
  • lsof | grep /var/log bu daemon'un dosyalarını kapattığını onayla

Üstüne monte / var / log. Eski yapılandırmaları geri yükleyin, SIGHUP / cinleri tekrar yükleyin.

Kolay yol (kesinti süresi)

Yeni bir LV / bölüm oluşturun ve / var veya / var / log üzerine düzgün şekilde monte edin. Kolay yol, sunucuyu bakım moduna (tek kullanıcı modu) indirmektir ve işlem için gerçek konsolu (ssh değil) kullanmaktır.


8

Herkesin cevapları mükemmel ve doğrudur ve önce mutlaka okumalısınız.

Bunu paylaşacağımı sanıyordum, çünkü davanız benimki gibi oldukça basit bir sonuç çıkıyorsa, kolay kopyala ve yapıştır için yapar:

Sistem günlüğünü durdurun ve mevcut günlükleri kopyalayın:

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

ardından yeni konumunuzu bağlayın /var/log. Diyelim ki yeni bir cihaz/dev/sdb

mount /dev/sdb /var/log

şimdi dosyaları geri kopyalayabilir ve syslog'u yeniden başlatabilirsiniz:

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

Bunların makinenizin ömründe oldukça erken gerçekleştiğini varsayarsak, rsyslogçalışan tek daemon da olabilir. YMMV!

PS - fstabmuhtemelen sizin de eklemek isteyeceksiniz . İşte bunu yapmanın bir yolu, yine çok basit bir montaj varsayalım:

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

(cf /server//a/267610/80606 mtab'dan fstab'a catting hakkında)


5
Güzel çözüm. Bir şey değişikliğin yerini alıyor ediyorum cp -rile sudo tar cpfve sudo tar xpfkök dışında bir kullanıcı tarafından oluşturulan günlüğü vardır kapalı şans dosya sahipliğini ve izinlerini korumak için.
Brenda Bell

2

Yapabileceğiniz başka bir şey:

  • Açık dosyaları olan işlemleri durdurun /var/log
  • Üzerinde açık dosyaları olan herhangi bir işlem olmadığını doğrulayın /var/log( lsofkubanskamac'ın önerdiği gibi kullanarak )
  • Kendinizi /var/logyeterli boş alana sahip başka bir bölüme taşıyın (örneğin aşağıdaki gibi olabilir /home/log)
  • / Var / log - / home / log ( ln -s /home/log /var/log) arasında sembolik bir bağlantı oluşturun
  • İlk adımda durdurduğunuz işlemleri yeniden başlatın

Lütfen bunun iyi bir uygulama olarak değerlendirdiğim şeyden uzak olduğunu unutmayın. Sadece geçici bir çözümdür, böylece sunucuyu kapatmanıza gerek kalmaz. Doğru çözüm , yeterli alana sahip yeni bir bölüm /varveya /var/logbölüm oluşturmak (veya geçerli olanı genişletmek),


Logrotate çalıştırılırsa link fikrini yapmanın herhangi bir etkisi olur mu? Zaten bağlantıları olmasaydı dosyaların konumlarının üzerine yazacak mı yoksa vidalayacak mı bilmiyordum ... bu daha sonra bakım baş ağrıları anlamına gelebilir.
Bart Silverstrim

Evet, nihayet sunucu çalışırken bu işlemi yapmak o kadar iyi değil gibi görünüyor. O zaman hangi sürecin hala eski / var / log / kullandığını göremeyeceğim. Ayrıca bazı uygulamaların sembolik bağlantıyla kolayca başa çıkmadığını düşünüyorum, böylece sonunda günlüğü bozabilir. Belki bir bakım modu ayarlamalıyım. Aslında sol alan azaldığında dosyaları elle siliyorum. mriedman: Bu bölümü yeniden boyutlandırabilir miyim kontrol edeceğim
Razique

0

@Hwjp'ye dayanan başka bir çözüm, bunları taşımak için başka bir sürücü birimi kullanamazsanız, daha fazla alana sahip başka bir birime sanal sürücü birimi oluşturabilirsiniz (bu benim durumumdur):

Sanal birim oluştur:

A) şunları yapın: sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200

  • if = / dev / zero: veri depolamasını başlatmak için bir karakter akışı sağlamak için giriş dosyası
  • of = VHD.img: depolama biriminiz / depolama alanınız olarak oluşturulacak görüntü dosyası
  • bs = 1M: tek seferde 1M'ye kadar okuma ve yazma
  • count = 1200: yalnızca 1200M (1GB) giriş bloklarını kopyalar

B) do: sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.imgVHD-log görüntü dosyasındaki EXT4 dosya sistemi türünü mkfs yardımcı programıyla biçimlendirin.

C) do: sudo mkdir /thevolumeofyourchoice/vlogVHD-log'u bir dizine (bağlama noktası) bağlayın

D) şunları yapın: sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /thevolumeofyourchoice/vlog

D1) VHD günlüğünü sistem önyüklemesine son dizine bağlamak için, bu girdiyi / etc / fstab dosyasına ekleyin.

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

Eski günlük dosyalarını taşıma:

E) şunları yapın:

  • service rsyslog stop
  • lsof | grep /var/log / var / log içindeki açık dosyaları listelemek ve gerekli arka plan programını kapatmak (apach2, benim durumumda freshclam)
  • cp -rp /var/log/* /thevolumeofyourchoice/vlog (cp -p --preserve = mod, sahiplik, zaman damgalarıyla aynıdır)

F) şunları yapın:

  • 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

G) yapın: service rsyslog startve durdurduğunuz diğer hizmetleri yeniden başlatın

Son olarak tekrar kontrol edin:

- Bir ca yapmak lsof | grep /var/logiçinde / var / log listelerine açık dosyalar ve onlar için / var işaret doğrulamak / log ve / var / log-eski

Her şey yolunda olduktan sonra mv, yedekleyebilir veya silebilir / var / log-old.


-1

Ben sadece:

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/logMonte edilmiş halde bırakmak iyi /home/logmi? Bütün bu soru tecrübeli yöneticiler için değil, sanırım.
kubanczyk

Ne demek istiyorsun? / home / log başka bir şekilde değil, / var / log üzerine monte edilir. Ve evet, olduğu gibi bırakmak bir sorun değil, sadece her önyüklemede otomatik olarak ve tüm süreçlerin boş / var / log bağlama noktasında bazı yeni günlükler oluşturmaya çalışmaması için yeterince geri yüklendiğinden emin olun.
Alexander Shcheblikin

birçok güvenlik gereksinimi, gerçek ayrı bağlama noktalarında / var / log ve / var / log / denetime ihtiyaç duyar. Aksi takdirde bunları bırakın ve gereksiz disk kullanımını önlemek için uygun günlük rotasyonunu ayarlayın.
Brad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.