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-misc-post.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-update-check.service | ||||
| 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-random-seed.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-rwdev.sh | ||||
| 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-random-seed.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-rwdev.sh | ||||
| /usr/lib/qubes/init/functions | ||||
| @ -804,6 +805,7 @@ The Qubes core startup configuration for SystemD init. | ||||
| %defattr(-,root,root,-) | ||||
| /lib/systemd/system/qubes-misc-post.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-early-vm-config.service | ||||
| /lib/systemd/system/qubes-update-check.service | ||||
|  | ||||
| @ -15,6 +15,11 @@ start() | ||||
| { | ||||
| 	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:" | ||||
|     # shellcheck disable=SC2015 | ||||
| 	/usr/lib/qubes/init/mount-dirs.sh && success || failure | ||||
|  | ||||
| @ -85,6 +85,7 @@ enable qubes-updates-proxy.service | ||||
| enable qubes-network.service | ||||
| enable qubes-qrexec-agent.service | ||||
| enable qubes-mount-dirs.service | ||||
| enable qubes-rootfs-resize.service | ||||
| enable qubes-firewall.service | ||||
| enable qubes-meminfo-writer.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
	 Marek Marczykowski-Górecki
						Marek Marczykowski-Górecki