Discussion:
Platten verkleinern?
(zu alt für eine Antwort)
Michael Kraemer @ home
2018-01-02 12:15:33 UTC
Permalink
hallo,

betreff sagt es: geht so was (nein, ich meine nicht per Schredder oder
Bolzenschneider)?

Hintergrund meiner Frage ist die Plage, die man mit der root-disk von
HP-UX <= 9 hat. Aufgrund der unendlichen Weisheit von HP haben sie den
bootblock ans "Ende der Platte" gelegt, zusammen einer Beschraenkung auf
2GB (exakt).
So gut wie alle "2GB" Platten sind aber ein bisschen groesser als 2GB,
und scheiden damit als root-disk aus.
Das ist bitter, denn dann bleiben nur noch 1GB Platten, die aber alle
mindestens 20 Jahre alt sind
und von daher nicht mehr, sondern eher weniger werden.

Mit "2GB" Platten haette man mehr Auswahl, koennte man bloss die
ueberzaehligen bytes "wegschnippeln".
Zu diesem Behufe habe ich mal die sg3_utils zugezogen.
sg_format --resize
funzt zwar, allerdings ist die Aenderung nicht permament,
d.h. wenn ich die praepaerierte Platte in die HP-Kiste einbaue,
hat sie wieder die alte Groesse.
Geht das irgendwie anders? Muss man in echt neu formatieren?

Man findet zwar im Netz noch mehr Anleitungen zum HP-UX-Problem:
zB diskinfo faken und root-disk auf eine groessere Platte klonen,
das funzt aber nur mit 9.03 bis 9.05, nicht aber auf dem "modernsten"
9.07 (anscheinend hat HP den "Trick" zwischenzeitlich bemerkt und
abgeklemmt).
Kay Martinen
2018-01-02 15:14:38 UTC
Permalink
Post by Michael Kraemer @ home
Hintergrund meiner Frage ist die Plage, die man mit der root-disk von
HP-UX <= 9 hat. Aufgrund der unendlichen Weisheit von HP haben sie den
bootblock ans "Ende der Platte" gelegt, zusammen einer Beschraenkung auf
2GB (exakt).
So gut wie alle "2GB" Platten sind aber ein bisschen groesser als 2GB,
und scheiden damit als root-disk aus.
Könnte man nicht auf einem Anderen System eine kleine Partition mit der
Verschnittgröße anlegen? Oder ignoriert dein System alles vorige und
macht generell die ganze Platte platt?

Wenn es das nicht tut müsste das doch so klappen. Darf nur kein
Partitionstyp sein den dein System kennt.

Kay
Michael Kraemer @ home
2018-01-02 16:20:08 UTC
Permalink
Post by Kay Martinen
Könnte man nicht auf einem Anderen System eine kleine Partition mit der
Verschnittgröße anlegen? Oder ignoriert dein System alles vorige und
macht generell die ganze Platte platt?
HP-UX (anno 1994/95) kennt nur sich selber.
In jedem Falle haut der Installer alles weg.
Aber wenigstens fragt er vorher.
Michael Bäuerle
2018-01-02 15:19:56 UTC
Permalink
Post by Michael Kraemer @ home
[...]
Mit "2GB" Platten haette man mehr Auswahl, koennte man bloss die
ueberzaehligen bytes "wegschnippeln".
Zu diesem Behufe habe ich mal die sg3_utils zugezogen.
sg_format --resize
Laut man page sendet das einen entsprechenden Block Descriptor
via MODE SELECT.
Post by Michael Kraemer @ home
funzt zwar, allerdings ist die Aenderung nicht permament,
d.h. wenn ich die praepaerierte Platte in die HP-Kiste einbaue,
hat sie wieder die alte Groesse.
Geht das irgendwie anders? Muss man in echt neu formatieren?
SCSI3 SBC2 (Kapitel 6.3.2.2) sagt dazu:
|
| If the SCSI device does not support changing its capacity by changing
| the NUMBER OF BLOCKS field using the MODE SELECT command (see SPC-3),
| the value in the NUMBER OF BLOCKS field is ignored. If the device
| supports changing its capacity by changing the NUMBER OF BLOCKS field
| then the NUMBER OF BLOCKS field is interpreted as follows:
| a) [...]
| b) If the NUMBER OF BLOCKS field is greater than zero and less than or
| equal to its maximum capacity, the device shall be set to that
| number of blocks. If the content of the BLOCK LENGTH field is the
| same as the current block length, the device shall not become
| format corrupted. This capacity setting shall be retained through
| power cycles, hard resets, logical unit resets, and I_T nexus
| losses. If the content of the BLOCK LENGTH field is the same as the
| current block length this capacity setting shall take effect on
| successful completion of the MODE SELECT command. If the content of
| the BLOCK LENGTH field (i.e., new block length) is different than
| the current block length this capacity setting shall take effect
| when the new block length takes effect (i.e., after a successful
| FORMAT UNIT command);

