Consider only integer part of free space in megabytes when
deciding the boundaries of the to be created partition.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit f50a289e51)
Bump version to reset PKG_RELEASE counter.
Add missing dependency on ucode-mod-math which is needed for the
mkdtemp() implementation used to format UBI volumes.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Fix and simplify console output, make sure uvol doesn't break in case
of LVM being installed but not used.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit 3959a9b22c)
Shift ARGV until actual parameters start to compensate for older
versions of ucode passing the complete cmdline.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit 31f02d5c1e)
Don't use features which are not yet present in the version of ucode
currently shipped with OpenWrt (such as `fs.access()` or assuming raw
mode by default).
Fix syntax error in main executable.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit 74caff0d59)
* Fix build which was broken by a wrong path in the Makefile.
Adapt to ucode commit 4618807 ("main: rework CLI frontend"):
* ucode now no longer needs the {% %} around each code file, remove
that and safe one level of indentation.
* ARGV now no longer includes ucode executable and script itself
Fixes: 6350c7bc6 ("uvol: replace with re-write in ucode")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit 22d202e3a56d6756543713ec2a2af3c65da31572)
Replace previous Shell draft-quality implementation of uvol with a
rewrite in ucode[1].
While the new code is slightly larger, it performs much better (as
we no longer fork() for parsing strings like in Shell with grep, sed
and friends).
Before:
time uvol list -j
[ ... ]
real 0m 0.82s
user 0m 0.13s
sys 0m 0.10s
After:
time uvol list -j
[ ... ]
real 0m 0.47s
user 0m 0.05s
sys 0m 0.05s
[1]: https://github.com/jow-/ucode
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit 6350c7bc63)
'uvol list' was broken when introducing support for the hidden volumes.
Fix that by not using 'continue' keyword to break the loop (as that
lead to skipping 'json_select ..') and using if-clause instead.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit 1337c44026)
* Winchester discs can take a long time to spin up which results in
blockd also taking a while to complete to start.
* Make sure uvol only gets started once blockd is ready.
* Clean up paths (use '/tmp/run/uvol' everywhere instead of relying on
the '/var' -> '/tmp' symlink)
* Create 'apk' folder when initializing .meta volume.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Calling 'block umount' results in *all* devices listed in
/etc/config/fstab being unmounted.
Just call 'umount /dev/$devname' directly instead as that has the
desired effect.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* auto-created meta volume
Automatically create volume '.meta' sized 0.01% of the total space
managed by uvol, the minimum size being 4 MiB.
This volume should be used to keep metadata about stored volumes, such
as container runtime configuration (in /var/run/uvol/.meta/uxc) or
the database of installed container packages.
* configurable LVM volume group
Allow setting volume group to be used by uvol using UCI.
This is useful on devices which do not boot off the device which
should be used for uvol and hence cannot make use of autopart and
physical volume detection based on kernel cmdline.
Use option vg_name in uvol section of fstab UCI config package.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
As /var/state is used for UCI state, move persistent config for uxc
from /var/state/uxc to /var/run/uxc.
uxc itself has already been changed to look for it there.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Create UCI fstab mount sections for existing volumes on firstboot.
Introduce special handling for volumes with non-[:alnum:] prefix:
- do not create UCI sections for these 'hidden' volumes
- create UCI section for '.uxc' special volume with target
/var/state/uxc to be used for uxc config.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Changing a volume right after activation doesn't work well due to some
caching or race-condition issue.
Perform activation as last lvchange operation as a work-around.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* genrate UCI fstab configs for each volume before first 'up'
* remove UCI section on volume remove
* use autofs automounter for read-only volumes
* try umount on 'down'
* emulate hotplug events for UBI volume up/down
* more robust error paths
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* lvm: remove left-over ubus events
* lvm: resolve /dev/dm-* device name
As block-mount and blockd now use /dev/dm-* names, let uvol also return
those device names.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* make sure new volumes are in state 'down' until explicitely
requested to transition to 'up' state. Useful for additional
verification steps after writing a read-only volume.
* remove unused ubus events as blockd does that much better now
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Using GPT/UUID parition table is not always a possible choice.
Add support for MBR/DOS partitioned disks to make autopart work on
legacy targets like mt7623.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Free and total bytes are now properly returned as bytes by LVM2 as
requested. No longer multiply values.
Fix parameter order of 'create' command in usage output while at it.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* quotes around all variables
* always use 'read -r' instead of 'read'
* some more minor shellcheck fixes
* reorder LVM ops for 'up' call to allow it to succeed
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Use sfdisk to get GPT partition by name as partition names are not
known by the kernel if added via partx.
Make sure physical volume names are unique, if possible correlate
with the disks serial number and/or card's cid.
mkf2fs apparently returns 134 even in case format succeeded, so don't
fail in that case (this fixes rw volumes large enough for F2FS to be
selected by the lvm scripts of uvol).
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Emmit ubus events when volumes come up/down.
Make sure volume state is always well defined by introducing
additional state 'write-prepare' (wp) during mkfs.
Add init scripts to bring up volumes at boot.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Make sure filesystem is ready when volume becomes available.
Use 'write-once' as initial state for read-only volumes, only allow
writing to volumes in that state and transision to 'read-only' once
write has completed.
Also fix a typo which prevented 'list' command from working with LVM.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
uvol is a wrapper-script which allows automated handling of storage
volumes. uvol currently comes with backend support for LVM2 and UBI,
covering practically all options for storage large enough to be
managed (NAND, SPI-NAND, eMMC, SATA, NVME, virtio-blk, ...).
Signed-off-by: Daniel Golle <daniel@makrotopia.org>