From: Sage Weil Date: Sat, 14 Mar 2020 13:55:35 +0000 (-0500) Subject: cephadm: backup data when we remove stateful daemons (mon, osd, prometheus) X-Git-Tag: v15.2.0~47^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=cbdf6fe229dc1b3588217156625b3a4a607584e0;p=ceph.git cephadm: backup data when we remove stateful daemons (mon, osd, prometheus) 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 --- diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index ca0291aafa532..c42e15c08013c 100755 --- a/src/cephadm/cephadm +++ b/src/cephadm/cephadm @@ -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')