Thanks for the crate! Could you use a Read + Seek bound instead of the custom Ext4Read trait? Using a Read+Seek bound would allow memory-mapping (instead of read syscalls; implementing Ext4Read for &[u8] would do this too) or reading inside archives.
On no_std you could use embedded_io traits. Read Seek
Another possibility is that you keep using the Ext4Read trait, but also implement it for all Read + Seek types.