Di server produksi kami ada drive kecil untuk root mount point /
,
/var/log
mengambil terlalu banyak ruang dan saya harus menghapus beberapa file secara manual. Bagaimana saya bisa pindah /var/log/
ke katakanlah /home/log
TANPA 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/log
atau inode.
linux
debian
log-files
disk-space-utilization
Razique
sumber
sumber
Jawaban:
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.
Untuk setiap daemon yang memiliki file terbuka (saya harapkan setidaknya syslog, inetd, sshd):
kill -1
atau/etc/init.d/script reload
)lsof | grep /var/log
daemon yang telah menutup file-nyaPasang / 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.
sumber
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:
kemudian, pasang lokasi baru Anda
/var/log
. Katakan itu perangkat baru yang disebut/dev/sdb
sekarang Anda dapat menyalin file kembali dan restart syslog:
Dengan asumsi ini semua terjadi cukup awal dalam kehidupan mesin Anda,
rsyslog
kemungkinan 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:(cf /server//a/267610/80606 tentang catting mtab ke fstab)
sumber
cp -r
dengansudo tar cpf
dansudo tar xpf
untuk mempertahankan kepemilikan dan izin file jika ada log yang dibuat oleh pengguna selain dari root.Hal lain yang dapat Anda lakukan adalah:
/var/log
/var/log
(menggunakanlsof
seperti yang disarankan kubanskamac)/var/log
ke partisi lain dengan ruang kosong yang cukup (ikuti contoh Anda, mungkin itu/home/log
)ln -s /home/log /var/log
)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
/var
atau/var/log
dengan ruang yang cukup (atau memperluas yang sekarang),sumber
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
B) lakukan:
sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.img
Memformat tipe sistem file EXT4 dalam file gambar VHD-log dengan utilitas mkfs.C) lakukan:
sudo mkdir /thevolumeofyourchoice/vlog
Mount 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.
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 start
dan mulai kembali layanan lain yang Anda hentikanAkhirnya periksa kembali:
Anda dapat melakukan -
lsof | grep /var/log
untuk membuat daftar file yang terbuka di / var / log dan memverifikasi mereka menunjuk ke / var / log dan bukan / var / log-oldAnda dapat mv, mencadangkan atau menghapus / var / log-lama setelah semua ok.
sumber
Saya hanya akan:
sumber
/var/log
dibiarkan/home/log
seperti apa adanya? Seluruh pertanyaan ini bukan untuk admin berpengalaman, saya kira.