Am 2015-11-07 12:33, schrieb Richard Maw:
On Fri, Nov 06, 2015 at 05:53:53PM +0100, Herbert Groll wrote:
Hi,

is there an easy way in initrd mode to keep old root when switching to
new root? Switching root is done in initrd-switch-root.target with
/bin/systemctl --no-block --force switch-root /sysroot

You can remove /etc/initrd-release to stop it removing the old rootfs tmpfs,
I'm not sure what other side-effects this may have.

This was my first attempt too but switch-root is checking the existance of /etc/initrd-release via in_initrd() which saves its result as a static variable. Therefore I would need to patch with something like:

diff --git a/src/shared/switch-root.c b/src/shared/switch-root.c
index 813641a..307b7f3 100644
--- a/src/shared/switch-root.c
+++ b/src/shared/switch-root.c
@@ -54,7 +54,7 @@ int switch_root(const char *new_root, const char *oldroot, bool detach_oldroot,
         temporary_old_root = strjoina(new_root, oldroot);
         mkdir_p_label(temporary_old_root, 0755);

-        old_root_remove = in_initrd();
+ old_root_remove = in_initrd() && access("/etc/initrd-release", F_OK) >= 0;

         if (stat(new_root, &new_root_stat) < 0)
return log_error_errno(errno, "Failed to stat directory %s: %m", new_root);

Or maybe an uncached version of in_initrd() e.g. _in_initrd() could fit. With a patched switch-root.c and deleting /etc/initrd it seems to work for me. But is it possible without patching it? Maybe I'm missing something here. Thanks.
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to