メールログは、mail.logへ

postfixのログをsyslogに書き込まないでmail.logだけに書き込む設定

postfixは、メールがどこから来てどこに送ったのかを細かくログファイルに記録します。しかし同じ記録をmail.logだけではなくsyslogにも書き込むのが難点です。これは、無駄というだけではなく、syslogの大事な記録がメールログに埋まってしまい見落としてしまいます。

メールログが二ヶ所に記録される理由

syslogとmail.logに書きたすのは、rsyslogプログラムです。postfixからmailという属性のログが送られてくるので、そのログの属性と優先順位に応じてrsyslogが適切なファイルに書き込んだりします。

Ubuntuを例にするとrsyslogの設定ファイルは次のようになっています(不要な部分を省略しています)。

# cat /etc/rsyslog.d/50-default.conf
*.*;auth,authpriv.none             -/var/log/syslog
mail.*                          -/var/log/mail.log

これは、次のような意味です。

  • 全てのログは、/var/log/syslogに記録する。ただしauthとauthpriv属性のは除く。
  • mail属性のログは、/var/log/mail.logに記録する。

このようにmail属性を記録するエントリーが二ヶ所にあるので、mail.logだけでなくsyslogにもログが記録されます。

rsyslogの設定を修正

メールログをsyslogに記録しないようにするには、authとauthpriv属性と同じくmail属性のログを除くようにすれば良いということです。

*.*;mail,auth,authpriv.none             -/var/log/syslog
mail.*                          -/var/log/mail.log

本来は、mail属性のログを除くという意味でmail.noneと書くのですが、まとめてmail,auth,authpriv.noneと書けます。

rsyslogの再起動

rsyslogの設定ファイルを修正しただけでは、現在起動しているrsyslogに設定が反映されません。そこで設定を反映させるためにserviceコマンドまたはrestartコマンドでrsyslogを再起動させます。

# service rsyslog restart
rsyslog start/running, process 16059

# restart rsyslog
rsyslog start/running, process 20358

rsyslogプログラムを再起動させるには、/etc/init.d/rsyslog restartでも良いのですが、次のように怒られてしまいます。

# /etc/init.d/rsyslog restart
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service rsyslog restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop rsyslog ; start rsyslog. The restart(8) utility is also available.
rsyslog stop/waiting
rsyslog start/running, process 17137

virbr0を削除する

KVMのdefaultネットワークが作るvirbr0を削除します。

UbuntuにKVMをインストールすると、漏れなくvirbr0が作成されます。このインタフェースを使えばKVMゲストは、DHCHサーバの機能でIPアドレスが自動で割り振られ、外部ともNATを通して通信できます。

しかし外部からゲストに接続するには、このインタフェースよりも新たにブリッジインタフェースを作成した方が簡単でパフォーマンスも良くなります。そこで使わないインタフェースを残しておいても無駄なので、virbr0を削除します。

ネットワークの状態を確認する

KVMが管理しているネットワークの情報は、次のコマンドで調べられます。

% virsh net-list
Name                 State      Autostart
-----------------------------------------
default              active     yes

defaultネットワークが有効になっていて、起動と同時に作成されるようになっています。

このdefaultネットワークがvirbr0を作っているか確認しておきます。

% virsh net-dumpxml default
<network>
  <name>default</name>
  <uuid>8ad90928-22a5-38f5-4927-1932584efb64</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0' />
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254' />
    </dhcp>
  </ip>
</network>

間違いなくdefaultネットワークがvirbr0インタフェースを作っています。

virbr0を削除する

virbr0を削除するにはdefaultネットワークを削除します。

% virsh net-destroy default
Network default destroyed

virbr0が再起動したときに作成されないようにする

virbr0は、再起動すると自動的に作成されるようになっています。そのため再起動しても自動的にdefaultネットワークが作られないように設定を変えておく必要があります。

% virsh net-autostart default --disable
Network default unmarked as autostarted

defaultネットワークの設定確認

ネットワークが削除されて、再起動しても作成されないようになっているか確認します。削除されたネットワークなので、状態を表示させるのに–allオプションが必要になります。

% virsh net-list --all
Name                 State      Autostart
-----------------------------------------
default              inactive   no

qcow2ファイルをマウント

KVMのディスクイメージファイルとしてよく使われるqcow2フォーマットのファイルをKVMホストにマウントする方法を紹介します。

基本はloopオプション

Linuxは、loopオプションを使用することでディスク(パーティション))イメージファイルをマウントことができます。たとえば、CD-ROMのイメージであるISO9660フォーマットのファイルをマウントするには、次のコマンドを使います。

sudo mount -o loop -t iso9660 cd_crom.iso /mnt

qcow2は、マウントの前にディスクを接続する

しqcow2は、1つのファイルに複数のパーティションを持てるフォーマットであるためにloopオプションではマウントすることができません。

そこでマウントの前にqemu-nbdコマンドを使用して「ディスク」として接続します。

sudo qemu-nbd --connect=/dev/nbd0 hdd_img.qcow2

これでhdd_img.qcow2が、/dev/nbd0に接続されました。

マウントするパーティション情報を知っている必要があります。分からなれkればfdiskコマンドでパーティション情報を読みとります。

sudo fdisk /dev/nbd0

後はmountコマンドで必要なパーティションをマウントするだけです。ファイルを間違って書き換えないようにroオプションを指定しておいた方が安心かもしれません。

sudo mount -t ext3 /dev/nbd0p1 /mnt

忘れずにqcow2ファイルを取り外し

使い終わったらアンマウントだけでなく、接続したqcow2ファイルを取り外しておかなければなりません。

sudo umount /dev/mnt
sudo qemu-nbd --disconnect /dev/nbd0