Use online resize2fs, and run filesystem check only when needed

When trying offline resize2fs, it require running fsck first, which
takes time, especially on large volumes. And in most cases, resize2fs
will notice that no action is needed - after wasting some time on fsck.
To remedy this, use resize2fs in online mode (on mounted filesystem).
And drop fsck call if it fails (filesystem is already mounted
read-write, running fsck isn't good idea).

But do not remove fsck call completely - still call it, but without '-f'
flag, so it run actual check only when really needed (unclean shutdown,
last check far in the past etc).

Fixes QubesOS/qubes-issues#979
Fixes QubesOS/qubes-issues#2583
This commit is contained in:
Marek Marczykowski-Górecki 2017-02-27 02:13:42 +01:00
parent d8e568fa13
commit 9f9c3c56fc
No known key found for this signature in database
GPG Key ID: 063938BA42CFA724
2 changed files with 14 additions and 20 deletions

View File

@ -1,9 +1,19 @@
#!/bin/sh #!/bin/sh
dev=/dev/xvdb
if mountpoint -q /rw ; then if mountpoint -q /rw ; then
# This means /rw is mounted now. # This means /rw is mounted now.
echo "Checking /rw" >&2 echo "Checking /rw" >&2
echo "Private device size management: enlarging $dev" >&2
if content=$(resize2fs "$dev" 2>&1) ; then
echo "Private device size management: resize2fs of $dev succeeded" >&2
else
echo "Private device size management: resize2fs $dev failed:" >&2
echo "$content" >&2
fi
if ! [ -d /rw/config ] ; then if ! [ -d /rw/config ] ; then
echo "Virgin boot of the VM: populating /rw/config" >&2 echo "Virgin boot of the VM: populating /rw/config" >&2

View File

@ -26,27 +26,11 @@ if [ -e "$dev" ] ; then
fi fi
fi fi
echo "Private device size management: enlarging $dev" >&2 echo "Private device management: checking $dev" >&2
if content=$(resize2fs "$dev" 2>&1) ; then if content=$(fsck.ext4 -p "$dev" 2>&1) ; then
echo "Private device size management: resize2fs of $dev succeeded" >&2 echo "Private device management: fsck.ext4 of $dev succeeded" >&2
else else
echo "Private device size management: resize2fs $dev failed:" >&2 echo "Private device management: fsck.ext4 $dev failed:" >&2
echo "$content" >&2 echo "$content" >&2
echo "Private device size management: attempting to mark $dev clean" >&2
if content=$(fsck.ext4 -fp "$dev" 2>&1) ; then
echo "Private device size management: $dev marked clean, enlarging it again" >&2
if content=$(resize2fs "$dev" 2>&1) ; then
echo "Private device size management: resize2fs of $dev succeeded" >&2
else
echo "Private device size management: resize2fs of $dev failed even after marking file system clean:" >&2
echo "$content" >&2
echo "Private device size management: expect serious trouble ahead" >&2
fi
else
echo "Private device size management: $dev could not be marked clean:" >&2
echo "$content" >&2
echo "Private device size management: expect serious trouble ahead" >&2
fi
fi fi
fi fi