Verification done in Xenial and Bionic as per the test case. It works
fine and will prevent update-initramfs from being stuck in the described
scenarios.

** Tags removed: verification-needed-bionic verification-needed-xenial
** Tags added: verification-done-bionic verification-done-xenial

** Tags removed: verification-needed

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to initramfs-tools in Ubuntu.
https://bugs.launchpad.net/bugs/1667512

Title:
  [SRU] update-initramfs should sync only the filesystem containing the
  initramfs image

Status in initramfs-tools package in Ubuntu:
  Fix Released
Status in initramfs-tools source package in Xenial:
  Fix Committed
Status in initramfs-tools source package in Bionic:
  Fix Committed
Status in initramfs-tools package in Debian:
  Fix Released

Bug description:
  [Impact]
  If there is lots of activity on a different filesystem, high io/cache 
pressure, or a stale mount updating initramfs might hang because the 
update-initramfs script calls sync. This leaves the system unresponsive and 
will require the user to forcefully kill dpkg.

  [Test Case]
  One easy way to simulate this is by copying a huge file over nfs. Note: do 
not use localhost, it is too fast for this purpose, a network bridge over qemu 
is good enough.

  1. Setup a nfs server and export a directory with write permissions
  for the client

  2. Copy a big file over NFS (assumes it is mounted at /mnt in the client)
  $ dd if=/dev/zero of=/mnt/big_zeros bs=512 count=1M status=progress
  Note: adjust the "count" accordingly to how fast/slow your system is.

  3. Call sync and verify that it only finished after "dd" is done.

  4. Repeat step #2 and now call "sync -f /boot/<some-initrd-image>".
  Verify that it finished immediatly.

  [Regression Potential]
  Although syncfs(2) man page [2] states that it works just the same as sync - 
except being limited to a filesystem -, any actual differences in the 
implementation can affect how the initrd image file is synced to the disk, 
leading to unexpected behavior.

  [Other]
  If syncfs is unsupported then the 'sync' binary will ensure that a normal 
system-wide sync is called [1]. The proposed patch won't help in scenarios 
where the initrd file is located in a busy filesystem (eg. no separated /boot 
partition).

  The 'sync' and 'syncfs' specifications are pretty much similar and
  syncfs is expected to work the same as a normal sync regarding data
  integrity. Also altought the patch introduces the initrd file as an
  extra argument which would cause 'sync -f' to fail if the file does
  not exist, the update-initramfs script would fail earlier than that
  because that file is created by the 'mv' call a few lines above. Thus
  no regressions are expected.

  [References]
  [1] 
http://git.savannah.gnu.org/cgit/coreutils.git/commit/src/sync.c?id=8b2bf5295f353016d4f5e6a2317d55b6a8e7fd00
  [2] http://manpages.ubuntu.com/manpages/xenial/man2/syncfs.2.html

  [Original bug report]
  At least four users, including myself, are having an issue with 
update-initramfs hanging while updating ubuntu 16.04. The bug has been 
documented while attempting an update to multiple kernel versions ( 4.4.0-24, 
4.4.0-62,  4.4.0-63). The bug causes any apt-get update or install to fail, and 
may also lead to an unbootable system.

  User #1 (me):
  $ uname -a
  Linux <computername> 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 
2017 x86_64 x86_64 x86_64 GNU/Linux

  $ sudo apt-get upgrade
  Fetched 1,571 MB in 2min 9s (12.2 MB/s)
  Extracting templates from packages: 100%
  Preconfiguring packages ...
  (Reading database ... 344634 files and directories currently installed.)
  Preparing to unpack .../base-files_9.4ubuntu4.4_amd64.deb ...
  Unpacking base-files (9.4ubuntu4.4) over (9.4ubuntu4.3) ...
  Processing triggers for plymouth-theme-ubuntu-text (0.9.2-3ubuntu13.1) ...
  update-initramfs: deferring update (trigger activated)
  Processing triggers for man-db (2.7.5-1) ...
  Processing triggers for cracklib-runtime (2.9.2-1build2) ...
  Processing triggers for install-info (6.1.0.dfsg.1-5) ...
  Processing triggers for initramfs-tools (0.122ubuntu8.8) ...
  update-initramfs: Generating /boot/initrd.img-4.4.0-63-generic

  <hangs overnight> Uh oh! Let's try to troubleshoot.

  $ sudo killall dpkg
  $ sudo dpkg --configure -a
  Setting up initramfs-tools (0.122ubuntu8.8) ...
  update-initramfs: deferring update (trigger activated)
  Setting up base-files (9.4ubuntu4.4) ...
  Installing new version of config file /etc/issue ...
  Installing new version of config file /etc/issue.net ...
  Installing new version of config file /etc/lsb-release ...
  Setting up linux-image-4.4.0-63-generic (4.4.0-63.84) ...
  Running depmod.
  update-initramfs: deferring update (hook will be called later)
  initrd.img(/boot/initrd.img-4.4.0-63-generic
  ) points to /boot/initrd.img-4.4.0-63-generic
   (/boot/initrd.img-4.4.0-63-generic) -- doing nothing at 
