Làm cách nào tôi có thể giảm ghi vào tệp nhật ký


9

Một lo lắng chung của người dùng Raspberry Pi là sự hao mòn và phá hủy thẻ SD của họ (có chu kỳ ghi hạn chế) do quá nhiều lần ghi. Kinh nghiệm được báo cáo bởi người dùng hỗ trợ giả định này.

Ghi nhật ký là một nguồn truy cập ghi thường xuyên.

Vì vậy, câu hỏi đặt ra làm thế nào điều này có thể được giảm trên Raspbian.


2
Bạn có thể di chuyển vị trí của các tệp nhật ký sang ổ đĩa ngoài hoặc ổ đĩa flash, nhưng IMO những mối quan tâm này bị che lấp.
Steve Robillard

3
"Kinh nghiệm được báo cáo bởi người dùng hỗ trợ giả định này." -> Chỉ khi họ không có lý do. Internet đầy những báo cáo cuồng loạn của những người cuồng loạn. Chân to! UFO! Ghi nhật ký đã phá hủy thẻ SD của tôi! V.v.
goldilocks

3
Quan tâm hơn đối với tôi, vì một người thường xuyên rút phích cắm, là để biết không có gì sẽ được ghi vào thẻ SD khi tôi kéo dây.
joan

3
@SteveRobillard @goldilocks Hơn cả việc viết nhiều, là mất điện bất ngờ; đây có thể không phải là thủ phạm gây thiệt hại sd, nhưng trong trường hợp, tôi luôn luôn làm shutdown nowvà không làm hỏng SD nữa.
fcm

2
Tôi đồng ý đó là hyperbolic - nhưng tôi nghĩ đó là rõ ràng. Screed đó là một chất chống độc. Vấn đề là phần lớn người dùng không cần phải lo lắng về điều này. Mọi người không nên xem nó hoạt động tốt và bình thường khi hoạt động với một hệ thống tập tin gốc được điền đầy đủ trên một pi, máy tính xách tay của họ, một máy chủ inet, v.v; theo mặc định, ext fs dành riêng 5% cho việc sử dụng root chỉ để giúp giảm thiểu điều đó. Vì vậy, thực sự bạn đang nói về các trường hợp góc , và thịt bò tôi có ở đây là bạn đã trình bày nó như thể nó được coi là một vấn đề của mọi công dân tự nhận thức. Không, nó không nên.
goldilocks

Câu trả lời:


11

Nếu bạn không quan tâm đến nhật ký, bạn có thể tắt rất nhiều bằng cách sử dụng cài đặt cấu hình nhật ký.

Chỉnh sửa tập tin /etc/rsyslog.confvà ngay sau khi phần bắt đầu

###############
#### RULES ####
###############

thêm dòng sau.

*.*     ~

Nếu bạn muốn trở nên tinh tế hơn, bạn sẽ cần phải đọc các bình luận tập tin.

Đừng quên khởi động lại rsyslog daemon:

sudo service rsyslog restart

Giải pháp dễ dàng và sạch sẽ. Tôi nhận xét tất cả mọi thứ mà viết vào / var / out. Nó nên hoạt động.
Fusseldieb

Nhưng tôi quan tâm đến các bản ghi. Chúng rất quan trọng để tìm ra các vấn đề của hệ thống!
Frank Breitling

3
Nếu bạn quan tâm đến nhật ký, có rất nhiều cách tiếp cận để giữ chúng, nhưng tránh ghi SD. Gửi nhật ký tới / dev / shm (RAM), sau đó chạy logrotate cứ sau 300 giây và gửi nhật ký tới Amazon S3. Hoặc Dropbox. Hãy nhớ rằng, các bản ghi có giá trị LIMITED bị giảm dần theo thời gian. Bạn thường chỉ thực sự cần kịp thời, nhật ký hiện tại ...
Scott Prive

9

Giải pháp của tôi cho Raspbian 8.0 (Jessie) dựa trên việc đăng nhập vào RAM

Đã có gói Ramlog Debianhướng dẫn cài đặt cho việc này. Tuy nhiên, điều này không hiệu quả với tôi (Bắt đầu ramlog-tmpfs 2.0.0: Lỗi: / var / log đang được sử dụng ... [fail]).

Sử dụng iotop -bktoqqqtôi đã tìm ra hầu hết các truy cập viết thường xuyên. Nó chỉ ra rằng / var / cache / samba / thường được ghi vào. Vì vậy, điều này cũng phải đi đến RAM ngoài / var / tmp / nơi các tệp nhật ký mới sẽ có.

1. Tạo ramdisk

Vì vậy, trước tiên hai mục này phải được thêm vào /etc/fstab:

tmpfs           /var/tmp        tmpfs   size=10M,nodev,nosuid     0       0
tmpfs           /var/cache/samba tmpfs   size=5M,nodev,nosuid     0       0

2. Kịch bản log2disk

Chúng ta cần lưu tập lệnh này trong /usr/local/bin/log2diskđó sẽ nối và xóa nội dung khỏi tất cả các tệp nhật ký vào /var/tmp/log/các tệp trong /var/log/.

#!/bin/sh

# Author: Frank Breitling <frank.breitling@gmx.de>
DESC="Moving contents from /var/tmp/log/ to /var/log/"

if [ $(id -u) -ne 0 ]
then echo "Please run as root"
     exit
fi

echo $DESC

exec >>/var/log/log2disk.log 2>&1

date
cd /var/tmp/

