Und zu guterletzt kommt bei UFS noch die Problematik BigEndian vs Little Endian hinzu.
Bin mir nicht ganz sicher, ich glaube jedoch, der Linux-UFS-Treiber wandelt BigEndian und LittleEndian automatisch ineinander um.
---- EDIT ----
Wenn man Linux mit der Einstellung CONFIG_SUN_PARTITION kompiliert, so werden Partitionen auf Festplatten mit Sun-Slicetable anstatt x86-Partitiontable auch auf dem x86 richtig erkannt.
Fehlt nur noch der UFS-Filesystem-Treiber, der per insmod nachgeladen werden kann.
---- EDIT ENDE ----
Falls die Platte nie wieder in ein Sparc-Gerät eingesetzt werden soll, bleibt noch die Möglichkeit, einfach die Slice-Tabelle in eine Partition-Tabelle umzuwandeln (zur Not Original-Slice-Tabelle in eine Datei speichern) und mit Linux auszulesen.
Beide Tabellen befinden sich im ersten Sektor der Platte.
Auslesen mit Linux: dd if=/dev/xxx of=dateiname bs=512 count=1
Zurückschreiben des geänderten Sektors mit Linux: dd if=dateiname of=/dev/xxx bs=512 count=1
Dazu wichtige Werte einer Sparc-Slice-Table (BigEndian 12345678h= 12 34 56 78):
Offset 1B4: Anzahl Spuren pro Zylinder (= Anzahl an (simulierten) Schreib-/Leseköpfen)
(2 Bytes; 00 10 = 16 Köpfe)
Offset 1B6: Anzahl Sektoren pro Spur (2 Bytes; 00 FF = 255)
Offset 1B8..1BB: (wird nicht benötigt)
Offset 1BC: Erster Zylinder Partition 0 (4 Bytes)
(Erster Sektor = Erster Zylinder * Spurzahl (s. Offs. 1B4) * Sektorzahl (s. Offs. 1B6))
Offset 1C0: Anzahl Sektoren Partition 0 (4 Bytes)
Offset 1C4/1C8: " Partition 1
Offset 1CC/1D0: " Partition 2 (Partition 2 = Pseudo-Eintrag für gesamte Platte)
Offset 1D4/1D8: " Partition 3
Offset 1DC/1E0: " Partition 4
Offset 1E4/1E8: " Partition 5
Offset 1EC/1F0: " Partition 6
Offset 1F4/1F8: " Partition 7
Von Linux benutzte Werte einer x86-Partitions-Tabelle (LittleEndian 12345678h= 78 56 34 12):
Offset 1A0...1BD: 0
Offset 1BE..1CD: Partition 1:
Offset 1BE: 0
Offset 1BF: 0 (fake-Wert, nur benötigt für IDE-Sektorberechnung)
Offset 1C0: 1 (fake-Wert, ...)
Offset 1C1: (egal)
Offset 1C2: Partitionstyp (z.B. 30h, da 30h unbekannt ist.)
Offset 1C3: Anzahl an S/L-Köpfen (Offs. 1B4 bei Sparc) minus 1 (-> 0F bei 16 Köpfen) (fake-Wert, ...)
Offset 1C4: 63 (fake-Wert, ...)
Offset 1C5: (egal)
Offset 1C6: Erster Sektor der Partition (= Erster Zylinder * Anzahl Köpfe * Anzahl Sektoren) (4 bytes)
Offset 1CA: Anzahl an Sektoren (4 bytes)
Offset 1CE..1DD: Partition 2
Offset 1DE..1ED: Partition 3
Offset 1EE..1FD: Partition 4
Offset 1FE: Immer 55 (hex)
Offset 1FF: Immer AA (hex)
Für unbenutzte Partitionen wird der entsprechende Bereich (z.B. 1EE..1FD) mit NUL-Bytes gefüllt.
Natürlich kann man die Disk nicht mit fdisk nachbearbeiten, da nur Fake-Werte in der Partitionstabelle stehen.
Die Alternative: MBR (slice-Table) sichern, dann fdisk aufrufen.
"Neue" Partitionen so auf der Platte erstellen, dass die Anfangs- und Endzylinder denen auf der Sparc-Platte entsprechen. Nun müsste man auf die Partitionen direkt zugreifen können. Versuchen, die Partitionen als UFS zu mounten.
Keine Garantie, dass die Daten nicht kaputt gehen!
Außerdem bin ich nicht 100% sicher, dass Linux BigEndian-UFS lesen kann.
Und man kann nur 4 von maximal 7 Sparc-Partitionen (gleichzeitig) auf diese Weise einbinden.
Martin