惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Martin Fowler
Martin Fowler
The Cloudflare Blog
The Register - Security
The Register - Security
WordPress大学
WordPress大学
量子位
Vercel News
Vercel News
C
Check Point Blog
V
Visual Studio Blog
Microsoft Azure Blog
Microsoft Azure Blog
J
Java Code Geeks
B
Blog RSS Feed
Stack Overflow Blog
Stack Overflow Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
Apple Machine Learning Research
Apple Machine Learning Research
PCI Perspectives
PCI Perspectives
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
美团技术团队
Schneier on Security
Schneier on Security
O
OpenAI News
M
MIT News - Artificial intelligence
S
Secure Thoughts
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Security Affairs
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
小众软件
小众软件
MongoDB | Blog
MongoDB | Blog
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
Recorded Future
Recorded Future
S
Security @ Cisco Blogs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cyber Attacks, Cyber Crime and Cyber Security
GbyAI
GbyAI
L
LINUX DO - 最新话题
The Last Watchdog
The Last Watchdog
C
CERT Recently Published Vulnerability Notes
aimingoo的专栏
aimingoo的专栏
V
V2EX
博客园 - 【当耐特】
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
阮一峰的网络日志
阮一峰的网络日志

OneUptime Blog

How to Monitor Azure App Services (PaaS) with OpenTelemetry Grafana Stack vs OneUptime: DIY Observability or Unified Platform? Your AI Workloads Are About to Blow Up Your Observability Bill The Great Observability Consolidation Is Here How to Write Custom Object Classes for Ceph How to Write Custom Ceph Manager Modules How to Write a ceph.conf Configuration File How to Use Rook-Ceph with OpenShift How to Use Rook-Ceph with Longhorn for Comparison How to Configure Volume Snapshot Class for RBD in Rook How to Configure VolumeReplicationClass Scheduling Intervals in Rook How to Set Up Volume Replication with Rook-Ceph How to Create Volume Group Snapshots with Rook CSI How to Visualize Ceph Network Performance in Grafana How to Enable Virtual Host-Style Bucket Access in Rook How to View Runtime Configuration via Admin Socket How to View Quota Settings and Update Stats in Ceph RGW How to View PG Scaling Recommendations with autoscale-status How to View PG Distribution via Admin Socket How to View Performance Metrics in the Ceph Dashboard How to View OSD Performance Counters in Ceph How to View Connection Status via Admin Socket How to View Ceph Cluster Summary Dashboard via CLI How to Version Control Rook-Ceph Configuration How to Version Control Ceph Infrastructure with Terraform How to Verify Kubernetes Node Requirements for Rook-Ceph Deployment How to Verify Health Before and After Rook Upgrades How to Verify Data Integrity with Deep Scrubbing How to Verify Complete Rook-Ceph Cleanup How to Verify Backup Integrity from Ceph Snapshots How to Use Rook-Ceph with Velero for Kubernetes Backup How to Integrate HashiCorp Vault with Rook-Ceph (Token Auth) How to Configure TLS for Vault Integration in Rook How to Integrate HashiCorp Vault with Rook-Ceph (Kubernetes Auth) How to Validate Ceph Cluster Configuration After Deployment How to Understand User Type and ID Notation (TYPE.ID) in Ceph How to Configure User Management in the Ceph Dashboard How to Use Rook-Ceph with Kubernetes Operators How to Use Rook-Ceph with Helm Chart Deployments How to Use the Swift API with Ceph RGW How to Use SQLite Databases Stored on Ceph How to Use s3cmd with Ceph RGW How to Use the S3 API with Ceph RGW How to Use Red Hat Ceph with RHEL Virtualization How to Use RBD with QEMU How to Use RBD with Nomad How to Use RBD with CloudStack How to Use RBD Snapshot Rollback How to Use rados bench for Object Storage Benchmarking How to Secure Rook-Ceph with Pod Security Admission How to Use pg-upmap for PG Mapping in Ceph How to Use Multipath Devices with Ceph OSDs How to Use MinIO Client (mc) with Ceph RGW How to Use fio for Ceph Block Storage Benchmarking How to Use the CephFS Shell How to Use Ceph RGW for Media Asset Management How to Use Ceph RGW for Log Storage and Archival How to Use Ceph RGW for Data Lake Storage How to Use Ceph RGW for Backup Repository Storage How to Use the ceph-authtool Utility How to Use boto3 (Python) with Ceph RGW S3 How to Use AWS CLI with Ceph RGW S3 How to Use the Admin Ops API with Ceph RGW How to Configure Usage Log Key Transition in Ceph RGW How to Handle Rook-Ceph Upgrades in GitOps Pipelines How to Upgrade Rook-Ceph with Zero Downtime How to Create a Ceph Upgrade Runbook How to Upgrade the Rook Operator from v1.18 to v1.19 How to Upgrade the Rook Operator on Kubernetes How to Upgrade External Cluster Connections in Rook How to Upgrade the Ceph Version in Rook How to Upgrade from Ceph Reef to Squid How to Upgrade from Ceph Quincy to Reef How to Upgrade Ceph Clusters in Stretch Mode How to Update Kernel for CephFS Feature Compatibility How to Update Ceph Configuration on a Running Rook Cluster How to Create Unique Kubernetes Services per NFS Server in Rook How to Understand When Compression Helps vs Hurts in Ceph How to Understand User Types (Individual vs System) in Ceph How to Understand the undersized PG State in Ceph How to Understand the stale PG State in Ceph How to Understand the repair PG State in Ceph How to Understand the remapped PG State in Ceph How to Understand Red Hat Ceph Storage vs Upstream Ceph How to Understand Placement Groups in Ceph How to Understand PG Splitting in Ceph How to Understand the peering PG State in Ceph How to Understand OSD Recovery Process in Ceph How to Understand the OSD Map in Ceph How to Understand New Features in Each Ceph Release How to Understand Monitor Leadership in Ceph How to Understand MDS States in CephFS How to Understand Deprecated Features in Ceph Reef How to Understand the degraded PG State in Ceph How to Understand D3N in Ceph How to Understand the creating PG State in Ceph How to Understand the clean PG State in Ceph How to Understand CephX Authentication Protocol How to Understand CephX Authentication Flow How to Understand What Data Ceph Telemetry Collects
How to Use fs swap for CephFS
Nawaz Dhandala · 2026-03-31 · via OneUptime Blog

