-m<MB> feature to know how big things have to me.
write 2kB of zeroes at the start of new partitions to clear out old gunk (such as subpartitioning or old boot code).
This commit is contained in:
parent
852a2c9832
commit
0e809f9c08
@ -59,8 +59,9 @@ Num Sort Type
|
|||||||
#define DEV_FD0 0x200 /* Device number of /dev/fd0 */
|
#define DEV_FD0 0x200 /* Device number of /dev/fd0 */
|
||||||
#define DEV_C0D0 0x300 /* Device number of /dev/c0d0 */
|
#define DEV_C0D0 0x300 /* Device number of /dev/c0d0 */
|
||||||
|
|
||||||
#define MIN_REGION_MB 500
|
int min_region_mb = 500;
|
||||||
#define MIN_REGION_SECTORS (1024*1024*MIN_REGION_MB/SECTOR_SIZE)
|
|
||||||
|
#define MIN_REGION_SECTORS (1024*1024*min_region_mb/SECTOR_SIZE)
|
||||||
|
|
||||||
#define MAX_REGION_MB 4095
|
#define MAX_REGION_MB 4095
|
||||||
#define MAX_REGION_SECTORS (1024*(1024/SECTOR_SIZE)*MAX_REGION_MB)
|
#define MAX_REGION_SECTORS (1024*(1024/SECTOR_SIZE)*MAX_REGION_MB)
|
||||||
@ -2509,7 +2510,7 @@ select_disk(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
scribble_region(region_t *reg, struct part_entry **pe)
|
scribble_region(region_t *reg, struct part_entry **pe, int *made_new)
|
||||||
{
|
{
|
||||||
int ex, trunc = 0, changed = 0, i;
|
int ex, trunc = 0, changed = 0, i;
|
||||||
struct part_entry *newpart;
|
struct part_entry *newpart;
|
||||||
@ -2527,7 +2528,8 @@ scribble_region(region_t *reg, struct part_entry **pe)
|
|||||||
changed = 1;
|
changed = 1;
|
||||||
cylinderalign(reg);
|
cylinderalign(reg);
|
||||||
}
|
}
|
||||||
}
|
if(made_new) *made_new = 1;
|
||||||
|
} else if(made_new) *made_new = 0;
|
||||||
#if 0
|
#if 0
|
||||||
if(trunc) {
|
if(trunc) {
|
||||||
printf("\nWill only use %dMB.\n", MAX_REGION_MB);
|
printf("\nWill only use %dMB.\n", MAX_REGION_MB);
|
||||||
@ -2605,7 +2607,7 @@ do_autopart(int resultfd)
|
|||||||
struct part_entry *pe;
|
struct part_entry *pe;
|
||||||
char sure[50];
|
char sure[50];
|
||||||
struct part_entry orig_table[1 + NR_PARTITIONS];
|
struct part_entry orig_table[1 + NR_PARTITIONS];
|
||||||
int region, disk;
|
int region, disk, newp;
|
||||||
|
|
||||||
nordonly = 1;
|
nordonly = 1;
|
||||||
|
|
||||||
@ -2629,13 +2631,12 @@ do_autopart(int resultfd)
|
|||||||
} while(!r); /* Back to step 2. */
|
} while(!r); /* Back to step 2. */
|
||||||
|
|
||||||
/* Write things. */
|
/* Write things. */
|
||||||
if(scribble_region(r, &pe)) {
|
if(scribble_region(r, &pe, &newp)) {
|
||||||
char *name;
|
char *name;
|
||||||
int i, found = -1;
|
int i, found = -1;
|
||||||
char partbuf[100], devname[100];
|
char partbuf[100], devname[100];
|
||||||
struct part_entry *tpe;
|
struct part_entry *tpe;
|
||||||
|
|
||||||
|
|
||||||
printstep(3, "Confirm your choices");
|
printstep(3, "Confirm your choices");
|
||||||
|
|
||||||
region = (int)(r-regions);
|
region = (int)(r-regions);
|
||||||
@ -2708,6 +2709,18 @@ do_autopart(int resultfd)
|
|||||||
fprintf(stderr, "Autopart internal error (disk sanity check failed).\n");
|
fprintf(stderr, "Autopart internal error (disk sanity check failed).\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(newp) {
|
||||||
|
int fd;
|
||||||
|
if((fd=open(devname, O_WRONLY)) < 0) {
|
||||||
|
perror(devname);
|
||||||
|
} else {
|
||||||
|
/* Clear any subpartitioning. */
|
||||||
|
static char sub[2048];
|
||||||
|
write(fd, sub, sizeof(sub));
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2782,8 +2795,11 @@ int main(int argc, char **argv)
|
|||||||
} else {
|
} else {
|
||||||
int c;
|
int c;
|
||||||
/* autopart uses getopt() */
|
/* autopart uses getopt() */
|
||||||
while((c = getopt(argc, argv, "f:")) != EOF) {
|
while((c = getopt(argc, argv, "m:f:")) != EOF) {
|
||||||
switch(c) {
|
switch(c) {
|
||||||
|
case 'm':
|
||||||
|
min_region_mb = atoi(optarg);
|
||||||
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
/* Make sure old data file is gone. */
|
/* Make sure old data file is gone. */
|
||||||
unlink(optarg);
|
unlink(optarg);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user