Dagegen steht in SCSI2 (Kapitel 8.3.3):
|
| Block descriptors specify some of the medium characteristics for all
| or part of a logical unit. Support for block descriptors is optional.
| Each block descriptor contains a density code field, a number of
| blocks field, and a block length field. Block descriptor values are
| always current (i.e. saving is not supported). A unit attention
| condition (see 7.9) shall be generated when any block descriptor
| values are changed.

Ich verstehe es so, dass die Einstellung der Kapazität immer optional
ist, seit SCSI3 aber einen Power-Cycle überleben muss (wenn unter-
stützt).

Eine SCSI2-Platte braucht vermutlich wirklich einen FORMAT UNIT Befehl
um das zu fixieren.

Was ist es denn genau für eine Platte, was antwortet INQUIRY im Feld
"VERSION" (Byte 2)?
Michael Kraemer @ home
2018-01-02 16:42:10 UTC
Permalink
Post by Michael Bäuerle
Ich verstehe es so, dass die Einstellung der Kapazität immer optional
ist, seit SCSI3 aber einen Power-Cycle überleben muss (wenn unter-
stützt).
Eine SCSI2-Platte braucht vermutlich wirklich einen FORMAT UNIT Befehl
um das zu fixieren.
Was ist es denn genau für eine Platte, was antwortet INQUIRY im Feld
"VERSION" (Byte 2)?
eine IBM DCAS-32160, davon habe ich am meisten.
--format habe ich jetzt mal probiert, funzt leider auch nicht.
Nach power cycle hat sie wieder die alte Groesse.
Wozu ist dann das "short-stroking" (so nennt man das wohl) ueberhaupt gut?
Michael Bäuerle
2018-01-02 17:08:53 UTC
Permalink
Post by Michael Kraemer @ home
Post by Michael Bäuerle
Ich verstehe es so, dass die Einstellung der Kapazität immer optional
ist, seit SCSI3 aber einen Power-Cycle überleben muss (wenn unter-
stützt).
Eine SCSI2-Platte braucht vermutlich wirklich einen FORMAT UNIT Befehl
um das zu fixieren.
Was ist es denn genau für eine Platte, was antwortet INQUIRY im Feld
"VERSION" (Byte 2)?
eine IBM DCAS-32160, davon habe ich am meisten.
Das dürfte der kleine Bruder von dieser hier sein:
|
| sd2 at scsibus1 target 2 lun 0: <IBM, DCAS-34330, S65A> disk fixed
| sd2: 4134 MB, 8205 cyl, 6 head, 171 sec, 512 bytes/sect x 8467200 sectors
| sd2: sync (100.00ns offset 15), 8-bit (10.000MB/s) transfers, tagged queueing

Das alte NetBSD lässt sich leider kaum INQUIRY-Daten entlocken, wenn
ich das richtig sehe. Das hier:
|
| # scsictl /dev/sd2 identify
| /dev/sd2d: scsibus1 target 2 lun 0 <IBM, DCAS-34330, S65A>