What Is fs swap

ceph fs swap is a Ceph command that exchanges the names of two CephFS filesystems in a single FSMap update, ensuring there is no intermediate epoch where either filesystem name is missing. This allows you to perform a blue-green style deployment where you prepare a new filesystem with all the correct data and configuration, then swap it into place with a single command.

Both filesystems must be taken offline before the swap, and clients must remount afterward. This command is available in Ceph Squid (19.x) and later.

Use Cases for fs swap

  • Blue-green filesystem deployment - prepare a new filesystem offline, then swap it to production
  • Rolling back a bad migration - quickly revert by swapping back to the previous filesystem
  • A/B testing - alternate between two filesystem configurations without downtime
  • Disaster recovery testing - swap a restored backup filesystem into production for validation

Syntax

ceph fs swap <fs1-name> <fs1-id> <fs2-name> <fs2-id> --swap-fscids=<yes|no> --yes-i-really-mean-it

The command requires both the name and the filesystem cluster ID (FSCID) for each filesystem. The --swap-fscids flag controls whether the FSCIDs are also exchanged along with the names. After the command, fs1 takes the name of fs2 and vice versa.

Example: Blue-Green Filesystem Migration

Start with a production filesystem named myfs and a new filesystem named myfs-new:

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
# Verify both filesystems exist
ceph fs ls

Output:

name: myfs, metadata pool: myfs-metadata, data pools: [myfs-data ]
name: myfs-new, metadata pool: myfs-new-metadata, data pools: [myfs-new-data ]

Prepare the new filesystem with all desired data and configuration. Before swapping, take both filesystems offline and refuse client sessions:

ceph fs set myfs refuse_client_sessions true
ceph fs fail myfs
ceph fs set myfs-new refuse_client_sessions true
ceph fs fail myfs-new

Get the FSCID for each filesystem from the ceph fs ls or ceph fs dump output, then perform the swap:

# Replace 1 and 2 with the actual FSCIDs of myfs and myfs-new
ceph fs swap myfs 1 myfs-new 2 --swap-fscids=yes --yes-i-really-mean-it

After the swap:

ceph fs ls

Output:

name: myfs, metadata pool: myfs-new-metadata, data pools: [myfs-new-data ]
name: myfs-new, metadata pool: myfs-metadata, data pools: [myfs-data ]

The name myfs now points to the pools that were myfs-new, and vice versa.

After the swap, bring the filesystems back online and allow client sessions:

ceph fs set myfs joinable true
ceph fs set myfs refuse_client_sessions false
ceph fs set myfs-new joinable true
ceph fs set myfs-new refuse_client_sessions false

Clients that mount by name (-o fs=myfs) will connect to the new backing pools once they remount.

Client Remount Required

Both filesystems must be offline during the swap. Existing client mounts must remount after the swap completes, and any unflushed operations will be lost. CephX credentials may also need to be reauthorized if existing mounts should follow the old filesystem to its new name.

Rolling Back

If the swap reveals a problem, roll back by taking the filesystems offline again and swapping back:

ceph fs set myfs refuse_client_sessions true
ceph fs fail myfs
ceph fs set myfs-new refuse_client_sessions true
ceph fs fail myfs-new

# Use the current FSCIDs after the first swap
ceph fs swap myfs 1 myfs-new 2 --swap-fscids=yes --yes-i-really-mean-it

ceph fs set myfs joinable true
ceph fs set myfs refuse_client_sessions false
ceph fs set myfs-new joinable true
ceph fs set myfs-new refuse_client_sessions false

This reverts the filesystem name mapping back to the original state.

Rook Considerations

In Rook, fs swap operates at the Ceph layer and is not natively represented in the CephFilesystem CRD. After performing a swap:

  1. The CephFilesystem CRD named myfs will now point to different pools than Rook expects
  2. Restart the Rook operator to force re-reconciliation:
kubectl -n rook-ceph rollout restart deploy/rook-ceph-operator
  1. Consider updating the CephFilesystem CRD to reflect the new pool assignments, or manage the swap entirely outside Rook for staging environments.

Verifying the Swap

Confirm MDS daemons are active on the swapped filesystems:

ceph fs status myfs
ceph mds stat

Summary

ceph fs swap exchanges the names of two CephFS filesystems in a single FSMap update, enabling blue-green deployments and easy rollbacks. Both filesystems must be taken offline before the swap, and clients must remount afterward. This is ideal for planned migrations where you prepare a new filesystem offline and then swap it into place. In Rook environments, manage the swap at the Ceph layer and restart the operator after swapping to ensure proper reconciliation.