/ 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またはiノードを使用します。


オーバーAskUbuntuで本質的に同じ質問に対する詳細な回答はでありますaskubuntu.com/a/346579/422224
Eborbob

これは答えではなく提案です。可能であれば、btrfsなどのリアルタイム圧縮を使用してファイルシステムをログに記録します。このパーティションをマウントするときは、マウントオプション「compress = lzo」または「compress = zlib」を使用します。lzoはパフォーマンスを向上させ、zlibは圧縮を向上させます。
マッシモ

回答:


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 / reloadデーモンを再度復元します。

簡単な方法(ダウンタイム)

新しい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!

PS-あなたfstabもおそらくあなたにそれを追加したいと思うでしょう。これを行う1つの方法を次に示します。これも非常に簡単なマウントを想定しています。

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

(mtabをfstabに接続することについては/server//a/267610/80606を参照)


5
いい解決策。私は変更をいただきたい一つのことは、あなたに取って代わりつつあるcp -rsudo tar cpfし、sudo tar xpfroot以外のユーザーが作成したログがありますオフのチャンスにファイルの所有権と権限を維持するために。
ブレンダベル

2

あなたができるもう一つのことは:

  • 開いているファイルがあるプロセスを停止します /var/log
  • 開いているファイルがオンになっているプロセスがないことを確認します/var/loglsofkubanskamacの推奨どおりに使用)
  • /var/log十分な空き領域がある別のパーティションに移動します(例に従って、それは/home/log
  • / var / logから/ home / logへのシンボリックリンクを作成します(ln -s /home/log /var/log
  • 最初のステップで停止したプロセスを再起動します

これは、私がグッドプラクティスと考えるものとはほど遠いことに注意してください。これは単なる回避策であるため、サーバーをシャットダウンする必要はありません。適切なソリューションは、新規作成することです/varか、/var/log十分なスペースとパーティションを(または現在の1を拡張します)、


logrotateが実行されている場合、リンクのアイデアを実行することによる影響はありますか?ファイルがまだリンクされていなかった場合、ファイルの場所を上書きするのか、それとも台無しにするのかは知りませんでした。
バートシルバース

はい、最終的には、サーバーの実行中にこの操作を行うことはそれほど良くないようです。その場合、どのプロセスがまだ古い/ 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ログを最終ディレクトリにマウントするには、このエントリを/ etc / fstabファイルに追加します。

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

古いログファイルを移動します。

E)する:

  • service rsyslog stop
  • lsof | grep /var/log / var / logで開いているファイルをリストし、必要なデーモン(私の場合はapach2、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 / logで開いているファイルをリストし、/ var / log-oldではなく/ var / logを指していることを確認します

すべてが正常に終了した後、/ var / log-oldをmv、バックアップ、または削除できます。


-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ですか?この質問全体はベテランの管理者向けではない、と私は推測します。
クバンチク

どういう意味ですか?/ home / logは/ var / logにマウントされますが、その逆ではありません。はい、そのままにしておいても問題ありません。各ブートで自動的に復元され、すべてのプロセスが空の/ var / logマウントポイントに新しいログを作成しようとしないようにしてください。
アレクサンダーシュチェブリキン

多くの場合、セキュリティ要件には、実際の個別のマウントポイントに/ var / logおよび/ var / log / auditが必要です。それ以外の場合はそのままにして、適切なログローテーションを設定するだけで、不必要なディスク使用を回避できます。
ブラッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.