mount: mount ESP at /boot alongside data runtimes
Add /boot root mount planning for VFAT ESP outputs, reuse the idempotent
mount logic to skip duplicates, and ensure /etc/fstab includes both
/var/mounts/{UUID} and the ESP when enabled.
This commit is contained in:
@@ -48,6 +48,7 @@ use std::path::Path;
|
|||||||
use tracing::info;
|
use tracing::info;
|
||||||
|
|
||||||
const ROOT_BASE: &str = "/var/mounts";
|
const ROOT_BASE: &str = "/var/mounts";
|
||||||
|
const BOOT_TARGET: &str = "/boot";
|
||||||
const TARGET_SYSTEM: &str = "/var/cache/system";
|
const TARGET_SYSTEM: &str = "/var/cache/system";
|
||||||
const TARGET_ETC: &str = "/var/cache/etc";
|
const TARGET_ETC: &str = "/var/cache/etc";
|
||||||
const TARGET_MODULES: &str = "/var/cache/modules";
|
const TARGET_MODULES: &str = "/var/cache/modules";
|
||||||
@@ -204,6 +205,16 @@ pub fn plan_mounts(fs_results: &[FsResult], _cfg: &Config) -> Result<MountPlan>
|
|||||||
// Determine primary UUID
|
// Determine primary UUID
|
||||||
let primary_uuid = Some(data[0].uuid.clone());
|
let primary_uuid = Some(data[0].uuid.clone());
|
||||||
|
|
||||||
|
// Optional ESP (VFAT) mount at /boot
|
||||||
|
if let Some(esp) = fs_results.iter().find(|r| matches!(r.kind, FsKind::Vfat)) {
|
||||||
|
root_mounts.push(PlannedMount {
|
||||||
|
uuid: esp.uuid.clone(),
|
||||||
|
target: BOOT_TARGET.to_string(),
|
||||||
|
fstype: fstype_str(esp.kind).to_string(),
|
||||||
|
options: "rw".to_string(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Subvol mounts only from primary FS
|
// Subvol mounts only from primary FS
|
||||||
let primary = data[0];
|
let primary = data[0];
|
||||||
let mut subvol_mounts: Vec<PlannedSubvolMount> = Vec::new();
|
let mut subvol_mounts: Vec<PlannedSubvolMount> = Vec::new();
|
||||||
@@ -452,7 +463,7 @@ pub fn maybe_write_fstab(mounts: &[MountResult], cfg: &Config) -> Result<()> {
|
|||||||
// Partition mount results into runtime root mounts and final subvolume targets.
|
// Partition mount results into runtime root mounts and final subvolume targets.
|
||||||
let mut root_entries: Vec<&MountResult> = mounts
|
let mut root_entries: Vec<&MountResult> = mounts
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|m| m.target.starts_with(ROOT_BASE))
|
.filter(|m| m.target.starts_with(ROOT_BASE) || m.target == BOOT_TARGET)
|
||||||
.collect();
|
.collect();
|
||||||
let wanted = [TARGET_ETC, TARGET_MODULES, TARGET_SYSTEM, TARGET_VM_META];
|
let wanted = [TARGET_ETC, TARGET_MODULES, TARGET_SYSTEM, TARGET_VM_META];
|
||||||
let mut subvol_entries: Vec<&MountResult> = mounts
|
let mut subvol_entries: Vec<&MountResult> = mounts
|
||||||
|
|||||||
Reference in New Issue
Block a user