scylla_raid_setup: try /dev/md[0-9] if no --raiddev provided

If scylla_raid_setup script called without --raiddev argument
then try to use any of /dev/md[0-9] devices instead of only
one /dev/md0.  Do it in this way because on Ubuntu 20.04
/dev/md0 used by OS already.

Closes #7628
This commit is contained in:
Evgeniy Naydanov
2020-11-17 06:26:01 +00:00
committed by Avi Kivity
parent dbb2722e46
commit 587b909c5c

View File

@@ -36,7 +36,7 @@ if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Configure RAID volume for Scylla.')
parser.add_argument('--disks', required=True,
help='specify disks for RAID')
parser.add_argument('--raiddev', default='/dev/md0',
parser.add_argument('--raiddev',
help='MD device name for RAID')
parser.add_argument('--enable-on-nextboot', '--update-fstab', action='store_true', default=False,
help='mount RAID on next boot')
@@ -73,10 +73,25 @@ if __name__ == '__main__':
print('{} is busy'.format(disk))
sys.exit(1)
raiddevname = os.path.basename(args.raiddev)
if os.path.exists(f'/sys/block/{raiddevname}/md/array_state'):
print('{} is already using'.format(args.raiddev))
sys.exit(1)
if len(disks) == 1 and not args.force_raid:
raid = False
fsdev = disks[0]
else:
raid = True
if args.raiddev is None:
raiddevs_to_try = [f'/dev/md{i}' for i in range(10)]
else:
raiddevs_to_try = [args.raiddev, ]
for fsdev in raiddevs_to_try:
raiddevname = os.path.basename(fsdev)
if not os.path.exists(f'/sys/block/{raiddevname}/md/array_state'):
break
print(f'{fsdev} is already using')
else:
if args.raiddev is None:
print("Can't find unused /dev/mdX")
sys.exit(1)
print(f'{fsdev} will be used to setup a RAID')
if os.path.ismount(mount_at):
print('{} is already mounted'.format(mount_at))
@@ -95,13 +110,6 @@ if __name__ == '__main__':
except SystemdException:
md_service = systemd_unit('mdadm.service')
if len(disks) == 1 and not args.force_raid:
raid = False
fsdev = disks[0]
else:
raid = True
fsdev = args.raiddev
print('Creating {type} for scylla using {nr_disk} disk(s): {disks}'.format(type='RAID0' if raid else 'XFS volume', nr_disk=len(disks), disks=args.disks))
if distro.name() == 'Ubuntu' and distro.version() == '14.04':
if raid: