pub struct BusyboxBlockTools { /* private fields */ }Expand description
BlockTools over busybox applets — the System VM’s userland.
Every operation runs <busybox> <applet> …; the applets are losetup
and blockdev. BusyBox’s losetup has no long options at all
(util-linux/losetup.c: [-rP] [-o OFS] {-f|LOOPDEV} FILE), so
util-linux’s atomic allocate-and-report form -f --show is an
unrecognized-option error there, and -f FILE attaches without printing
which device it used. Attaching is therefore two applet runs: losetup -f prints the first free device, then losetup [-r] /dev/loopN FILE
attaches to exactly that device. Another process can claim the queried
device in between (mount -o loop, a concurrent template build), in
which case the attach fails and attach_loop
re-queries and retries, up to [ATTACH_ATTEMPTS] times.
Implementations§
Source§impl BusyboxBlockTools
impl BusyboxBlockTools
Sourcepub const DEFAULT_PATH: &'static str = "/bin/busybox"
pub const DEFAULT_PATH: &'static str = "/bin/busybox"
Where the System VM’s EROFS rootfs installs busybox.
Sourcepub fn new(busybox: impl Into<PathBuf>) -> BusyboxBlockTools
pub fn new(busybox: impl Into<PathBuf>) -> BusyboxBlockTools
Use the busybox binary at busybox.
Trait Implementations§
Source§impl BlockTools for BusyboxBlockTools
impl BlockTools for BusyboxBlockTools
Source§fn attach_loop(
&self,
backing: &Path,
read_only: bool,
) -> Result<String, SnapshotError>
fn attach_loop( &self, backing: &Path, read_only: bool, ) -> Result<String, SnapshotError>
losetup -f, then losetup [-r] /dev/loopN FILE, retried when the
queried device is claimed by someone else before the attach lands.
A lost race shows up either as the kernel’s EBUSY from
LOOP_CONFIGURE/LOOP_SET_FD — busybox prints “Device or resource
busy” — or, when busybox notices the device is taken before it
issues the ioctl, as a failure with whatever stale errno text it had
on hand, so the classifier also asks sysfs whether the device gained
a backing file. Any other failure is reported with busybox’s stderr.
Source§fn detach_loop(&self, device: &str) -> Result<(), SnapshotError>
fn detach_loop(&self, device: &str) -> Result<(), SnapshotError>
Source§fn device_sectors(&self, device: &str) -> Result<u64, SnapshotError>
fn device_sectors(&self, device: &str) -> Result<u64, SnapshotError>
Source§impl Clone for BusyboxBlockTools
impl Clone for BusyboxBlockTools
Source§fn clone(&self) -> BusyboxBlockTools
fn clone(&self) -> BusyboxBlockTools
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more