/ var / log 디렉토리를 이동하는 방법


15

우리의 생산 서버가 루트위한 작은 드라이브가 마운트 지점입니다 /, /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 를 사용 합니다.



이것은 대답이 아니라 제안입니다. 가능하면 btrfs와 같은 실시간 압축을 사용하여 파일 시스템을 로그에 사용하십시오. 이 파티션을 마운트 할 때는 마운트 옵션 "compress = lzo"또는 "compress = zlib"를 사용하십시오. lzo는 더 나은 성능, zlib 더 나은 압축을 제공합니다.
Massimo

답변:


25

적절한 디자인

lvextend && ext2onlineLVM을 사용하지 않거나 잘못된 파일 시스템 유형을 사용하기 때문에 문제의 파일 시스템을 확장 (을 사용하여 ) 할 수 없다고 가정합니다 .

당신의 접근 방식

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 아님)을 사용하는 것입니다.


8

다른 사람의 답변은 훌륭하고 정확하므로 반드시 먼저 읽어야합니다.

귀하의 사례가 다음과 같이 매우 간단한 것으로 판명되면 쉽게 복사하여 붙여 넣을 수 있기 때문에 이것을 공유한다고 생각했습니다.

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 참조 )


5
좋은 해결책. 한 가지는 내가 변화는 당신을 대체 거라고 cp -rsudo tar cpf하고 sudo tar xpf루트가 아닌 사용자가 생성 한 로그가 오프 기회에 파일 소유권 및 권한을 보존 할 수 있습니다.
Brenda Bell

2

당신이 할 수있는 또 다른 일은 :

  • 파일을 연 프로세스를 중지하십시오. /var/log
  • 열린 파일이있는 프로세스가 없는지 확인하십시오 /var/log( lsofkubanskamac이 제안한대로 사용 ).
  • /var/log충분한 여유 공간이있는 다른 파티션으로 이동하십시오 (예에 따라 /home/log).
  • / var / log에서 / home / log ( ln -s /home/log /var/log) 로 심볼릭 링크 만들기
  • 첫 번째 단계에서 중지 한 프로세스를 다시 시작하십시오.

이것은 내가 좋은 습관으로 생각하는 것과는 거리가 먼 점에 유의하십시오. 서버를 종료 할 필요가없는 해결 방법 일뿐입니다. 올바른 해결책은 충분한 공간이 있는 새 파티션 을 만들 /var거나 현재 /var/log파티션을 확장하는 것입니다.


로그 로테이션이 실행되는 경우 링크 아이디어를 수행하면 어떤 영향이 있습니까? 파일이 이미 링크되어 있지 않은 경우 파일 위치를 덮어 쓰거나 망칠 것인지 알지 못했습니다. 나중에 더 많은 유지 관리 문제가 발생할 수 있습니다.
Bart Silverstrim

예, 서버가 실행되는 동안이 작업을 수행하는 것이 좋지 않은 것 같습니다. 그러면 어떤 프로세스가 여전히 이전 / var / log /를 사용하는지 확인할 수 없습니다. 또한 일부 응용 프로그램은 심볼릭 링크를 쉽게 처리하지 못해 결국 로그를 망칠 수 있다고 생각합니다. 유지 관리 모드를 예약해야 할 수도 있습니다. 실제로 왼쪽 공간이 짧아지면 파일을 수동으로 삭제합니다. mriedman : 파티션 크기를 조정할 수 있는지 확인합니다
Razique

0

@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.imgmkfs 유틸리티를 사용하여 VHD-log 이미지 파일에서 EXT4 파일 시스템 유형을 포맷하십시오.

C) do : sudo mkdir /thevolumeofyourchoice/vlogVHD-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를 모두 삭제할 수 있습니다.


-1

나는 단지 :

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

그것은 휴가가 좋은 /var/log이상 장착 /home/log그대로? 이 전체 질문은 노련한 관리자를위한 것이 아닙니다.
kubanczyk

무슨 소리 야? / home / log는 다른 방법이 아닌 / var / log에 마운트됩니다. 그리고 예, 그대로 두는 것은 문제가되지 않습니다. 모든 프로세스가 빈 / var / log 마운트 지점에 새로운 로그를 만들지 않을 때마다 부팅 할 때마다 자동으로 부팅되도록하십시오.
Alexander Shcheblikin

보안 요구 사항은 실제 별도의 마운트 지점에서 / var / log 및 / var / log / audit가 필요한 경우가 많습니다. 그렇지 않으면 불필요한 디스크 사용을 피하기 위해 적절한 로그 회전을 설정하고 그대로 두십시오.
Brad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.