curtin passes wrong args to mkfs when making filesystem on advanced format disks

Bug #1597522 reported by Wesley Wiedenmeier
10
This bug affects 1 person
Affects Status Importance Assigned to Milestone
curtin
High
Wesley Wiedenmeier
curtin (Ubuntu)
Undecided
Unassigned
Xenial
Undecided
Unassigned

Bug Description

[Impact]

 * curtin passes wrong args to mkfs when making filesystem on advanced
   format disks (4k sector size)

   Curtin has been modified to only pass the '-s 1' sector-size flag
   to the vfat formatting tools. Curtin has been updated to specify
   the correct sector-size flags and values to other formatting
   utilities that support such settings.

[Test Case]

 * Install proposed curtin package and attempt to format a disk with
   xfs filesystem using 4K logical blocksize for the disk.

  PASS: Ubuntu successfully installs with xfs filesystem on top of a
        4k Disk

  FAIL: Ubuntu fails to install with xfs filesystem on 4k disk.

[Regression Potential]

 * Low; current users expecting xfs on 4k disks were blocked without
   this fix.

[Original Description]
During format handling, curtin detects the underlying block size of the disk and sets the filesystem block size accordingly.

In order to properly handle a bug in mkfs.vfat, curtin adds the flag '-s 1'. However, curtin adds this flag to all disk format commands, not just to commands using 'mkfs.vfat'. This can lead to unexpected behavior with some formatting tools, and can cause installation to halt with others.

For example, the mkfs.btrfs utility understands '-s' to mean sectorsize, so when curtin installs to an advanced format disk and storage config includes a btrfs formatted filesystem, curtin will create a filesystem that uses 1 byte sectors. This will greatly harm filesystem performance.

For xfs volumes, this means that installation will fail completely, as the sectorsize attribute for xfs volumes must be specified in the format '-s size=512', so '-s 1' will cause mkfs.xfs to fail.

Fortunately, this does not affect mkfs.ext* because these tools seem to silently ignore the '-s' flag, so most users likely have not been affected.

Related branches

Revision history for this message
Wesley Wiedenmeier (wesley-wiedenmeier) wrote :

Also, curtin does not specify sector size for xfs volumes and should

Changed in curtin:
assignee: nobody → Wesley Wiedenmeier (wesley-wiedenmeier)
status: New → In Progress
Revision history for this message
Ryan Harper (raharper) wrote :

Good catch.

Changed in curtin:
importance: Undecided → High
Changed in curtin:
status: In Progress → Fix Committed
Ryan Harper (raharper)
description: updated
Revision history for this message
Andy Whitcroft (apw) wrote : Please test proposed package

Hello Wesley, or anyone else affected,

Accepted curtin into xenial-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/curtin/0.1.0~bzr425-0ubuntu1~16.04.1 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested, and change the tag from verification-needed to verification-done. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed. In either case, details of your testing will help us make a better decision.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance!

tags: added: verification-needed
Andy Whitcroft (apw)
Changed in curtin (Ubuntu):
status: New → Fix Released
Changed in curtin (Ubuntu Xenial):
status: New → Fix Committed
Revision history for this message
Wesley Wiedenmeier (wesley-wiedenmeier) wrote :

I can verify that the build in xenial-proposed resolves this bug using the example config attached.

Running an installation using curtin packed on a system with the current curtin release in xenial-updates installation fails.
Curtin release:
  root@tmp:/tmp# apt-cache policy curtin
  curtin:
    Installed: 0.1.0~bzr399-0ubuntu1~16.04.1
    Candidate: 0.1.0~bzr399-0ubuntu1~16.04.1
Failure:
  Unexpected error while running command.
  Command: ['mkfs.xfs', '-s', '1', '-f', '/dev/vdb2']
  Exit code: 1
  Reason: -
  Stdout: ''
  Stderr: 'unknown option -s 1\nUsage: mkfs.xfs\n/* blocksize */\t\t[-b log=n|size
  ...

When curtin is packed with the release in proposed, installation works

Curtin release:
  curtin:
    Installed: 0.1.0~bzr425-0ubuntu1~16.04.1
    Candidate: 0.1.0~bzr425-0ubuntu1~16.04.1

tags: added: verification-done
removed: verification-needed
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package curtin - 0.1.0~bzr425-0ubuntu1~16.04.1

---------------
curtin (0.1.0~bzr425-0ubuntu1~16.04.1) xenial-proposed; urgency=medium

  [ Scott Moser ]
  * debian/new-upstream-snapshot: add writing of debian changelog entries.

  [ Ryan Harper ]
  * New upstream snapshot.
    - unittest,tox.ini: catch and fix issue with trusty-level mock of open
    - block/mdadm: add option to ignore mdadm_assemble errors (LP: #1618429)
    - curtin/doc: overhaul curtin documentation for readthedocs.org
      (LP: #1351085)
    - curtin.util: re-add support for RunInChroot (LP: #1617375)
    - curtin/net: overhaul of eni rendering to handle mixed ipv4/ipv6 configs
    - curtin.block: refactor clear_holders logic into block.clear_holders and
      cli cmd
    - curtin.apply_net should exit non-zero upon exception. (LP: #1615780)
    - apt: fix bug in disable_suites if sources.list line is blank.
    - vmtests: disable Wily in vmtests
    - Fix the unittests for test_apt_source.
    - get CURTIN_VMTEST_PARALLEL shown correctly in jenkins-runner output
    - fix vmtest check_file_strippedline to strip lines before comparing
    - fix whitespace damage in tests/vmtests/__init__.py
    - fix dpkg-reconfigure when debconf_selections was provided.
      (LP: #1609614)
    - fix apt tests on non-intel arch
    - Add apt features to curtin. (LP: #1574113)
    - vmtest: easier use of parallel and controlling timeouts
    - mkfs.vfat: add force flag for formating whole disks (LP: #1597923)
    - block.mkfs: fix sectorsize flag (LP: #1597522)
    - block_meta: cleanup use of sys_block_path and handle cciss knames
      (LP: #1562249)
    - block.get_blockdev_sector_size: handle _lsblock multi result return
      (LP: #1598310)
    - util: add target (chroot) support to subp, add target_path helper.
    - block_meta: fallback to parted if blkid does not produce output
      (LP: #1524031)
    - commands.block_wipe: correct default wipe mode to 'superblock'
    - tox.ini: run coverage normally rather than separately
    - move uefi boot knowledge from launch and vmtest to xkvm

 -- Ryan Harper <email address hidden> Mon, 03 Oct 2016 13:43:54 -0500

Changed in curtin (Ubuntu Xenial):
status: Fix Committed → Fix Released
Revision history for this message
Martin Pitt (pitti) wrote : Update Released

The verification of the Stable Release Update for curtin has completed successfully and the package has now been released to -updates. Subsequently, the Ubuntu Stable Release Updates Team is being unsubscribed and will not receive messages about this bug report. In the event that you encounter a regression using the package from -updates please report a new bug using ubuntu-bug and tag the bug report regression-update so we can easily find any regressions.

Revision history for this message
Scott Moser (smoser) wrote : Fixed in Curtin 17.1

This bug is believed to be fixed in curtin in 17.1. If this is still a problem for you, please make a comment and set the state back to New

Thank you.

Changed in curtin:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers

Bug attachments