Re: Starthilfe gpart benötigt

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Fri, 22 Feb 2013 09:23:21 +0100 (CET)

Marc Santhoff wrote:
> ich dachte[*], ich benutze jetzt endlich mal fortschrittlicherweise
> gpart statt fdisk oder gar sysinstall. Eine neue, externe Platte soll
> einen klassichen MBR bekommen, eine slice über allen Platz und darin
> eine große UFS2-Partition.

Das ist eher ein ungewöhnlicher Ansatz. Dass das eigentlich
nicht vorgesehen ist, sieht man auch daran, dass es für MBR
gar keinen UFS-Partitionstyp gibt.

Funktionieren sollte es im Prinzip schon, da sich newfs(8)
nicht dafür interessiert, auf was für einer Partition es
ausgeführt wird. Die Frage ist halt, welchen Partitionstyp
man verwendet. Wie gesagt, "freebsd-ufs" gibt es für MBR
nicht. Man könnte "freebsd" verwenden, aber dann erwartet
GEOM vermutlich, dass sich ein BSD-Label darin befindet, was
aber hier nicht der Fall ist, was zu einer Fehlermeldung
beim Probing führen könnte. Aber newfs und mount sollten
dann auf /dev/da0s1 trotzdem funktionieren. Oder Du nimmst
irgendeinen anderen Partitionstyp, dem FreeBSD keine nähere
Bedeutung beimisst, z.B. '!2' (XENIX root). Theoretisch
sollte man sogar davon booten können (wenn Bootstrap-Code
installiert ist), aber ich würde meine Hand nicht dafür ins
Feuer legen.

ABER: Besser ist es, einen etablierten und vorgesehenen Weg
für die Partitionierung zu beschreiten. Das bewahrt vor
unangenehmen Überraschungen und ist zukunftssicherer.

Im Prinzip gibt es zwei Möglichkeiten: Der klassische Weg
mit einem MBR, der eine "freebsd"-Slice mit einem normalen
Disklabel enthält (Partitionen a bis h). Deine Partition
heißt dann z.B. /dev/da0s1a, wie man es gewohnt ist.

Der modernere Weg ist jedoch, stattdessen GPT zu verwenden.
Vorteile sind eine größere Flexibilität, das Aufheben der
Grenze bei 2 TB (mehr schafft MBR nicht), und bis zu 128
Partitionen (ein BSD-Label schafft nur acht). Die erste
Partition heißt dann /dev/da0p1. Kochrezept für eine große
Datenplatte, d.h. nur eine Partition:

    # dd if=/dev/zero of=/dev/da0 bs=1m count=2
    # gpart create -s GPT da0
    # gpart add -t freebsd-ufs -a 1m da0
    # newfs -U -i 1048576 /dev/da0p1

Die Einzelheiten zu den Optionen bitte in den jeweiligen
Manpages nachlesen. Ich persönlich verwende fast immer
-i 1048576 bei Dateisystemen im Terabyte-Bereich, und
meistens auch -n (keine Snapshots). Als Alignment (-a)
verwende ich in der Regel 1 MB.

Betriebssysteme (und BIOSe), die GPT nicht unterstützen,
erkennen die Partitionierung natürlich nicht und denken
evtl., die Platte sei leer. Das ist im Prinzip nicht
schlimm, aber wann man Angst hat, man könnte die Platte
versehentlich für leer halten und überbügeln, kann man
dem vorbeugen, indem man in der GPT einen sogenannten
"protective MBR" (PMBR) installiert:

    # gpart bootcode -b /boot/pmbr da0

Dann sehen veraltete Systeme einen MBR, und alles ist gut.
Ältere BIOSe können dann sogar davon booten. Um FreeBSD
von einer GPT-Platte zu booten, braucht man zusätzlich eine
kleine Partition mit Typ "freebsd-boot" (kein UFS!), die
wie folgt vorbereitet wird:

    # gpart add -a 256 -s 128 -t freebsd-boot da0
    # gpart bootcode -p /boot/gptboot -i 1 da0

Mit "-i 1" wird angegeben, dass /boot/gptboot auf der ersten
Partition installiert werden soll. Falls "freebsd-boot"
nicht die erste ist (siehe Ausgabe von "gpart show da0"),
muss man die Zahl entsprechend anpassen.

Optional kann man noch festlegen, welche Partition die root-
Partition (mit /boot/loader, Kernel usw.) ist:

    # gpart set -a bootme -i 2 da0

In diesem Beispiel wäre es die zweite, also diejenige, die
auf die "freebsd-boot"-Partition folgt. Wenn man kein
"bootme"-Flag setzt, wird /boot/loader per Default von der
ersten Partition mit Typ "freebsd-ufs" gestartet, was in der
Praxis meistens passt.

Es gibt auch noch ein sehr nützliches Flag "bootonce", mit
dem man eine Root-Partition testweise booten kann, wenn man
z.B. einen neuen Kernel gebaut hat. Geht etwas schief, wird
das Flag durch "bootfailed" ersetzt, so dass beim nächsten
Reboot automatisch wieder die alte Partition gebootet wird.
Wenn man dieses Feature nutzen möchte, ist es daher sinnvoll,
beim Partitionieren zwei root-Partitionen vorzusehen.

> [...]
> # /sbin/gpart add -s 931G -t freebsd-ufs -a 4k -l backup03 da0
> gpart: Invalid argument

Wie oben erwähnt: MBR kennt kein "freebsd-ufs".

> Zusatzfrage:
> Wenn ich als Schema nicht MBR sondern GPT wähle, wird dann die Platte
> unter Windows (bis runter zu 2000) wenigstens als "schon irgendwie
> benutzt" erkannt? Wenn sie nämlich für leer gehalten wird, könnte ja
> jemand auf die Idee kommen ...

Siehe oben: Protective MBR.

> Garantiert wieder ein peinlich blöder Fehler, den ich nicht sehe,
> grummel.

Ist nicht peinlich. Als ich zum ersten Mal mit der Thematik
GPT in Berührung kam, war ich auch planlos und musste mich
in die erstmal Sache einlesen, was zum damaligen Zeitpunkt
nicht einfach war; die Dokumentation war noch recht dünn,
und auch gpart(8) fehlten noch ein paar praktische Optionen
(z.B. gab's -a nicht, so dass man selbst herumrechnen musste,
um passende Werte für -b und -s zu ermitteln). Der Abschnitt
"BOOTSTRAPPING" in der Manpage, wo es auch um den PMBR geht,
wurde erst vor kurzem deutlich überarbeitet und erweitert.

Gruß
   Olli

-- 
Oliver Fromme,  secnetix GmbH & Co. KG,  Marktplatz 29, 85567 Grafing
Handelsregister:  Amtsgericht Muenchen, HRA 74606, Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsreg.: Amtsgericht München,
HRB 125758, Geschäftsführer:  Maik Bachmann,  Olaf Erb,  Ralf Gebhart
FreeBSD-Dienstleistungen/-Produkte + mehr: http://www.secnetix.de/bsd
"I learned Java 3 years before Python.  It was my language of
choice.  It took me two weekends with Python before I was more
productive with it than with Java." -- Anthony Roberts
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 22 Feb 2013 - 09:23:32 CET

search this site