# Spool Directories

## Default Spool location

The main Cyrus IMAP mail data directory structure is the spool, and its location is defined by `partition-name` entries in imapd.conf(5).

Additionally, on servers with more than one spool partition, that partition in which new user mailboxes are to be created is specified by the `defaultpartition` directive.

> `partition-name:` <none>

> > The pathname of the partition name. At least one partition pathname MUST be specified. If the defaultpartition option is used, then its pathname MUST be specified. For example, if the value of the defaultpartion option is part1, then the partition-part1 field is required.

> `defaultpartition:` <none>

> > The partition name used by default for new mailboxes. If not specified, the partition with the most free space will be used for new mailboxes.

> > Note that the partition specified by this option must also be specified as partition-name, where you substitute 'name' for the alphanumeric string you set defaultpartition to.

Note

There is nothing magical about the name "default" and in fact any name may be used for the default-partition. We'll use the name "main" in this documentation.

- Sample:

      defaultpartition: main
      partition-main: /var/spool/cyrus

## Additional Spool locations

Multiple partitions may be used for various reasons, such as to distribute load between different storage pools or technologies. Please consult Mail Spool Partitions for more details and use cases.

To define additional mail spools, add more `partition-name` entries to imapd.conf(5) as needed. For example, let's imagine we want to migrate users to new partitions split by first character of the user's last name, and add a partition for shared mailboxes (see Shared Namespaces):

- Sample:

      defaultpartition: main
      partition-main: /var/spool/cyrus
      partition-am: /var/spool/cyrus-am
      partition-nz: /var/spool/cyrus-nz
      partition-shared: /var/spool/cyrus-shared

# Metadata Partitions

In addition to the mailbox and message data, Cyrus stores various metadata in the mail spool, such as indexes, annotations, etc. It may be useful in some circumstances to separate this metadata into its own partitions. For each partition to be split in this way, one must define a metadata partition for each data partition, using the same name, so Cyrus knows how to relate them to each other.

As well as specifying locations for the metadata, one must also tell Cyrus which metadata files to place in these special partitions. The default behaviour is to locate all metadata in the data partition(s).

The configuration directives to do so are quite similar to those for data partitions:

> `metapartition_files:` <empty string>

> > Space-separated list of metadata files to be stored on a metapartition rather than in the mailbox directory on a spool partition. Allowed values: header, index, cache, expunge, squat, annotations, lock, dav, archivecache

> `metapartition-name:` <none>

> > The pathname of the metadata partition name, corresponding to spool partition partition-name. For any mailbox residing in a directory on partition-name, the metadata files listed in metapartition_files will be stored in a corresponding directory on metapartition-name. Note that not every partition-name option is required to have a corresponding metapartition-name option, so that you can selectively choose which spool partitions will have separate metadata partitions.

Again, building on our examples above:

- Sample:

      defaultpartition: main
      partition-main: /var/spool/cyrus
      partition-am: /var/spool/cyrus-am
      partition-nz: /var/spool/cyrus-nz
      partition-shared: /var/spool/cyrus-shared
      metapartition_files: header index cache expunge squat annotations
      metapartition-main: /var/spool/cyrusmeta/main
      metapartition-am: /var/spool/cyrusmeta/am
      metapartition-nz: /var/spool/cyrusmeta/nz
      metapartition-shared: /var/spool/cyrusmeta/shared