208
08.08.2009, 17:02 Uhr
holm
|
Naja unter WEGA habe ich das noch nicht getestet, aber das funktioniert so:
Normalerweise behandelt ein Unix System alle Geräte als Dateein, so auch die Platten. Die Device Treiber Einträge findet man unter /dev . Für die Floppys gibts da z.B. die Einträge fd0xx und fd1xx. Das fd096ds9 der Eintrag für das Diskettenlaufwerk0, 96tpi doppelseitig mit 9 Sektoren ist, weißt Du sicher.
Das ist aber nur der Name für die Menschen, der Name für Wega sind die sogenannte Major und Minor Nummer des Device Files. ls -l brint z.B. zu Tage:
brw-rw-rw- 2 wega system 1, 96 Jul 17 08:00 /dev/fd096ds9 brw-rw-rw- 2 wega system 1, 97 Jul 24 1999 /dev/fd196ds9
Daraus ist zu ersehen, das der Floppy Treiber die Major 1 und für die beiden Geräte beim selben Format die 96 und die 97 als Minor Nummer hat. Diese beiden Geräte arbeiten Blockorientiert und verarbeiten vielfache von 512 Bytes. In der Minor Nummer ist das gewünschte Diskettenformat und die Nummer des Gerätes Bitweise codiert.
Es existieren dazu noch zeichenorientierte Geräte die wir für die Floppys auch finden:
crw-rw-rw- 2 wega system 1, 96 Jul 17 08:00 /dev/rfd096ds9 crw-rw-rw- 4 wega system 1, 97 Jul 17 08:00 /dev/rfd196ds9
Das erste Zeichen des Listings weist auf diesen Umstand mit b für Block und c für Character hin. Ein Floppycontroller kann natürlich aber keine einzelnen Character auf die Diskette schreiben, sondern nur ganze Sektoren, die aber je nach eingestellter Sektorsize auch 128 oder 256 Byte groß sein können, während ein Blockdevice immer 512 Byte weise arbeitet.
Es gibt unter den Unixen ein ziemlich universelles Kopierprogramm namens dd mit dem es nun möglich ist, direkt von Geräten zu lesen und auf diese zu schreiben
dd if=/dev/fd0 of=/dev/fd1
kopiert Dir z.B. die Diskette in fd0 blockweise auf fd1, das Programm versteht noch eine ganze Reihe weiterer Parameter, kann normalerweise (weiß nicht bei Wega) ascii in EBCDIC umsetzten, mit Offsets arbeiten usw. Es wird hier so lange kopiert bis das Ding auf ein Dateiende des Eingabedatenstroms läuft, unter Wega meckert das dann mit einem Fehler rum, was etwas "roh" ist. Besser unter Wega funktioniert das:
dd if=/dev/fd0 of=/dev/fd1 count=1440
dann hört das Ding auf, wenn die 1440 Blöcke erreicht sind.
Ich habe Dir nun nicht umsonst die Geschichte mit den Floppies vor die Nase gesetzt, bei den Platten ist das bei WEGA etwas komplizierter.
Es existieren z.B. folgende Einträge für die Platten: brw-r----- 2 bin system 0, 0 Jul 17 08:00 md0 brw-r----- 2 bin system 0, 2 Jul 17 08:00 md2 brw-r----- 2 bin system 0, 3 Jul 17 08:00 md3 brw-r----- 2 bin system 0, 4 Jul 17 08:00 md4 brw-r----- 2 bin system 0, 0 Jul 17 08:00 usr brw-r----- 2 bin system 0, 4 Jul 17 08:00 z brw-r--r-- 1 bin system 0, 1 Jul 17 08:00 swap brw-r----- 2 bin system 0, 2 Jul 17 08:00 root
Wie Du siehst ist das zum Teil doppelt, d.h. md0 ist gleich usr, md2 ist gleich root usw, für Anderes gibts gar keinen 2. Eintrag.
Der WEGA Kern "partitioniert" das eigentliche Device Platte, einen Eintrag für die ganze Platte gibt es offensichtlich nicht und ich habe mich noch nicht darum gekümmert ob der Treiber einen Eintrittspunkt dafür hat. Dafür müßte man die Minor Nummer herausbekommen und kann dann mit mknod eine "Devicedatei" anlegen.
Zumindest die Major Nummer für die 2. Platte bekomme ich noch heraus, da hier noch die 2. P8000 mit 2 Platten steht, es gibt aber auch ein Install Script auf der Bootdiskette, in der das zu finden ist.
So wie es aussieht, müßte man erst einen WEGA Kern für 2 Platten generieren und für die 2. Platte identische Filesystemgrößen und Offsetts eintragen, damit der Kern damit umgehen kann. danach kann man die erste Platte mit dd Filesystemweise auf die 2. Platte kopieren und hätte ein identisches Abbild. Mach das bitte erst mal nicht, mit dd kannst Du Alles kaputt kopieren, das Ding fragt Dich nach gar nichts, zeigt Dir keine Parameter an und fragt nicht, ob Du wirklich willst sondern macht einfach los...
Ich habe jetzt mal die 2. Kiste angeblasen, in /usr/sys/h speichert sysgen die Geometrien für die Platten die abgefragt und in den Kern gebastelt werden:
#define USR 13000 #define SWAP 3000 #define ROOT 7000 #define TMP 4000 #define Z 60732 #define MD5 0 #define MD6 0 #define MD7 0 #define MD8 0 #define MD9 0
#define MD10 40000 #define MD11 47732 #define MD12 0 #define MD13 0 #define MD14 0 #define MD15 0 #define MD16 0 #define MD17 0 #define MD18 0 #define MD19 0
Wie Du siehst hat das Ding 2 identische Platten (sonst würde der WDC schimpfen) die 1. ist in 5 Partitiionen eingeteilt die 2. in 2.
Jede Partition ist durch Ihre Länge und den Offset gekennzeichnet, der Offset ergibt sich hier durch die Länge der vorhergehenden Filesysteme. So gibts auf der 2. Platte ein Filesystem mit 40000 Blocks und Offset 0 und eines mit 47732 und Offset 40000. Dafür gibts dann auch die Device Einträge in /dev:
#9 ls -l /dev/md* brw-r----- 2 bin system 0, 0 Jul 21 1989 /dev/md0 brw-r----- 1 bin system 0, 10 Sep 3 02:52 /dev/md10 brw-r----- 1 bin system 0, 11 Sep 3 02:52 /dev/md11 brw-r----- 2 bin system 0, 2 Jul 24 10:40 /dev/md2 brw-r----- 2 bin system 0, 3 Jul 21 1989 /dev/md3 brw-r----- 2 bin system 0, 4 Jul 21 1989 /dev/md4
alle Klarheiten beseitigt?
Gruß,
Holm
Das Kommando df gibt Dir übrigens aus wieviel Platz auf den Filesystemen noch ist: #19 df / (/dev/root ): 825 blocks 1935 i-nodes /z2 (/dev/z2 ): 45807 blocks 15261 i-nodes /z1 (/dev/z1 ): 38392 blocks 12797 i-nodes /z (/dev/z ): 41567 blocks 18662 i-nodes /tmp (/dev/tmp ): 3832 blocks 1275 i-nodes /usr (/dev/usr ): 507 blocks 3058 i-nodes
Auf /z1 und /z2 ist kaum was, da gehen nur die Verwaltungsinformationen der Filesysteme selbst und die Einträge für lost+found weg. -- float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v; {s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+ (r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&& (A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;} Dieser Beitrag wurde am 08.08.2009 um 17:07 Uhr von holm editiert. |