X-Git-Url: https://iankelling.org/git/?p=distro-setup;a=blobdiff_plain;f=mount-latest-subvol;h=359b534337669090503de236c2ab30467c35b4dd;hp=2ebcca04be243ec5497ce5cc330444c1ed7e9db4;hb=0b6d44c7f3d567e0a26138509c8a24cb57c69b50;hpb=c0cc9bcf08d865418a403297d83801417e85bfb3 diff --git a/mount-latest-subvol b/mount-latest-subvol index 2ebcca0..359b534 100644 --- a/mount-latest-subvol +++ b/mount-latest-subvol @@ -14,6 +14,9 @@ # limitations under the License. # usage: mount-latest-subvol +# +# Note, at source location, intentionally not executable, run and read +# install-my-scripts. cd / [[ $EUID == 0 ]] || exec sudo -E "$BASH_SOURCE" "$@" @@ -86,7 +89,7 @@ pid-check() { for p in ${pids}; do for m in ${my_pids[@]}; do if (( p == m )); then - echo "$0: error: pids to kill includes our pid or a parent" >&2 + echo "$0: error: pids to kill includes our pid or a parent. ps output:" >&2 ps -f -p $p exit 1 fi @@ -126,9 +129,32 @@ fi ret=0 ##### begin setup fstab for subvols we care about ###### -first_root_crypt=$(awk '$2 == "/" {print $1}' /etc/mtab) +root_dev=$(awk '$2 == "/" {print $1}' /etc/mtab) +if [[ $root_dev == /dev/dm-* ]]; then + for d in /dev/mapper/*; do + if [[ $(readlink -f $d) == $root_dev ]]; then + root_dev=$d + break + fi + done +fi + +if cryptsetup status $root_dev &>/dev/null; then + crypt_dev=$root_dev +else # if we are in a recovery boot, find the next best crypt device + noauto=,noauto + for dev in $(dmsetup ls --target crypt | awk '{print $1}'); do + dev=/dev/mapper/$dev + if awk '{print $1}' /etc/mtab | grep -Fx $dev &>/dev/null; then + crypt_dev=$dev + break + fi + done +fi + + fstab </dev/null); then mnt $d for b in ${binds[@]}; do mnt $b @@ -208,13 +236,6 @@ for vol in q a o i; do continue fi - fresh_snap=$(