Bagaimana saya bisa memindahkan direktori / var / log

15

Di server produksi kami ada drive kecil untuk root mount point /, /var/logmengambil terlalu banyak ruang dan saya harus menghapus beberapa file secara manual. Bagaimana saya bisa pindah /var/log/ke katakanlah /home/logTANPA MENYESAL?

Inilah hal yang saya pikirkan:

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

Tetapi saya tahu bahwa beberapa layanan menggunakan deskriptor file, jadi mereka akan terus menggunakan /var/logatau inode.

Razique
sumber
Ada jawaban terperinci untuk pertanyaan yang sama pada dasarnya di AskUbuntu
Eborbob
Ini bukan jawaban tetapi saran. jika mungkin gunakan untuk mencatat sistem file dengan kompresi waktu nyata, seperti btrfs. Saat Anda memasang partisi ini, gunakan opsi mount "compress = lzo" atau "compress = zlib". lzo menawarkan kinerja yang lebih baik, kompresi zlib yang lebih baik.
Massimo

Jawaban:

25

Desain yang tepat

Saya berasumsi Anda tidak dapat hanya memperpanjang filesystem yang dimaksud (menggunakan lvextend && ext2online), karena Anda tidak menggunakan LVM atau menggunakan tipe sistem file yang salah.

Pendekatan Anda

Apa yang Anda usulkan mungkin berhasil jika Anda memberi sinyal daemon dengan SIGHUP (kill -1 pid). Tentunya Anda perlu melakukan "mount -o bind / / suatu tempat" nanti dan membersihkan apa yang tersisa di bawah mount / var / log. Tetapi baunya tidak enak bagi saya, terutama untuk produksi.

Hindari downtime, hasilkan bersih (tapi rumit untuk dilakukan)

Lupakan ide "mount -o bind", buat LV / partisi baru, tapi jangan mount dulu.

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

Untuk setiap daemon yang memiliki file terbuka (saya harapkan setidaknya syslog, inetd, sshd):

  • mengkonfigurasi ulang daemon no untuk masuk ke / var / log
  • menyegarkan daemon ( kill -1 atau /etc/init.d/script reload)
  • konfirmasi dengan lsof | grep /var/log daemon yang telah menutup file-nya

Pasang / var / log. Kembalikan konfigurasi lama, SIGHUP / reload daemon lagi.

Cara mudah (downtime)

Buat LV / partisi baru dan pasang dengan benar di atas / var atau / var / log. Cara mudah adalah menurunkan server ke mode pemeliharaan (mode single-user), dan menggunakan konsol yang sebenarnya (bukan ssh) untuk operasi.

kubanczyk
sumber
8

Jawaban semua orang sangat bagus dan benar, dan Anda harus membacanya terlebih dahulu.

Saya hanya berpikir saya akan membagikan ini karena itu membuat copy-and-paste mudah, jika kasus Anda ternyata cukup sederhana seperti milik saya adalah:

Hentikan syslog dan salin log saat ini:

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

kemudian, pasang lokasi baru Anda /var/log. Katakan itu perangkat baru yang disebut/dev/sdb

mount /dev/sdb /var/log

sekarang Anda dapat menyalin file kembali dan restart syslog:

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

Dengan asumsi ini semua terjadi cukup awal dalam kehidupan mesin Anda, rsyslogkemungkinan akan menjadi satu-satunya daemon yang berjalan. YMMV!

PS - Anda mungkin ingin menambahkannya juga ke Anda fstab. Inilah salah satu cara untuk melakukan itu, sekali lagi dengan asumsi pemasangan yang sangat mudah:

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