ist ein bisschen wenig.
Post by Michael Kraemer @ home
--format habe ich jetzt mal probiert, funzt leider auch nicht.
Nach power cycle hat sie wieder die alte Groesse.
Wozu ist dann das "short-stroking" (so nennt man das wohl) ueberhaupt gut?
Vermutlich genau für solche Sachen wie bei dir. Wenn man eine ganz
bestimmte Anzahl Blocks haben möchte (weil die Software das so haben
möchte).
Michael Kraemer @ home
2018-01-02 17:45:40 UTC
Permalink
Post by Michael Bäuerle
Post by Michael Kraemer @ home
Wozu ist dann das "short-stroking" (so nennt man das wohl) ueberhaupt gut?
Vermutlich genau für solche Sachen wie bei dir. Wenn man eine ganz
bestimmte Anzahl Blocks haben möchte (weil die Software das so haben
möchte).
Schon waers. Dann gaebs sicher bessere Loesungen.
Angeblich kann man damit vor allem die Performance steigern,
indem man die "langsamen Teile" der Platte ausschliesst.
Exotenprobleme wie unsereiner sind da eher nicht adressiert.
"Use HP-UX 10.x" duerfte da die Standardempfehlung gewesen sein.
Marcel Mueller
2018-01-02 18:47:42 UTC
Permalink
Post by Michael Kraemer @ home
Post by Michael Bäuerle
Ich verstehe es so, dass die Einstellung der Kapazität immer optional
ist, seit SCSI3 aber einen Power-Cycle überleben muss (wenn unter-
stützt).
Eine SCSI2-Platte braucht vermutlich wirklich einen FORMAT UNIT Befehl
um das zu fixieren.
Was ist es denn genau für eine Platte, was antwortet INQUIRY im Feld
"VERSION" (Byte 2)?
eine IBM DCAS-32160, davon habe ich am meisten.
Oh, die sind Gusseisern, heb' die bloß auf.
Ich habe tatsächlich noch nie eine DCAS in verreckt gesehen, weder die
2-er noch die 4-er. Und da waren durchaus Exemplare dabei die 6 Jahre
lang Dauerfeuer hatten.
Post by Michael Kraemer @ home
--format habe ich jetzt mal probiert, funzt leider auch nicht.
Nach power cycle hat sie wieder die alte Groesse.
Das könnte daran liegen, dass die AFAIR eigentlich von der
Desktopplatten-Abteilung entwickelt wurden, wo solche Features nicht
Usus waren. (Es gibt ja auch noch die DCAA.)
Allerdings ist die Platte SCSI-3. Das Stände jetzt mit Michaels
Behauptung in Konflikt.

Aber musste man bei MODE SELECT nicht immer explizit mit angeben, wenn
man die Änderung permanent haben wollte? Hast Du das?
Post by Michael Kraemer @ home
Wozu ist dann das "short-stroking" (so nennt man das wohl) ueberhaupt gut?
Die Platte wird schneller, weil die Köpfe dann schneller positionieren
und in den äußeren Zonen auch die doppelten Transferraten vorliegen. Ich
meine anders machen das die richtig rattig schnellen Serverplatten auch
nicht. 1,8" und nicht einmal die voll ausgereizt; bei Außengröße 3,5",
versteht sich.


Marcel
Michael Kraemer @ home
2018-01-03 08:45:49 UTC
Permalink
Post by Marcel Mueller
Oh, die sind Gusseisern, heb' die bloß auf.
Ich habe tatsächlich noch nie eine DCAS in verreckt gesehen, weder die
2-er noch die 4-er. Und da waren durchaus Exemplare dabei die 6 Jahre
lang Dauerfeuer hatten.
Ich werfe nie etwas weg "was noch gut is".
Kriege ich zu Hause oft genug zu hoeren ;-)
Post by Marcel Mueller
Aber musste man bei MODE SELECT nicht immer explizit mit angeben, wenn
man die Änderung permanent haben wollte? Hast Du das?
Guter Hinweis. MODE SELECT kann ich nicht extra angeben, ist offenbar im
Kommando mit drin. Mit

sg_format --resize --count=...

bekomme ich allerdings:

