54 lines
1.2 KiB
Bash
54 lines
1.2 KiB
Bash
#/etc/initramfs-tools/scripts/overlay
|
|
# Local filesystem mounting -*- shell-script -*-
|
|
|
|
#
|
|
# This script overrides local_mount_root() in /scripts/local
|
|
# and mounts root as a read-only filesystem with a temporary (rw)
|
|
# overlay filesystem.
|
|
#
|
|
|
|
. /scripts/local
|
|
|
|
local_mount_root()
|
|
{
|
|
local_top
|
|
local_device_setup "${ROOT}" "root file system"
|
|
ROOT="${DEV}"
|
|
|
|
# Get the root filesystem type if not set
|
|
if [ -z "${ROOTFSTYPE}" ]; then
|
|
FSTYPE=$(get_fstype "${ROOT}")
|
|
else
|
|
FSTYPE=${ROOTFSTYPE}
|
|
fi
|
|
|
|
local_premount
|
|
|
|
# CHANGES TO THE ORIGINAL FUNCTION BEGIN HERE
|
|
# N.B. this code still lacks error checking
|
|
|
|
modprobe ${FSTYPE}
|
|
checkfs ${ROOT} root "${FSTYPE}"
|
|
|
|
# Create directories for root and the overlay
|
|
mkdir /lower /upper
|
|
|
|
# Mount read-only root to /lower
|
|
if [ "${FSTYPE}" != "unknown" ]; then
|
|
mount -r -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} /lower
|
|
else
|
|
mount -r ${ROOTFLAGS} ${ROOT} /lower
|
|
fi
|
|
|
|
modprobe overlay || insmod "/lower/lib/modules/$(uname -r)/kernel/fs/overlayfs/overlay.ko"
|
|
|
|
# Mount a tmpfs for the overlay in /upper
|
|
mount -t tmpfs tmpfs /upper
|
|
mkdir /upper/data /upper/work
|
|
|
|
# Mount the final overlay-root in $rootmnt
|
|
mount -t overlay \
|
|
-olowerdir=/lower,upperdir=/upper/data,workdir=/upper/work \
|
|
overlay ${rootmnt}
|
|
}
|