Index: boot/Makefile.common
===================================================================
--- boot/Makefile.common	(revision 18ad56a8d754496a89691cf6df847dafd4b8f875)
+++ boot/Makefile.common	(revision 75701004b4fe1a0a5f2b92aef205e5bfbf9a69e3)
@@ -52,5 +52,4 @@
 
 MKARRAY = $(TOOLS_PATH)/mkarray.py
-MKTMPFS = $(TOOLS_PATH)/mktmpfs.py
 MKFAT = $(TOOLS_PATH)/mkfat.py
 MKEXT4 = $(TOOLS_PATH)/mkext4.py
Index: boot/Makefile.initrd
===================================================================
--- boot/Makefile.initrd	(revision 18ad56a8d754496a89691cf6df847dafd4b8f875)
+++ boot/Makefile.initrd	(revision 75701004b4fe1a0a5f2b92aef205e5bfbf9a69e3)
@@ -29,5 +29,5 @@
 $(INITRD).img:
 ifeq ($(RDFMT),tmpfs)
-	$(MKTMPFS) $(DIST_PATH) $@
+	tar -c -f $@ -C $(DIST_PATH) .
 endif
 ifeq ($(RDFMT),fat)
Index: tools/autotool.py
===================================================================
--- tools/autotool.py	(revision 18ad56a8d754496a89691cf6df847dafd4b8f875)
+++ tools/autotool.py	(revision 75701004b4fe1a0a5f2b92aef205e5bfbf9a69e3)
@@ -579,4 +579,5 @@
 		check_app(["make", "--version"], "Make utility", "preferably GNU Make")
 		check_app(["unzip"], "unzip utility", "usually part of zip/unzip utilities")
+		check_app(["tar", "--version"], "tar utility", "usually part of tar")
 
 		platform, cc_args, target = get_target(config)
Index: ols/mktmpfs.py
===================================================================
--- tools/mktmpfs.py	(revision 18ad56a8d754496a89691cf6df847dafd4b8f875)
+++ 	(revision )
@@ -1,129 +1,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2008 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-"""
-TMPFS creator
-"""
-
-import sys
-import os
-import xstruct
-from imgutil import listdir_items, chunks
-
-HEADER = """little:
-	char tag[5]  /* 'TMPFS' */
-"""
-
-DENTRY_NONE = """little:
-	uint8_t kind        /* NONE */
-	uint32_t fname_len  /* 0 */
-"""
-
-DENTRY_FILE = """little:
-	uint8_t kind        /* FILE */
-	uint32_t fname_len  /* filename length */
-	char fname[%d]      /* filename */
-	uint32_t flen       /* file length */
-"""
-
-DENTRY_DIRECTORY = """little:
-	uint8_t kind        /* DIRECTORY */
-	uint32_t fname_len  /* filename length */
-	char fname[%d]      /* filename */
-"""
-
-TMPFS_NONE = 0
-TMPFS_FILE = 1
-TMPFS_DIRECTORY = 2
-
-def usage(prname):
-	"Print usage syntax"
-	print(prname + " <PATH> <IMAGE>")
-
-def recursion(root, outf):
-	"Recursive directory walk"
-
-	for item in listdir_items(root):
-		if item.is_file:
-			dentry = xstruct.create(DENTRY_FILE % len(item.name))
-			dentry.kind = TMPFS_FILE
-			dentry.fname_len = len(item.name)
-			dentry.fname = item.name.encode('ascii')
-			dentry.flen = item.size
-
-			outf.write(dentry.pack())
-
-			for data in chunks(item, 4096):
-				outf.write(data)
-
-		elif item.is_dir:
-			dentry = xstruct.create(DENTRY_DIRECTORY % len(item.name))
-			dentry.kind = TMPFS_DIRECTORY
-			dentry.fname_len = len(item.name)
-			dentry.fname = item.name.encode('ascii')
-
-			outf.write(dentry.pack())
-
-			recursion(item.path, outf)
-
-			dentry = xstruct.create(DENTRY_NONE)
-			dentry.kind = TMPFS_NONE
-			dentry.fname_len = 0
-
-			outf.write(dentry.pack())
-
-def main():
-	if (len(sys.argv) < 3):
-		usage(sys.argv[0])
-		return
-
-	path = os.path.abspath(sys.argv[1])
-	if (not os.path.isdir(path)):
-		print("<PATH> must be a directory")
-		return
-
-	outf = open(sys.argv[2], "wb")
-
-	header = xstruct.create(HEADER)
-	header.tag = b"TMPFS"
-
-	outf.write(header.pack())
-
-	recursion(path, outf)
-
-	dentry = xstruct.create(DENTRY_NONE)
-	dentry.kind = TMPFS_NONE
-	dentry.fname_len = 0
-
-	outf.write(dentry.pack())
-
-	outf.close()
-
-if __name__ == '__main__':
-	main()
Index: uspace/app/init/Makefile
===================================================================
--- uspace/app/init/Makefile	(revision 18ad56a8d754496a89691cf6df847dafd4b8f875)
+++ uspace/app/init/Makefile	(revision 75701004b4fe1a0a5f2b92aef205e5bfbf9a69e3)
@@ -32,6 +32,9 @@
 STATIC_NEEDED = y
 
