Public bug reported:

It looks like that, when booting off zfs (zfs holds /boot) with the
rootdelay boot option set, the boot process fails in the initrd fase,
asking to manually import the pool using zpool import -f -R / -N. I only
had one system with that parameter set, which I seldom reboot.

I did not find an upstream reference of this bug or behavior.

The error is caused by the fact the pool is already imported: "zpool
status" executed on the initramfs prompt will correctly list the pool
and all devices online. To continue, one has to export the pool, re-
import it and exit the initramfs prompt after which regular booting
continues. Not exporting and reimporting it leaves the pool readonly
leading to boot errors further down the road (systemd units failing).

I noticed zfs_autoimport_disable is set to 1 in the initramfs
environment, so looking at /usr/share/initramfs-tools/scripts/zfs this
section might be the issue (zpool import succeeding, but $ZFS_HEALTH
never returning with the correct status (I'm not a programmer but
perhaps ZFS_HEALTH is a local variable in the zfs_test_import
function)):

 delay=${ROOTDELAY:-0}

 if [ "$delay" -gt 0 ]
 then
  # Try to import the pool read-only.  If it does not import with
  # the ONLINE status, wait and try again.  The pool could be
  # DEGRADED because a drive is really missing, or it might just
  # be slow to be detected.
  zfs_test_import
  retry_nr=0
  while [ "$retry_nr" -lt "$delay" ] && [ "$ZFS_HEALTH" != "ONLINE" ]
  do
   [ "$quiet" != "y" ] && log_begin_msg "Retrying ZFS read-only import"
   /bin/sleep 1
   zfs_test_import
   retry_nr=$(( $retry_nr + 1 ))
   [ "$quiet" != "y" ] && log_end_msg
  done
  unset retry_nr
  unset ZFS_HEALTH
 fi
 unset delay

** Affects: zfs-linux (Ubuntu)
     Importance: Undecided
         Status: New

** Description changed:

  It looks like that, when booting off zfs (zfs holds /boot) with the
  rootdelay boot option set, the boot process fails in the initrd fase,
  asking to manually import the pool using zpool import -f -R / -N. I only
  had one system with that parameter set, which I seldom reboot.
  
  I did not find an upstream reference of this bug or behavior.
  
- The error is caused by the the pool is already imported: "zpool status"
- executed on the initramfs prompt will correctly list the pool and all
- devices online. To continue, one has to export the pool, re-import it
- and exit the initramfs prompt after which regular booting continues. Not
- exporting and reimporting it leaves the pool readonly leading to boot
- errors further down the road (systemd units failing).
+ The error is caused by the fact the pool is already imported: "zpool
+ status" executed on the initramfs prompt will correctly list the pool
+ and all devices online. To continue, one has to export the pool, re-
+ import it and exit the initramfs prompt after which regular booting
+ continues. Not exporting and reimporting it leaves the pool readonly
+ leading to boot errors further down the road (systemd units failing).
  
  I noticed zfs_autoimport_disable is set to 1 in the initramfs
  environment, so looking at /usr/share/initramfs-tools/scripts/zfs this
  section might be the issue (zpool import succeeding, but $ZFS_HEALTH
  never returning with the correct status (I'm not a programmer but
  perhaps ZFS_HEALTH is a local variable in the zfs_test_import
  function)):
  
-         delay=${ROOTDELAY:-0}
+  delay=${ROOTDELAY:-0}
  
-       if [ "$delay" -gt 0 ]
-       then
-               # Try to import the pool read-only.  If it does not import with
-               # the ONLINE status, wait and try again.  The pool could be
-               # DEGRADED because a drive is really missing, or it might just
-               # be slow to be detected.
-               zfs_test_import
-               retry_nr=0
-               while [ "$retry_nr" -lt "$delay" ] && [ "$ZFS_HEALTH" != 
"ONLINE" ]
-               do
-                       [ "$quiet" != "y" ] && log_begin_msg "Retrying ZFS 
read-only import"
-                       /bin/sleep 1
-                       zfs_test_import
-                       retry_nr=$(( $retry_nr + 1 ))
-                       [ "$quiet" != "y" ] && log_end_msg
-               done
-               unset retry_nr
-               unset ZFS_HEALTH
-       fi
-       unset delay
+  if [ "$delay" -gt 0 ]
+  then
+   # Try to import the pool read-only.  If it does not import with
+   # the ONLINE status, wait and try again.  The pool could be
+   # DEGRADED because a drive is really missing, or it might just
+   # be slow to be detected.
+   zfs_test_import
+   retry_nr=0
+   while [ "$retry_nr" -lt "$delay" ] && [ "$ZFS_HEALTH" != "ONLINE" ]
+   do
+    [ "$quiet" != "y" ] && log_begin_msg "Retrying ZFS read-only import"
+    /bin/sleep 1
+    zfs_test_import
+    retry_nr=$(( $retry_nr + 1 ))
+    [ "$quiet" != "y" ] && log_end_msg
+   done
+   unset retry_nr
+   unset ZFS_HEALTH
+  fi
+  unset delay

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1577057

Title:
  zfs initrd script fails when rootdelay boot option is set

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/zfs-linux/+bug/1577057/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to