After some messing around I did finally find a way to accomplish what I want some time ago, but forgot to update my question here. In the future (beginning of October) I'm replacing the entire machine and indeed switching to ZFS. In the mean time I'll post my solution here so other people might use it.
The solution is to make the filesystem to install to from within FreeBSD. I was unable to load the gJournal kernel module from the fixit disk, so I installed a basic install to an USB stick. After wiping the entire disk I was going to install on I booted the machine from the USB stick.
The first step was to load the gJournal kernel module with "
gjournal load" and then labeling the disk I was going to install on (
gjournal label ad0". You should now see a
/dev/ad0.journal entry inside
/dev. The next step is to write a boot sector to this disk with
bsdlabel. In case of my amd64 system this was "
bsdlabel -wBm amd64 ad0.journal", for the specifics for your system see the
bsdlabel(8) manual page. I proceeded to edit the labels with bsdlabel as you normally would changing the disk lay out, but using
/dev/ad0.journal where you would normally use
/dev/ad0. I ended up specifying the following lay-out in
bsdlabel -e ad0.journal:
# size offset fstype [fsize bsize bps/cpg]
a: 256M 16 4.2BSD 2048 16384
b: 2G * swap
c: * * unused
d: 2G * 4.2BSD 2048 16384
e: 512M * 4.2BSD 2048 16384
f: 6G * 4.2BSD 2048 16384
g: * * 4.2BSD 2048 16384
The specific sizes you require will differ of course. After specifying these partitions
/dev/ should show the various
/dev/ad0.journalg entries. Now we can format the new filesystems using
newfs(8). I used UFS2 with labels so I could refer to
/etc/fstab instead of the disk device. The command I ran was
newfs -O 2 -J -L rootfs /dev/ad0.journala,
-O 2 uses UFS2,
-J turns on journaling on a specific partition and
-L rootfs names
/dev/label/rootfs. Do not forget that you might want to disable journaling on for instance the
/tmp partition, in that case don't pass the
-J flag for those partitions. Even though they are on the journaled disk, GEOM will only journal UFS systems which signal whether data being written is meta-data or not which only happens for filesystems created with
-J or for which you turn on journaling manually via
Now the tricky part is over and we just need to install the OS to our freshly created journaled filesystem, I simply used the install disk. Since we already created our filesystem the CD installer cannot be used. Instead simply mount the CD from within the USB install, then mount the newly created root filesystem somewhere (I'll use
/tmp/newinstall as mountpoint here). Then mount all the other partitions you created inside
/usr and whatever else you partitioned. Next set the environment variable DESTDIR to this new path (
Now change directory to where you mounted the install CD, on the CD you'll find a folder named after the FreeBSD version you downloaded, inside this folder there are several folders each containing an
install.sh file, run each of these scripts (you have to specify the kernel GENERIC as an argument to the install script in the kernel directory).
After this is done, do not forget to copy/move
/tmp/newinstall/boot/kernel or you will find the system can't find a kernel to boot. Last but not least edit
/tmp/newinstall/boot/loader.conf and add the line
geom_journal_load="YES" to load gjournal support at boot time, you can (and must) remove this line if you compile a custom kernel with gJournal support included (the required options for this are
options UFS_GJOURNAL and
The very last thing that remains to be done is creating an
/tmp/newinstall/etc/fstab file that mounts the required partitions at boot time. You can either specify
/dev/ad0.journala devices or the
/dev/label/rootfs and other labels you provided. Details on the syntax and options for the file can be read in
fstab(5)'s manual page. Keep in mind that with journaling it is now "safe" to mount your filesystems async. Also note that while journaled devices don't need
fsck you should still fill in the
fsck column in the fstab file. If you do not, your system WILL NOT BOOT. The system recognizes journaled disks and treats them differently in the automated fsck checks, instead running the appropriate checks for a journaled system.
 - Safe means your filesystem will not be corrupted by a crash while journaling. Data that has not been written to disk at the time of the crash can still be lost, for instance if it's being buffered by the OS or the disk. Data can remain in these buffers for quite a while.