IBM DCAS-32160W !# S69D peripheral_type: disk [0x0]
PROTECT=0
VPD_UNIT_SERIAL_NUM corrupted
mode sense (10) cdb: 5a 00 01 00 00 00 00 00 fc 00
Mode Sense (block descriptor) data, prior to changes:
Number of blocks=4226725 [0x407EA5]
Block size=512 [0x200]
mode select (10) cdb: 55 11 00 00 00 00 00 00 1a 00
mode select (10):
Fixed format, current; Sense key: Illegal Request
Additional sense: Parameter list length error
Sense Key Specific: Error in Data parameters: byte 17 bit 2
MODE SELECT command: Illegal request sense key, apart from Invalid opcode

die Illegals hatte ich bisher ignoriert (die Groesse kam ja richtig heraus).

Mit

sg_format --resize --six --count=...

dagegen bekomme ich

IBM DCAS-32160W !# S69D peripheral_type: disk [0x0]
PROTECT=0
VPD_UNIT_SERIAL_NUM corrupted
mode sense (6) cdb: 1a 00 01 00 fc 00
Mode Sense (block descriptor) data, prior to changes:
Number of blocks=4226725 [0x407EA5]
Block size=512 [0x200]
mode select (6) cdb: 15 11 00 00 18 00
Resize operation seems to have been successful

und die Aenderung ueberlebt den power cycle. Freu!
(die korrupte Seriennr ignoriere ich jetzt mal)
D.h. entweder ist meine Version von sg3_utils ranzig oder die Platte
versteht den 10-byte modus nicht.

Jetzt verhandle ich noch mit HP-UX wieviel den nun 2GB genau sind.
Christian Zietz
2018-01-03 09:58:59 UTC
Permalink
Post by Michael Kraemer @ home
Post by Marcel Mueller
Aber musste man bei MODE SELECT nicht immer explizit mit angeben, wenn
man die Änderung permanent haben wollte? Hast Du das?
Guter Hinweis. MODE SELECT kann ich nicht extra angeben, ist offenbar im
Kommando mit drin. Mit
MODE SELECT ist sowieso drin. Marcel ging es konkret um das SP-Bit, das
angibt, das die Werte auch gespeichert werden sollen. Es ist gesetzt,
wie Du unten sehen kannst.
Post by Michael Kraemer @ home
mode select (10) cdb: 55 11 00 00 00 00 00 00 1a 00
Fixed format, current; Sense key: Illegal Request
Additional sense: Parameter list length error
[...]
mode select (6) cdb: 15 11 00 00 18 00
Resize operation seems to have been successful
Schaut man in das Handbuch der Platte, sieht man, dass die
Parameterliste bei MODE SELECT (10) vier Bytes länger sein muss als bei
MODE SELECT (6). Sie ist im obigen Beispiel aber nur zwei Bytes (0x1a
vs. 0x18) länger und damit falsch. Genau das sagt Dir die Platte auch ja
ganz klar und deutlich: "Illegal Request, Parameter list length error".
Klar, dass es da nicht funktioniert hat.

