# MinFS MinFS is a simple, unix-like filesystem built for Zircon. It currently supports files up to 4 GB in size. ## Using MinFS ### Host Device (QEMU Only) * Create a disk image which stores MinFS ```shell (Linux) $ truncate --size=16G blk.bin (Mac) $ mkfile -n 16g blk.bin ``` * Execute the run zircon script on your platform with the '--' to pass arguments directly to QEMU and then use '-hda' to point to the file. If you wish to attach additional devices, you can supply them with '-hdb', '-hdc, and so on. ```shell $ ./scripts/run-zircon-x64 -- -hda blk.bin ``` ### Target Device (QEMU and Real Hardware) **WARNING**: On real hardware, "/dev/class/block/..." refers to **REAL** storage devices (USBs, SSDs, etc). **BE CAREFUL NOT TO FORMAT THE WRONG DEVICE.** If in doubt, only run the following commands through QEMU. The `lsblk` command can be used to see more information about the devices accessible from Zircon. * Within zircon, 'lsblk' can be used to list the block devices currently on the system. On this example system below, "/dev/class/block/000" is a raw block device. ``` > lsblk ID DEV DRV SIZE TYPE LABEL 000 block block 16G ``` * Let's add a GPT to this block device. ``` > gpt init /dev/class/block/000 ... > lsblk ID DEV DRV SIZE TYPE LABEL 002 block block 16G ``` * Now that we have a GPT on this device, let's check what we can do with it. (NOTE: after manipulating the gpt, the device number may change. Use lsblk to keep track of how to refer to the block device). ``` > gpt dump /dev/class/block/002 blocksize=512 blocks=33554432 Partition table is valid GPT contains usable blocks from 34 to 33554398 (inclusive) Total: 0 partitions ``` * "gpt dump" tells us some important info: it tells us (1) How big blocks are, and (2) which blocks we can actually use. Let's fill part of the disk with a MinFS filesystem. ``` > gpt add 34 20000000 minfs /dev/class/block/002 ``` * Within Zircon, format the partition as MinFS. Using 'lsblk' you should see a block device which is the whole disk and a slightly smaller device which is the partition. In the above output, the partition is device 003, and would have the path '/dev/class/block/003' ``` > mkfs minfs ``` * If you want the device to be mounted automatically on reboot, use the GPT tool to set its type. As we did above, **you must** use 'lsblk' **again** to locate the entry for the disk. We want to edit the type of the zero-th partition. Here we use the keyword 'DATA' to set the type GUID, but if you wanted to use an arbitrary GUID you would supply it where 'DATA' is used. ``` > gpt edit 0 type DATA ``` * On any future boots, the partition will be mounted automatically at /data. * If you don't want the partition to be mounted automatically, you can update the visibility (or GUID) of the partition, and simply mount it manually. ``` > mount /data ``` * Any files written to "/data" (the mount point for this GUID) will persist across boots. To test this, try making a file on the new MinFS volume, rebooting, and observing it still exists. ``` > touch /data/foobar > dm reboot > ls /data ``` * To find out which block device/file system is mounted at each subdirectory under a given path, use the following command: ``` > df ```