# 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" "$@"
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 /a btrfs noatime,subvol=a 0 0
treetowl|x2|frodo)
tu /etc/fstab <<EOF
$first_root_crypt /q btrfs noatime,subvol=q 0 0
+$first_root_crypt /m btrfs noatime,subvol=m 0 0
/q/p /p none bind 0 0
EOF
;;
esac
+##### end setup fstab for subvols we care about ######
-for vol in q a; do
+for vol in q a m; 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
- # example
+ # 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