UEFI Disk Read and Write Error Recovery
This article examines the error recovery mechanisms integrated into
Unified Extensible Firmware Interface (UEFI) disk read and write
operations. UEFI employs a modular, layered architecture to manage disk
input/output (I/O) failures, relying on standard protocols such as
EFI_BLOCK_IO_PROTOCOL and
EFI_BLOCK_IO2_PROTOCOL. These mechanisms include status
code propagation, synchronous software and hardware resets, underlying
bus-level retransmissions, asynchronous transaction cancellation, and
firmware-level boot failover paths to maintain system integrity during
storage faults.
Protocol-Level Error Detection and Status Reporting
UEFI storage drivers detect I/O anomalies by returning specific
EFI_STATUS codes from their read and write services. When a
routine encounters a physical or logical failure, execution halts, and
the function returns an explicit error condition to the caller rather
than silently failing:
EFI_DEVICE_ERROR: Indicates that the physical device reported a hardware failure during the transaction.EFI_TIMEOUT: Returned when a read or write operation does not complete within the controller's allocated operational window.EFI_NO_MEDIA/EFI_MEDIA_CHANGED: Signals that the storage medium is missing, was physically removed, or was replaced during execution, necessitating a state refresh.EFI_BAD_BUFFER_SIZE: Flags buffer alignment or size mismatches relative to the physical media block size.
The Reset Function
The primary explicit recovery mechanism defined in
EFI_BLOCK_IO_PROTOCOL is the Reset() service.
When a read or write routine fails with a fatal error such as
EFI_DEVICE_ERROR, the consumer (such as a filesystem driver
or bootloader) invokes this function:
EFI_STATUS Reset (
IN EFI_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
);- Standard Reset
(
ExtendedVerification = FALSE): Reinitializes the software state of the driver and sends a basic reset command to the storage controller, clearing pending queues and internal device states. - Extended Reset
(
ExtendedVerification = TRUE): Instructs the driver to perform an exhaustive diagnostic and hardware initialization sequence. This can include power-cycling the communication link, resetting controller registers, and performing non-destructive self-tests on the drive.
Hardware and Transport-Layer Retries
UEFI delegates low-level mechanical and electrical recovery to transport-specific drivers executing underneath the Block I/O interface. These intermediate drivers implement protocol-specific recovery before returning an error to higher layers:
- NVMe Drivers: Implement submission and completion queue resets. If an individual NVMe command fails due to a transient link error or transport issue, the driver checks controller status registers, aborts the hanging command, and re-submits if allowable by the command status field.
- SATA/AHCI Drivers: Manage Serial ATA task file errors and COMRESET signaling. If a command times out or encounters a cyclic redundancy check (CRC) error, the driver issues a port reset to re-establish SATA PHY layer communication.
- USB Mass Storage Drivers: Utilize control endpoint pipe resets and mass storage reset recovery sequences (Clear Feature HALT requests) to clear stalled endpoints following failed Bulk-Out or Bulk-In transfers.
Asynchronous Error Recovery in Block I/O 2
The EFI_BLOCK_IO2_PROTOCOL provides non-blocking,
asynchronous read and write capabilities. In this model, error handling
relies on token-driven event notifications:
- Token Status Monitoring: Each transaction binds to
an
EFI_BLOCK_IO2_TOKEN. If an operation fails asynchronously, the token'sTransactionStatusupdates to reflect the failure code, and an attached event triggers to notify the system. - Queue Management: If an error occurs on a specific read/write token, the driver halts processing of dependent requests to prevent data corruption, allowing the host application to cancel or clear remaining transactions.
Media State Tracking
The EFI_BLOCK_IO_MEDIA structure dynamically tracks disk
health and configuration parameters. If an I/O routine encounters
unexpected drive states, it flags changes via this structure:
MediaPresent: Tracks whether the disk is currently accessible.MediaId: An integer identifier that increments whenever media is changed or re-initialized. High-level consumers compareMediaIdvalues before retrying failed reads or writes to ensure they are not writing to a swapped or stale device.
Firmware Boot Manager Failover
When disk read errors persist and cannot be resolved by driver-level resets, control shifts to the UEFI Boot Manager. If a critical boot payload cannot be read from the primary storage device:
- The Boot Manager records the failure of the active
BootOrderentry. - The system executes a software fallback, walking to the next entry in the NVRAM boot sequence (e.g., secondary drives, network PXE boot, or a recovery shell).
- If no alternative target succeeds, the firmware triggers an error halt or displays diagnostic information to prevent corrupted state progression.