for i in log/*; do
    basename $i
    cat $i >>/var/$i
    >$i
done

và làm cho nó thực thi được sudo chmod +x /usr/local/bin/log2disk.

3. Thêm vào crontab

Chúng tôi muốn chạy tập lệnh này cứ sau 3 giờ và thêm dòng này vào hệ thống /etc/crontab

10 */3  * * *   root    /usr/local/bin/log2disk

(Đừng quên một dòng mới cuối cùng cần thiết bởi crontab.)

4. Cài đặt log2disk.service

Chúng ta cần tạo một dịch vụ systemd /lib/systemd/system/log2disk.serviceđể thực thi tập lệnh này trước khi tắt và khởi động lại, để nội dung tệp nhật ký được giữ nguyên:

[Unit]
Description=Write log files to disk
RequiresMountsFor=/
Before=rsyslog.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/usr/local/bin/log2disk

[Install]
WantedBy=multi-user.target

và cài đặt nó với sudo systemctl enable log2disk.

5. Chọn tệp nhật ký cho RAM

Bây giờ chúng ta có thể biết /etc/rsyslog.conflogfiles nào cần giữ trong RAM. Các tệp này là auth.log, syslog, daemon.log, user.log and messagesvà chúng tôi thay thế cho mỗi mục nhập của chúng theo log/đường dẫn bằng tmp/log/ví dụ như sau:

auth,authpriv.*                 /var/tmp/log/auth.log

Làm xong!

Sau khi khởi động lại, hệ thống sẽ đăng nhập các mục nhật ký thường xuyên nhất /var/tmp/logvà đồng bộ hóa lại sau mỗi 3 giờ và trước khi tắt.

Chúng ta có thể sử dụng iotopmột lần nữa để tìm một hoạt động viết giảm đáng kể. Tuy nhiên, chúng ta không nên lo lắng về đèn LED ACT màu xanh lục nhấp nháy . Rõ ràng đây không phải là một chỉ số truy cập viết tốt.


2
"Tôi đã tìm ra giải pháp sau đây cho Raspbian 8.0 (Jessie) dựa trên ý tưởng đăng nhập vào ram." -> Xem như cách mà Jessie dựa trên systemd, nó đã có một vài dòng cấu hình được điều chỉnh từ đó thông qua journald. Hãy nhìn vào man journald.confvà lưu ý Storage=volatile, vv Sau đó, chỉ đơn giản vô hiệu hóa rsyslog (nó ăn từ journald bây giờ anyway) và mau, RAM dựa khai thác gỗ với rất nhiều chuông và còi và tuỳ chọn tuỳ chỉnh. Không có bất kỳ phiền phức.
goldilocks

@goldilocks Tôi tự hỏi làm thế nào điều này có thể hữu ích cho việc tạo bộ đệm tệp nhật ký như vậy mà tôi đã tạo.
Frank Breitling

Tôi không chắc ý của bạn là gì. TBH Tôi không phải là người hâm mộ của journald (chủ yếu là do định dạng nhị phân) và lý do tôi biết nhiều về nó là đây là những gì tôi làm với nó - vô hiệu hóa đăng nhập vào đĩa (và để nó vào rsyslog), và cung cấp cho nó một lượng RAM khiêm tốn để sử dụng làm bộ đệm. Nếu bạn có nghĩa là định kỳ xả nó vào đĩa, tôi không thấy lý do tại sao không.
goldilocks

@goldilocks Vậy thì thế nào?
Frank Breitling

Nếu bạn chưa bao giờ sử dụng nó, bạn nên xem qua man journalctl. Giống như tôi đã nói tôi là một anh chàng syslog lỗi thời, nhưng tôi nhận thấy có một sự -s --sincethay đổi; sau đó bạn chỉ cần lấy nó để đổ nó theo cách thích hợp để chuyển hướng đến một tệp (điều đó có thể không xảy ra theo mặc định ... nếu bạn chơi xung quanh một chút bạn sẽ nhận được hình ảnh).
goldilocks

2

Cách tôi phá vỡ điều này là bằng cách cài đặt thư mục gốc của tôi vào USB thay vì thẻ SD. Tôi chỉ sử dụng thẻ SD để khởi động.

Kiểu này giúp tôi không phải lo lắng về việc ghi vào Thẻ SD.

Tôi sử dụng berryboot để đạt được điều này.


0

Để giảm các thao tác ghi logfile trên RPi, bạn có thể thiết lập một máy chủ nhật ký tập trung với rsyslog. Nếu bạn muốn giữ các mục, chỉ cần gửi tin nhắn đến máy chủ nhật ký từ xa, khác đến / dev / null.


0

Thay vì chỉnh sửa rsyslog.conf, bạn chỉ cần dừng dịch vụ nếu muốn loại bỏ tất cả các bản ghi.

sudo service rsyslog stop

Sau đó, bạn có thể vô hiệu hóa nó khi khởi động:

sudo systemctl disable rsyslog

để kích hoạt lại khi khởi động:

sudo systemctl enable rsyslog

2
Nhưng điều đó dừng tất cả đăng nhập.
RalfFriedl

1
Bạn đã quên tiền tố các lệnh với sudo. Nếu bạn sử dụng, systemctlbạn cũng nên sử dụng nó để dừng dịch vụ sudo systemctl stop rsyslog.service.
Ingo

Phản hồi rất tốt. Tôi đã cập nhật câu trả lời này để phản ánh cả hai ý kiến ​​này.
Nick Họa sĩ

BTW nếu bạn sao chép câu trả lời của người khác, thường là lịch sự để tham khảo nó. Ở đây, tôi sẽ làm điều đó cho bạn: stackoverflow.com/a/32553762/4453048
RowanPD
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.