/var/lib/dpkg/info/linux-image-4.4.0-63-generic.postinst line 491.
  vmlinuz(/boot/vmlinuz-4.4.0-63-generic
  ) points to /boot/vmlinuz-4.4.0-63-generic
   (/boot/vmlinuz-4.4.0-63-generic) -- doing nothing at 
/var/lib/dpkg/info/linux-image-4.4.0-63-generic.postinst line 491.
  Examining /etc/kernel/postinst.d.
  run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 4.4.0-63-generic 
/boot/vmlinuz-4.4.0-63-generic
  run-parts: executing /etc/kernel/postinst.d/dkms 4.4.0-63-generic 
/boot/vmlinuz-4.4.0-63-generic
  run-parts: executing /etc/kernel/postinst.d/initramfs-tools 4.4.0-63-generic 
/boot/vmlinuz-4.4.0-63-generic
  update-initramfs: Generating /boot/initrd.img-4.4.0-63-generic
  ^CFailed to process /etc/kernel/postinst.d at 
/var/lib/dpkg/info/linux-image-4.4.0-63-generic.postinst line 1052.
  dpkg: error processing package linux-image-4.4.0-63-generic (--configure):
   subprocess installed post-installation script returned error exit status 2
  dpkg: dependency problems prevent configuration of linux-image-generic:
   linux-image-generic depends on linux-image-4.4.0-63-generic; however:
    Package linux-image-4.4.0-63-generic is not configured yet.

  dpkg: error processing package linux-image-generic (--configure):
   dependency problems - leaving unconfigured
  dpkg: dependency problems prevent configuration of 
linux-signed-image-4.4.0-63-generic:
   linux-signed-image-4.4.0-63-generic depends on linux-image-4.4.0-63-generic 
(= 4.4.0-63.84); however:
    Package linux-image-4.4.0-63-generic is not configured yet.

  dpkg: error processing package linux-signed-image-4.4.0-63-generic 
(--configure):
   dependency problems - leaving unconfigured
  dpkg: dependency problems prevent configuration of linux-signed-image-generic:
   linux-signed-image-generic depends on linux-signed-image-4.4.0-63-generic; 
however:
    Package linux-signed-image-4.4.0-63-generic is not configured yet.

  dpkg: error processing package linux-signed-image-generic (--configure):
   dependency problems - leaving unconfigured
  dpkg: dependency problems prevent configuration of 
linux-image-extra-4.4.0-63-generic:
   linux-image-extra-4.4.0-63-generic depends on linux-image-4.4.0-63-generic; 
however:
    Package linux-image-4.4.0-63-generic is not configured yet.

  dpkg: error processing package linux-image-extra-4.4.0-63-generic 
(--configure):
   dependency problems - leaving unconfigured
  dpkg: dependency problems prevent configuration of linux-generic:
   linux-generic depends on linux-image-generic (= 4.4.0.63.67); however:
    Package linux-image-generic is not configured yet.

  dpkg: error processing package linux-generic (--configure):
   dependency problems - leaving unconfigured
  dpkg: dependency problems prevent configuration of linux-signed-generic:
   linux-signed-generic depends on linux-signed-image-generic (= 4.4.0.63.67); 
