- CephFS offre un système de fichiers clé en main, exempt de formatage, à l'inverse de RBD qui exige un formatage explicite.
- Contrairement au stockage par blocs, les systèmes de fichiers requièrent deux pools : l'un dédié aux métadonnées et piloté par un service MDS, l'autre aux données.
- Le déploiement d'un service MDS est indispensable pour accéder aux métadonnées telles que les noms de fichiers, les tailles et les identifiants d'objets.
- Rôle du MDS
- MDS signifie Metadata Server.
- Dans un système de fichiers, les métadonnées et les données sont séparées. Comme les pools stockent des objets, le MDS convertit ces objets en métadonnées exploitables.
- Il isole les métadonnées (structure des répertoires, noms, permissions) des données brutes, en assurant la gestion exclusive des premières.
1. Nécessité du MDS
- Lors d'une écriture, le MDS transforme les attributs et la structure des fichiers en métadonnées, stockées dans le pool dédié. Les données réelles sont écrites par le client dans le pool de données.
- Le MDS agit comme un convertisseur, sans participer directement au transfert des données.
2. Fonctionnement typique
Application : echo "Bonjour CephFS" > /mnt/monfs/texte.txt
Point de montage : /mnt/monfs
Chemin du fichier : /texte.txt
Contenu à écrire : "Bonjour CephFS" (13 octets)
- Le client initie une écriture et contacte d'abord le MDS.
- Le MDS analyse le chemin ; si le fichier n'existe pas, il crée un objet de métadonnées (inode) et le renvoie au client.
- Le client communique ensuite directement avec les OSD pour écrire les données.
- Création d'un système de fichiers Ceph
1. Initialisation des pools
# Pool pour les données
$ ceph osd pool create fs_data
pool 'fs_data' created
# Pool pour les métadonnées
$ ceph osd pool create fs_metadata
pool 'fs_metadata' created
# Application des étiquettes CephFS
$ ceph osd pool application enable fs_data cephfs
enabled application 'cephfs' on pool 'fs_data'
$ ceph osd pool application enable fs_metadata cephfs
enabled application 'cephfs' on pool 'fs_metadata'
2. Instanciation de CephFS
# Spécification des pools métadonnées puis données
# ceph fs new nom_systeme pool_metadonnees pool_donnees
$ ceph fs new mon_système fs_metadata fs_data
new fs with metadata pool 10 and data pool 9
# IDs des pools : métadonnées (10), données (9)
# Vérification des systèmes de fichiers
$ ceph fs ls
name: mon_système, metadata pool: fs_metadata, data pools: [fs_data]
# Consultation de l'espace
$ ceph fs status
mon_système - 0 clients
========
POOL TYPE USED AVAIL
fs_metadata metadata 0 28.4G
fs_data data 0 28.4G
# Sans taille spécifiée, tout l'espace disponible est utilisé par défaut
3. Déploiement du MDS
- Sans MDS, le cluster entre en état d'erreur (health_err).
# Création d'un MDS pour le système de fichiers
$ ceph orch apply mds mon_système --placement="3"
Scheduled mds.mon_système update...
# Vérification du service MDS
$ ceph orch ls | grep mds
mds.mon_système 3/3 30s ago 43s count:3
# Chaque système de fichiers nécessite son propre groupe de MDS
4. Inspection du système de fichiers
$ ceph fs get mon_système
Filesystem 'mon_système' (1)
fs_name mon_système
epoch 5
flags 12
created 2026-03-18T06:57:38.719992+0000
modified 2026-03-18T07:04:05.711455+0000
tableserver 0
root 0
session_timeout 60
session_autoclose 300
max_file_size 1099511627776
required_client_features {}
last_failure 0
last_failure_osd_epoch 0
compat compat={},rocompat={},incompat={1=base v0.20,2=client writeable rangesoned encoding,6=dirfrag is stored in omap,7=mds uses inline data,8=no anchor t
max_mds 1
in 0
up {0=144452}
failed
damaged
stopped
data_pools [9]
metadata_pool 10
inline_data disabled
balancer
standby_count_wanted 1
[mds.mon_système.ceph03.yjlshe{0:144452} state up:active seq 2 join_fscid=1 addr 1],r=[1],i=[7ff]}]
# ceph fs dump pour toutes les informations sur les systèmes de fichiers
5. Configuration des accès et clés
ceph auth get-or-create client.fs_user mon 'allow r' mds 'allow *' osd 'allow rw pool=fs_metadata,allow rw pool=fs_data' -o ceph.client.fs_user.keyring
# Transfert du fichier de clé
$ scp ceph.client.fs_user.keyring root@192.168.50.22:/root
6. Montage côté client
- Aucun formatage n'est requis.
- Deux méthodes de montage disponibles : via ceph-fuse ou via le noyau (recommandé).
# Installation du client Ceph nécessaire pour mount -t ceph
# Extraction de la clé secrète dans un fichier
$ echo "AQBBUbppIkvPNBAAWsQ3+DzWCFcuqlPaPVRoBA==" > fs.key
mkdir /data_fs
# Montage avec une ou plusieurs adresses de moniteurs
$ mount -t ceph -o name=fs_user,secretfile=/root/fs.key 192.168.50.20:/ /data_fs/
$ df -hT /data_fs/
Filesystem Type Size Used Avail Use% Mounted on
192.168.50.20:/ ceph 29G 0 29G 0% /data_fs
7. Vérification des données dans les pools
# Les métadonnées sont stockées ici (noms de fichiers vides inclus)
$ rados -p fs_metadata ls
601.00000000
602.00000000
600.00000000
# Les objets de données apparaissent après une écriture réelle
$ rados -p fs_data ls
8. Montage persistant
# Ajout dans /etc/fstab
192.168.50.20:/ /data_fs ceph defaults,_netdev,name=fs_user,secretfile=/root/fs.key 0 0
9. Gestion des permissions
- Les permissions initiales permettent un accès complet au répertoire racine. Pour restreindre à un sous-répertoire, un contrôle supplémentaire est nécessaire.
- Droits : rw (lecture/écriture), p (gestion des sous-répertoires), s (gestion des instantanés).
# L'utilisateur accède uniquement à /archives
$ ceph fs authorize mon_système client.util01 /archives rwps
[client.util01]
key = AQBvWLppY693MxAAwA91DqSXltB7LJiwZVvkNA==
# Création du répertoire /archives dans la racine de CephFS
# Transfert des fichiers de clé et montage
$ mount -t ceph -o name=util01,secretfile=./util01.key 192.168.50.20:/archives /archives_mnt/
- Ici, mon_système désigne le nom du système de fichiers, /archives le chemin montable, et rwps les permissions accordées.
- Supprsesion d'un système de fichiers Ceph
- Étapes : arrêt des processus MDS, suppression du système de fichiers, puis suppression des pools.
$ ceph fs fail mon_système
mon_système marked not joinable; MDS cannot join the cluster. All MDS ranks marked failed.
$ ceph fs rm mon_système --yes-i-really-mean-it
$ ceph fs ls
No filesystems enabled
$ ceph osd pool rm fs_metadata fs_metadata --yes-i-really-really-mean-it
pool 'fs_metadata' removed
$ ceph osd pool rm fs_data fs_data --yes-i-really-really-mean-it
pool 'fs_data' removed
- Commandes courantes pour CephFS
1. Statut du système de fichiers
$ ceph fs status
mon_système - 2 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active mon_système.ceph03.yjlshe Reqs: 0 /s 12 15 13 4
POOL TYPE USED AVAIL
fs_metadata metadata 108k 28.4G
fs_data data 0 28.4G
STANDBY MDS
mon_système.ceph01.tvxbtw
mon_système.ceph02.nyheaw
MDS version: ceph version 16.2.13 (5378749ba6be3a0868b51803968ee9cde4833a3e) pacific (stable)
# Deux clients actuellement montés
2. Informations détaillées
# Affiche toutes les configurations
ceph fs dump
3. Données spécifiques à un système
# Détails pour un système de fichiers donné
ceph fs get mon_système
4. État des services MDS
ceph mds stat