mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-20 06:08:08 +00:00
firstboot: add support for union mounts
SVN-Revision: 17778
This commit is contained in:
parent
9389255dae
commit
2da13936e9
@ -48,7 +48,12 @@ pivot() { # <new_root> <old_root>
|
|||||||
fopivot() { # <rw_root> <ro_root> <dupe?>
|
fopivot() { # <rw_root> <ro_root> <dupe?>
|
||||||
root=$1
|
root=$1
|
||||||
{
|
{
|
||||||
mount -t mini_fo -o base=/,sto=$1 "mini_fo:$1" /mnt 2>&- && root=/mnt
|
if grep -q mini_fo /proc/filesystems; then
|
||||||
|
mount -t mini_fo -o base=/,sto=$1 "mini_fo:$1" /mnt 2>&- && root=/mnt
|
||||||
|
else
|
||||||
|
mount --bind / /mnt
|
||||||
|
mount --bind -o union "$1" /mnt && root=/mnt
|
||||||
|
fi
|
||||||
} || {
|
} || {
|
||||||
[ "$3" = "1" ] && {
|
[ "$3" = "1" ] && {
|
||||||
mount | grep "on $1 type" 2>&- 1>&- || mount -o bind $1 $1
|
mount | grep "on $1 type" 2>&- 1>&- || mount -o bind $1 $1
|
||||||
@ -60,6 +65,7 @@ fopivot() { # <rw_root> <ro_root> <dupe?>
|
|||||||
|
|
||||||
ramoverlay() {
|
ramoverlay() {
|
||||||
mkdir -p /tmp/root
|
mkdir -p /tmp/root
|
||||||
|
mount -t tmpfs root /tmp/root
|
||||||
fopivot /tmp/root /rom 1
|
fopivot /tmp/root /rom 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,28 +84,59 @@ ramoverlay() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[ "$1" = "switch2jffs" ] && {
|
[ "$1" = "switch2jffs" ] && {
|
||||||
mount "$mtdpart" /rom/jffs -t jffs2 || exit
|
if grep -q mini_fo /proc/filesystems; then
|
||||||
|
mount "$mtdpart" /rom/jffs -t jffs2 || exit
|
||||||
|
|
||||||
# try to avoid fs changing while copying
|
# try to avoid fs changing while copying
|
||||||
mount -o remount,ro none / 2>&-
|
mount -o remount,ro none / 2>&-
|
||||||
|
|
||||||
# copy ramoverlay to jffs2
|
# copy ramoverlay to jffs2
|
||||||
echo -n "copying files ... "
|
echo -n "copying files ... "
|
||||||
cp -a /tmp/root/* /rom/jffs 2>&-
|
cp -a /tmp/root/* /rom/jffs 2>&-
|
||||||
echo "done"
|
echo "done"
|
||||||
|
|
||||||
# switch back to squashfs (temporarily)
|
# switch back to squashfs (temporarily)
|
||||||
# and park the ramdisk ontop of /tmp/root
|
# and park the ramdisk ontop of /tmp/root
|
||||||
pivot /rom /mnt
|
pivot /rom /mnt
|
||||||
mount -o move /mnt /tmp/root
|
mount -o move /mnt /tmp/root
|
||||||
|
|
||||||
# /jffs is the overlay
|
# /jffs is the overlay
|
||||||
# /rom is the readonly
|
# /rom is the readonly
|
||||||
fopivot /jffs /rom
|
fopivot /jffs /rom
|
||||||
|
|
||||||
# try to get rid of /tmp/root
|
# try to get rid of /tmp/root
|
||||||
# this will almost always fail
|
# this will almost always fail
|
||||||
umount /tmp/root 2>&-
|
umount /tmp/root 2>&-
|
||||||
|
else
|
||||||
|
# switch back to squashfs temporarily
|
||||||
|
pivot /rom /mnt
|
||||||
|
|
||||||
|
# get rid of the old overlay
|
||||||
|
umount -l /mnt
|
||||||
|
|
||||||
|
# another umount to get rid of the bind from /tmp/root
|
||||||
|
umount -l /mnt
|
||||||
|
|
||||||
|
# initialize jffs2
|
||||||
|
mount "$mtdpart" /jffs -t jffs2 || exit
|
||||||
|
|
||||||
|
# workaround to ensure that union can attach properly
|
||||||
|
sync
|
||||||
|
ls /jffs >/dev/null
|
||||||
|
|
||||||
|
# switch to the new (empty) jffs2
|
||||||
|
fopivot /jffs /rom 1
|
||||||
|
|
||||||
|
# copy ramoverlay to jffs2, must be done after switching
|
||||||
|
# to the new rootfs to avoid creating opaque directories
|
||||||
|
echo -n "copying files ... "
|
||||||
|
cp -a /tmp/root/* / >/dev/null 2>&1
|
||||||
|
sync
|
||||||
|
echo "done"
|
||||||
|
|
||||||
|
umount -l /jffs
|
||||||
|
umount -l /tmp/root
|
||||||
|
fi
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user