GNU bug report logs -
#29100
[PATCH 0/3] Use overlayfs instead of unionfs.
Previous Next
Full log
View this message in rfc822 format
Overlayfs is part of the kernel, while unionfs needs FUSE. This also reduces
the size of the initrd by ca. 4.3% (487K).
* gnu/build/linux-boot.scm (mount-root-file-system): Remove optional parameter
"unionfs"; mount using overlayfs instead of unionfs; new directory layout
requied by overlayfs; update documentation;
[mark-as-not-killable]: remove now unused function
* gnu/system/linux-intrd.scm (file-system-packages): Remove now unused
packages "unionfs-fuse/static".
(linux-modules): Replace "fuse" by "overlay".
---
gnu/build/linux-boot.scm | 43 +++++++++++++------------------------------
gnu/system/linux-initrd.scm | 4 ++--
2 files changed, 15 insertions(+), 32 deletions(-)
diff --git a/gnu/build/linux-boot.scm b/gnu/build/linux-boot.scm
index 3712abe91..7f07e8038 100644
--- a/gnu/build/linux-boot.scm
+++ b/gnu/build/linux-boot.scm
@@ -241,20 +241,10 @@ the last argument of `mknod'."
(filter-map string->number (scandir "/proc")))))
(define* (mount-root-file-system root type
- #:key volatile-root? (unionfs "unionfs"))
+ #:key volatile-root?)
"Mount the root file system of type TYPE at device ROOT. If VOLATILE-ROOT?
-is true, mount ROOT read-only and make it a union with a writable tmpfs using
-UNIONFS."
- (define (mark-as-not-killable pid)
- ;; Tell the 'user-processes' shepherd service that PID must be kept alive
- ;; when shutting down.
- (mkdir-p "/root/etc/shepherd")
- (let ((port (open-file "/root/etc/shepherd/do-not-kill" "a")))
- (chmod port #o600)
- (write pid port)
- (newline port)
- (close-port port)))
-
+is true, mount ROOT read-only and make it a overlay with a writable tmpfs
+using the kernel build-in overlayfs."
(if volatile-root?
(begin
(mkdir-p "/real-root")
@@ -262,24 +252,17 @@ UNIONFS."
(mkdir-p "/rw-root")
(mount "none" "/rw-root" "tmpfs")
+ ;; Create the upperdir and the workdir of the overlayfs
+ (mkdir-p "/rw-root/upper")
+ (mkdir-p "/rw-root/work")
+
;; We want read-write /dev nodes.
- (mkdir-p "/rw-root/dev")
- (mount "none" "/rw-root/dev" "devtmpfs")
-
- ;; Make /root a union of the tmpfs and the actual root. Use
- ;; 'max_files' to set a high RLIMIT_NOFILE for the unionfs process
- ;; itself. Failing to do that, we quickly run out of file
- ;; descriptors; see <http://bugs.gnu.org/17827>.
- (unless (zero? (system* unionfs "-o"
- "cow,allow_other,use_ino,suid,dev,max_files=65536"
- "/rw-root=RW:/real-root=RO"
- "/root"))
- (error "unionfs failed"))
-
- ;; Make sure unionfs remains alive till the end. Because
- ;; 'fuse_daemonize' doesn't tell the PID of the forked daemon, we
- ;; have to resort to 'pidof' here.
- (mark-as-not-killable (pidof unionfs)))
+ (mkdir-p "/rw-root/upper/dev")
+ (mount "none" "/rw-root/upper/dev" "devtmpfs")
+
+ ;; Make /root a overlay of the tmpfs and the actual root.
+ (mount "none" "/root" "overlay" 0
+ "lowerdir=/real-root,upperdir=/rw-root/upper,workdir=/rw-root/work"))
(begin
(check-file-system root type)
(mount root "/root" type)))
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index 948c543a1..4168582c4 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -236,7 +236,7 @@ FILE-SYSTEMS."
(list btrfs-progs/static)
'())
,@(if volatile-root?
- (list unionfs-fuse/static)
+ (list ) ;; nothing requierd in this case
'())))
(define* (base-initrd file-systems
@@ -308,7 +308,7 @@ loaded at boot time in the order in which they appear."
'("isofs")
'())
,@(if volatile-root?
- '("fuse")
+ '("overlay")
'())
,@extra-modules))
--
2.13.5
This bug report was last modified 7 years and 199 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.