btrfs mount fix for new and recovery systems
[distro-setup] / mount-latest-subvol
index 2ebcca04be243ec5497ce5cc330444c1ed7e9db4..d36685f3b41e6bf717b5a31ba8f152cfe1d79bde 100644 (file)
@@ -126,9 +126,25 @@ 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 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 <<EOF
-$first_root_crypt  /a  btrfs  noatime,subvol=a  0 0
+$crypt_dev  /a  btrfs  noatime,subvol=a$noauto  0 0
 EOF
 
 shopt -s nullglob
@@ -140,22 +156,22 @@ shopt -s nullglob
 f=(/mnt/root/btrbk/q.*)
 if [[ -e $f ]]; then
   fstab <<EOF
-$first_root_crypt  /q  btrfs  noatime,subvol=q,gid=1000  0 0
-/q/p  /p  none  bind  0 0
+$crypt_dev  /q  btrfs  noatime,subvol=q,gid=1000$noauto  0 0
+/q/p  /p  none  bind$noauto  0 0
 EOF
 fi
 
 f=(/mnt/root/btrbk/o.*)
 if [[ -e $f ]]; then
   fstab <<EOF
-$first_root_crypt  /o  btrfs  noatime,subvol=o  0 0
-/o/m  /m  none  bind  0 0
+$crypt_dev  /o  btrfs  noatime,subvol=o$noauto  0 0
+/o/m  /m  none  bind$noauto  0 0
 EOF
 fi
 
 if [[ $HOSTNAME == frodo ]]; then
   fstab <<EOF
-$first_root_crypt  /i  btrfs  noatime,subvol=i  0 0
+$crypt_dev  /i  btrfs  noatime,subvol=i$noauto  0 0
 EOF
 fi
 ##### end setup fstab for subvols we care about ######
@@ -208,6 +224,7 @@ for vol in q a o i; do
     continue
   fi
 
+  # populated by check-subvol-stale
   fresh_snap=$(</nocow/btrfs-stale/$vol)
   if [[ ! $fresh_snap ]]; then
     echo "$0: error. empty fresh_snap var"