mirror of
https://github.com/NixOS/mobile-nixos.git
synced 2024-12-18 05:21:47 +03:00
32 lines
1000 B
Ruby
32 lines
1000 B
Ruby
# Automatically resizes the given filesystem.
|
|
class Tasks::AutoResize < Task
|
|
attr_reader :device
|
|
|
|
def initialize(device, type: )
|
|
@device = device
|
|
@type = type
|
|
add_dependency(:Files, @device)
|
|
end
|
|
|
|
def run()
|
|
log("Resizing #{@device}...")
|
|
if @type.match(/^ext[234]$/)
|
|
# TODO: Understand the actual underlying issue with e2fsck.
|
|
# It seems `e2fsck` succeeds, according to the output, but has a >0 exit
|
|
# status. Running it again in those situations is a no-op, which is weird
|
|
# to me.
|
|
# This is why we unconditionally run it once, then twice.
|
|
# The second will hopefully abort the boot if it fails too.
|
|
begin
|
|
System.run("e2fsck", "-fp", @device)
|
|
rescue System::CommandError
|
|
$logger.info("Re-running e2fsc...")
|
|
System.run("e2fsck", "-fp", @device)
|
|
end
|
|
System.run("resize2fs", "-f", @device)
|
|
else
|
|
$logger.warn("Cannot resize #{@type}... filesystem left untouched.")
|
|
end
|
|
end
|
|
end
|