apertis-update-manager-diskfull manual
low
- Image Types:
- minimal-armhf
- Image Deployment:
- OSTree
- Type:
- functional
Description
Ensure that failures due to disk full errors during updates have no effect on the system The automated version of this test: https://qa.apertis.org/aum-out-of-space.html
Resources
- A static encrypted update bundle file of the same architecture, variant and version as the testing image
- A Fat32 USB flash drive, preloaded with the encrypted update bundle at the root of the disk
- The latest static encrypted update file can be downloaded at the same location than the target image. It has the same basename, and a '.delta.enc' extension
- The static encrypted update file should be copied to the flash drive using the name 'static-update.bundle.enc'.
- A PC must be connected to DUT serial port
Execution Steps
- Check the initial deployment
- Prepare the copy of commit and deploy to allow the upgrade to the same version
- Command below shows you an initial commit ID, for instance
- Get the Collection ID and ref
- Create the list of files to skip and enshure there are some files in these directories
- Create the commit with changed timestamp and skipped list from above to allow upgrade with recent update file
- Deploy the prepared commit
- Wait until the system is booted again and check the deployment
- The booted commit (started with '*') must have ID which we prepare and the initial commit ID should be marked as '(rollback)'
- Check booted deployment have no file objects which we skip
- Remove the initial deployment
- Reboot the system
- Check the current deployment
- Need to monitor the journal log
- Check the free space on rootfs, calculate the size of file to leave insufficient free space for upgrade to happen (this prevents the unexpected reboot during the test caused by other services). For instance, in the case below, NUM value would be 1451. It is the result of the calculation 1823-348-24, there 24 is a magic constant, so that almost, but not all free space is used. The free space can be calculated with command line `sudo df -B 1M / | grep / | awk '{print $2-$3-24}'`
- Wait until 'dd' completes (it should take time), you will see the output similar to
- Plug the USB flash drive in the device
- The update should fail with error message
- Remove the USB flash drive
- Set reserved space for ostree to '0'
- Restart the Apertis Update Manager
- Plug the USB flash drive in the device
- The update should fail with some error message related to disk space, for instance:
- Remove the USB flash drive
- Remove temporary file
- Reboot the system
- Check that the status is the same than at the beginning of the test
$ sudo ostree admin status
$ export BOOTID=$(sudo ostree admin status | sed -n -e 's/^\* apertis \([0-9a-f]*\)\.[0-9]$/\1/p'); echo $BOOTID
$ export CID=$(sudo ostree refs -c | head -n 1 | tr -d '(),' | cut -f 1 -d ' '); echo COLLECTION_ID=$CID
$ export REF=$(sudo ostree refs -c | head -n 1 | tr -d '(),' | cut -f 2 -d ' '); echo REF=$REF
$ ls -1d /usr/share/locale /usr/share/man /usr/share/zoneinfo > /tmp/skip
$ du -sh /usr/share/locale /usr/share/man /usr/share/zoneinfo
$ export NEWID=$(sudo ostree commit --orphan --tree=ref=$BOOTID --add-metadata-string=ostree.collection-binding=$CID --bind-ref=$REF --timestamp="1 year ago" --skip-list=/tmp/skip); echo "New commit: $NEWID"
$ sudo ostree admin upgrade --allow-downgrade --deploy-only --override-commit=$NEWID --reboot
$ sudo ostree admin status
$ du -sh /usr/share/locale /usr/share/man /usr/share/zoneinfo
$ sudo ostree admin undeploy 1
$ sudo ostree admin status
$ sudo journalctl -ef --unit apertis-update-manager &
$ sudo df -B 1M /
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/mmcblk0p2 1823 348 1365 21% /
$ sudo dd if=/dev/zero of=/var/bigfile bs=1M count=<NUM> ; echo "dd completed!"
1521483776 bytes (1.5 GB) copied, 82.1661 s, 18.5 MB/s
dd completed!
Dec 19 22:53:33 apertis apertis-update-[348]: Ostree upgrade failed: min-free-space-percent '3%' would be exceeded, 16.8 MB available
$ sudo ostree config set core.min-free-space-percent "0"
$ sudo systemctl restart apertis-update-manager
Dec 19 22:55:10 apertis apertis-update-[319]: Ostree upgrade failed: mkdir(boot/loader.0/entries): Input/output error
Dec 19 22:43:46 apertis apertis-update-[794]: Ostree upgrade failed: Error writing to file descriptor: No space left on device
$ sudo rm -f /var/bigfile
$ sudo reboot
$ sudo ostree admin status
Expected
The update wasn't applied
System boots using the initial deployment