Grüße
Christian
--
Christian Zietz - CHZ-Soft - czietz (at) gmx.net
WWW: http://www.chzsoft.de/
PGP/GnuPG-Key-ID: 0x52CB97F66DA025CA / 0x6DA025CA
Michael Bäuerle
2018-01-03 11:21:30 UTC
Permalink
Post by Michael Kraemer @ home
Post by Marcel Mueller
[...]
Aber musste man bei MODE SELECT nicht immer explizit mit angeben, wenn
man die Änderung permanent haben wollte? Hast Du das?
Guter Hinweis. MODE SELECT kann ich nicht extra angeben, ist offenbar
im Kommando mit drin.
Ja, es ist *der* Befehl. MODE SELECT Befehl überträgt hier den Block-
descriptor.
Post by Michael Kraemer @ home
Mit
sg_format --resize --count=...
IBM DCAS-32160W !# S69D peripheral_type: disk [0x0]
PROTECT=0
VPD_UNIT_SERIAL_NUM corrupted
mode sense (10) cdb: 5a 00 01 00 00 00 00 00 fc 00
Number of blocks=4226725 [0x407EA5]
Block size=512 [0x200]
mode select (10) cdb: 55 11 00 00 00 00 00 00 1a 00
^^ ^^^^^
MODE SELECT(10) hat Opcode 55h. Byte 1, Bit 0 ist "SP", die 1 bedeutet
hier, dass er speichern soll. Bytes 7 und 8 sind die Länge der Para-
meterliste, die im Anschluss gesendet wird (da muss der Blockdescriptor
drinstehen).
Post by Michael Kraemer @ home
Fixed format, current; Sense key: Illegal Request
Additional sense: Parameter list length error
Sense Key Specific: Error in Data parameters: byte 17 bit 2
MODE SELECT command: Illegal request sense key, apart from Invalid opcode
die Illegals hatte ich bisher ignoriert (die Groesse kam ja richtig heraus).
Wenn der Befehl nicht korrekt ausgeführt wurde, dann darf man nicht
erwarten, dass passiert was passieren sollte.

Der Header der Parameterliste sollte 8 Bytes groß sein, der Block-
descriptor ebenfalls 8 Bytes. Das wäre in Hex 00 10.
Es wurde also wohl noch was anderes mitgesendet. Byte 17 wäre genau
das erste Byte nach dem ersten Blockdescriptor.
Post by Michael Kraemer @ home
Mit
sg_format --resize --six --count=...
dagegen bekomme ich
IBM DCAS-32160W !# S69D peripheral_type: disk [0x0]
PROTECT=0
VPD_UNIT_SERIAL_NUM corrupted
mode sense (6) cdb: 1a 00 01 00 fc 00
Number of blocks=4226725 [0x407EA5]
Block size=512 [0x200]
mode select (6) cdb: 15 11 00 00 18 00
Resize operation seems to have been successful
und die Aenderung ueberlebt den power cycle. Freu!
(die korrupte Seriennr ignoriere ich jetzt mal)
D.h. entweder ist meine Version von sg3_utils ranzig oder die Platte
versteht den 10-byte modus nicht.
Jetzt verhandle ich noch mit HP-UX wieviel den nun 2GB genau sind.
Mit den 6-Byte Befehlen gehen eigentlich nur 16 Bit LBAs, und auch der
"Short LBA mode parameter block descriptor" hat für die Längenangabe
nur ein 16-Bit Feld (also 2^16 * Blocksize Bytes).
Das sollten 33554432 Byte (32 MiByte) sein, wenn man 512 Byte Blocks zu
Grunde legt.

Kannst du damit wirklich 2 GByte einstellen?
Michael Bäuerle
2018-01-03 11:48:43 UTC
Permalink
Post by Michael Kraemer @ home
Post by Marcel Mueller
[...]
Aber musste man bei MODE SELECT nicht immer explizit mit angeben, wenn
man die Änderung permanent haben wollte? Hast Du das?
Guter Hinweis. MODE SELECT kann ich nicht extra angeben, ist offenbar
im Kommando mit drin.
Ja, es ist *der* Befehl. MODE SELECT Befehl überträgt hier den Block-
descriptor.
Post by Michael Kraemer @ home
Mit
sg_format --resize --count=...
IBM DCAS-32160W !# S69D peripheral_type: disk [0x0]
PROTECT=0
VPD_UNIT_SERIAL_NUM corrupted
mode sense (10) cdb: 5a 00 01 00 00 00 00 00 fc 00
Number of blocks=4226725 [0x407EA5]
Block size=512 [0x200]
mode select (10) cdb: 55 11 00 00 00 00 00 00 1a 00
^^ ^^^^^
MODE SELECT(10) hat Opcode 55h. Byte 1, Bit 0 ist "SP", die 1 bedeutet
hier, dass er speichern soll. Bytes 7 und 8 sind die Länge der Para-
meterliste, die im Anschluss gesendet wird (da muss der Blockdescriptor
drinstehen).
Post by Michael Kraemer @ home
Fixed format, current; Sense key: Illegal Request
Additional sense: Parameter list length error
Sense Key Specific: Error in Data parameters: byte 17 bit 2
MODE SELECT command: Illegal request sense key, apart from Invalid opcode
die Illegals hatte ich bisher ignoriert (die Groesse kam ja richtig heraus).
Wenn der Befehl nicht korrekt ausgeführt wurde, dann darf man nicht
erwarten, dass passiert was passieren sollte.

