growing root partition does not always work with root=PARTUUID=
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
cloud-init |
Fix Released
|
Medium
|
Unassigned | ||
cloud-init (Ubuntu) |
Fix Released
|
Medium
|
Unassigned | ||
Xenial |
Fix Released
|
Medium
|
Unassigned | ||
Yakkety |
Fix Released
|
Medium
|
Unassigned | ||
Zesty |
Fix Released
|
Medium
|
Unassigned | ||
Artful |
Fix Released
|
Medium
|
Unassigned |
Bug Description
=== Begin SRU Template ===
[Impact]
Growing the root partition would fail in either of two cases:
a.) if the device /dev/root existed
This occurs on yakkety systems.
b.) the kernel command line had upper case letters in PARTUUID=<value>
This can be fed via root= on either xenial or yakkety.
[Test Case]
get-proposed-image is
https:/
It downloads a cloud image of a given release, and then creates a -proposed
image with cloud-init upgraded.
1.) get a (proposed) disk image image.
and convert it to raw so you can read the partuuid with sfdisk
(get-
'qemu-img convert -O raw orig.img orig.raw')
./get-
2.) get the partition uuid of the first partition
$ raw=yakkety-
$ ptuuid=$(sfdisk --part-uuid $raw 1)
# sfdisk will normally output in upper case, but be explicit here.
$ ptuuid=$(echo "$ptuuid" | tr '[a-z]' '[A-Z]')
3.) create a nocloud seed
$ printf "%s\n%s\n%s\n%s\n" "#cloud-config" "password: passw0rd" \
"chpasswd: {expire: False}" "ssh_pwauth: True" > my-user-data
$ echo "instance-id: $(uuidgen || echo i-abcdefg)" > my-meta-data
$ cloud-localds my-seed.img my-user-data my-meta-data
4.) extract kernel from inside the image
$ sudo mount-image-
5.) boot instance with disk backed by the raw disk above.
$ qemu-img create -f qcow2 -b $raw disk.img 10G
$ qemu-system-x86_64 -enable-kvm \
-drive file=disk.
-net nic -net user,hostfwd=
-snapshot -m 768 -nographic -echr 0x05 \
-kernel kernel \
-append "root=PARTUUID=
6.) log in, verify / has been resized.
log in with 'ubuntu' and password 'passw0rd'
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/root 9.6G 1009M 8.6G 11% /
[Regression Potential]
The regression path is really the case where devent2dev finds /dev/root
and /dev/root exists. In that case, we now possibly return a /dev/<device>
path when previously it would have returned /dev/root.
[Other Info]
The qemu-system-x86 command above uses ide devices. This is because
the ide device emulated by qemu is built into the -generic kernel,
whilei the more common virtio-block or virtio-scsi are not. If you
attach those device types, it will fail with 'cant find root'.
=== End SRU Template ===
When trying to verify I found a couple cases where this still does not work.
Related bugs:
* bug 1677376: growing partitions does not work when booted without initramfs
* bug 1685291: RFC: virtio and virtio-scsi should be built in
* bug 1725067: cloud-init resizefs fails when booting with root=PARTUUID= Edit
Related branches
- Scott Moser: Approve
- Server Team CI bot: Approve (continuous-integration)
-
Diff: 36 lines (+8/-3)2 files modifiedcloudinit/config/cc_growpart.py (+5/-1)
cloudinit/util.py (+3/-2)
Changed in cloud-init: | |
importance: | Undecided → Medium |
status: | New → Confirmed |
description: | updated |
description: | updated |
Changed in cloud-init (Ubuntu): | |
status: | New → Confirmed |
importance: | Undecided → Medium |
description: | updated |
Changed in cloud-init (Ubuntu Xenial): | |
status: | New → Confirmed |
Changed in cloud-init (Ubuntu Yakkety): | |
status: | New → Confirmed |
Changed in cloud-init (Ubuntu Zesty): | |
status: | New → Confirmed |
Changed in cloud-init (Ubuntu Xenial): | |
importance: | Undecided → Medium |
Changed in cloud-init (Ubuntu Yakkety): | |
importance: | Undecided → Medium |
Changed in cloud-init (Ubuntu Zesty): | |
importance: | Undecided → Medium |
description: | updated |
description: | updated |
This bug was fixed in the package cloud-init - 0.7.9-113- g513e99e0- 0ubuntu1
--------------- 113-g513e99e0- 0ubuntu1) artful; urgency=medium
cloud-init (0.7.9-
* New upstream snapshot.
- nova-lxd: read product_name from environment, not platform.
(LP: #1685810)
- Fix yum repo config where keys contain array values
[Dylan Perry] (LP: #1592150)
- template: Update debian backports template [Joshua Powers] (LP: #1627293)
- rsyslog: replace ~ with stop [Joshua Powers] (LP: #1367899)
- Doc: add additional RTD examples [Joshua Powers] (LP: #1459604)
- Fix growpart for some cases when booted with root=PARTUUID.
(LP: #1684869)
- pylint: update output style to parseable [Joshua Powers]
- pylint: fix all logging warnings [Joshua Powers]
- CloudStack: Add NetworkManager to list of supported DHCP lease dirs.
[Syed Mushtaq Ahmed]
- net: kernel lies about vlans not stealing mac addresses, when they do
[Dimitri John Ledkov] (LP: #1682871)
- ds-identify: Check correct path for "latest" config drive
[Daniel Watkins] (LP: #1673637)
- doc: Fix example for resolve.conf configuration.
[Jon Grimm] (LP: #1531582)
- Fix examples that reference upstream chef repository.
[Jon Grimm] (LP: #1678145)
- doc: correct grammar and improve clarity in merging documentation.
[David Tagatac]
- doc: Add missing doc link to snap-config module. [Ryan Harper]
- snap: allows for creating cloud-init snap [Joshua Powers]
- DigitalOcean: assign IPv4ll address to lowest indexed interface.
[Ben Howard]
- DigitalOcean: configure all NICs presented in meta-data. [Ben Howard]
- Remove (and/or fix) URL shortener references [Jon Grimm] (LP: #1669727)
- HACKING.rst: more info on filling out contributors agreement.
[Scott Moser]
- util: teach write_file about copy_mode option
[Lars Kellogg-Stedman] (LP: #1644064)
- DigitalOcean: bind resolvers to loopback interface. [Ben Howard]
- tests: fix AltCloud tests to not rely on blkid (LP: #1636531)
-- Scott Moser <email address hidden> Tue, 25 Apr 2017 16:34:08 -0400