wrkobjdir + externe Festplatte

nihonto

Well-Known Member
Moinmoin:)!

Da mein /usr nur 5GB groß ist (von denen nach Installation von /src, /ports und /xenocara nur noch 1,9 GB übrig sind), möchte ich gerne für den Bau einiger Ports (z. B. Java-Jre) meine externe Festplatte nutzen (Stichwort: wrkobjdir in /etc/mk.conf setzen).

Dazu nun folgende Frage: Muss ich auf der externen Festplatte eine ffs-Partition einrichten? Bislang ist sie msdos formatiert und dient als Ablage für diverse Backups.

In der /etc/fstab habe ich diesen Eintrag:

/dev/sd0i /mnt/usb msdos rw,noauto,nodev,nosuid 0 0

Nutze übrigens 4.3 -release (inkl. Patches).
 
Hi kili,

vielen dank für die Klarstellung:)!

dd war soweit klar, aber von vnd hatte ich bisher nichts gehört - muss ich mir mal in Ruhe anlesen (man vnconfig(8) macht's übrigens schon verständlicher:D).

Merci bien;)
 
Noch eine Korrektur: im Prinzip sollte es jedes Filesystem mit halbwegs klassischer Unix-Semantik tun. MSDOS gehoert definitiv nicht dazu ;-)
 
Sorry, wenn ich den Thread nochmal aufmache, aber ich komm' da einfach nicht weiter:o.

Nachdem ich mir jetzt mehrfach die Manpages zu dd und vnd durchgelesen - und beide ehrlich gestanden nicht wirklich verstanden habe - frage ich mich, ob es nicht einfacher wäre, etwa mittels Partitionmagic die msdos-Partition auf der externen Festplatte zu verkleinern und den neu geschaffenen freien Platz dann mittels fdisk und disklabel auf ffs umzustellen.

Bevor ich das mache (oder mir einfach noch 'ne externe Festplatte kaufe), möchte ich doch nochmal nachfragen:

a) Was macht "dd" nun genau?
In der Manpage steht, dass man mit dem Befehl Dateien kopieren und konvertieren kann. Und da fängt's schon an. Ich möchte auf der externen Festplatte einen etwa 20GB Bereich in ffs schaffen, den ich bei Bedarf als wrkobjdir mounten kann, um die ein oder andere Applikation aus den Ports zu bauen, die es nicht als Paket gibt - also etwa das Java Runtime Environment.

Bisher sieht der fstab-Eintrag so aus, wenn ich die externe Festplatte mounte:

Code:
/dev/sd0i /mnt/usb   msdos  rw,noauto,nodev,nosuid 0 0

Wenn ich mir jetzt die beiden Beispiele in der dd-Manpage ansehe, frage ich mich, wie das in meinem Fall aussehen müsste. So evtl:

Code:
dd if=ffs.fs of=/dev/sd0i bs=20m

oder eher so:

Code:
dd if=/dev/sd0i of=ffs.fs bs=20m

Oder ganz anders? Das "ffs.fs" habe ich jetzt mal geraten, da in der Manpage keine Hinweise auf Dateiformate zu finden sind (oder müsste ich da einen konkreten Namen angeben?). Und was am wichtigsten ist: Wie stelle ich dabei sicher, dass nicht irgendwelche Daten auf der Festplatte dabei überschrieben werden? Wie bereits oben gesagt - ich nutze die Platte primär für Backups und als Bildablage.

b) Was macht "vnd" und vor allem - wie benutze ich es?
Wenn ich die Manpage halbwegs richtig übersetze, dann kann man damit Dateien quasi wie eine Festplatte ansprechen (was in diesem Fall ja Sinn machen würde).
Dann aber heißt es, diese Zeile müsse der Kernelconfig hinzugefügt werden:

pseudo-device vnd 4 # vnode disk driver

Ist das wirklich nötig? Und könnte man das nicht auch mit "config" lösen?

Sorry, aber wie so oft, habe ich nach der Lektüre der Manpages mehr Fragen als vorher:rolleyes:.
 
