Index: uspace/app/init/init.c
===================================================================
--- uspace/app/init/init.c	(revision 58898d1d7329ba67528bada931d3269d42936354)
+++ uspace/app/init/init.c	(revision 8e9b253438734085e2e5bb51464bb58685d0bd8f)
@@ -50,4 +50,5 @@
 #include <str_error.h>
 #include <config.h>
+#include <io/logctl.h>
 #include "init.h"
 
@@ -129,4 +130,6 @@
 	int rc = mount(fstype, ROOT_MOUNT_POINT, ROOT_DEVICE, opts,
 	    IPC_FLAG_BLOCKING, 0);
+	if (rc == EOK)
+		logctl_set_root();
 	return mount_report("Root filesystem", ROOT_MOUNT_POINT, fstype,
 	    ROOT_DEVICE, rc);
Index: uspace/lib/c/generic/io/logctl.c
===================================================================
--- uspace/lib/c/generic/io/logctl.c	(revision 58898d1d7329ba67528bada931d3269d42936354)
+++ uspace/lib/c/generic/io/logctl.c	(revision 8e9b253438734085e2e5bb51464bb58685d0bd8f)
@@ -39,4 +39,5 @@
 #include <ns.h>
 #include <str.h>
+#include <vfs/vfs.h>
 
 /** IPC session with the logger service. */
@@ -122,4 +123,30 @@
 }
 
+/** Set logger's VFS root.
+ *
+ * @return Error code or EOK on success.
+ */
+int logctl_set_root(void)
+{
+	async_exch_t *exchange = NULL;
+	int rc = start_logger_exchange(&exchange);
+	if (rc != EOK)
+		return rc;
+
+	aid_t reg_msg = async_send_0(exchange, LOGGER_CONTROL_SET_ROOT, NULL);
+	async_exch_t *vfs_exch = vfs_exchange_begin();
+	rc = vfs_pass_handle(vfs_exch, vfs_root(), exchange);
+	vfs_exchange_end(vfs_exch);
+	sysarg_t reg_msg_rc;
+	async_wait_for(reg_msg, &reg_msg_rc);
+
+	async_exchange_end(exchange);
+
+	if (rc != EOK)
+		return rc;
+
+	return (int) reg_msg_rc;
+}
+
 /** @}
  */
Index: uspace/lib/c/include/io/logctl.h
===================================================================
--- uspace/lib/c/include/io/logctl.h	(revision 58898d1d7329ba67528bada931d3269d42936354)
+++ uspace/lib/c/include/io/logctl.h	(revision 8e9b253438734085e2e5bb51464bb58685d0bd8f)
@@ -38,4 +38,5 @@
 extern int logctl_set_default_level(log_level_t);
 extern int logctl_set_log_level(const char *, log_level_t);
+extern int logctl_set_root(void);
 
 #endif
Index: uspace/lib/c/include/ipc/logger.h
===================================================================
--- uspace/lib/c/include/ipc/logger.h	(revision 58898d1d7329ba67528bada931d3269d42936354)
+++ uspace/lib/c/include/ipc/logger.h	(revision 8e9b253438734085e2e5bb51464bb58685d0bd8f)
@@ -49,5 +49,11 @@
 	 * Followed by: string with full log name.
 	 */
-	LOGGER_CONTROL_SET_LOG_LEVEL
+	LOGGER_CONTROL_SET_LOG_LEVEL,
+	/** Set VFS root.
+	 *
+	 * Returns: error code
+	 * Followed by: vfs_pass_handle() request.
+	 */ 
+	LOGGER_CONTROL_SET_ROOT
 } logger_control_request_t;
 
Index: uspace/srv/logger/ctl.c
===================================================================
--- uspace/srv/logger/ctl.c	(revision 58898d1d7329ba67528bada931d3269d42936354)
+++ uspace/srv/logger/ctl.c	(revision 8e9b253438734085e2e5bb51464bb58685d0bd8f)
@@ -41,4 +41,5 @@
 #include <io/logctl.h>
 #include <ipc/logger.h>
+#include <vfs/vfs.h>
 #include "logger.h"
 
@@ -86,4 +87,10 @@
 			break;
 		}
+		case LOGGER_CONTROL_SET_ROOT: {
+			int fd = vfs_receive_handle(true);
+			vfs_root_set(fd);
+			async_answer_0(callid, fd >= 0 ? EOK : fd);
+			break;
+		}
 		default:
 			async_answer_0(callid, EINVAL);
