ksud: allow to set upperdir and workdir for overlayfs

This commit is contained in:
weishu
2024-02-01 18:02:10 +08:00
parent aca505c3e6
commit 9f04482b90
3 changed files with 48 additions and 12 deletions

View File

@@ -10,13 +10,13 @@ use crate::{
utils::{self, ensure_clean_dir, ensure_dir_exists},
};
fn mount_partition(partition: &str, lowerdir: &Vec<String>) -> Result<()> {
fn mount_partition(partition_name: &str, lowerdir: &Vec<String>) -> Result<()> {
if lowerdir.is_empty() {
warn!("partition: {partition} lowerdir is empty");
warn!("partition: {partition_name} lowerdir is empty");
return Ok(());
}
let partition = format!("/{partition}");
let partition = format!("/{partition_name}");
// if /partition is a symlink and linked to /system/partition, then we don't need to overlay it separately
if Path::new(&partition).read_link().is_ok() {
@@ -24,7 +24,15 @@ fn mount_partition(partition: &str, lowerdir: &Vec<String>) -> Result<()> {
return Ok(());
}
mount::mount_overlay(&partition, lowerdir)
let mut workdir = None;
let mut upperdir = None;
let system_rw_dir = Path::new(defs::SYSTEM_RW_DIR);
if system_rw_dir.exists() {
workdir = Some(system_rw_dir.join(partition_name).join("workdir"));
upperdir = Some(system_rw_dir.join(partition_name).join("upperdir"));
}
mount::mount_overlay(&partition, lowerdir, workdir, upperdir)
}
pub fn mount_systemlessly(module_dir: &str) -> Result<()> {