+LIBS = untar block
+
 SOURCES = \
-	init.c
+	init.c \
+	untar.c
 
 include $(USPACE_PREFIX)/Makefile.common
Index: uspace/app/init/init.c
===================================================================
--- uspace/app/init/init.c	(revision 18ad56a8d754496a89691cf6df847dafd4b8f875)
+++ uspace/app/init/init.c	(revision 75701004b4fe1a0a5f2b92aef205e5bfbf9a69e3)
@@ -48,4 +48,5 @@
 #include <config.h>
 #include <io/logctl.h>
+#include "untar.h"
 #include "init.h"
 
@@ -83,5 +84,5 @@
 	switch (rc) {
 	case EOK:
-		if (dev != NULL)
+		if ((dev != NULL) && (str_cmp(dev, "") != 0))
 			printf("%s: %s mounted on %s (%s at %s)\n", NAME, desc, mntpt,
 			    fstype, dev);
@@ -107,10 +108,10 @@
 }
 
-/** Mount root filesystem
- *
- * The operation blocks until the root filesystem
+/** Mount root file system
+ *
+ * The operation blocks until the root file system
  * server is ready for mounting.
  *
- * @param[in] fstype Root filesystem type.
+ * @param[in] fstype Root file system type.
  *
  * @return True on success.
@@ -120,20 +121,35 @@
 static bool mount_root(const char *fstype)
 {
-	const char *opts = "";
-
-	if (str_cmp(fstype, "tmpfs") == 0)
-		opts = "restore";
-
-	errno_t rc = vfs_mount_path(ROOT_MOUNT_POINT, fstype, ROOT_DEVICE, opts,
+	const char *root_device = "";
+
+	if (str_cmp(fstype, "tmpfs") != 0)
+		root_device = ROOT_DEVICE;
+
+	errno_t rc = vfs_mount_path(ROOT_MOUNT_POINT, fstype, root_device, "",
 	    IPC_FLAG_BLOCKING, 0);
 	if (rc == EOK)
 		logctl_set_root();
-	return mount_report("Root filesystem", ROOT_MOUNT_POINT, fstype,
-	    ROOT_DEVICE, rc);
-}
-
-/** Mount locfs filesystem
- *
- * The operation blocks until the locfs filesystem
+
+	bool ret = mount_report("Root file system", ROOT_MOUNT_POINT, fstype,
+	    root_device, rc);
+
+	rc = vfs_cwd_set(ROOT_MOUNT_POINT);
+	if (rc != EOK) {
+		printf("%s: Unable to set current directory to %s (%s)\n",
+		    NAME, ROOT_MOUNT_POINT, str_error(ret));
+		return false;
+	}
+
+	if ((ret) && (str_cmp(fstype, "tmpfs") == 0)) {
+		printf("%s: Extracting root file system archive\n", NAME);
+		ret = bd_untar(ROOT_DEVICE);
+	}
+
+	return ret;
+}
+
+/** Mount locfs file system
+ *
+ * The operation blocks until the locfs file system
  * server is ready for mounting.
  *
@@ -146,5 +162,5 @@
 	errno_t rc = vfs_mount_path(LOCFS_MOUNT_POINT, LOCFS_FS_TYPE, "", "",
 	    IPC_FLAG_BLOCKING, 0);
-	return mount_report("Location service filesystem", LOCFS_MOUNT_POINT,
+	return mount_report("Location service file system", LOCFS_MOUNT_POINT,
 	    LOCFS_FS_TYPE, NULL, rc);
 }
@@ -301,5 +317,5 @@
 {
 	errno_t rc = vfs_mount_path(TMPFS_MOUNT_POINT, TMPFS_FS_TYPE, "", "", 0, 0);
-	return mount_report("Temporary filesystem", TMPFS_MOUNT_POINT,
+	return mount_report("Temporary file system", TMPFS_MOUNT_POINT,
 	    TMPFS_FS_TYPE, NULL, rc);
 }
Index: uspace/app/init/untar.c
===================================================================
--- uspace/app/init/untar.c	(revision 75701004b4fe1a0a5f2b92aef205e5bfbf9a69e3)
+++ uspace/app/init/untar.c	(revision 75701004b4fe1a0a5f2b92aef205e5bfbf9a69e3)
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2018 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup init
+ * @{
+ */
+/**
+ * @file
+ */
+
+#include <stdio.h>
+#include <stdbool.h>
+#include <errno.h>
+#include <loc.h>
+#include <untar.h>
+#include <block.h>
+#include "init.h"
+#include "untar.h"
+
+typedef struct {
+	const char *dev;
+	
+	service_id_t sid;
+	aoff64_t offset;
+} tar_state_t;
+
+static int bd_tar_open(tar_file_t *tar)
+{
+	tar_state_t *state = (tar_state_t *) tar->data;
+
+	errno_t ret = loc_service_get_id(state->dev, &state->sid,
+	    IPC_FLAG_BLOCKING);
+	if (ret != EOK)
+		return ret;
+
+	ret = block_init(state->sid, 4096);
+	if (ret != EOK)
+		return ret;
+
+	state->offset = 0;
+	return EOK;
+}
+
+static void bd_tar_close(tar_file_t *tar)
+{
+	tar_state_t *state = (tar_state_t *) tar->data;
+	block_fini(state->sid);
+}
+
+static size_t bd_tar_read(tar_file_t *tar, void *data, size_t size)
+{
+	tar_state_t *state = (tar_state_t *) tar->data;
+
+	if (block_read_bytes_direct(state->sid, state->offset, size,
+	    data) != EOK)
+		return 0;
+
+	state->offset += size;
+	return size;
+}
+
+static void bd_tar_vreport(tar_file_t *tar, const char *fmt, va_list args)
+{
+	vprintf(fmt, args);
+}
+
+tar_file_t tar = {
+	.open = bd_tar_open,
+	.close = bd_tar_close,
+
+	.read = bd_tar_read,
+	.vreport = bd_tar_vreport
+};
+
+bool bd_untar(const char *dev)
+{
+	tar_state_t state;
+	state.dev = dev;
+
+	tar.data = (void *) &state;
+	return (untar(&tar) == EOK);
+}
+
+/** @}
+ */
Index: uspace/app/init/untar.h
===================================================================
--- uspace/app/init/untar.h	(revision 75701004b4fe1a0a5f2b92aef205e5bfbf9a69e3)
+++ uspace/app/init/untar.h	(revision 75701004b4fe1a0a5f2b92aef205e5bfbf9a69e3)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2018 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup init
+ * @{
+ */
+/**
+ * @file
+ */
+
+#ifndef __UNTAR_H__
+#define __UNTAR_H__
+
+#include <stdbool.h>
+
+extern bool bd_untar(const char *);
+
+#endif
+
+/** @}
+ */
Index: uspace/srv/fs/tmpfs/Makefile
===================================================================
--- uspace/srv/fs/tmpfs/Makefile	(revision 18ad56a8d754496a89691cf6df847dafd4b8f875)
+++ uspace/srv/fs/tmpfs/Makefile	(revision 75701004b4fe1a0a5f2b92aef205e5bfbf9a69e3)
@@ -35,6 +35,5 @@
 SOURCES = \
 	tmpfs.c \
-	tmpfs_ops.c \
-	tmpfs_dump.c
+	tmpfs_ops.c
 
 include $(USPACE_PREFIX)/Makefile.common
Index: uspace/srv/fs/tmpfs/tmpfs.h
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs.h	(revision 18ad56a8d754496a89691cf6df847dafd4b8f875)
+++ uspace/srv/fs/tmpfs/tmpfs.h	(revision 75701004b4fe1a0a5f2b92aef205e5bfbf9a69e3)
@@ -74,5 +74,4 @@
 
 extern bool tmpfs_init(void);
-extern bool tmpfs_restore(service_id_t);
 
 #endif
Index: pace/srv/fs/tmpfs/tmpfs_dump.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs_dump.c	(revision 18ad56a8d754496a89691cf6df847dafd4b8f875)
+++ 	(revision )
@@ -1,205 +1,0 @@
-/*
- * Copyright (c) 2008 Jakub Jermar
- * Copyright (c) 2008 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup fs
- * @{
- */
-
-/**
- * @file	tmpfs_dump.c
- * @brief	Support for loading TMPFS file system dump.
- */
-
-#include "tmpfs.h"
-#include "../../vfs/vfs.h"
-#include <errno.h>
-#include <stdlib.h>
-#include <str.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <as.h>
-#include <block.h>
-#include <byteorder.h>
-
-#define TMPFS_COMM_SIZE		1024
-
-static uint8_t tmpfs_buf[TMPFS_COMM_SIZE];
-
-struct rdentry {
-	uint8_t type;
-	uint32_t len;
-} __attribute__((packed));
-
-static bool
-tmpfs_restore_recursion(service_id_t dsid, size_t *bufpos, size_t *buflen,
-    aoff64_t *pos, fs_node_t *pfn)
-{
-	struct rdentry entry;
-	libfs_ops_t *ops = &tmpfs_libfs_ops;
-	errno_t rc;
-
-	do {
-		char *fname;
-		fs_node_t *fn;
-		tmpfs_node_t *nodep;
-		uint32_t size;
-
-		if (block_seqread(dsid, tmpfs_buf, bufpos, buflen, pos, &entry,
-		    sizeof(entry)) != EOK)
-			return false;
-
-		entry.len = uint32_t_le2host(entry.len);
-
-		switch (entry.type) {
-		case TMPFS_NONE:
-			break;
-		case TMPFS_FILE:
-			fname = malloc(entry.len + 1);
-			if (fname == NULL)
-				return false;
-
-			rc = ops->create(&fn, dsid, L_FILE);
-			if (rc != EOK || fn == NULL) {
-				free(fname);
-				return false;
-			}
-
-			if (block_seqread(dsid, tmpfs_buf, bufpos, buflen, pos, fname,
-			    entry.len) != EOK) {
-				(void) ops->destroy(fn);
-				free(fname);
-				return false;
-			}
-			fname[entry.len] = 0;
-
-			rc = ops->link(pfn, fn, fname);
-			if (rc != EOK) {
-				(void) ops->destroy(fn);
-				free(fname);
-				return false;
-			}
-			free(fname);
-
-			if (block_seqread(dsid, tmpfs_buf, bufpos, buflen, pos, &size,
-			    sizeof(size)) != EOK)
-				return false;
-
-			size = uint32_t_le2host(size);
-
-			nodep = TMPFS_NODE(fn);
-			nodep->data = malloc(size);
-			if (nodep->data == NULL)
-				return false;
-
-			nodep->size = size;
-			if (block_seqread(dsid, tmpfs_buf, bufpos, buflen, pos, nodep->data,
-			    size) != EOK)
-				return false;
-
-			break;
-		case TMPFS_DIRECTORY:
-			fname = malloc(entry.len + 1);
-			if (fname == NULL)
-				return false;
-
-			rc = ops->create(&fn, dsid, L_DIRECTORY);
-			if (rc != EOK || fn == NULL) {
-				free(fname);
-				return false;
-			}
-
-			if (block_seqread(dsid, tmpfs_buf, bufpos, buflen, pos, fname,
-			    entry.len) != EOK) {
-				(void) ops->destroy(fn);
-				free(fname);
-				return false;
-			}
-			fname[entry.len] = 0;
-
-			rc = ops->link(pfn, fn, fname);
-			if (rc != EOK) {
-				(void) ops->destroy(fn);
-				free(fname);
-				return false;
-			}
-			free(fname);
-
-			if (!tmpfs_restore_recursion(dsid, bufpos, buflen, pos,
-			    fn))
-				return false;
-
-			break;
-		default:
-			return false;
-		}
-	} while (entry.type != TMPFS_NONE);
-
-	return true;
-}
-
-bool tmpfs_restore(service_id_t dsid)
-{
-	libfs_ops_t *ops = &tmpfs_libfs_ops;
-	fs_node_t *fn;
-	errno_t rc;
-
-	rc = block_init(dsid, TMPFS_COMM_SIZE);
-	if (rc != EOK)
-		return false;
-
-	size_t bufpos = 0;
-	size_t buflen = 0;
-	aoff64_t pos = 0;
-
-	char tag[6];
-	if (block_seqread(dsid, tmpfs_buf, &bufpos, &buflen, &pos, tag, 5) != EOK)
-		goto error;
-
-	tag[5] = 0;
-	if (str_cmp(tag, "TMPFS") != 0)
-		goto error;
-
-	rc = ops->root_get(&fn, dsid);
-	if (rc != EOK)
-		goto error;
-
-	if (!tmpfs_restore_recursion(dsid, &bufpos, &buflen, &pos, fn))
-		goto error;
-
-	block_fini(dsid);
-	return true;
-
-error:
-	block_fini(dsid);
-	return false;
-}
-
-/**
- * @}
- */
Index: uspace/srv/fs/tmpfs/tmpfs_ops.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs_ops.c	(revision 18ad56a8d754496a89691cf6df847dafd4b8f875)
+++ uspace/srv/fs/tmpfs/tmpfs_ops.c	(revision 75701004b4fe1a0a5f2b92aef205e5bfbf9a69e3)
@@ -447,8 +447,4 @@
 	assert(rc == EOK);
 	tmpfs_node_t *rootp = TMPFS_NODE(rootfn);
-	if (str_cmp(opts, "restore") == 0) {
-		if (!tmpfs_restore(service_id))
-			return ELIMIT;
-	}
 
 	*index = rootp->index;
