= Disks and File systems = [[PageOutline(2-3)]] == File system types == HelenOS currently supports the following file systems: || '''File system''' || '''`/srv` executable''' || '''Can be initrd FS''' || '''Has `mk*fs` utility''' || '''Status''' || || [wiki:Fs/Tmpfs TMPFS] || `tmpfs` || yes || no || Stable || || [wiki:Fs/Fat FAT] || `fat` || yes || yes || Stable || || [wiki:Fs/Locfs locfs] || `locfs` || no || no || Stable || || [wiki:Fs/Ext4fs Ext2fs/Ext3fs/Ext4fs] || `ext4fs` || yes || yes(ext2) || Stable || || [wiki:Fs/ExFat exFAT] || `exfat` || no || yes || Testing || || [wiki:Fs/Cdfs CDFS] || `cdfs` || no || no || Testing || || [wiki:Fs/Mfs MFS] || `mfs` || no || yes || Stable || || [wiki:Fs/Udf UDF] || `udf` || no || no || Read-only testing || HelenOS also supports the MBR/BIOS and GPT/UEFI partitioning schemes. == Directory structure == The file system of a running HelenOS system is roughly laid out as follows: || /app || end-user applications (see the [wiki:CommandReference Command Reference]) || || /cfg || system-wide configuration || || /data || application data (e.g. the web root served by websrv) || || /drv || device drivers || || /inc || header files || || /lib || libraries || || /loc || location service nodes (rough analogy of /dev in UNIX) || || /src || source files || || /srv || server applications (services, e.g. console, networking - see the [wiki:CommandReference Command Reference]) || || /tmp || temporary files || || /w || writable system volume (has free space, can be persistent) || This layout is not fixed in any way and may change in the future. == Block device drivers == Non-DDF: || file_bd || File-backed block device || || rd || Initial ramdisk || || sata_bd || AHCI SATA || || vbd || Virtual Block Device - provides block devices for individual partitions || DDF-based: || ata_bd || ATA/ATAPI || || usbmast || USB mass storage || || ddisk || msim disk driver || == Managing disk labels and file systems == You can use the interactive {{{fdisk}}} utility to create and manage disk labels. BIOS/MBR and UEFI/GPT labels are supported. When you create a partition with {{{fdisk}}}, you are also prompted for file system type (The file system will be initialized as part of creating the partition). If you'd like to create a file system on a raw disk, you need to do it by manually invoking a {{{mk*fs}}} utility. Here's an example {{{fdisk}}} session where we create a new partition table, create one partition with and Ext4 file system labeled 'Test' that will be automatically mounted at {{{/vol/Test}}}. Note that in several cases we just hit enter and go with the default choice. {{{ / # fdisk }}} {{{ Select device 1: devices/\hw\sys\00:01.0\ata-c1\d0 (2.097 MB) 2: devices/\hw\sys\00:01.0\ata-c2\d0 (34.09 MB) 3: Exit }}} {{{ Choice> 1 }}} {{{ Device: devices/\hw\sys\00:01.0\ata-c1\d0 (2.097 MB) Disk contains no label. Entire disk: (No name) 2.097 MB, Empty Select action 1: Create label 2: Exit }}} {{{ Choice> 1 }}} {{{ Select label type 1: MBR [default] 2: GPT }}} {{{ Choice> 1 }}} {{{ Device: devices/\hw\sys\00:01.0\ata-c1\d0 (2.097 MB) Label type: MBR Maximum free primary block: 2.085 MB Total free primary space: 2.085 MB Select action 1: Create primary partition 2: Create extended partition 3: Delete label 4: Exit }}} {{{ Choice> 1 }}} {{{ Enter capacity of new partition. ?> 2.085 MB Select file system type 1: ExFAT 2: FAT 3: MINIX 4: Ext4 [default] }}} {{{ Choice> 4 }}} {{{ Enter volume label for new partition. }}} {{{ ?> Test }}} {{{ Enter mount point for new partition (Auto, None or /path). ?> Auto }}} {{{ Device: devices/\hw\sys\00:01.0\ata-c1\d0 (2.097 MB) Label type: MBR Partition 1: Test 2.085 MB, Primary, Ext4 Select action 1: Modify partition 2: Delete partition 3: Delete label 4: Exit }}} {{{ Choice> 4 }}} {{{ / # vol Volume Name Resource Content Auto Mounted at =========== =================================== ======== ==== =============== HelenOS-CD devices/\hw\sys\00:01.0\ata-c2\d0p0 ISO 9660 Yes /vol/HelenOS-CD Test devices/\hw\sys\00:01.0\ata-c1\d0p1 Ext4 Yes /vol/Test / # }}} == Accessing File Systems == In many cases the OS makes file systems available automatically. For any file system that has a volume label and is not located on the internal ATA disk drive, it should be automatically available under {{{/vol/}}}. This works for CD-ROMS and USB flash sticks, for example. To find out which volumes are present in the system and where they are mounted, use the {{{vol}}} command. For example: {{{ / # vol Volume Name Resource Content Auto Mounted at =========== =================================== ======== ==== =============== devices/\hw\sys\00:01.0\ata-c1\d0p0 FAT HelenOS-CD devices/\hw\sys\00:01.0\ata-c2\d0p0 ISO 9660 Yes /vol/HelenOS-CD # }}} The partition on the internal drive is not mounted by default, but we can change that using the {{{fdisk}}} command. If you would like to remove a volume from the system, use the {{{vol eject }}} command: {{{ # vol eject /vol/HelenOS-CD }}} To insert the volume back we can use either: {{{ # vol insert -p /vol/HelenOS-CD }}} or {{{ # vol insert devices/\hw\sys\00:01.0\ata-c2\d0p0 }}} == Mounting file systems manually == '''This should only be needed in special circumstances. In most cases use {{{fdisk}}} to configure the mount point. Only do this if you know what you are doing as it may break the system's idea of file system status.''' Typing just {{{mount}}} prints out a list of mounted file systems. The basic syntax to mount a file system is: {{{ # mount }}} {{{fstype}}} is the type of the file system (e.g. {{{fat}}}, {{{ext4}}}, {{{mfs}}}), {{{service-name}}} is the service name of the block device (typically of a partition; it's the long name like {{{devices/\hw\pci...\l0p1}}}) and {{{directory}}} is the directory path to mount on top of. As {{{service-name}}} is long to type, try {{{cd}}} to {{{/loc}}} and then use tab-completion... You can find the list of available partition block devices in your system by typing: {{{ # loc show-cat partition }}} Unlabeled disks will be represented by one 'fake' partition spanning the entire disk.