Exim: höhere Quota durch Hardlinks

Was man üblicherweise auf einem Mailserver nicht sieht, sind Hardlinks in einem IMAP Postfach. Neulich hatten wir einen Fall, bei dem ein Postfach nicht mehr mit Emails bestückt werden konnte, da angeblich die Quota überschritten war. Der Quota Befehl bzw. die Diskusage zeigten aber noch mehr als genug Platz an um Emails zu speichern. Eine lange Debugsession mit dem Mailserver später zeigte sich dies Bild:

# ls -la
insgesamt 41284
drwx------  2 51703 exim    53248 25. Nov 13:57 .
drwx------ 33 51703 exim     4096 26. Nov 22:38 ..
-rw-------  2 51703 exim     4688 28. Jul 14:27 1406550448.H508202P31298.testmailsystem.de:2,STac
-rw-------  1 51703 exim     6228 28. Jul 14:29 1406550593.H760899P1075.testmailsystem.de:2,STac
-rw-------  2 51703 exim     7124 28. Jul 14:30 1406550644.H440184P3285.testmailsystem.de:2,STac
-rw-------  1 51703 exim    23883 28. Jul 23:57 1406584630.H262931P23098.testmailsystem.de:2,STac
-rw-------  1 51703 exim    38557 28. Jul 23:57 1406584630.H262971P23108.testmailsystem.de:2,STac
-rw-------  1 51703 exim    10399 31. Jul 21:16 1406834208.H555417P7976.testmailsystem.de:2,STac
-rw-------  1 51703 exim     4753  6. Aug 14:00 1407326454.H100216P15143.testmailsystem.de:2,STac
-rw-------  1 51703 exim     8542  6. Aug 17:05 1407337554.H866124P23519.testmailsystem.de:2,ST
-rw-------  1 51703 exim     5139  7. Aug 03:19 1407374382.H660749P16291.testmailsystem.de:2,ST
-rw-------  2 51703 exim  7709636  7. Aug 09:17 1407395874.H306908P12145.testmailsystem.de:2,ST
-rw-------  1 51703 exim    19706  7. Aug 17:20 1407424830.H721569P4216.testmailsystem.de:2,ST
-rw-------  2 51703 exim    28758  8. Aug 03:16 1407460589.H96348P29141.testmailsystem.de:2,ST
-rw-------  1 51703 exim    19287  8. Aug 05:09 1407467371.H994402P28663.testmailsystem.de:2,ST
-rw-------  2 51703 exim   163906 10. Aug 11:59 1407664747.H312607P5781.testmailsystem.de:2,ST
-rw-------  1 51703 exim   145859 12. Aug 08:32 1407825143.H875343P15843.testmailsystem.de:2,ST
-rw-------  1 51703 exim     2883 12. Aug 17:52 1407858759.H268291P26980.testmailsystem.de:2,ST
-rw-------  1 51703 exim    15142 12. Aug 23:31 1407879079.H54240P1692.testmailsystem.de:2,ST
-rw-------  1 51703 exim   169634 13. Aug 12:33 1407926019.H343973P20662.testmailsystem.de:2,ST
-rw-------  1 51703 exim  1811494 13. Aug 12:33 1407926030.H129470P20750.testmailsystem.de:2,ST
-rw-------  1 51703 exim    14314  1. Sep 16:43 1409582634.H655301P27301.testmailsystem.de:2,STac
-rw-------  2 51703 exim     6615  1. Sep 16:48 1409582889.H200965P32252.testmailsystem.de:2,STac
-rw-------  1 51703 exim    81891  1. Sep 16:59 1409583555.H494207P11319.testmailsystem.de:2,RSTac
-rw-------  1 51703 exim     5922  2. Sep 09:59 1409644784.H204618P17282.testmailsystem.de:2,STac
-rw-------  1 51703 exim     3205  2. Sep 10:29 1409646565.H14176P17846.testmailsystem.de:2,STac
-rw-------  2 51703 exim    69525  2. Sep 14:13 1409659986.H860359P18194.testmailsystem.de:2,STac
-rw-------  2 51703 exim  2797748  2. Sep 14:22 1409660562.H502395P27754.testmailsystem.de:2,STac
-rw-------  1 51703 exim     3469  2. Sep 16:03 1409666611.H110966P30774.testmailsystem.de:2,STac
-rw-------  1 51703 exim     6171  2. Sep 17:17 1409671020.H386583P8312.testmailsystem.de:2,STac
-rw-------  2 51703 exim   249270  2. Sep 18:04 1409673850.H25221P18140.testmailsystem.de:2,STac
-rw-------  2 51703 exim   249310  2. Sep 18:27 1409675249.H305576P6080.testmailsystem.de:2,STac
-rw-------  2 51703 exim     2879  3. Sep 16:56 1409756208.H521320P17256.testmailsystem.de:2,STac
-rw-------  1 51703 exim   716982  5. Sep 10:51 1409907100.H303636P30461.testmailsystem.de:2,STac
-rw-------  1 51703 exim    24992  5. Sep 10:52 1409907143.H139290P30872.testmailsystem.de:2,STac
-rw-------  1 51703 exim    28603  5. Sep 22:07 1409947669.H441637P29243.testmailsystem.de:2,STac
-rw-------  2 51703 exim    35686  5. Sep 22:07 1409947672.H347460P29280.testmailsystem.de:2,STac
-rw-------  1 51703 exim    38421  7. Sep 15:03 1410094984.H95975P6942.testmailsystem.de:2,STac
-rw-------  1 51703 exim    35049  7. Sep 17:30 1410103800.H638453P11898.testmailsystem.de:2,STac
-rw-------  1 51703 exim    25767  8. Sep 04:56 1410144975.H59307P22155.testmailsystem.de:2,STac
-rw-------  1 51703 exim    24440  8. Sep 19:16 1410196570.H600494P20981.testmailsystem.de:2,STac
-rw-------  2 51703 exim   269397  9. Sep 09:46 1410248803.H891098P16172.testmailsystem.de:2,ST
-rw-------  1 51703 exim     3102  9. Sep 13:27 1410262028.H932995P19527.testmailsystem.de:2,ST
-rw-------  1 51703 exim    18995  9. Sep 18:37 1410280675.H406778P10307.testmailsystem.de:2,ST
-rw-------  1 51703 exim    85418 10. Sep 04:02 1410314549.H547715P6092.testmailsystem.de:2,ST
-rw-------  1 51703 exim     5174 10. Sep 16:00 1410357617.H134775P24247.testmailsystem.de:2,STac
-rw-------  2 51703 exim    13042 11. Sep 13:11 1410433911.H351692P31331.testmailsystem.de:2,STac
-rw-------  1 51703 exim    26742 17. Okt 00:20 1413498059.H680439P25291.testmailsystem.de:2,Sac
-rw-------  2 51703 exim   557174 30. Okt 10:16 1414660560.H183389P11356.testmailsystem.de:2,STac
-rw-------  1 51703 exim    23529 11. Nov 20:21 1415733677.H442593P8240.testmailsystem.de:2,STac
-rw-------  1 51703 exim    29774 11. Nov 20:34 1415734451.H994279P18947.testmailsystem.de:2,STac

