From 627475d679bd588d29323ff81fdf90499ae55d0e Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Mon, 12 Feb 2018 18:02:30 +0800 Subject: [PATCH] ceph-disk: erase 110MB for nuking existing bluestore 10M is not enough for erasing the data partition *and* db partition, let's make it 110M. Fixes: http://tracker.ceph.com/issues/22354 Signed-off-by: Kefu Chai --- src/ceph-disk/ceph_disk/main.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/ceph-disk/ceph_disk/main.py b/src/ceph-disk/ceph_disk/main.py index dba0454828ddb..f5229cc35840d 100644 --- a/src/ceph-disk/ceph_disk/main.py +++ b/src/ceph-disk/ceph_disk/main.py @@ -1609,8 +1609,9 @@ def zap_linux(dev): # Thoroughly wipe all partitions of any traces of # Filesystems or OSD Journals # - # In addition we need to write 10M of data to each partition - # to make sure that after re-creating the same partition + # In addition we need to write 110M (read following comment for more + # details on the context of this magic number) of data to each + # partition to make sure that after re-creating the same partition # there is no trace left of any previous Filesystem or OSD # Journal @@ -1626,13 +1627,29 @@ def zap_linux(dev): ], ) + # for an typical bluestore device, it has + # 1. a 100M xfs data partition + # 2. a bluestore_block_size block partition + # 3. a bluestore_block_db_size block.db partition + # 4. a bluestore_block_wal_size block.wal partition + # so we need to wipe out the bits storing the bits storing + # bluestore's collections' meta information in that case to + # prevent OSD from comparing the meta data, like OSD id and fsid, + # stored on the device to be zapped with the oness passed in. here, + # we assume that the allocator of bluestore puts these meta data + # at the beginning of the block partition. without knowning the + # actual layout of the bluefs, we add extra 10M to be on the safe + # side. if this partition was formatted for a filesystem, 10MB + # would be more than enough to nuke its superblock. + count = min(PrepareBluestoreData.SPACE_SIZE + 10, + get_dev_size(partition)) command_check_call( [ 'dd', 'if=/dev/zero', 'of={path}'.format(path=partition), 'bs=1M', - 'count=10', + 'count={count}'.format(count=count), ], ) @@ -3113,9 +3130,10 @@ class PrepareFilestoreData(PrepareData): class PrepareBluestoreData(PrepareData): + SPACE_SIZE = 100 def get_space_size(self): - return 100 # MB + return self.SPACE_SIZE # MB def prepare_device(self, *to_prepare_list): super(PrepareBluestoreData, self).prepare_device(*to_prepare_list) -- 2.39.5