however:
    Package linux-signed-image-generic is not configured yet.

  dpkg: error processing package linux-signed-generic (--configure):
   dependency problems - leaving unconfigured
  Processing triggers for initramfs-tools (0.122ubuntu8.8) ...
  update-initramfs: Generating /boot/initrd.img-4.4.0-63-generic
  ^Cdpkg: error processing package initramfs-tools (--configure):
   subprocess installed post-installation script was interrupted
  Processing triggers for plymouth-theme-ubuntu-text (0.9.2-3ubuntu13.1) ...
  update-initramfs: deferring update (trigger activated)
  Errors were encountered while processing:
   linux-image-4.4.0-63-generic
   linux-image-generic
   linux-signed-image-4.4.0-63-generic
   linux-signed-image-generic
   linux-image-extra-4.4.0-63-generic
   linux-generic
   linux-signed-generic
   initramfs-tools

  I verified that /boot has enough space:

  /dev/nvme0n1p2               496M  314M  157M  67% /boot

  Here's my /boot:

  $ ls -l /boot
  total 325378
  -rw-r--r-- 1 root root  1244118 Jan  6 16:44 abi-4.4.0-59-generic
  -rw-r--r-- 1 root root  1244118 Jan 18 07:59 abi-4.4.0-62-generic
  -rw-r--r-- 1 root root  1245512 Feb  1 11:39 abi-4.4.0-63-generic
  -rw-r--r-- 1 root root  1245512 Feb 20 05:40 abi-4.4.0-64-generic
  -rw-r--r-- 1 root root   190047 Jan  6 16:44 config-4.4.0-59-generic
  -rw-r--r-- 1 root root   190047 Jan 18 07:59 config-4.4.0-62-generic
  -rw-r--r-- 1 root root   190247 Feb  1 11:39 config-4.4.0-63-generic
  -rw-r--r-- 1 root root   190247 Feb 20 05:40 config-4.4.0-64-generic
  drwx------ 3 root root     4096 Dec 31  1969 efi
  drwxr-xr-x 5 root root     1024 Feb 23 13:23 grub
  -rw-r--r-- 1 root root 10931153 Feb 23 13:56 initrd.img-4.4.0-57-generic
  -rw-r--r-- 1 root root 46506399 Feb  9 05:37 initrd.img-4.4.0-59-generic
  -rw-r--r-- 2 root root 39526162 Feb 23 13:27 initrd.img-4.4.0-62-generic
  -rw-r--r-- 2 root root 39526162 Feb 23 13:27 
initrd.img-4.4.0-62-generic.dpkg-bak
  -rw-r--r-- 1 root root        0 Feb 23 13:56 initrd.img-4.4.0-62-generic.new
  -rw-r--r-- 2 root root 26019417 Feb 23 13:11 initrd.img-4.4.0-63-generic
  -rw-r--r-- 2 root root 26019417 Feb 23 13:11 
initrd.img-4.4.0-63-generic.dpkg-bak
  -rw-r--r-- 1 root root        0 Feb 23 13:56 initrd.img-4.4.0-63-generic.new
  -rw-r--r-- 1 root root 39516686 Feb 23 14:50 initrd.img-4.4.0-64-generic
  -rw-r--r-- 1 root root 39516505 Feb 23 13:33 
initrd.img-4.4.0-64-generic.dpkg-bak
  drwx------ 2 root root    12288 Jul 31  2016 lost+found
  -rw-r--r-- 1 root root   182704 Jan 28  2016 memtest86+.bin
  -rw-r--r-- 1 root root   184380 Jan 28  2016 memtest86+.elf
  -rw-r--r-- 1 root root   184840 Jan 28  2016 memtest86+_multiboot.bin
  -rw------- 1 root root  3875594 Jan  6 16:44 System.map-4.4.0-59-generic
  -rw------- 1 root root  3875553 Jan 18 07:59 System.map-4.4.0-62-generic
  -rw------- 1 root root  3883990 Feb  1 11:39 System.map-4.4.0-63-generic
  -rw------- 1 root root  3883990 Feb 20 05:40 System.map-4.4.0-64-generic
  -rw------- 1 root root  7069136 Jan  6 16:44 vmlinuz-4.4.0-59-generic
  -rw------- 1 root root  7071064 Jan 11 07:08 
vmlinuz-4.4.0-59-generic.efi.signed
  -rw------- 1 root root  7070992 Jan 18 07:59 vmlinuz-4.4.0-62-generic
  -rw------- 1 root root  7072920 Feb  3 08:04 
