# See the License for the specific language governing permissions and
# limitations under the License.
-
+# usage: mount-latest-subvol
[[ $EUID == 0 ]] || exec sudo -E "$BASH_SOURCE" "$@"
e() { printf "%s\n" "$*"; "$@"; }
mnt() {
dir=$1
- if ! mountpoint $dir >/dev/null; then
+ if ! mountpoint $dir &>/dev/null; then
mkdir -p $dir
e mount $dir
fi
ret=0
+##### begin setup fstab for subvols we care about ######
first_root_crypt=$(awk '$2 == "/" {print $1}' /etc/mtab)
tu /etc/fstab <<EOF
-$first_root_crypt /q btrfs noatime,subvol=q 0 0
-/q/a /a none bind 0 0
+$first_root_crypt /a btrfs noatime,subvol=a 0 0
EOF
case $HOSTNAME in
treetowl|x2|frodo)
tu /etc/fstab <<EOF
-$first_root_crypt /p btrfs noatime,subvol=p 0 0
+$first_root_crypt /q btrfs noatime,subvol=q 0 0
+$first_root_crypt /o btrfs noatime,subvol=o 0 0
+/q/p /p none bind 0 0
+/o/m /m none bind 0 0
EOF
;;
esac
+##### end setup fstab for subvols we care about ######
-for vol in q p; do
+for vol in q a o; do
d=/$vol
if ! awk '{print $2}' /etc/fstab | grep -xF $d &>/dev/null; then
continue
fi
- binds=()
- roots=($d)
+ ##### begin building up list of bind mounts ######
+ binds=() # list of bind mounts
+ roots=($d) # list of bind mounts, plus the original mount
while true; do
new_roots=()
for r in ${roots[@]}; do
- # /q/a /a none bind 0 0
+ # eg. when r=/q/p, for lines like
+ # /q/p /p none bind 0 0
+ # output /p
new_roots+=($(sed -rn "s#^$r/\S+\s+(\S+)\s+none\s+bind\s.*#\1#p" /etc/fstab))
done
(( ${#new_roots} )) || break
binds+=(${new_roots[@]})
roots=( ${new_roots[@]} )
done
+ ##### end building up list of bind mounts ######
+
# if latest is already mounted, make sure binds are mounted and move on
if e check-subvol-stale $d; then
cryptdisks_start crypt_dev_$dev
fi
done
-else
- tu /etc/fstab <<'EOF'
-/q/i /i none bind,noauto 0 0
-EOF
+ # note, could do an else here and have some kind of mount for /i
+ # on other hosts.
fi
exit $ret