Làm thế nào tôi có thể di chuyển thư mục / var / log


15

Trên máy chủ sản xuất của chúng tôi có một ổ đĩa nhỏ cho điểm gắn kết gốc /, /var/logđang chiếm quá nhiều dung lượng và tôi phải xóa thủ công một số tệp. Làm thế nào tôi có thể di chuyển /var/log/để nói rằng /home/logKHÔNG TÁI TẠO?

Đây là điều tôi nghĩ:

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

Nhưng tôi biết rằng một số dịch vụ sử dụng mô tả tệp, vì vậy chúng sẽ tiếp tục sử dụng /var/loghoặc inodes.


Có một câu trả lời chi tiết về cơ bản cùng một câu hỏi tại AskUbfox tại Askubfox.com/a/346579/422224
Eborbob

Đây không phải là một câu trả lời mà là một gợi ý. nếu có thể sử dụng để ghi nhật ký một hệ thống tệp với sự bù trừ thời gian thực, như btrfs. Khi bạn gắn kết phân vùng này, hãy sử dụng tùy chọn gắn kết "nén = lzo" hoặc "nén = zlib". lzo cung cấp hiệu suất tốt hơn, nén zlib tốt hơn.
Massimo

Câu trả lời:


25

Thiết kế phù hợp

Tôi giả sử bạn không thể đơn giản mở rộng hệ thống tệp trong câu hỏi (bằng cách sử dụng lvextend && ext2online), vì bạn không sử dụng LVM hoặc sử dụng sai loại hệ thống tệp.

Cách tiếp cận của bạn

Những gì bạn đã đề xuất có thể hoạt động nếu bạn báo hiệu các daemon bằng SIGHUP (kill -1 pid). Rõ ràng là sau này bạn sẽ cần phải gắn kết "mount -o bind / / where" và dọn sạch những gì còn sót lại bên dưới mount / var / log. Nhưng nó có mùi khó chịu đối với tôi, đặc biệt là cho sản xuất.

Tránh thời gian chết, có kết quả sạch (nhưng phức tạp để làm)

Hãy quên ý tưởng "mount -o bind", tạo LV / phân vùng mới, nhưng chưa gắn kết nó.

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

Đối với mỗi trình nền có bất kỳ tệp đang mở nào (tôi sẽ mong đợi ít nhất là syslog, inetd, sshd):

  • cấu hình lại daemon no để đăng nhập vào / var / log
  • làm mới daemon ( kill -1 hoặc /etc/init.d/script reload)
  • xác nhận lsof | grep /var/log rằng daemon đã đóng các tập tin của nó

Gắn kết / var / log. Khôi phục cấu hình cũ, SIGHUP / tải lại daemon.

Cách dễ dàng (thời gian chết)

Tạo một phân vùng LV / mới và gắn kết nó đúng cách trên / var hoặc / var / log. Cách dễ dàng là đưa máy chủ xuống chế độ bảo trì (chế độ một người dùng) và sử dụng bàn điều khiển thực tế (không phải ssh) cho hoạt động.


8

Câu trả lời của mọi người khác là tuyệt vời và chính xác, và bạn chắc chắn nên đọc chúng trước.

Tôi chỉ nghĩ rằng tôi sẽ chia sẻ điều này bởi vì nó giúp cho việc sao chép và dán dễ dàng, nếu trường hợp của bạn trở nên khá đơn giản như của tôi là:

Dừng nhật ký hệ thống và sao chép nhật ký hiện tại:

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

Sau đó, gắn kết vị trí mới của bạn trên /var/log. Nói rằng đó là một thiết bị mới được gọi là/dev/sdb

mount /dev/sdb /var/log

bây giờ bạn có thể sao chép các tập tin trở lại và khởi động lại syslog:

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

Giả sử tất cả điều này xảy ra khá sớm trong vòng đời của máy tính của bạn, rsyslogcó khả năng là trình nền duy nhất đang chạy. YMMV!

Tái bút - fstabcó lẽ bạn cũng muốn thêm nó vào . Đây là một cách để làm điều đó, một lần nữa giả sử một mount rất đơn giản:

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

