우리의 생산 서버가 루트위한 작은 드라이브가 마운트 지점입니다 /
,
/var/log
너무 많은 공간을 복용하고 난 수동으로 일부 파일을 삭제해야합니다. 리부팅없이 /var/log/
말을하려면 어떻게 /home/log
해야합니까?
내가 생각한 것은 다음과 같습니다.
$ mkdir /home/log
$ rsync -a /var/log /home/log
$ mount --bind /home/log /var/log
$ /etc/init.d/rsyslof restart
그러나 일부 서비스는 파일 설명자를 사용하므로 계속 사용 /var/log
하거나 inode 를 사용 합니다.
답변
적절한 디자인
lvextend && ext2online
LVM을 사용하지 않거나 잘못된 파일 시스템 유형을 사용하기 때문에 문제의 파일 시스템을 확장 (을 사용하여 ) 할 수 없다고 가정합니다 .
당신의 접근 방식
SIGHUP (kill -1 pid)으로 데몬에 신호를 보내면 제안한 내용 이 효과가있을 수 있습니다. 분명히 “mount -o bind / / somewhere”에서 나중에 마운트 된 / var / log 아래에 남아있는 것을 정리해야합니다. 그러나 특히 나에게 악취가납니다.
가동 중지 시간을 피하고 깨끗한 결과를 얻으십시오 (그러나 복잡함)
“mount -o bind”아이디어를 잊고 새 LV / 파티션을 작성하지만 아직 마운트하지는 마십시오.
lsof | grep /var/log # lists open files in /var/log
열린 파일이있는 각 데몬에 대해 (적어도 syslog, inetd, sshd가 필요합니다) :
- / var / log에 기록하도록 데몬 no를 재구성하십시오.
- 데몬 새로 고침 (
kill -1
또는/etc/init.d/script reload
) lsof | grep /var/log
데몬이 파일을 닫았 음을 확인 하십시오.
/ var / log에 마운트하십시오. SIGHUP / 재로드 데몬을 다시 구성하여 이전 구성을 복원하십시오.
쉬운 방법 (가동 중지 시간)
새 LV / 파티션을 작성하여 / var 또는 / var / log에 올바르게 마운트하십시오. 쉬운 방법은 서버를 유지 관리 모드 (단일 사용자 모드)로 전환하고 작업에 실제 콘솔 (ssh 아님)을 사용하는 것입니다.
답변
다른 사람의 답변은 훌륭하고 정확하므로 반드시 먼저 읽어야합니다.
귀하의 사례가 다음과 같이 매우 간단한 것으로 판명되면 쉽게 복사하여 붙여 넣을 수 있기 때문에 이것을 공유한다고 생각했습니다.
syslog를 중지하고 현재 로그를 복사하십시오.
service rsyslog stop
mkdir -p /tmp/varlog
cp -r /var/log/* /tmp/varlog
그런 다음에 새 위치를 마운트하십시오 /var/log
. 새 장치라고합시다/dev/sdb
mount /dev/sdb /var/log
이제 파일을 다시 복사하고 syslog를 다시 시작할 수 있습니다.
cp -r /tmp/varlog/* /var/log
rm -rf /tmp/varlog
service rsyslog start
이 모든 rsyslog
것이 시스템 수명 초기에 발생한다고 가정하면 유일한 데몬 일 가능성이 높습니다. YMMV!
추신-당신 fstab
도 아마 그것을 추가하고 싶을 것 입니다. 매우 간단한 마운트를 가정하면 다음과 같은 방법이 있습니다.
cat /etc/mtab |grep /var/log >>/etc/fstab
( mtab을 fstab에 catting하는 방법에 대해서는 /server//a/267610/80606 참조 )
답변
당신이 할 수있는 또 다른 일은 :
- 파일을 연 프로세스를 중지하십시오.
/var/log
- 열린 파일이있는 프로세스가 없는지 확인하십시오
/var/log
(lsof
kubanskamac이 제안한대로 사용 ). /var/log
충분한 여유 공간이있는 다른 파티션으로 이동하십시오 (예에 따라/home/log
).- / var / log에서 / home / log (
ln -s /home/log /var/log
) 로 심볼릭 링크 만들기 - 첫 번째 단계에서 중지 한 프로세스를 다시 시작하십시오.
이것은 내가 좋은 습관으로 생각하는 것과는 거리가 먼 점에 유의하십시오. 서버를 종료 할 필요가없는 해결 방법 일뿐입니다. 올바른 해결책은 충분한 공간이 있는 새 파티션 을 만들 /var
거나 현재 /var/log
파티션을 확장하는 것입니다.
답변
@hwjp 기반의 또 다른 솔루션으로 다른 드라이브 볼륨을 사용하여 이동할 수없는 경우 사용 가능한 공간이 더 많은 다른 볼륨으로 가상 드라이브 볼륨을 만들 수 있습니다 (제 경우).
가상 볼륨 생성
A) 할 : sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200
- if = / dev / zero : 데이터 저장 초기화를위한 문자 스트림을 제공하는 입력 파일
- of = VHD.img : / thevolumeofyourchoice에 저장소 볼륨으로 생성 될 이미지 파일
- bs = 1M : 한 번에 최대 1M 읽기 및 쓰기
- count = 1200 : 1200M (1GB) 입력 블록 만 복사
B) do : sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.img
mkfs 유틸리티를 사용하여 VHD-log 이미지 파일에서 EXT4 파일 시스템 유형을 포맷하십시오.
C) do : sudo mkdir /thevolumeofyourchoice/vlog
VHD-log를 디렉토리 (마운트 포인트)에 마운트
D) 할 : sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /thevolumeofyourchoice/vlog
D1) 시스템 부팅시 VHD-log를 최종 디렉토리에 마운트하려면이 항목을 / etc / fstab 파일에 추가하십시오.
/thevolumeofyourchoice/VHD-log.img /var/log/ ext4 defaults 0 0
오래된 로그 파일을 이동하십시오.
E) 할 :
service rsyslog stop
lsof | grep /var/log
/ var / log에 열려있는 파일을 나열하고 필요한 데몬을 끕니다 (내 경우에는 aap22, freshclam)cp -rp /var/log/* /thevolumeofyourchoice/vlog
(cp -p –preserve = mode, ownership, timestamps와 동일)
F) 할 :
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) 수행 : service rsyslog start
중지 한 다른 서비스를 다시 시작하십시오 .
마지막으로 다시 확인 :
– 당신은 할 ca를 lsof | grep /var/log
로 / var / 로그 목록에 열려있는 파일을 그들이에 / var에 포인트 확인 / 로그인되지는 / var / log 된
mv, backup 또는 / var / log-old를 모두 삭제할 수 있습니다.
답변
나는 단지 :
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