(cf /server//a/267610/80606 tentang catting mtab ke fstab)

hwjp
sumber
5
Solusi yang bagus. Satu hal yang saya ubah adalah mengganti Anda cp -rdengan sudo tar cpfdan sudo tar xpfuntuk mempertahankan kepemilikan dan izin file jika ada log yang dibuat oleh pengguna selain dari root.
Brenda Bell
2

Hal lain yang dapat Anda lakukan adalah:

  • Hentikan proses yang membuka file /var/log
  • Verifikasi bahwa tidak ada proses dengan membuka file /var/log(menggunakan lsofseperti yang disarankan kubanskamac)
  • Pindahkan Anda /var/logke partisi lain dengan ruang kosong yang cukup (ikuti contoh Anda, mungkin itu /home/log)
  • Buat tautan simbolis dari / var / log ke / home / log ( ln -s /home/log /var/log)
  • Mulai ulang proses yang Anda hentikan di langkah pertama

Harap dicatat bahwa ini jauh dari apa yang saya anggap sebagai praktik yang baik. Ini hanya solusi agar Anda tidak perlu mematikan server. Solusi yang tepat adalah dengan membuat partisi baru /varatau /var/logdengan ruang yang cukup (atau memperluas yang sekarang),

mfriedman
sumber
Apakah akan ada efek dari melakukan ide tautan jika logrotate dijalankan? Saya tidak tahu apakah itu akan menimpa atau mengacaukan lokasi file jika mereka belum memiliki tautan ... itu bisa berarti lebih banyak sakit kepala pemeliharaan kemudian.
Bart Silverstrim
Ya, akhirnya tampaknya melakukan operasi ini ketika server sedang berjalan tidak begitu baik. Saya tidak akan dapat melihat proses yang masih menggunakan yang lama / var / log / Selain itu saya pikir beberapa aplikasi tidak mudah berurusan dengan tautan simbolik sehingga pada akhirnya bisa mengacaukan log. Mungkin saya harus menjadwalkan mode pemeliharaan. Sebenarnya saya secara manual menghapus file ketika ruang kiri menjadi pendek. mriedman: Saya akan memeriksa apakah saya dapat mengubah ukuran partisi itu
Razique
0

Solusi lain berdasarkan @hwjp, jika Anda tidak dapat menggunakan volume drive lain untuk memindahkannya, Anda dapat membuat volume drive virtual ke volume lain yang memiliki lebih banyak ruang yang tersedia (dalam kasus saya):

Buat volume virtual:

A) lakukan: sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200

  • if = / dev / zero: file input untuk menyediakan aliran karakter untuk menginisialisasi penyimpanan data
  • of = VHD.img: file gambar yang akan dibuat sebagai volume penyimpanan di / thevolumeofyourchoice
  • bs = 1M: baca dan tulis hingga 1M sekaligus
  • count = 1200: hanya menyalin 1.200 blok input (1GB)

B) lakukan: sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.imgMemformat tipe sistem file EXT4 dalam file gambar VHD-log dengan utilitas mkfs.

C) lakukan: sudo mkdir /thevolumeofyourchoice/vlogMount VHD-log ke direktori (mount point)

D) lakukan: sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /thevolumeofyourchoice/vlog

D1) Untuk me-mount VHD-log saat boot sistem ke direktori final, tambahkan entri ini di file / etc / fstab.

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

Pindahkan file log lama:

E) lakukan:

  • service rsyslog stop
  • lsof | grep /var/log untuk daftar file yang terbuka di / var / log dan matikan daemon yang diperlukan (apach2, freshclam dalam kasus saya)
  • cp -rp /var/log/* /thevolumeofyourchoice/vlog (cp -p sama dengan --preserve = mode, kepemilikan, cap waktu)

F) lakukan:

  • 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) lakukan: service rsyslog startdan mulai kembali layanan lain yang Anda hentikan

Akhirnya periksa kembali:

Anda dapat melakukan - lsof | grep /var/loguntuk membuat daftar file yang terbuka di / var / log dan memverifikasi mereka menunjuk ke / var / log dan bukan / var / log-old

Anda dapat mv, mencadangkan atau menghapus / var / log-lama setelah semua ok.

Mike Castro Demaria
sumber
-1

Saya hanya akan:

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
Alexander Shcheblikin
sumber
Apakah lebih baik /var/logdibiarkan /home/logseperti apa adanya? Seluruh pertanyaan ini bukan untuk admin berpengalaman, saya kira.
kubanczyk
Apa maksudmu? / home / log di-mount / var / log, bukan sebaliknya. Dan ya, itu bukan masalah untuk membiarkannya seperti itu, hanya pastikan itu dipulihkan pada setiap boot secara otomatis dan cukup awal untuk semua proses untuk tidak mencoba membuat beberapa log baru di titik mount kosong / var / log.
Alexander Shcheblikin
banyak kali persyaratan keamanan memerlukan / var / log dan / var / log / audit pada titik mount terpisah yang sebenarnya. Kalau tidak biarkan mereka dan hanya mengatur rotasi log yang sesuai untuk menghindari penggunaan disk yang tidak perlu.
Brad