Sound less scary about errorousous disk geometry due to wanting to limit
to 65535 cylinders. Submitted by: Carlos A. M. dos Santos <unixmania@gmail.com>
This commit is contained in:
parent
71b6d504c1
commit
bb980c847f
@ -102,6 +102,47 @@ record_chunks(Disk *d)
|
||||
|
||||
static daddr_t Total;
|
||||
|
||||
static void
|
||||
check_geometry(Disk *d)
|
||||
{
|
||||
int sg;
|
||||
|
||||
#ifdef PC98
|
||||
if (d->bios_cyl >= 65536 || d->bios_hd > 256 || d->bios_sect >= 256)
|
||||
#else
|
||||
if (d->bios_cyl > 65536 || d->bios_hd > 256 || d->bios_sect >= 64)
|
||||
#endif
|
||||
{
|
||||
dialog_clear_norefresh();
|
||||
sg = msgYesNo("WARNING: It is safe to use a geometry of %lu/%lu/%lu for %s on\n"
|
||||
"computers with modern BIOS versions. If this disk is to be used\n"
|
||||
"on rather old machines, however, it is recommended to ensure that\n"
|
||||
"it does not have more than 65535 cylinders, or more than 255 heads\n"
|
||||
"or more than "
|
||||
#ifdef PC98
|
||||
"255"
|
||||
#else
|
||||
"63"
|
||||
#endif
|
||||
" sectors per track.\n"
|
||||
"\n"
|
||||
"Would you like that to keep using the current geometry?\n",
|
||||
d->bios_cyl, d->bios_hd, d->bios_sect, d->name);
|
||||
if (sg == 1) {
|
||||
Sanitize_Bios_Geom(d);
|
||||
msgConfirm("A geometry of %lu/%lu/%lu was calculated for %s.\n"
|
||||
"\n"
|
||||
"If you are not sure about this, please consult the Hardware Guide\n"
|
||||
"in the Documentation submenu or use the (G)eometry command to\n"
|
||||
"change it. Remember: you need to enter whatever your BIOS thinks\n"
|
||||
"the geometry is! For IDE, it's what you were told in the BIOS\n"
|
||||
"setup. For SCSI, it's the translation mode your controller is\n"
|
||||
"using. Do NOT use a ``physical geometry''.\n",
|
||||
d->bios_cyl, d->bios_hd, d->bios_sect, d->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
print_chunks(Disk *d, int u)
|
||||
{
|
||||
@ -116,26 +157,6 @@ print_chunks(Disk *d, int u)
|
||||
Total = 0;
|
||||
for (i = 0; chunk_info[i]; i++)
|
||||
Total += chunk_info[i]->size;
|
||||
#ifdef PC98
|
||||
if (d->bios_cyl >= 65536 || d->bios_hd > 256 || d->bios_sect >= 256) {
|
||||
#else
|
||||
if (d->bios_cyl > 65536 || d->bios_hd > 256 || d->bios_sect >= 64) {
|
||||
#endif
|
||||
dialog_clear_norefresh();
|
||||
msgConfirm("WARNING: A geometry of %lu/%lu/%lu for %s is incorrect. Using\n"
|
||||
"a more likely geometry. If this geometry is incorrect or you\n"
|
||||
"are unsure as to whether or not it's correct, please consult\n"
|
||||
"the Hardware Guide in the Documentation submenu or use the\n"
|
||||
"(G)eometry command to change it now.\n\n"
|
||||
"Remember: you need to enter whatever your BIOS thinks the\n"
|
||||
"geometry is! For IDE, it's what you were told in the BIOS\n"
|
||||
"setup. For SCSI, it's the translation mode your controller is\n"
|
||||
"using. Do NOT use a ``physical geometry''.",
|
||||
d->bios_cyl, d->bios_hd, d->bios_sect, d->name);
|
||||
Sanitize_Bios_Geom(d);
|
||||
msgDebug("Sanitized geometry for %s is %lu/%lu/%lu.\n",
|
||||
d->name, d->bios_cyl, d->bios_hd, d->bios_sect);
|
||||
}
|
||||
attrset(A_NORMAL);
|
||||
mvaddstr(0, 0, "Disk name:\t");
|
||||
clrtobot();
|
||||
@ -339,6 +360,9 @@ diskPartition(Device *dev)
|
||||
/* Set up the chunk array */
|
||||
record_chunks(d);
|
||||
|
||||
/* Give the user a chance to sanitize the disk geometry, if necessary */
|
||||
check_geometry(d);
|
||||
|
||||
while (chunking) {
|
||||
char *val, geometry[80];
|
||||
|
||||
@ -909,22 +933,25 @@ diskPartitionNonInteractive(Device *dev)
|
||||
record_chunks(d);
|
||||
cp = variable_get(VAR_GEOMETRY);
|
||||
if (cp) {
|
||||
msgDebug("Setting geometry from script to: %s\n", cp);
|
||||
d->bios_cyl = strtol(cp, &cp, 0);
|
||||
d->bios_hd = strtol(cp + 1, &cp, 0);
|
||||
d->bios_sect = strtol(cp + 1, 0, 0);
|
||||
}
|
||||
|
||||
if (!strcasecmp(cp, "sane")) {
|
||||
#ifdef PC98
|
||||
if (d->bios_cyl >= 65536 || d->bios_hd > 256 || d->bios_sect >= 256) {
|
||||
if (d->bios_cyl >= 65536 || d->bios_hd > 256 || d->bios_sect >= 256)
|
||||
#else
|
||||
if (d->bios_cyl > 65536 || d->bios_hd > 256 || d->bios_sect >= 64) {
|
||||
if (d->bios_cyl > 65536 || d->bios_hd > 256 || d->bios_sect >= 64)
|
||||
#endif
|
||||
msgDebug("Warning: A geometry of %lu/%lu/%lu for %s is incorrect.\n",
|
||||
d->bios_cyl, d->bios_hd, d->bios_sect, d->name);
|
||||
Sanitize_Bios_Geom(d);
|
||||
msgDebug("Sanitized geometry for %s is %lu/%lu/%lu.\n",
|
||||
d->name, d->bios_cyl, d->bios_hd, d->bios_sect);
|
||||
{
|
||||
msgDebug("Warning: A geometry of %lu/%lu/%lu for %s is incorrect.\n",
|
||||
d->bios_cyl, d->bios_hd, d->bios_sect, d->name);
|
||||
Sanitize_Bios_Geom(d);
|
||||
msgDebug("Sanitized geometry for %s is %lu/%lu/%lu.\n",
|
||||
d->name, d->bios_cyl, d->bios_hd, d->bios_sect);
|
||||
}
|
||||
} else {
|
||||
msgDebug("Setting geometry from script to: %s\n", cp);
|
||||
d->bios_cyl = strtol(cp, &cp, 0);
|
||||
d->bios_hd = strtol(cp + 1, &cp, 0);
|
||||
d->bios_sect = strtol(cp + 1, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
cp = variable_get(VAR_PARTITION);
|
||||
|
@ -105,6 +105,47 @@ record_chunks(Disk *d)
|
||||
|
||||
static daddr_t Total;
|
||||
|
||||
static void
|
||||
check_geometry(Disk *d)
|
||||
{
|
||||
int sg;
|
||||
|
||||
#ifdef PC98
|
||||
if (d->bios_cyl >= 65536 || d->bios_hd > 256 || d->bios_sect >= 256)
|
||||
#else
|
||||
if (d->bios_cyl > 65536 || d->bios_hd > 256 || d->bios_sect >= 64)
|
||||
#endif
|
||||
{
|
||||
dialog_clear_norefresh();
|
||||
sg = msgYesNo("WARNING: It is safe to use a geometry of %lu/%lu/%lu for %s on\n"
|
||||
"computers with modern BIOS versions. If this disk is to be used\n"
|
||||
"on rather old machines, however, it is recommended to ensure that\n"
|
||||
"it does not have more than 65535 cylinders, or more than 255 heads\n"
|
||||
"or more than "
|
||||
#ifdef PC98
|
||||
"255"
|
||||
#else
|
||||
"63"
|
||||
#endif
|
||||
" sectors per track.\n"
|
||||
"\n"
|
||||
"Would you like that to keep using the current geometry?\n",
|
||||
d->bios_cyl, d->bios_hd, d->bios_sect, d->name);
|
||||
if (sg == 1) {
|
||||
Sanitize_Bios_Geom(d);
|
||||
msgConfirm("A geometry of %lu/%lu/%lu was calculated for %s.\n"
|
||||
"\n"
|
||||
"If you are not sure about this, please consult the Hardware Guide\n"
|
||||
"in the Documentation submenu or use the (G)eometry command to\n"
|
||||
"change it. Remember: you need to enter whatever your BIOS thinks\n"
|
||||
"the geometry is! For IDE, it's what you were told in the BIOS\n"
|
||||
"setup. For SCSI, it's the translation mode your controller is\n"
|
||||
"using. Do NOT use a ``physical geometry''.\n",
|
||||
d->bios_cyl, d->bios_hd, d->bios_sect, d->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
print_chunks(Disk *d, int u)
|
||||
{
|
||||
@ -119,24 +160,6 @@ print_chunks(Disk *d, int u)
|
||||
Total = 0;
|
||||
for (i = 0; chunk_info[i]; i++)
|
||||
Total += chunk_info[i]->size;
|
||||
#ifdef PC98
|
||||
if (d->bios_cyl >= 65536 || d->bios_hd > 256 || d->bios_sect >= 256) {
|
||||
#else
|
||||
if (d->bios_cyl > 65536 || d->bios_hd > 256 || d->bios_sect >= 64) {
|
||||
#endif
|
||||
dialog_clear_norefresh();
|
||||
msgConfirm("WARNING: A geometry of %lu/%lu/%lu for %s is incorrect. Using\n"
|
||||
"a more likely geometry. If this geometry is incorrect or you\n"
|
||||
"are unsure as to whether or not it's correct, please consult\n"
|
||||
"the Hardware Guide in the Documentation submenu or use the\n"
|
||||
"(G)eometry command to change it now.\n\n"
|
||||
"Remember: you need to enter whatever your BIOS thinks the\n"
|
||||
"geometry is! For IDE, it's what you were told in the BIOS\n"
|
||||
"setup. For SCSI, it's the translation mode your controller is\n"
|
||||
"using. Do NOT use a ``physical geometry''.",
|
||||
d->bios_cyl, d->bios_hd, d->bios_sect, d->name);
|
||||
Sanitize_Bios_Geom(d);
|
||||
}
|
||||
attrset(A_NORMAL);
|
||||
mvaddstr(0, 0, "Disk name:\t");
|
||||
clrtobot();
|
||||
@ -341,6 +364,9 @@ diskPartition(Device *dev)
|
||||
/* Set up the chunk array */
|
||||
record_chunks(d);
|
||||
|
||||
/* Give the user a chance to sanitize the disk geometry, if necessary */
|
||||
check_geometry(d);
|
||||
|
||||
while (chunking) {
|
||||
char *val, geometry[80];
|
||||
|
||||
@ -916,21 +942,24 @@ diskPartitionNonInteractive(Device *dev)
|
||||
record_chunks(d);
|
||||
cp = variable_get(VAR_GEOMETRY);
|
||||
if (cp) {
|
||||
msgDebug("Setting geometry from script to: %s\n", cp);
|
||||
d->bios_cyl = strtol(cp, &cp, 0);
|
||||
d->bios_hd = strtol(cp + 1, &cp, 0);
|
||||
d->bios_sect = strtol(cp + 1, 0, 0);
|
||||
} else {
|
||||
if (!strcasecmp(cp, "sane")) {
|
||||
#ifdef PC98
|
||||
if (d->bios_cyl >= 65536 || d->bios_hd > 256 || d->bios_sect >= 256) {
|
||||
if (d->bios_cyl >= 65536 || d->bios_hd > 256 || d->bios_sect >= 256)
|
||||
#else
|
||||
if (d->bios_cyl > 65536 || d->bios_hd > 256 || d->bios_sect >= 64) {
|
||||
if (d->bios_cyl > 65536 || d->bios_hd > 256 || d->bios_sect >= 64)
|
||||
#endif
|
||||
msgDebug("Warning: A geometry of %lu/%lu/%lu for %s is incorrect.\n",
|
||||
d->bios_cyl, d->bios_hd, d->bios_sect, d->name);
|
||||
Sanitize_Bios_Geom(d);
|
||||
msgDebug("Sanitized geometry for %s is %lu/%lu/%lu.\n",
|
||||
d->name, d->bios_cyl, d->bios_hd, d->bios_sect);
|
||||
{
|
||||
msgDebug("Warning: A geometry of %lu/%lu/%lu for %s is incorrect.\n",
|
||||
d->bios_cyl, d->bios_hd, d->bios_sect, d->name);
|
||||
Sanitize_Bios_Geom(d);
|
||||
msgDebug("Sanitized geometry for %s is %lu/%lu/%lu.\n",
|
||||
d->name, d->bios_cyl, d->bios_hd, d->bios_sect);
|
||||
}
|
||||
} else {
|
||||
msgDebug("Setting geometry from script to: %s\n", cp);
|
||||
d->bios_cyl = strtol(cp, &cp, 0);
|
||||
d->bios_hd = strtol(cp + 1, &cp, 0);
|
||||
d->bios_sect = strtol(cp + 1, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -249,6 +249,12 @@ Invokes the disk partition (MBR) editor.
|
||||
.Bl -tag -width findx
|
||||
.It geometry
|
||||
The disk geometry, as a cyls/heads/sectors formatted string.
|
||||
The word "sane" instructs
|
||||
.Nm
|
||||
to calculate a safe (not necessarily optimal) geometry if the
|
||||
current one has more than 65535 cylinders, more than 256 heads or
|
||||
more than 63 sectors per track (255 sectors on the PC98
|
||||
architecture).
|
||||
Default: no
|
||||
change to geometry.
|
||||
.It partition
|
||||
|
Loading…
Reference in New Issue
Block a user