Skip to content

Commit

Permalink
ceph-disk: erase 110MB for nuking existing bluestore
Browse files Browse the repository at this point in the history
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 <kchai@redhat.com>
  • Loading branch information
tchaikov committed Feb 14, 2018
1 parent 511fc9c commit 238c399
Showing 1 changed file with 22 additions and 4 deletions.
26 changes: 22 additions & 4 deletions src/ceph-disk/ceph_disk/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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(dev))
command_check_call(
[
'dd',
'if=/dev/zero',
'of={path}'.format(path=partition),
'bs=1M',
'count=10',
'count={count}'.format(count=count),
],
)

Expand Down Expand Up @@ -3113,9 +3130,10 @@ def populate_data_path(self, path, *to_prepare_list):


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)
Expand Down

0 comments on commit 238c399

Please sign in to comment.