Die einzige Möglichkeit mittels dd(1) ein einsatzbereites Image einer Patition zu erstellen ist, eine solche zu kopieren. Also z.B.:
Code:
# dd if=/dev/sd0i of=/path/to/image.file
Dein Ziel ist es aber eine Datei zu erstellen, die 20GB groß ist, um diese dann als virtuelle Platte zu nutzen. Demnach beschränkt sich der Einsatz von dd(1) darauf, eine Datei dieser Größe zu erstellen:
Code:
# dd if=/dev/zero of=/mnt/usb/wrkobjdir.img bs=1k count=20m
Da man mit 20GB voll Nullen nicht viel anfangen kann, muss die Datei noch eingebunden, partitioniert, formatiert und gemountet werden. Um sich das Ganze zu vereinfachen, empfiehlt es sich zuerst noch zwei Einträge in /etc/fstab zu ergänzen:
Code:
# cat << "EOF" >> /etc/fstab
/mnt/usb/wrkobjdir.img /dev/rsvnd0c vnd rw,noauto 0 0
/dev/svnd0d /mnt/wrkobjdir ffs rw,noauto,nodev,nosuid,softdep 0 0
EOF
# mkdir -p /mnt/wrkobjdir
Jetzt braucht man sich nämlich keine Gedanken mehr über vnconfig(8) machen, sondern es reicht ...
Code:
# mount /dev/rsvnd0c
... um die Datei mit svnd0 zu verknüpfen. Diese neue virtuelle Platte muss nun wie sonst auch noch partitioniert und formatiert werden:
Code:
# fdisk -i svnd0
# disklabel -E svnd0
... den gesamten Platz für die Partition d reservieren ...
Code:
# newfs /dev/rsvnd0d
Und nun der letzte Schritt - die Partition mounten:
Code:
# mount /mnt/wrkobjdir
Ach ja, was den Hinweis in vnd(4) angeht:
Code:
# fgrep vnd /sys/conf/GENERIC
pseudo-device   vnd     4       # paging to files
 
Wooow, vielen Dank für die superausführliche Beschreibung:cool:!!!

Damit kann ich allerdings was anfangen und verstehe jetzt auch so langsam wie dd funktioniert:).

Eine Frage bleibt aber noch:

Wenn ich diesen Befehl hier absetze:

Code:
# dd if=/dev/zero of=/mnt/usb/wrkobjdir.img bs=1k count=20m

Kann ich dann davon ausgehen, dass dabei nicht die Daten überschrieben werden, die sich bereits auf der externen Festplatte befinden?
 
Kann ich dann davon ausgehen, dass dabei nicht die Daten überschrieben werden, die sich bereits auf der externen Festplatte befinden?

Ja du kannst dir sicher sein das deine Daten auf der externen Festplatte nicht überschrieben werden.
Code:
dd if=/dev/zero [B]of=/mnt/usb/wrkobjdir.img[/B] bs=1k count=20m
schreibt ins Dateisystem.
Code:
dd if=/dev/zero [B]of=/dev/sd0i [/B]bs=1k count=20m
schreibt direkt auf die Platte.
 
Hi Jungs,

ich hab' das jetzt mal ausprobiert - vorsichtshalber aber erstmal mit 'ner leeren externen Festplatte (160G, also genug Platz). So wie's aussieht war das auch keine schlechte Idee, denn da scheint was in die Hose gegangen zu sein.

Es fängt schon am Anfang mit "dd" an. Da kommt nämlich das hier:

Code:
# dd if=/dev/zero of=/mnt/usb/wrkobjdir.img bs=1k count=20m                    
dd: /mnt/usb/wrkobjdir.img: File too large
4194304+0 records in
4194303+0 records out
4294966272 bytes transferred in 231.044 secs (18589315 bytes/sec)

Schaut man sich das Filesystem dann mal mit "df -h" an, sieht das so aus:

