]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephadm: backup data when we remove stateful daemons (mon, osd, prometheus)
authorSage Weil <sage@redhat.com>
Sat, 14 Mar 2020 13:55:35 +0000 (08:55 -0500)
committerSage Weil <sage@redhat.com>
Sat, 14 Mar 2020 19:56:40 +0000 (14:56 -0500)
This avoids doing permanent damage when removing stateful daemons.

We include OSDs here even though in most cases no precious data lives in
the osd data directory because there might be some important metadata
there--particularly for adopted OSDs from older clusters.

Signed-off-by: Sage Weil <sage@redhat.com>
src/cephadm/cephadm

index ca0291aafa532db9ed6ce0c9d3a4bf391787f2c2..c42e15c08013c3e5798871cf3cb4d52df99a8562 100755 (executable)
@@ -3064,7 +3064,18 @@ def command_rm_daemon():
     call(['systemctl', 'disable', unit_name],
          verbose_on_failure=False)
     data_dir = get_data_dir(args.fsid, daemon_type, daemon_id)
-    call_throws(['rm', '-rf', data_dir])
+    if daemon_type in ['mon', 'osd', 'prometheus'] and \
+       not args.force_delete_data:
+        # rename it out of the way -- do not delete
+        backup_dir = os.path.join(args.data_dir, args.fsid, 'removed')
+        if not os.path.exists(backup_dir):
+            makedirs(backup_dir, 0, 0, DATA_DIR_MODE)
+        dirname = '%s.%s_%s' % (daemon_type, daemon_id,
+                                datetime.datetime.utcnow().strftime(DATEFMT))
+        os.rename(data_dir,
+                  os.path.join(backup_dir, dirname))
+    else:
+        call_throws(['rm', '-rf', data_dir])
 
 ##################################
 
@@ -3730,6 +3741,10 @@ def _get_parser():
         '--force',
         action='store_true',
         help='proceed, even though this may destroy valuable data')
+    parser_rm_daemon.add_argument(
+        '--force-delete-data',
+        action='store_true',
+        help='delete valuable daemon data instead of making a backup')
 
     parser_rm_cluster = subparsers.add_parser(
         'rm-cluster', help='remove all daemons for a cluster')