fsck und gpt

Raistlin

Member
Hallo zusammen,

ich suche seit einigen Tagen eine Lösung fürdas folgende Problem (der Beitrag, der folgt, ist allerdings nicht von mir):

We use gpart to create GPT style partitions. For example:

# gpart show ad4
=> 34 490234685 ad4 GPT (234G)
34 16 1 freebsd-boot (8.0K)
50 67108864 2 freebsd-swap (32G)
67108914 67108864 3 freebsd-swap (32G)
134217778 10485760 4 freebsd-ufs (5.0G)
144703538 25165824 5 freebsd-ufs (12G)
169869362 11719060 6 freebsd (5.6G)
181588422 200620089 7 freebsd-ufs (96G)
382208511 108026208 8 freebsd-ufs (52G)

In this case, partitions 3, 4, and 5 are mirrored with equivalent partitions on another drive and these appear to be working fine. Partitions 7 and 8 are strictly data partitions and not mirrored. When I try to run fsck against them, I get this:

# fsck /dev/ad4p4
fsck: Could not determine filesystem type

I have to specify the file system type explicitly:

# fsck -t ufs /dev/ad4p7
** /dev/ad4p7 (NO WRITE)
** Last Mounted on /v0
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
39 files, 553 used, 48573784 free (24 frags, 6071720 blocks, 0.0% fragmentation)

Why do I have to specify the fstype explicitly? I have a similar system configured with fdisk/bsdlabel and the fsck command doesn't have any problems with determining the fstype. Is there something we need to do to allow the fstype of GPT partitions to be automatically determined by fsck?

In genau dieses Problem bin ich auch hineingeraten, als mein Rechner in der Nacht mal eine Grätsche gemacht hat und neu startete. Allerdings arbeite ich mit VMDKs die mittels gpart ein Alignment bekommen, welches ich wie folgt angelegt habe:

Code:
 # gpart create -s gpt da0
 # gpart add -b 34 -s 64k -t freebsd-boot da0
 # gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 da0
 # gpart add -b 1024 -s 8192M -t freebsd-swap -l swap da0 
 # gpart show da0 
 # gpart add -t freebsd-ufs -l system da0
 # newfs /dev/da0p3

Mache ich hier was falsch? Oder gibt es hier eine spezielle Variante von fsck, die ich entsprechend benutzen kann?

Ich hab jetzt schon einige Tage bezüglich des Theams gesucht, aber ich konnte irgendwie nichts finden.
 
Hallo,
erst einmal willkommen hier. Eigentlich ist es ganz einfach, sofern ich die Frage nun richtig verstehe. /sbin/fsck ist lediglich ein Wrapper, welches das korrekte fsck-Programm aufruft. Um herauszufinden, welches Dateisystem dort liegt und damit welches Programm zu nutzen ist, schaut er in die /etc/fstab. Das letzte Feld gibt dort an, ob fsck aufgerufen werden soll und wann. Ein Wert von "0" oder eben auch kein Wert bedeutet, dass fsck nicht gemacht werden soll. Alle mit "1" werden sequentiell ausgeführt, anschließend alle mit "2" parallel, dann die mit "3" parallel und so weiter und so fort... Du müsstest also nur dein Dateisystem in /etc/fstab eintragen und das war es.

So, die andere Frage war ja, wieso es bei GPT nicht funktioniert, bei bsdlabel aber schon. Die Antwort steht in fsck.c Zeile 533ff.: "This is a kludge to make automatic filesystem type guessing from the disklabel work for "4.2BSD" filesystems.". Kurz um, er liest das Label aus und wenn der "4.2BSD" als Dateisystem steht, ruft er /sbin/fsck_4.2bsd auf, was lediglich ein Hardlink auf /sbin/fsck_ffs ist. Auf GPT hat nie jemand sowas implementiert, daher klappt es dort auch nicht. Möglich wäre es natürlich, wobei ich da vielleicht eine generische Lösung bevorzugen würde. Eventuell ein ähnliches vorgehen wie "file -s", welches ja auch Dateisysteme erkennen kann.
 