Code:
# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/wd0a      484M    484M  -24.1M   105%    /
/dev/wd0k      1.2G   27.4M    1.1G     2%    /home
/dev/wd0l     97.8M   12.0K   92.9M     0%    /tmp
/dev/wd0g      4.8G    2.8G    1.8G    61%    /usr
/dev/wd0h     97.2M   11.4M   80.9M    12%    /var
/dev/sd0i      149G    124G   25.0G    83%    /mnt/usb

Statt 20G hat "dd" 124G beschrieben und / ist übervoll:eek:.

Gehe ich dann die anderen Schritte weiter durch, so ende ich bei einem Filesystem, das so aussieht:

Code:
# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/wd0a      484M    484M  -24.1M   105%    /
/dev/wd0k      1.2G   27.6M    1.1G     2%    /home
/dev/wd0l     97.8M   12.0K   92.9M     0%    /tmp
/dev/wd0g      4.8G    2.8G    1.8G    61%    /usr
/dev/wd0h     97.2M   11.4M   80.9M    12%    /var
/dev/sd0i      149G    124G   25.0G    83%    /mnt/usb
/dev/svnd0d    3.9G    2.0K    3.7G     0%    /mnt/wrkobjdir

3,7G für das wrkobjdir:confused: Was hab' ich'n jetzt schon wieder falsch gemacht???
 
Ups, da war noch ein Hacken: FAT32 unterstützt nur Dateien bis zu einer Größe von 4GB. Folglich ist die Datei, die mittels dd(1) erstellt wurde, auch nur so groß und der nutzbare Platz auf der Partition unter /mnt/wrkobjdir nur 3.7G.

Mmh, auf die Schnelle fällt mir aber auch keine Lösung dafür ein. Der Systemstabilität zuliebe wäre es aber zu empfehlen, mittels du(1) herauszufinden, wodurch der Platz auf / belegt wird und diesen nach Möglichkeit wieder freizuräumen.
Code:
# du -hx /
/ auf 105% geht auf Dauer nicht gut.
 
/ auf 105% geht auf Dauer nicht gut.

Jepp! Unter /mnt/usb lag noch das wrkobjdir.img mit 444 MB - warum auch immer. Hab's gelöscht und nun ist wieder jede Menge Platz unter /.

Um aber zum eigentlichen Problem - dem wrkobjdir auf einer externen Festplatte - zurückzukommen: Würde es denn da nicht Sinn machen, auf der externen Festplatte eine A6-formatierte Partition einzurichten und darauf dann die Datei /wrkobjdir mit 20Gigs anzulegen?

Da ich die Ports wirklich nur benutze wenn's nicht anders geht, würde es mir auch nichts ausmachen, dafür dann vorher jeweils die Platte zu mounten.
 
wie yetano schon angedeutet hat, wird das mit dem file in der msdos-partition nichts werden, wenn es größer als 4GB sein soll. da musst du dann die festplatte partitionieren, eine partition vom typ a6 anlegen und dort bsd-partitionen (disklabel) drin anlegen. eine "d" von entsprechender größe sollte reichen. du brauchst dann auch nicht noch eine extra-verzeichnis anlegen sondern nimmst als wrkobjdir einfach den mountpoint von der platte (es sei denn, du willst da ein wenig ordnung drauf haben ;))
 
wie yetano schon angedeutet hat, wird das mit dem file in der msdos-partition nichts werden, wenn es größer als 4GB sein soll. da musst du dann die festplatte partitionieren, eine partition vom typ a6 anlegen und dort bsd-partitionen (disklabel) drin anlegen. eine "d" von entsprechender größe sollte reichen. du brauchst dann auch nicht noch eine extra-verzeichnis anlegen sondern nimmst als wrkobjdir einfach den mountpoint von der platte (es sei denn, du willst da ein wenig ordnung drauf haben ;))

Jo, so hatte ich mir das jetzt vorgestellt. Dazu auch noch eine Frage: Gibt's unter OpenBSD eigentlich noch eine Alternative zu fdisk? Das Teil ist sowas von umständlich und kompliziert zu bedienen. Ich hab' gestern mal versucht, die msdos-Partition zu verkleinern, um dann eine A6-Partition anlegen zu können - keine Chance, hab' nach einer Stunde aufgegeben:grumble:. Oder kann ich evtl. mit Partitionmagic einfach die msdos-Partition verkleinern (was damit sehr einfach wäre) und dann mit fdisk die A6-Partition anlegen und bedisklabeln (was ich so grade noch hinbekommen sollte):D.
 
