Resize root filesystem at VM startup if needed
Check if root device was enlarged while domain was powered off and resize the filesystem in such a case. QubesOS/qubes-issues#3173 QubesOS/qubes-issues#3143
This commit is contained in:
parent
d8a2b8c375
commit
1ed6e614ab
2
debian/qubes-core-agent.install
vendored
2
debian/qubes-core-agent.install
vendored
@ -70,6 +70,7 @@ lib/systemd/system/org.cups.cupsd.socket.d/30_qubes.conf
|
|||||||
lib/systemd/system/qubes-early-vm-config.service
|
lib/systemd/system/qubes-early-vm-config.service
|
||||||
lib/systemd/system/qubes-misc-post.service
|
lib/systemd/system/qubes-misc-post.service
|
||||||
lib/systemd/system/qubes-mount-dirs.service
|
lib/systemd/system/qubes-mount-dirs.service
|
||||||
|
lib/systemd/system/qubes-rootfs-resize.service
|
||||||
lib/systemd/system/qubes-sysinit.service
|
lib/systemd/system/qubes-sysinit.service
|
||||||
lib/systemd/system/qubes-update-check.service
|
lib/systemd/system/qubes-update-check.service
|
||||||
lib/systemd/system/qubes-update-check.timer
|
lib/systemd/system/qubes-update-check.timer
|
||||||
@ -110,6 +111,7 @@ usr/lib/qubes/init/mount-dirs.sh
|
|||||||
usr/lib/qubes/init/qubes-early-vm-config.sh
|
usr/lib/qubes/init/qubes-early-vm-config.sh
|
||||||
usr/lib/qubes/init/qubes-random-seed.sh
|
usr/lib/qubes/init/qubes-random-seed.sh
|
||||||
usr/lib/qubes/init/qubes-sysinit.sh
|
usr/lib/qubes/init/qubes-sysinit.sh
|
||||||
|
usr/lib/qubes/init/resize-rootfs-if-needed.sh
|
||||||
usr/lib/qubes/init/setup-rw.sh
|
usr/lib/qubes/init/setup-rw.sh
|
||||||
usr/lib/qubes/init/setup-rwdev.sh
|
usr/lib/qubes/init/setup-rwdev.sh
|
||||||
usr/lib/qubes/prepare-suspend
|
usr/lib/qubes/prepare-suspend
|
||||||
|
26
init/resize-rootfs-if-needed.sh
Executable file
26
init/resize-rootfs-if-needed.sh
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Possibly resize root device (partition, filesystem), if underlying device was
|
||||||
|
# enlarged.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# if underlying root device is read-only, don't do anything
|
||||||
|
if [ "$(blockdev --getro /dev/xvda)" -eq "1" ]; then
|
||||||
|
echo "xvda is read-only, not resizing" >&2
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
sysfs_root_dev="/sys/dev/block/$(mountpoint -d /)"
|
||||||
|
sysfs_xvda="/sys/class/block/xvda"
|
||||||
|
|
||||||
|
# if root filesystem use already (almost) the whole dis
|
||||||
|
non_rootfs_data=$(( 250 * 1024 * 2 ))
|
||||||
|
if [ "$(cat "$sysfs_xvda/size")" -lt \
|
||||||
|
$(( non_rootfs_data + $(cat "$sysfs_root_dev/size") )) ]; then
|
||||||
|
echo "root filesystem already at the right size" >&2
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# resize needed, do it
|
||||||
|
/usr/lib/qubes/resize-rootfs
|
@ -617,6 +617,7 @@ rm -f %{name}-%{version}
|
|||||||
/usr/lib/qubes/init/qubes-early-vm-config.sh
|
/usr/lib/qubes/init/qubes-early-vm-config.sh
|
||||||
/usr/lib/qubes/init/qubes-random-seed.sh
|
/usr/lib/qubes/init/qubes-random-seed.sh
|
||||||
/usr/lib/qubes/init/qubes-sysinit.sh
|
/usr/lib/qubes/init/qubes-sysinit.sh
|
||||||
|
/usr/lib/qubes/init/resize-rootfs-if-needed.sh
|
||||||
/usr/lib/qubes/init/setup-rw.sh
|
/usr/lib/qubes/init/setup-rw.sh
|
||||||
/usr/lib/qubes/init/setup-rwdev.sh
|
/usr/lib/qubes/init/setup-rwdev.sh
|
||||||
/usr/lib/qubes/init/functions
|
/usr/lib/qubes/init/functions
|
||||||
@ -804,6 +805,7 @@ The Qubes core startup configuration for SystemD init.
|
|||||||
%defattr(-,root,root,-)
|
%defattr(-,root,root,-)
|
||||||
/lib/systemd/system/qubes-misc-post.service
|
/lib/systemd/system/qubes-misc-post.service
|
||||||
/lib/systemd/system/qubes-mount-dirs.service
|
/lib/systemd/system/qubes-mount-dirs.service
|
||||||
|
/lib/systemd/system/qubes-rootfs-resize.service
|
||||||
/lib/systemd/system/qubes-sysinit.service
|
/lib/systemd/system/qubes-sysinit.service
|
||||||
/lib/systemd/system/qubes-early-vm-config.service
|
/lib/systemd/system/qubes-early-vm-config.service
|
||||||
/lib/systemd/system/qubes-update-check.service
|
/lib/systemd/system/qubes-update-check.service
|
||||||
|
@ -15,6 +15,11 @@ start()
|
|||||||
{
|
{
|
||||||
have_qubesdb || return
|
have_qubesdb || return
|
||||||
|
|
||||||
|
echo -n $"Adjusting root filesystem size:"
|
||||||
|
# shellcheck disable=SC2015
|
||||||
|
/usr/lib/qubes/init/resize-rootfs-if-needed.sh && success || failure
|
||||||
|
echo
|
||||||
|
|
||||||
echo -n $"Setting up Qubes persistent file systems:"
|
echo -n $"Setting up Qubes persistent file systems:"
|
||||||
# shellcheck disable=SC2015
|
# shellcheck disable=SC2015
|
||||||
/usr/lib/qubes/init/mount-dirs.sh && success || failure
|
/usr/lib/qubes/init/mount-dirs.sh && success || failure
|
||||||
|
@ -85,6 +85,7 @@ enable qubes-updates-proxy.service
|
|||||||
enable qubes-network.service
|
enable qubes-network.service
|
||||||
enable qubes-qrexec-agent.service
|
enable qubes-qrexec-agent.service
|
||||||
enable qubes-mount-dirs.service
|
enable qubes-mount-dirs.service
|
||||||
|
enable qubes-rootfs-resize.service
|
||||||
enable qubes-firewall.service
|
enable qubes-firewall.service
|
||||||
enable qubes-meminfo-writer.service
|
enable qubes-meminfo-writer.service
|
||||||
enable qubes-iptables.service
|
enable qubes-iptables.service
|
||||||
|
19
vm-systemd/qubes-rootfs-resize.service
Normal file
19
vm-systemd/qubes-rootfs-resize.service
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Adjust root filesystem size
|
||||||
|
# There is a dependency on dev-xvdb.device because
|
||||||
|
# mount-dirs.sh calls setup-rwdev.sh which
|
||||||
|
# must happen only when /dev/xvdb has appeared.
|
||||||
|
After=qubes-sysinit.service dev-xvda.device
|
||||||
|
DefaultDependencies=no
|
||||||
|
Before=local-fs.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/lib/qubes/init/resize-rootfs-if-needed.sh
|
||||||
|
# There is no need for an ExecStop because systemd
|
||||||
|
# cleans up mount units in the right order, killing
|
||||||
|
# processes as needed.
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
Loading…
Reference in New Issue
Block a user