Timo Sirainen wrote: >> Introduction: >> If dovecot LDA save failed to mbox (not enough disk space, for example), >> it does not do rollback. Then my mailbox was corrupted. Last message is >> dropped in the middle of headers(body, attachments, etc). > > That shouldn't be happening, even if you're not using quota plugin at > all. What does Dovecot log in that situation?
I'm sorry, but this happens if I do not use quota plugin for LDA. :( My environment is: -- OS: Linux 2.6.30 i686 Slackware 11.0.0 -- dovecot 1.2.6 (with 2 patchs: stat((null)) + istream-seekable) -- user inbox(mbox) and homedir(with mbox) locate at NFS (OS: Linux 2.6.18.7 i686 Slackware 11.0.0) -- NFS has file system group quota Test user is over quoted: --- Disk quotas for group #5751796 (gid 5751796): Filesystem blocks quota limit nfse:/export 23768* 10240 10240 --- dovecot -n --- # 1.2.6: /usr/local/etc/dovecot.conf # OS: Linux 2.6.30 i686 Slackware 11.0.0 base_dir: /var/run/dovecot/ [ skip listen and ssl_* conf params ] mmap_disable: yes mail_nfs_storage: yes mail_nfs_index: yes mbox_write_locks: dotlock_try fcntl mail_plugins(default): quota imap_quota mail_plugins(imap): quota imap_quota mail_plugins(pop3): quota lda: mail_plugins: quota quota_full_tempfail: no sendmail_path: /usr/lib/sendmail rejection_subject: Rejected: %s rejection_reason: Your message to <%t> was automatically rejected:%n%r auth_socket_path: /var/run/dovecot/auth-master auth default: mechanisms: plain login passdb: driver: sql userdb: driver: prefetch userdb: driver: sql socket: type: listen master: path: /var/run/dovecot/auth-master mode: 384 plugin: quota: dirsize:Quota quota2: fs:Quota:group --- If I change only one string (disable LDA quota): "lda: mail_plugins: quota", my inbox starts corrupt. 1. LDA with quota plugin log: $ echo "123123123" | /usr/local/libexec/dovecot/deliver -d koc --- Quota root: name=Quota backend=dirsize args= Quota rule: root=Quota mailbox=* bytes=10383360 messages=0 Quota root: name=Quota backend=fs args=group Quota rule: root=Quota mailbox=* bytes=10383360 messages=0 mbox: data=~/:INBOX=/var/virtual/mail/I/I/koc:INDEX=MEMORY fs: root=/var/virtual/home/I/I/koc, index=, control=, inbox=/var/virtual/mail/I/I/koc fs quota add storage dir = /var/virtual/home/I/I/koc fs quota block device = nfse:/export fs quota mount point = /mount/m5 quota-fs: host=nfse, path=/export, gid=5751796, bytes quota-fs: gid=5751796, value=24338432, limit=10485760, active=1 from=<>, msgid=: save failed to INBOX: Quota exceeded (mailbox for user is full) from=<>, msgid=: rejected: Quota exceeded (mailbox for user is full) msgid=: Return-Path missing, rejection reason: Quota exceeded (mailbox for user is full) --- 2. LDA without quota plugin: $ echo "123123123" | /usr/local/libexec/dovecot/deliver -d koc --- mbox: data=~/:INBOX=/var/virtual/mail/I/I/koc:INDEX=MEMORY fs: root=/var/virtual/home/I/I/koc, index=, control=, inbox=/var/virtual/mail/I/I/koc close(/var/virtual/mail/I/I/koc.lock) failed: Disk quota exceeded from=<>, msgid=: saved mail to INBOX --- My INBOX before delivery: -rw------- 1 5751796 5751796 4087 2009-10-16 17:24 koc after: -rw------- 1 5751796 5751796 4096 2009-10-16 17:25 koc (look at size, now it 8*512k blocks) If INBOX is zero size, than deliver say same: "lock failed, saved mail to INBOX", but INBOX size still zero. If INBOX is 1 byte size, than deliver say same, but message writes to INBOX to full 512k block. > Or what does your MTA log? Does it say deliver crashed? Because that's > the only reason I can think of that it would leave the mbox corrupted. > Post your dovecot -n output also? MTA log is: stat=ok3: saved mail to INBOX. Deliver not crash. I can make strace if it helps. > The stat((null)) should be fixed by this: > http://hg.dovecot.org/dovecot-2.0/rev/14eeed133d57 I backport it to dovecot-1.2 and "stat((null))" fixed now! Thanx again, Timo! =kostik