Only update disk if size was changed and not under dryrun
This commit is contained in:
parent
aa963100ba
commit
139f35d9d4
1 changed files with 22 additions and 5 deletions
|
@ -48,19 +48,21 @@ dkcksum(struct disklabel *lp)
|
||||||
int
|
int
|
||||||
growdisk(struct system_config *sc)
|
growdisk(struct system_config *sc)
|
||||||
{
|
{
|
||||||
char c, last_part = 0, *out, *path = NULL;
|
char c, last_part = 0, *out = NULL, *path = NULL;
|
||||||
int ret = -1, i, errfd, outfd;
|
int ret = -1, i, errfd, outfd;
|
||||||
|
uint64_t bend, psize;
|
||||||
struct partition *pp, *p = NULL;
|
struct partition *pp, *p = NULL;
|
||||||
struct disklabel lp;
|
struct disklabel lp;
|
||||||
int fd;
|
|
||||||
uint16_t cksum;
|
uint16_t cksum;
|
||||||
|
int fd;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Grow the OpenBSD MBR partition
|
* Grow the OpenBSD MBR partition
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* XXX this is a bit ugly but easier to do */
|
/* XXX this is a bit ugly but easier to do */
|
||||||
if (shellout("e 3\n\n\n\n*\nw\nq\n", &out,
|
if (!sc->sc_dryrun &&
|
||||||
|
shellout("e 3\n\n\n\n*\nw\nq\n", &out,
|
||||||
"fdisk", "-e", sc->sc_rootdisk, NULL) != 0) {
|
"fdisk", "-e", sc->sc_rootdisk, NULL) != 0) {
|
||||||
log_warnx("failed to grow OpenBSD partition");
|
log_warnx("failed to grow OpenBSD partition");
|
||||||
return (-1);
|
return (-1);
|
||||||
|
@ -110,11 +112,26 @@ growdisk(struct system_config *sc)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bend = DL_GETDSIZE(&lp) - DL_GETBSTART(&lp);
|
||||||
|
psize = DL_GETBEND(&lp) - DL_GETPOFFSET(p);
|
||||||
|
|
||||||
|
if (sc->sc_dryrun ||
|
||||||
|
(bend == DL_GETBEND(&lp) && psize == DL_GETPSIZE(p))) {
|
||||||
|
log_debug("%s: %s%c uses maximum size %llu",
|
||||||
|
__func__, sc->sc_rootdisk, last_part, psize);
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
log_debug("%s: growing %s%c from %llu to %llu",
|
||||||
|
__func__, sc->sc_rootdisk, last_part, DL_GETPSIZE(p), psize);
|
||||||
|
|
||||||
/* Update OpenBSD boundaries */
|
/* Update OpenBSD boundaries */
|
||||||
DL_SETBEND(&lp, DL_GETDSIZE(&lp) - DL_GETBSTART(&lp));
|
DL_SETBEND(&lp, bend);
|
||||||
|
|
||||||
/* Update the size of the last partition */
|
/* Update the size of the last partition */
|
||||||
DL_SETPSIZE(p, DL_GETBEND(&lp) - DL_GETPOFFSET(p));
|
DL_SETPSIZE(p, psize);
|
||||||
|
|
||||||
lp.d_checksum = dkcksum(&lp);
|
lp.d_checksum = dkcksum(&lp);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue