DOVEADM-FS(1)
π DOVEADM-FS(1) π
okay bestie, welcome to doveadm-fs β it's part of the Dovecot fam (you know, the mail server situation π) and it's literally your little backstage pass to the abstract mail storage filesystem. let's get into it π¦
β¨ NAME β¨
doveadm-fs β interact with the abstract mail storage filesystem. no cap, that's the whole vibe.
πΈ SYNOPSIS πΈ
doveadm [GLOBAL OPTIONS] fs command config-filter-name [ARGUMENTS]
doveadm [GLOBAL OPTIONS] mail fs command [OPTIONS] config-filter-name
[ARGUMENTS]
π DESCRIPTION π
so the doveadm fs commands are how you abstractly poke at the storage driver that's defined in your Dovecot config. it's giving "I don't need to know how the storage driver was designed internally, I just want in." you get access to the mailbox structure without having to care about the driver's whole lore. obsessed π
config-filter-name
filter name to use when looking up the fs settings. for example: mail_attachments, obox, metacache, fts/dovecot. and yes babes, you can also use an empty filter name and just specify the fs settings with the -o parameter instead. main character energy honestly.
π GLOBAL OPTIONS π
these are the global doveadm(1) options, iykyk:
-Dβ enables verbosity and debug messages. turn it on when you need to see everything π-Oβ do NOT read any config file, just use defaults. thedovecot_storage_versionsetting defaults to the latest version, but you can override it with-o.-kβ preserve the entire environment fordoveadm, not just theimport_environmentsetting.-vβ enables verbosity, including a progress counter. lil dopamine bar β¨-iinstance-name β if you're running multiple Dovecot instances, pick the config file based on this instance name. see theinstance_namesetting for more info.-cconfig-file β read configuration from the given config-file. by default it first reads the config socket, and then falls back to/etc/dovecot/dovecot.conf. you can also point this at the config socket of some instance running a compatible version π-osetting=value β overrides the configuration setting from/etc/dovecot/dovecot.confand from the userdb with the given value. wanna override multiple settings? just specify-omultiple times, she's flexible π-fformatter β specifies the formatter for formatting the output. supported formatters are:flowβ prints each line withkey=valuepairs.jsonβ prints a JSON array of JSON objects.pagerβ prints eachkey: valuepair on its own line and separates records with form feed character (^L).tabβ prints a table header followed by tab separated value lines.tableβ prints a table header followed by adjusted value lines.
π OPTIONS π
-Aβ if the-Aoption is present, the command will be performed for all users. using this with system users fromuserdb { driver = passwd }is not recommended, because it also contains users with a lower UID than the one configured with thefirst_valid_uidsetting. when the SQL userdb module is used, make sure theuserdb_sql_iterate_querysetting setting matches your database layout. when using the LDAP userdb module, make sure theuserdb_fieldssetting anduserdb_ldap_iterate_fieldssetting settings match your LDAP schema. otherwisedoveadm(1)will be unable to iterate over all users. π-uuser/mask β run the command only for the given user. you can also use'*'and'?'wildcards (e.g.-u *@example.org). slay π¦-Ffile β execute the command for all the users in the file. similar to the-Aoption, but instead of getting the list of users from the userdb, they're read from the given file. the file contains one username per line.-Ssocket_path β the option's argument is either an absolute path to a local UNIX domain socket, or a hostname and port (hostname:port), in order to connect a remote host via a TCP socket. this lets an administrator executedoveadm(1)mail commands through the given socket.
fr fr reminder:-Aover apasswduserdb will sweep in low-UID system users, and LDAP/SQL setups need their iterate settings matched up or the whole thing just... won't. π
π COMMANDS π
copy
doveadm [GLOBAL OPTIONS] fs copy config-filter-name source-path dest-
path
doveadm [GLOBAL OPTIONS] mail fs copy [-A | -u user | -F file] [-S
socket_path] config-filter-name source-path dest-path
copy source path to the destination path. simple as that, bestie π
delete
doveadm [GLOBAL OPTIONS] fs delete [-R] [-n count] config-filter-name
path [path ...]
doveadm [GLOBAL OPTIONS] mail fs delete [-A | -u user | -F file] [-S
socket_path] [-R] [-n count] config-filter-name path [path ...]
delete all data associated with the path provided.
-Rβ recursively delete files. π₯-ncount β maximum number of parallel operations to perform.
get
doveadm [GLOBAL OPTIONS] fs get config-filter-name path
doveadm [GLOBAL OPTIONS] mail fs get [-A | -u user | -F file] [-S
socket_path] config-filter-name path
retrieve data associated with the path provided. go get it π«Ά
iter
doveadm [GLOBAL OPTIONS] fs iter config-filter-name path
doveadm [GLOBAL OPTIONS] mail fs iter [-A | -u user | -F file] [-S
socket_path] config-filter-name path
iterate through all data files in the path provided. one by one, no skips π
iter-dirs
doveadm [GLOBAL OPTIONS] fs iter-dirs config-filter-name path
doveadm [GLOBAL OPTIONS] mail fs iter-dirs [-A | -u user | -F file] [-S
socket_path] config-filter-name path
iterate through all directories in the path provided. the dirs get their moment too π
put
doveadm [GLOBAL OPTIONS] fs put [-h hash] [-m key=value] config-filter-
name input_path path
doveadm [GLOBAL OPTIONS] mail fs put [-A | -u user | -F file] [-S
socket_path] [-h hash] [-m key=value] config-filter-name path
store data at the path provided. drop it right in there β¨
-hhash β save provided hash as content hash. must be eitherMD5orSHA256in hexdigits.-mkey=value β assign a value to a metadata. can be provided as many times as needed. requires eithermetawrapas driver or a metadata capable FS-driver.
stat
doveadm [GLOBAL OPTIONS] fs stat config-filter-name path
doveadm [GLOBAL OPTIONS] mail fs stat [-A | -u user | -F file] [-S
socket_path] config-filter-name path
retrieve files status for the path provided. currently, only the total size (in bytes) of the item is returned. just the size bestie, don't ask for more π
π REPORTING BUGS π
found a bug? report it β including doveconf -n output β to the Dovecot Mailing List β¨dovecot@dovecot.orgβ©. info about reporting bugs lives at: β¨https://dovecot.org/bugreport.htmlβ©. we love a reproducible issue report π
β EXAMPLE β
how to decompress a file:
doveadm -o fs=compress,posix -o fs/compress/fs_driver=compress -o fs/posix/fs_driver=posix -o fs_posix_prefix=/tmp/ fs get "" test.gz
using a named filter:
doveadm mail fs -u testuser get obox path/to/file
π§ SEE ALSO π§
doveadm(1) β go read it, she's the parent page π«
and that's the whole page bestie!! π this one came from the Dovecot fam, tagged f979264 and dated April 2026 β you're all caught up, now go interact with that storage filesystem responsibly π β¨
π¦ where this page comes from
- alpine 3.23: dovecot-doc 2.4.5-r0 Β· MIT AND LGPL-2.1-or-later
- alpine 3.24: dovecot-doc 2.4.5-r0 Β· MIT AND LGPL-2.1-or-later
- arch rolling: dovecot 2.4.5-1 Β· MIT AND LGPL-2.1-only
- fedora 43: dovecot 1:2.4.5-1.fc43 Β· MIT AND LGPL-2.1-only
- fedora 44: dovecot 1:2.4.5-1.fc44 Β· MIT AND LGPL-2.1-only
- nixos 26.05: dovecot 2.4.5
- nixpkgs unstable: dovecot 2.4.5
- opensuse-leap 16.0: dovecot24 2.4.5-160000.1.1 Β· BSD-3-Clause AND LGPL-2.1-or-later AND MIT
- opensuse-leap 16.0: dovecot24 2.4.5-160000.1.1 Β· BSD-3-Clause AND LGPL-2.1-or-later AND MIT
- opensuse-leap 16.0: dovecot24 2.4.5-160000.1.1 Β· BSD-3-Clause AND LGPL-2.1-or-later AND MIT
- opensuse-leap 16.0: dovecot24 2.4.5-160000.1.1 Β· BSD-3-Clause AND LGPL-2.1-or-later AND MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms