pub enum RecoveryRequest {
InitSystemPartitionTable {
partitions: Vec<PartitionInfo>,
responder: RecoveryInitSystemPartitionTableResponder,
},
WriteDataFile {
filename: String,
payload: Vmo,
responder: RecoveryWriteDataFileResponder,
},
FormatSystemBlobVolume {
responder: RecoveryFormatSystemBlobVolumeResponder,
},
MountSystemBlobVolume {
blob_exposed_dir: ServerEnd<DirectoryMarker>,
responder: RecoveryMountSystemBlobVolumeResponder,
},
GetBlobImageHandle {
responder: RecoveryGetBlobImageHandleResponder,
},
InstallBlobImage {
responder: RecoveryInstallBlobImageResponder,
},
}Expand description
Special functionality that is only intended to be used in recovery and device bringup.
WARNING: The methods in this protocol are highly specialized and can result in unintended data loss if used improperly. Most methods in this protocol assume exclusive access to the underlying block device, and it is the responsibility of callers to mediate the use of this protocol across components.
Variants§
InitSystemPartitionTable
Wipes and re-initializes the system partition table. This is a destructive operation!
WriteDataFile
Writes filename into the data partition with contents from payload, formatting the data
partition if it isn’t already formatted. Overwrites file if it already exists.
This can only be called while the data partition isn’t already mounted, which is typically
in recovery builds where fshost is running with the ramdisk_image flag set.
FormatSystemBlobVolume
Formats the blob volume in the system container. If the system container does not have a blob volume, a new one will be created. All existing blobs will be deleted. If the system container is corrupt or unmountable, this function will have no effect and will leave the disk intact.
WARNING: This can cause irreversible data loss and can render a device unbootable.
Fields
responder: RecoveryFormatSystemBlobVolumeResponderMountSystemBlobVolume
Mounts the system container’s blob volume, and returns a handle to the blob volume’s
exposed directory to facilitate writing a new system. The system container will remain
mounted as long as blob_exposed_dir is kept open. Only the blob volume will be mounted.
Fields
blob_exposed_dir: ServerEnd<DirectoryMarker>responder: RecoveryMountSystemBlobVolumeResponderGetBlobImageHandle
Obtains a handle to a file where a new system blob volume can be written. The contents of
the file must be a valid fxfs partition image containing a blob volume. The existing blob
volume will remain unmodified until the system is rebooted, or InstallBlobImage is
called. The system container will remain mounted as long as mount_token is kept open.
NOTE: This method will delete any existing image data cached on disk. Callers are
responsible for keeping the returned image_file and mount_token alive until the system
image has been fully written and flushed to disk.
§Errors
ZX_ERR_IO_DATA_INTEGRITY: An existing filesystem was found on the device, but it could not be mounted. This indicates that the filesystem is possibly corrupt, or has a newer on-disk version than the recovery image. To avoid unintended data loss, the user should explicitly initiate any remedial action, such as wiping the device or using a newer image.ZX_ERR_INTERNAL: An internal error occured; see fshost logs for more context.
Fields
responder: RecoveryGetBlobImageHandleResponderInstallBlobImage
Installs the blob volume previously written via GetBlobImageHandle, replacing the
existing blob volume in the system container. On failure, the existing blob volume will
remain intact, and the written image will be deleted to free space. A new blob image can
then be written and the installation process restarted. If no blob volume has been written,
this will have no effect. This function will block until the system container is unmounted.
Fields
responder: RecoveryInstallBlobImageResponderImplementations§
Source§impl RecoveryRequest
impl RecoveryRequest
pub fn into_init_system_partition_table( self, ) -> Option<(Vec<PartitionInfo>, RecoveryInitSystemPartitionTableResponder)>
pub fn into_write_data_file( self, ) -> Option<(String, Vmo, RecoveryWriteDataFileResponder)>
pub fn into_format_system_blob_volume( self, ) -> Option<RecoveryFormatSystemBlobVolumeResponder>
pub fn into_mount_system_blob_volume( self, ) -> Option<(ServerEnd<DirectoryMarker>, RecoveryMountSystemBlobVolumeResponder)>
pub fn into_get_blob_image_handle( self, ) -> Option<RecoveryGetBlobImageHandleResponder>
pub fn into_install_blob_image( self, ) -> Option<RecoveryInstallBlobImageResponder>
Sourcepub fn method_name(&self) -> &'static str
pub fn method_name(&self) -> &'static str
Name of the method defined in FIDL