#!/bin/bash # Mount home as an overlay filesystem # Log stdout & stderr exec > >(tee -i /tmp/gdm3_postlogin.log) exec 2>&1 # Treat unset variables as an error when substituting. set -u # Exit immediately if a command exits with a non-zero status. set -e # Separate tokens on newlines only IFS=' ' # The value of this parameter is expanded like PS1 and the expanded value is the # prompt printed before the command line is echoed when the -x option is set # (see The Set Builtin). The first character of the expanded value is replicated # multiple times, as necessary, to indicate multiple levels of indirection. # \D{%F %T} prints date like this : 2019-12-31 23:59:59 PS4='-\D{%F %T} ' # Print commands and their arguments as they are executed. set -x sleep 0.5 # Find the first removable F2FS partition PART=$(lsblk -pro kname,partlabel | grep 01-home) # Make sure the mountpoints are free ( lsof -t $HOME | xargs kill -9 umount $HOME umount /mnt ) || true if test "$PART" then mount -o noatime "$PART" /mnt else # No removable F2FS partition found, use the third local partition instead PART=$(lsblk -pro kname,partlabel | grep 01-tmp-home) if test -z "$PART" then # No local partition found, error exit 1 fi # We don't care about data consistency since the partition is temporary /sbin/mke2fs -t ext4 -O ^has_journal -F "$PART" mount -o noatime,nobarrier "$PART" /mnt fi USER_PATH=/mnt/.01/$USER TEMP_PATH=/mnt/.01/tmp mkdir -p $USER_PATH $TEMP_PATH chown -R $USER:$USER $USER_PATH $TEMP_PATH mount -t overlay -o lowerdir=$HOME,upperdir=$USER_PATH,workdir=$TEMP_PATH overlay $HOME