From aa171af9aee49b0dbd2800d19a029e3506423f3f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 4 Jul 2017 11:54:31 -0400 Subject: Diskimage.imageExists: Align disk image size to multiple of 4096 sector size Since some programs (such as VBoxManage convertdd) refuse to operate on disk images not aligned to a sector size. This commit was sponsored by Boyd Stephen Smith Jr. on Patreon. --- src/Propellor/Property/DiskImage.hs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/Propellor/Property') diff --git a/src/Propellor/Property/DiskImage.hs b/src/Propellor/Property/DiskImage.hs index 90b7010b..d5898d7c 100644 --- a/src/Propellor/Property/DiskImage.hs +++ b/src/Propellor/Property/DiskImage.hs @@ -247,7 +247,7 @@ getMountSz szm l (Just mntpt) = -- -- If the file is too large, truncates it down to the specified size. imageExists :: FilePath -> ByteSize -> Property Linux -imageExists img sz = property ("disk image exists" ++ img) $ liftIO $ do +imageExists img isz = property ("disk image exists" ++ img) $ liftIO $ do ms <- catchMaybeIO $ getFileStatus img case ms of Just s @@ -258,6 +258,12 @@ imageExists img sz = property ("disk image exists" ++ img) $ liftIO $ do _ -> do L.writeFile img (L.replicate (fromIntegral sz) 0) return MadeChange + where + sz = ceiling (fromInteger isz / sectorsize) * ceiling sectorsize + -- Disks have a sector size, and making a disk image not + -- aligned to a sector size will confuse some programs. + -- Common sector sizes are 512 and 4096; use 4096 as it's larger. + sectorsize = 4096 :: Double -- | A pair of properties. The first property is satisfied within the -- chroot, and is typically used to download the boot loader. -- cgit v1.2.3