From ea30fc962049226e869171f69c6ab1879f9e7085 Mon Sep 17 00:00:00 2001 From: John Estabrook Date: Mon, 11 Dec 2023 11:43:05 -0600 Subject: image-tools: T5806: remove partition and disk signatures in cleanup --- python/vyos/system/disk.py | 5 +++++ python/vyos/system/raid.py | 3 --- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/python/vyos/system/disk.py b/python/vyos/system/disk.py index f8e0fd1bf..b8a2c0f35 100644 --- a/python/vyos/system/disk.py +++ b/python/vyos/system/disk.py @@ -31,12 +31,17 @@ class DiskDetails: def disk_cleanup(drive_path: str) -> None: """Clean up disk partition table (MBR and GPT) + Remove partition and device signatures. Zeroize primary and secondary headers - first and last 17408 bytes (512 bytes * 34 LBA) on a drive Args: drive_path (str): path to a drive that needs to be cleaned """ + partitions: list[str] = partition_list(drive_path) + for partition in partitions: + run(f'wipefs -af {partition}') + run(f'wipefs -af {drive_path}') run(f'sgdisk -Z {drive_path}') diff --git a/python/vyos/system/raid.py b/python/vyos/system/raid.py index 13b99fa69..616d1adf7 100644 --- a/python/vyos/system/raid.py +++ b/python/vyos/system/raid.py @@ -54,9 +54,6 @@ def raid_create(raid_members: list[str], drive: str = disk.partition_parent(part) command: str = f'sgdisk --typecode=3:A19D880F-05FC-4D3B-A006-743F0F84911E {drive}' cmd(command) - for part in raid_members: - command: str = f'mdadm --zero-superblock {part}' - cmd(command) command: str = f'mdadm --create /dev/{raid_name} -R --metadata=1.0 \ --raid-devices={raid_devices_num} --level={raid_level} \ {raid_members_str}' -- cgit v1.2.3 From e3cd779d0bd8dd8be6231c7b2028326a03e6a06c Mon Sep 17 00:00:00 2001 From: John Estabrook Date: Mon, 11 Dec 2023 13:55:09 -0600 Subject: image-tools: T5806: deactive raid arrays --- python/vyos/system/raid.py | 32 +++++++++++++++++++++----------- src/op_mode/image_installer.py | 1 + 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/python/vyos/system/raid.py b/python/vyos/system/raid.py index 616d1adf7..5b33d34da 100644 --- a/python/vyos/system/raid.py +++ b/python/vyos/system/raid.py @@ -19,7 +19,7 @@ from pathlib import Path from shutil import copy from dataclasses import dataclass -from vyos.utils.process import cmd +from vyos.utils.process import cmd, run from vyos.system import disk @@ -44,16 +44,12 @@ def raid_create(raid_members: list[str], """ raid_devices_num: int = len(raid_members) raid_members_str: str = ' '.join(raid_members) - if Path('/sys/firmware/efi').exists(): - for part in raid_members: - drive: str = disk.partition_parent(part) - command: str = f'sgdisk --typecode=3:A19D880F-05FC-4D3B-A006-743F0F84911E {drive}' - cmd(command) - else: - for part in raid_members: - drive: str = disk.partition_parent(part) - command: str = f'sgdisk --typecode=3:A19D880F-05FC-4D3B-A006-743F0F84911E {drive}' - cmd(command) + for part in raid_members: + drive: str = disk.partition_parent(part) + # set partition type GUID for raid member; cf. + # https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs + command: str = f'sgdisk --typecode=3:A19D880F-05FC-4D3B-A006-743F0F84911E {drive}' + cmd(command) command: str = f'mdadm --create /dev/{raid_name} -R --metadata=1.0 \ --raid-devices={raid_devices_num} --level={raid_level} \ {raid_members_str}' @@ -69,6 +65,20 @@ def raid_create(raid_members: list[str], return raid +def clear(): + """Deactivate all RAID arrays""" + command: str = 'mdadm --examine --scan' + raid_config = cmd(command) + if not raid_config: + return + command: str = 'mdadm --run /dev/md?*' + run(command) + command: str = 'mdadm --assemble --scan --auto=yes --symlink=no' + run(command) + command: str = 'mdadm --stop --scan' + run(command) + + def update_initramfs() -> None: """Update initramfs""" mdadm_script = '/etc/initramfs-tools/scripts/local-top/mdadm' diff --git a/src/op_mode/image_installer.py b/src/op_mode/image_installer.py index b3e6e518c..8e01a9ea4 100755 --- a/src/op_mode/image_installer.py +++ b/src/op_mode/image_installer.py @@ -179,6 +179,7 @@ def create_partitions(target_disk: str, target_size: int, rootfs_size: int = available_size print(MSG_INFO_INSTALL_PARTITONING) + raid.clear() disk.disk_cleanup(target_disk) disk_details: disk.DiskDetails = disk.parttable_create(target_disk, rootfs_size) -- cgit v1.2.3