du kannst das ganze mit partitionmagic machen. ansonsten kannst du auch ne partition anlegen und den typ mit openbsds fdisk bestimmen, dann musst du dich mit der c/h/s-umrechnung nicht rumschlagen (welche ich auch doof finde).
 
Oh mann, ist das ein Drama:mad:!

Ich habe jetzt mit Partitionmagic eine ext3-Partition von 50G Größe geschaffen, dann in OpenBSD gebootet und mit fdisk die ext3-Partition nach A6 konvertiert.

Nun gibt's aber Probleme mit "disklabel". Ich kann zwar Größe und Filesystem zuweisen, aber keinen Mountpoint. Das wird einfach nicht abgefragt:grumble:!

Sieht dann so aus:

Code:
# disklabel sd0       
# Inside MBR partition 1: type A6 start 204812685 size 107764020
# /dev/rsd0c:
type: SCSI
disk: SCSI disk
label: Basics Portable 
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 19457
total sectors: 312581808
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0		# microseconds
track-to-track seek: 0	# microseconds
drivedata: 0 

16 partitions:#                size           offset  fstype [fsize bsize  cpg]
  c:        312581808                0  unused      0     0      
  i:        204812622               63   MSDOS                   
  j:        107764020        204812685  4.2BSD   2048 16384    1

So, jetzt die Preisfrage: Wie weise ich Partition j einen Mountpoint zu:confused:

Wenn ich die Hilfefunktion von disklabel im interaktiven Modus aufrufe, kommt der Hinweis:

n [part] - set the mount point for a partition.

Wenn ich das dann mittels "n j" machen möchte kommt jedoch nur:

This option is not valid when run without the -f flag.

Und in der Manpage zu disklabel steht:

-f tempfile
Write entries to tempfile in fstab(5) format for any partitions
for which mount point information has been specified. The -f
flag is only valid when used in conjunction with the -E flag. If
tempfile already exists, it will be overwritten.

Okay, ich rate mal - das hier könnte funktionieren:

Code:
# disklabel -E -f /dev/sd0j sd0

Jetzt kann ich auch tatsächlich einen Mountpoint angeben:

Code:
# disklabel -E -f /dev/sd0j sd0     
# Inside MBR partition 1: type A6 start 204812685 size 107764020
Treating sectors 204812685-312576705 as the OpenBSD portion of the disk.
You can use the 'b' command to change this.

Initial label editor (enter '?' for help at any prompt)
> n j
mount point: [none] /mnt/usb/porthell
> w
> q
No label changes.

Öööh, "No label changes"??? Und tatsächlich - der Mountpoint wird nicht geschrieben.

Pffffffffff, bötte bötte - sag' mir doch mal einer, wie man so einen Mountpoint setzt, ich blick' da nicht mehr durch:confused::confused::confused:
 
du setzt in disklabel keine mountpoint... das machst du nur beim install. wohin du nun "/dev/sd0j" mountest bleibt dir überlassen; entweder von hand oder per fstab.
 
du setzt in disklabel keine mountpoint... das machst du nur beim install. wohin du nun "/dev/sd0j" mountest bleibt dir überlassen; entweder von hand oder per fstab.

Oooops, ich glaub', das nennt man dann den Wald vor Bäumen nicht mehr sehen:D.

... war ein frustrierender Abend gestern (das nur zur Erklärung);).
 
Sooo, mit diesem Eintrag in der /etc/fstab klappt's:

Code:
/dev/sd0j /mnt/porthell ffs rw,noauto,nodev,nosuid 0 0

Hab' jetzt Opera und jdk-1.6.0 gebaut und die externe Festplatte hat prima mitgemacht:)!

... und die grauen Haare, die mich diese Aktion wieder gekostet hat, zähl' ich lieber nicht:D.
 
Zurück
Oben