/// Initializes, partitions, and formats a disk based on the provided parameters
/// </summary>
/// <param name="diskIdentifier">The identifier of the disk to initialize.</param>
/// <param name="tableType">The type of partition table to create (e.g., GPT, MBR).</param>
/// <param name="partitions">An array of tuples specifying the file system type and size for each partition. If the size is 0, the partition will use the remaining available space.</param>
/// <returns>An array of mount points for the created partitions.</returns>
/// Unmounts all of the partitions on the specified disk, ensuring they are safely detached from the system. The disk will still be attached, but will be pulled offline. After this call, the disk device can be written to.
/// </summary>
/// <param name="diskIdentifier">The identifier of the disk to unmount.</param>
/// Cleans up and deletes a disk image file, ensuring it is detached first.
/// </summary>
/// <param name="imagePath">The path to the disk image file.</param>
/// <param name="diskIdentifier">The identifier of the disk to clean up. If null, the method will attempt to determine the disk based on the image path.</param>
/// Re-attaches the disk, optionally as read-only. This is useful for ensuring the disk is in a clean state after unmounting, and can also be used to force a read-only re-attachment for testing read-only scenarios.
/// </summary>
/// <param name="imagePath">The path to the disk image file.</param>
/// <param name="diskIdentifier">The identifier of the disk to re-attach.</param>
/// <param name="tableType">The type of partition table on the disk.</param>
/// <param name="readOnly">Indicates whether the disk should be re-attached as read-only.</param>
/// <returns>The identifier of the re-attached disk.</returns>