Der Header der Parameterliste sollte 8 Bytes groß sein, der Block-
descriptor ebenfalls 8 Bytes. Das wäre in Hex 00 10.
Es wurde also wohl noch was anderes mitgesendet. Byte 17 wäre genau
das erste Byte nach dem ersten Blockdescriptor.
Post by Michael Kraemer @ home
Mit
sg_format --resize --six --count=...
dagegen bekomme ich
IBM DCAS-32160W !# S69D peripheral_type: disk [0x0]
PROTECT=0
VPD_UNIT_SERIAL_NUM corrupted
mode sense (6) cdb: 1a 00 01 00 fc 00
Number of blocks=4226725 [0x407EA5]
Block size=512 [0x200]
mode select (6) cdb: 15 11 00 00 18 00
Resize operation seems to have been successful
und die Aenderung ueberlebt den power cycle. Freu!
(die korrupte Seriennr ignoriere ich jetzt mal)
D.h. entweder ist meine Version von sg3_utils ranzig oder die Platte
versteht den 10-byte modus nicht.
Jetzt verhandle ich noch mit HP-UX wieviel den nun 2GB genau sind.
Mit den 6-Byte Befehlen gehen eigentlich nur 16 Bit LBAs, und auch der
"Short LBA mode parameter block descriptor" hat für die Längenangabe
nur ein 16-Bit Feld (also 2^16 * Blocksize Bytes).
Das sollten 33554432 Byte (32 MiByte) sein, wenn man 512 Byte Blocks zu
Grunde legt.

Kannst du damit wirklich 2 GByte einstellen?

Supersede:
Das war Unfug. Das Feld für die Längenangabe im "Short LBA mode
parameter block descriptor" hat 32 Bit, d.h. es sind 2^32 * Blocksize
Bytes für die Kapazitätsangabe möglich.

Wolfgang Gehl
2018-01-02 19:29:55 UTC
Permalink
Post by Michael Kraemer @ home
eine IBM DCAS-32160, davon habe ich am meisten.
Mir fällt ein Werkzeug ein, das auf einem DOS System mit geladenem ASPI
Treiber für den SCSI Host läuft, scsifix von Bob Eager:
http://ps-2.kev009.com/ohlandl/IBM_SCSI/scsifix.zip

Mit diesem Programm kann man den Speicherplatz von SCSI Platten für den
Einsatz in IBM PS/2 Systemen zurechtstutzen. Hier wird eine
Referenzpartition ans Ende der Platte geschrieben, wobei der maximal
unter DOS (FAT16) erreichbare Speicherbereich (4GB) nicht überschritten
werden darf. Praktisch die IBM Variante deines Problems.

"The program reads, displays and modifies the block count stored by a
SCSI disk." Anschließend formatiert das Programm die Platte mit den
eingegebenen Werten. "Make sure you know the sector count you will be
using."

Bei exakt 2GB komme ich auf 4194304 Blöcke zu 512 Byte.

Wolfgang
Michael Kraemer @ home
2018-01-03 08:49:19 UTC
Permalink
Post by Wolfgang Gehl
Post by Michael Kraemer @ home
eine IBM DCAS-32160, davon habe ich am meisten.
Mir fällt ein Werkzeug ein, das auf einem DOS System mit geladenem ASPI
http://ps-2.kev009.com/ohlandl/IBM_SCSI/scsifix.zip
Danke fuer den Hinweis.
Allerdings habe ich kein System am Start, auf dem das liefe.
Auch meine OS/2 Umgebung ist derzeit defunkt.
Loading...