vmlinuz-4.4.0-62-generic.efi.signed
  -rw------- 1 root root  7087088 Feb  1 11:39 vmlinuz-4.4.0-63-generic
  -rw------- 1 root root  7087152 Feb 20 05:40 vmlinuz-4.4.0-64-generic

  After uninstall of  linux-image-4.4.0-63-generic:

  $ sudo dpkg --status linux-image-4.4.0-63-genericPackage: 
linux-image-4.4.0-63-generic
  Status: deinstall ok config-files
  Priority: optional
  Section: kernel
  Installed-Size: 64800
  Maintainer: Ubuntu Kernel Team <kernel-t...@lists.ubuntu.com>
  Architecture: amd64
  Source: linux
  Version: 4.4.0-63.84
  Provides: fuse-module, ivtv-modules, kvm-api-4, linux-image, 
redhat-cluster-modules, spl-dkms, virtualbox-guest-modules, zfs-dkms
  Depends: initramfs-tools | linux-initramfs-tool, kmod
  Recommends: grub-pc | grub-efi-amd64 | grub-efi-ia32 | grub | lilo
  Suggests: fdutils, linux-doc-4.4.0 | linux-source-4.4.0, linux-tools, 
linux-headers-4.4.0-63-generic

  There does seem to be a problem with linux-image-
  extra-4.4.0-63-generic. Trying to uninstall this triggers update-
  initramfs.

  $ sudo dpkg --status linux-image-extra-4.4.0-63-generic
  Package: linux-image-extra-4.4.0-63-generic
  Status: purge ok half-installed
  Priority: optional
  Section: kernel
  Installed-Size: 148939
  Maintainer: Ubuntu Kernel Team <kernel-t...@lists.ubuntu.com>
  Architecture: amd64
  Source: linux
  Version: 4.4.0-63.84
  Depends: linux-image-4.4.0-63-generic, crda | wireless-crda

  I've tried http://askubuntu.com/questions/650732/apt-fails-to-remove-
  partially-installed-kernel-and-cant-install-any-other-packa/651596
  with no luck. At this point I'm not sure if a partially installed
  kernel is the problem, and I've run out of troubleshooting insight.

  User #2:
  https://ubuntuforums.org/showthread.php?t=2351895

  User #3:
  https://ubuntuforums.org/showthread.php?t=2353606

  User #4 (original question):

  When upgrading (apt-get upgrade) on 16.04 (ubuntu-mate) I get a hang
  (left from 9:50am til 16:00 or thereabouts)

  I tracked down as far as the call to /etc/kernel/postinst.d/initramfs-
  tools and added a -v option, the last relevant lines on the terminal
  when re-running `apt-get upgrade` are as follows:

  ...
  Adding binary /bin/date
  Adding binary /sbin/hwclock
  Adding binary /sbin/dumpe2fs
  Calling hook dmsetup
  Calling hook reiserfsprogs
  Building cpio /boot/initrd.img-4.4.0-24-generic.new initramfs
  ^CFailed to process /etc/kernel/postinst.d at 
/var/lib/dpkg/info/linux-image-4.4.0-24-generic.postinst line 1052.
  dpkg: error processing package linux-image-4.4.0-24-generic (--configure):
   subprocess installed post-installation script returned error exit status 2
  dpkg: dependency problems prevent configuration of 
linux-image-extra-4.4.0-24-generic:
   linux-image-extra-4.4.0-24-generic depends on linux-image-4.4.0-24-generic; 
however:
    Package linux-image-4.4.0-24-generic is not configured yet.

  Checking with `ps fax` before the interrupt, I get this tree -
  indicating a hang on `sync` task

  sudo dpkg --configure -a
   \_ dpkg --configure -a
       \_ /usr/bin/perl 
/var/lib/dpkg/info/linux-image-4.4.0-24-generic.postinst configure
           \_ run-parts --verbose --exit-on-error --arg=4.4.0-24-generic 
--arg=/boot/vmlinuz-4.4.0-24-generic /etc/kernel/postinst.d
               \_ /bin/sh -e /etc/kernel/postinst.d/initramfs-tools 
4.4.0-24-generic /boot/vmlinuz-4.4.0-24-generic
                   \_ /bin/sh /usr/sbin/update-initramfs -v -c -t -k 
4.4.0-24-generic -b /boot
                       \_ sync

  I tried moving the resulting initramfs img file in /boot so a new one
  would be created - a new one is indeed created, hang still occurs on
  `sync`

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/1667512/+subscriptions

-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to