/ 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 -r로 sudo 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.