Die erste Überraschung war die farbliche Hervorhebung der Files, was normalerweise nur für Executeables gemacht wird. Zum Glück muß man sagen, wurde das farblich markiert, denn sonst wäre die 2 vor der Userid nicht aufgefallen.

Beim ls Befehl steht in der Spalte üblicherweise die Anzahl der Verzeichnisse in diesem Directoryeintrag, da es sich aber um Files handelt, mußte es etwas anderes sein: Hardlinks.

Ein Hardlink ist nichts weiter als ein zweiter Eintrag auf die gleiche Inode (Block im Filesystem) und durchaus eine normale Sache in einem Linuxfilesystem, also kein Bug. Es bedeutet, daß es (in unserem Fall) zwei Einträge gibt, welche die gleiche Inode referenzieren, also quasi eine Datei die es doppelt gibt.

Der Exim zählt die Dateien aber einzeln, was dann zur Abweichung mit der eingestellten Quota führt.

Um sich die Inodes anzeigen zu lassen, muß man ls mit dem Argument -i aufrufen. Beispiel: ls -ila

 5913370 -rw------- 1 51703 exim 5174 10. Sep 16:00 1410357617.H134775P24247.testmailsystem.de:2,STac
 5904472 -rw------- 2 51703 exim 13042 11. Sep 13:11 1410433911.H351692P31331.testmailsystem.de:2,STacDie erste Zeile ist ok, vorne ist die INODE der Datei.

Wenn man jetzt mit find die Inode sucht, erhält man diese zwei Files :

# find /mailacct/mailbenutzer/ -inum 5904472 -print
/mailacct/mailbenutzer/Maildir/cur/1410433911.H351692P31331.testmailsystem.de:2,STac
/mailacct/mailbenutzer/Maildir/.privat 2014/cur/1415952178.M141844P8647.testmailsystem.de,S=13042,W=13341:2,Sab

Da das Filesystem auf den Hardlink achtet, bekommt man die korrekte Quota angezeigt, weil die nach benutzten Inodes geht. Der Exim dagegen zählt die Dateigrößen, egal ob es sich um Links handelt oder nicht.

Was man jetzt tun muß ist, eine von beiden Dateien löschen. Keine Panik, daß stört die andere Datei kein bisschen, die wird nicht gelöscht oder beeinträchtigt.

Danach stimmt die Quota wieder.