Zuletzt bearbeitet:
Ich hätte da mal eine Frage,

wieso verwendest du die GPT mit UFS?

Hat das spezielle Gründe?

Ich meine das, wohl klassische, bsdlabel hätte es doch auch getan und du könntest ohne ändern der fstab dein fsck verwenden. fsck macht mit UFS ja Sinn und ist das Tool der Wahl um die Integrität zu prüfen.

Du könntest ja mal das versuchen, aber ohne Gewehr :)

vielleicht kann ja noch jemand der mehr FreeBSD Ahnung hat wie ich sich das mal anschauen. Ich hab FreeBSD nur kurz mit UFS verwendet...

EDIT: das mit "gpart create -s mbr ad0" sollte ab 8.0 funktionieren.
EDIT: Quellen für all das: Quelle1 Quelle2 Quelle3

Code:
 # gpart create -s mbr da0
 # gpart add -b 34 -s 64k -t freebsd-boot da0
 # gpart bootcode -b /boot/boot -i 1 da0s1
 # gpart add -b 1024 -s 8192M -t freebsd-swap da0 
 # gpart show da0 
 # gpart add -t freebsd-ufs da0
 # newfs /dev/da0p3
 
Zuletzt bearbeitet:
Hi und danke für die Antworten,

@caligula: Ich hab gpart und GPT verwendet, weil ich ehrlich gesagt mit bsdlabel noch nicht allzu viel gearbeitet habe. Bisher habe ich immer alles über sysinstall gemacht. Da ich aber diesmal wegen der virtuellen Maschine das Alignment ändern wollte, hab eich nachgeschaut und gpart war das erste, was ich so gefunden habe. Aber denn werd ich mal bsdlabel verwenden.

@Yamagi: Ah, ok, danke, ich hatte nicht dran gedacht, mal in den SourceCode von fsck zu schauen, ich Depp. Dann ist das klar, dass es nicht funktionieren kann.

Denn schau ich mal, dass ich mit bsdlabel zurecht komme.
Danke für die Hilfe :)
 
bsdlabel ist ein Krampf im Vergleich zu gpart und ich für mich werde es sicher nicht mehr einsetzen wenn ich drum rum komme. Statt fsck einmal in tausen Jahren fsck_ufs aufzurufen halte ich für vertretbar. IA sind meine FS auch in der fstab eingetragen, so dass es mit dem automatischen fsck normal keine Probleme geben sollte.... Also kurz gesagt, wegen der 4 Ziffern verzichte ich nicht auf die Vorzüge von GPT und gpart ;)
 
Es gibt keinen Grund mehr mit FreeBSD >= 8.2 den alten Weg mit MBR+bsdlabel zu gehen, wenn man nicht damit Probleme mit dual-boot oder kaputtem BIOS/EFI umgeht. GPT Formatierung bringt einige Vorteile mit sich. Es können Devices >2TiB formatiert werden, es sind mehr Partitionen ohne Workarounds möglich, Partitionen können benannt werden und nicht zu letzt ist gpart deutlich bequemer zu Scripten als fdisk + bsdlabel.
 
Hi,

ich wollte mal nachfragen, ob es hierfür mittlerweile einen Fix, Patch oder sonstiges gibt.

Hintergrund ist, dass wir bisher mit FreeBSD auf Servern immer auf den Filecheck beim hochfahren des Systems nach einem Absturz bauen konnten.

Nun haben wir aber durch Virtualisierung auch entsprechend im Alignment angepasste Platten, welche ja dann beim Hochfahren nicht mehr überprüft werden, weil das Filesystem nicht erkannt wird.

Und da ja bsdlabel quasi deprecated wird, wäre eine Anpassung für das fsck natürlich wünschenswert.

Ich frag nur nach, weil ich zwar die Problemstellung schon ein paar mal gelesen habe, aber dort keine Lösung gefunden habe.

Weiß jemand hier vielleicht eine adäquate Lösung des Problems?

Danke schon mal im Voraus für die Antworten.
 
Zurück
Oben