MOUNT.CEPH(8)
π MOUNT.CEPH(8) β the Ceph filesystem mount era π
okay bestie, buckle up, because mount.ceph is about to become your new obsession π
πΈ NAME πΈ
mount.ceph β mount a Ceph file system π
β¨ SYNOPSIS β¨
mount.ceph name*@*fsid.*fs_name*=/[subdir] dir [-o options ]
(the lil asterisks are just the manpage doing its italic thing, don't panic π«Ά)
π« DESCRIPTION π«
so. mount.ceph is a helper for mounting the Ceph file system on a Linux host. It's giving supporting character with main character energy β it resolves monitor hostname(s) into IP addresses and reads authentication keys from disk, while the Linux kernel client component does most of the actual real work. teamwork, slay π
to mount a Ceph file system, use:
mount.ceph name@07fe3187-00d9-42a3-814b-72a4d5e7d5be.fs_name=/ /mnt/mycephfs -o mon_addr=1.2.3.4
where "name" is the RADOS client name (referred to hereafter as "RADOS user", and meaning any individual or system actor such as an application). yes, it's a whole person, it's a vibe π
the mount helper can fill in the cluster FSID by reading the ceph configuration file. it's recommended that you call the mount helper via mount(8) as per:
mount -t ceph name@.fs_name=/ /mnt/mycephfs -o mon_addr=1.2.3.4
and bestie, note that the dot . still needs to be a part of the device string in this case. do not forget the dot. the dot is iconic, the dot is mandatory π
the first argument is the device part of the mount command. it includes the RADOS user for authentication, the file system name and a path within CephFS that will be mounted at the mount point. that's three things, one string, we love a multitasker β¨
monitor addresses can be passed using the mon_addr mount option. multiple monitor addresses can be passed by separating addresses with a slash (/). only one monitor is needed to mount successfully; the client will learn about all monitors from any responsive monitor. however β it's a good idea to specify more than one in case the one you picked happens to be down at the time of mount. fewer regrets, more monitors π¦ monitor addresses take the form ip_address[:port]. if the port is not specified, the Ceph default of 6789 is assumed.
if monitor addresses are not specified, then mount.ceph will attempt to determine monitor addresses using local configuration files and/or DNS SRV records. in a similar way, if authentication is enabled on the Ceph cluster (which is done using CephX) and the options secret and secretfile are not specified in the command, the mount helper will spawn a child process that will use the standard Ceph library routines to find a keyring and fetch the secret from it (including the monitor address and FSID if those were not specified). it really be doing the most so you can do the least π
a sub-directory of the file system can be mounted by specifying the (absolute) path to the sub-directory right after "=" in the device part of the mount command. yes, absolute. no, don't ask π«Ά
mount helper application conventions dictate that the first two options are the device to be mounted and the mount point for that device. options must be passed only after these fixed arguments. rules are rules, periodt π
π OPTIONS π
π Basic π
confβ path to aceph.conffile. this is used to initialize the Ceph context for autodiscovery of monitor addresses and auth secrets. the default is to use the standard search path forceph.conffiles.mount_timeoutβ int (seconds), Default:60.ms_mode=<legacy|crc|secure|prefer-crc|prefer-secure>β set the connection mode that the client uses for transport. the available modes are:- legacy: use messenger v1 protocol to talk to the cluster
- crc: use messenger v2, without on-the-wire encryption
- secure: use messenger v2, with on-the-wire encryption
- prefer-crc: crc mode, if denied agree to secure mode
- prefer-secure: secure mode, if denied agree to crc mode
mon_addrβ monitor address of the cluster in the form ofip_address[:port].fsidβ cluster FSID. this can be found using theceph fsidcommand πsecretβ secret key for use with CephX. > β οΈ this option is insecure because it exposes the secret on the command line. to avoid this, use thesecretfileoption instead. (no cap, please usesecretfile.)secretfileβ path to file containing the secret key to use with CephX πrecover_session=<no|clean>β set auto reconnect mode in the case where the client is blocklisted. the available modes arenoandclean. the default isno.- no: never attempt to reconnect when the client detects that it has been blocklisted. blocklisted clients will not attempt to reconnect and their operations will fail too. π
- clean: client reconnects to the Ceph cluster automatically when it detects that it has been blocklisted. during reconnect, the client drops dirty data/metadata, invalidates page caches and writable file handles. after reconnect, file locks become stale because the MDS loses track of them. if an inode contains any stale file locks, read/write on the inode is not allowed until applications release all stale file locks. yeah. it's a lot. it's giving consequences π
commandfs=<fs-name>β specify the non-default file system to be mounted, when using the old syntax.commandmds_namespace=<fs-name>β a synonym offs=(Deprecated). old and busted, bestie, use the other one π«
π₯ Advanced π₯
cap_release_safetyβ int, Default: calculated.caps_wanted_delay_maxβ int, cap release delay, Default:60.caps_wanted_delay_minβ int, cap release delay, Default:5.dirstatβ enable reporting of file stats for a directory by runningcat dirname. note that these stats are updated lazily and thus may be outdated for a time after changes to the directory. Default: off.nodirstatβ disable reporting of file stats for a directory by runningcat dirname.ipβ my ip.noasyncreaddirβ no dcache readdir.nocrcβ no data crc on writes.noshareβ create a new client instance, instead of sharing an existing instance of a client mounting the same cluster.osdkeepaliveβ int, Default:5.osd_idle_ttlβ int (seconds), Default:60.rasizeβ int (bytes), max readahead. Default:8388608(8192*1024).rbytesβ report the recursive size of the directory contents forst_sizeon directories. Default: off.norbytesβ do not report the recursive size of the directory contents forst_sizeon directories.readdir_max_bytesβ int, Default:524288(512*1024).readdir_max_entriesβ int, Default:1024.rsizeβ int (bytes), max read size. Default:16777216(16*1024*1024).snapdirnameβ string, set the name of the hidden snapdir. Default:.snap.write_congestion_kbβ int (kb), max writeback in flight. scale with available memory. Default: calculated from available memory.wsizeβ int (bytes), max write size. Default:16777216(16*1024*1024) (writeback uses the smaller ofwsizeand stripe unit).wsyncβ execute all namespace operations synchronously. this ensures that the namespace operation will only complete after receiving a reply from the MDS. no shortcuts, no vibes-based namespace ops πnowsyncβ allow the client to do namespace operations asynchronously. when this option is enabled, a namespace operation may complete before the MDS replies, if it has sufficient capabilities to do so. this has been the default since kernel version5.16.crush_location=xβ specify the location of the client in terms of CRUSH hierarchy (since5.8). this is a set of key-value pairs separated from each other by'|', with keys separated from values by':'. note that'|'may need to be quoted or escaped to avoid it being interpreted as a pipe by the shell. the key is the bucket type name (e.g.rack,datacenterorregionwith default bucket types) and the value is the bucket name. for example, to indicate that the client is local to rack "myrack", data center "mydc" and region "myregion":
crush_location=rack:myrack|datacenter:mydc|region:myregion
each key-value pair stands on its own: "myrack" doesn't need to reside in "mydc", which in turn doesn't need to reside in "myregion". the location is not a path to the root of the hierarchy but rather a set of nodes that are matched independently. "multipath" locations are supported, so it is possible to indicate locality for multiple parallel hierarchies:
crush_location=rack:myrack1|rack:myrack2|datacenter:mydc
read_from_replica=<no|balance|localize>- no: disable replica reads, always pick the primary OSD (since
5.8, default). - balance: when a replicated pool receives a read request, pick a random OSD from the PG's acting set to serve it (since
5.8).
- no: disable replica reads, always pick the primary OSD (since
β οΈ this mode is safe for general use only since Octopus (i.e. after ceph osd require-osd-release octopus). otherwise it should be limited to read-only workloads such as snapshots.
- localize: when a replicated pool receives a read request, pick the most local OSD to serve it (since
5.8). the locality metric is calculated against the location of the client given withcrush_location; a match with the lowest-valued bucket type wins. for example, an OSD in a matching rack is closer than an OSD in a matching data center, which in turn is closer than an OSD in a matching region. close is close, bestie π
β οΈ this mode is safe for general use only since Octopus (i.e. after ceph osd require-osd-release octopus). otherwise it should be limited to read-only workloads such as snapshots.
π EXAMPLES π
mount the full file system:
mount -t ceph fs_user@.mycephfs2=/ /mnt/mycephfs
mount only part of the namespace/file system:
mount.ceph fs_user@.mycephfs2=/some/directory/in/cephfs /mnt/mycephfs
pass the monitor host's IP address, optionally:
mount.ceph fs_user@.mycephfs2=/ /mnt/mycephfs -o mon_addr=192.168.0.1
pass the port along with the IP address if it's running on a non-standard port:
mount.ceph fs_user@.mycephfs2=/ /mnt/mycephfs -o mon_addr=192.168.0.1:7000
if there are multiple monitors, pass each address separated by a /:
mount.ceph fs_user@.mycephfs2=/ /mnt/mycephfs -o mon_addr=192.168.0.1/192.168.0.2/192.168.0.3
pass the secret key for the CephX user, optionally:
mount.ceph fs_user@.mycephfs2=/ /mnt/mycephfs -o secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
π careful with that one β putting the secret in the command line is the insecure path, remember?
pass a file containing the secret key to avoid leaving the secret key in the shell's command history:
mount.ceph fs_user@.mycephfs2=/ /mnt/mycephfs -o secretfile=/etc/ceph/fs_username.secret
if authentication is disabled on the Ceph cluster, omit the credential-related option:
mount.ceph fs_user@.mycephfs2=/ /mnt/mycephfs
to mount using the old syntax:
mount -t ceph 192.168.0.1:/ /mnt/mycephfs
π AVAILABILITY π
mount.ceph is part of Ceph, a massively scalable, open-source, distributed storage system. please refer to the Ceph documentation at <https://docs.ceph.com> for more information. π¦
β¨ FEATURE AVAILABILITY β¨
okay so some of these options are β¨newerβ¨ than others, and if you're running an ancient kernel you're gonna have a bad time, so let's do a lil vibe check on who showed up when π°οΈ
- The
recover_session=option? yeah she got added to mainline Linux kernels in v5.4. before that? not a thing, babe π wsyncandnowsyncrolled up a lil later, in v5.7. so if your kernel predates that, they're giving imaginary friend energy β they simply do not exist for you π
lowkey always check your kernel version before you start ceph-ing, bestie. no cap. uname -r is your friend π«Ά
πΈ SEE ALSO πΈ
like, go read these too, they're part of the friend group:
ceph-fuse(8)ceph(8)
π Copyright π
2010-2014, Inktank Storage, Inc. and contributors. Licensed under Creative Commons Attribution Share Alike 3.0 (CC-BY-SA-3.0). yes she's that iconic, and yes you gotta share alike π
and that's the whole page, bestie!! you made it to the end, main character energy fr fr ππ this one came from dev, dated Oct 06, 2026, and it's MOUNT.CEPH(8) β go forth and mount responsibly, ily, bye π¦πΈβ¨
π¦ where this page comes from
- ubuntu stonking: ceph-common 20.2.4+ds1-0ubuntu1 Β· LGPL2.1 (see COPYING-LGPL2.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms