The UFS2 filesystem

While making a device for testing I have used a usb drive and formatted it to UFS2 by using the following commands in FreeBSD. Here da0 is usb.

gpart destroy -F /dev/da0

gpart create -s gpt /dev/da0

gpart add -t freebsd-ufs /dev/da0

newfs /dev/da0p1

By running the following commands you can run the implemented code of UFS2.

Commands

# Building the ufs2 shell

jam -q “<build>ufs2_shell”

To run it, use

jam run objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/ufs2/ufs2_shell/ufs2_shell <path_to_the_image>

If you are using a usb drive then you may not be able to open it so, you just need to add sudo in the beginning of above command and make sure that you have not mounted the usb drive.

Alternatively you can start from an existing freebsd image, so it has some files in it:

Download FreeBSD-12.1-RELEASE-amd64-mini-memstick.img

diskimage register FreeBSD-12.1-RELEASE-amd64-mini-memstick.img to access the MBR style partitions inside it (on Linux probably using mount -o loop or something like that)

dd if=/dev/disk/virtual/files/8/1 bs=8K skip=1 of=fbsd_ufstest.img to extract the filesystem from the partition (skipping the freebsd disklabel)

Check the result: file fbsd_ufstest.img

fbsd_ufstest.img: Unix Fast File system [v2] (little-endian)

During the implementation of the project the following links were found useful. https://github.com/freebsd/freebsd/blob/master/sys/ufs/ffs/fs.h https://flylib.com/books/en/2.48.1/ufs2_inodes.html