(cf /server//a/267610/80606 về việc chuyển mtab sang fstab)


5
Giải pháp tốt đẹp. Một điều tôi sẽ thay đổi là thay thế cp -rbằng sudo tar cpfsudo tar xpfđể duy trì quyền sở hữu và quyền của tệp trong trường hợp không có nhật ký được tạo bởi người dùng khác ngoài root.
Brenda Bell

2

Một điều khác mà bạn có thể làm là:

  • Dừng các quá trình có tệp đang mở /var/log
  • Xác minh rằng không có bất kỳ quy trình nào có tệp đang mở /var/log(sử dụng lsofnhư kubanskamac được đề xuất)
  • Di chuyển của bạn /var/logđến một phân vùng khác có đủ không gian trống (theo ví dụ của bạn, đó sẽ là /home/log)
  • Tạo một liên kết tượng trưng từ / var / log đến / home / log ( ln -s /home/log /var/log)
  • Khởi động lại các quy trình mà bạn đã dừng ở bước đầu tiên

Xin lưu ý rằng điều này khác xa với những gì tôi coi là một thực hành tốt. Đó chỉ là một cách giải quyết để bạn không phải tắt máy chủ. Giải pháp phù hợp sẽ là tạo một phân vùng mới /varhoặc /var/logphân vùng có đủ không gian (hoặc mở rộng cái hiện tại),


Sẽ có bất kỳ ảnh hưởng nào từ việc thực hiện ý tưởng liên kết nếu logrotate được chạy? Tôi không biết liệu nó có ghi đè lên hoặc làm hỏng vị trí của các tệp nếu chúng chưa liên kết ... điều đó có thể có nghĩa là đau đầu bảo trì nhiều hơn sau này.
Bart Silverstrim

Vâng, cuối cùng có vẻ như thực hiện thao tác này trong khi máy chủ đang chạy là không tốt. Sau đó tôi sẽ không thể xem quy trình nào vẫn sử dụng / var / log / cũ. Tôi nghĩ rằng một số ứng dụng không dễ dàng xử lý liên kết tượng trưng để cuối cùng có thể làm hỏng nhật ký. Có lẽ tôi nên lên lịch cho một chế độ bảo trì. Trên thực tế, tôi đang xóa các tệp một cách thủ công khi không gian bên trái trở nên ngắn. mriedman: Tôi sẽ kiểm tra xem tôi có thể thay đổi kích thước phân vùng đó không
Razique

0

Một giải pháp khác dựa trên @hwjp, nếu bạn không thể sử dụng một ổ đĩa khác để di chuyển chúng, bạn có thể tạo một ổ đĩa ảo thành một ổ đĩa khác có nhiều dung lượng hơn (đó là trường hợp của tôi):

Tạo âm lượng ảo:

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

  • if = / dev / zero: tệp đầu vào để cung cấp luồng ký tự để khởi tạo lưu trữ dữ liệu
  • of = VHD.img: tệp hình ảnh sẽ được tạo dưới dạng dung lượng lưu trữ trên / thevolumeofyourchoice
  • bs = 1M: đọc và viết tối đa 1M mỗi lần
  • đếm = 1200: chỉ sao chép các khối đầu vào 1200M (1GB)

B) do: sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.imgĐịnh dạng loại hệ thống tệp EXT4 trong tệp hình ảnh nhật ký VHD với tiện ích mkfs.

C) do: sudo mkdir /thevolumeofyourchoice/vlogMount VHD-log vào một thư mục (điểm gắn kết)

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

D1) Để gắn nhật ký VHD khi khởi động hệ thống vào thư mục cuối cùng, hãy thêm mục này vào tệp / etc / fstab.

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

Di chuyển tệp nhật ký cũ:

E) làm:

  • service rsyslog stop
  • lsof | grep /var/log để liệt kê các tệp đang mở trong / var / log và tắt daemon cần thiết (apach2, Freshclam trong trường hợp của tôi)
  • cp -rp /var/log/* /thevolumeofyourchoice/vlog (cp -p giống như --preserve = chế độ, quyền sở hữu, dấu thời gian)

F) làm:

  • 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) do: service rsyslog startvà khởi động lại các dịch vụ khác mà bạn đã dừng

Cuối cùng kiểm tra lại:

Bạn thực hiện một - lsof | grep /var/logđể liệt kê các tệp đang mở trong / var / log và xác minh chúng trỏ đến / var / log chứ không phải / var / log-old

Bạn có thể mv, sao lưu hoặc xóa / var / log-old sau khi tất cả đều ổn.


-1

Tôi sẽ chỉ:

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

Là nó tốt để lại /var/loggắn kết /home/lognhư là? Toàn bộ câu hỏi này không dành cho quản trị viên dày dạn, tôi đoán vậy.
kubanchot

Ý anh là gì? / home / log được gắn trên / var / log, không phải cách khác. Và đúng vậy, không có vấn đề gì khi để nó như vậy, chỉ cần đảm bảo rằng nó được khôi phục tự động trên mỗi lần khởi động và đủ sớm để tất cả các quy trình không cố gắng tạo một số nhật ký mới trong điểm gắn kết trống / var / log.
Alexander Shcheblikin

rất nhiều lần yêu cầu bảo mật cần / var / log và / var / log / aud trên các điểm gắn kết riêng biệt thực tế. Nếu không, hãy để chúng được và chỉ cần thiết lập xoay vòng nhật ký thích hợp để tránh việc sử dụng đĩa không cần thiết.
Brad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.