Fstab配置

'/etc/config/fstab'配置文件定义了系统启动时将要激活的静态文件系统和交换分区。 注意在系统启动时,包含这些文件系统和交换分区的磁盘必须是可用的,否则就只能在启动后进行手动挂载。 同样,用于加载特定文件系统的模块必须被安装或者加载到内核。 这些模块的名称可以是kmod-fs-ext3, kmod-fs-ext4, kmod-fs-vfat等。切记ntfs文件系统仍然是闭源的,并且通过kmod-fs-ntfs只能对ntfs分区进行读操作,如要进行写操作,还需要安装ntfs-3g。

Then type ntfs-3g /dev/sda1 /mnt/dir -o rw. Be aware that this performs very poorly.

As of r26314 block-extroot and block-hotplug have been merged with block-mount. That means that once you select block-mount the scripts for extroot mounting and hotplug mounting are installed.
block-mount can be installed even if you have not selected a block device package, but if you want to actually mount a block device you must still install the drivers (block device package) as well as the filesystem
you want to use (e.g. ext4)

:!: The block-mount and block-hotplug packages must be installed to use this configuration file!

:!: In the 10.03 stable (not in bleeding edge) release there is a bug: vi /etc/init.d/fstab and put a # in front of the line:

echo '# WARNING: this is an auto generated file, please use UCI to set defined filesystems' > /etc/fstab

This creates the file /etc/fstab and thus prevents creating a symlink to /tmp/fstab. In order for UCI to work, there need to be symlink!

In case the bug has already taken place, delete /etc/fstab and then type this code to busybox.

ln -s /tmp/fstab /etc/fstab
It will create a symlink to the /tmp/fstab file, fixing the bug completely.

Sections

The configuration file can consist of sections defining file systems to be mounted and swap partitions to be activated.

Automount

There is one global section named automount which defines the hotplug automounting behaviour.

This example is included by default:

config global automount
    option from_fstab 1
    option anon_mount 1

The automount section contains these settings:

Name Type Required Default Description
from_fstab boolean no 1 Whether to use mount sections when doing hotplug mounts
anon_mount boolean no 1 When using hotplug mounts, whether to automatically mount filesystems not defined in a mount section under /mnt/$device

Autoswap

There is one global section named autoswap which defines the hotplug auto swap behaviour.

This example is included by default:

config global autoswap
    option from_fstab 1
    option anon_swap 0

The autoswap section contains these settings:

Name Type Required Default Description
from_fstab boolean no 1 Whether to use swap sections when doing hotplug swap on
anon_swap boolean no 0 When using hotplug swapon, whether to automatically swapon devices not defined in a swap section

挂载文件系统

mount 一节定义一个在启动时被挂载的文件系统. 文件系统在使用前必须格式化.Openwrt使用 UCI 来配置系统,因而Openwrt的 fstab 文件设定与一般的发行版在形式上有不同,不过具体的功能设定是没有根本变化的.了解关于Linux系统的 fstab 文件设定说明,将有助于理解本文.

这是一个默认配置的例子:

config mount
        option target   /home
        option device   /dev/sda1
        option fstype   ext4
        option options  rw,sync
        option enabled  0
        option enabled_fsck 0

mount 一节包含如下设置:

名称 类型 是否必须 默认配置 描述
device string yes or uuid or label (none) 指定被挂载的设备(分区). 加入指定 uuid 或者 label,那么就不用设备名.
uuid string yes or device or label (none) UUID of device (partition) to mount the filesystem from, as shown by blkid. If uuid is present in the mount section, it is used in preference to label or device.
label string yes or device or uuid (none) LABEL of device (partition) to mount the filesystem from, as shown by blkid. If uuid is present in the mount section, it takes precedence. label takes precedence over device.
enabled boolean no 1 Whether to mount this filesystem automatically at boot.
fstype string no auto Type of the filesystem (i.e. ext3).
options string no rw Mount options for this filesystem.
target string yes (none) Target directory to mount the filesystem onto. After r25787 specifying '/overlay' here means this filesystem will be mounted as the overlay-based rootfs, while after r26109 specifying '/' here means the filesystem will be mounted as regular rootfs (that is not overlay-based). (see extroot)
enabled_fsck boolean no 0 Whether to automatically check for/repair errors before mounting the filesystem.
is_rootfs boolean no 0 For all block-extroot revisions, determines whether this filesystem is a rootfs for use with block-extroot. If it is a rootfs and block-extroot is installed, then during preinit, this filesystem will be mounted on /overlay and used as the root overlay (like jffs2 on a normal squashfs boot, only with this filesystem). target is ignored for the purposes of a rootfs mount, however when doing the squashfs mount (e.g. a fallback, or on firstboot), it will be used as usual (see extroot). deprecated after r25787. Before r25787 it is required for block-extroot mounts

Adding Swap Partitions

Each swap section defines a swap partition to be activated at boot.
:!: Swap partitions must be formatted before they can be used and the swap-utils package needs to be installed!
:!: Swap partitions must be first defined using the mkswap /dev/device command!

This example is included by default:

config swap
        option device   /dev/sda2
        option enabled  0

The swap section contains these settings:

Name Type Required Default Description
device string yes or uuid or label (none) Device (partition) to mount the swap from. uuid and label take precedence
uuid string yes or device or label (none) UUID of device (partition) to mount the swap from, as shown by blkid. If uuid is present in the mount section, it is used in preference to label or device.
label string yes or device or uuid (none) LABEL of device (partition) to mount the swap from, as shown by blkid. If uuid is present in the mount section, it takes precedence. label takes precedence over device.
enabled boolean no 1 Whether to activate this swap partition automatically at boot.

The right amount of SWAP

If you ask people or search the net, you will find as a general rule of thumb double RAM for machines with 512MiB of RAM or less than, and same amount as RAM for machines with more. But this very rough estimate does apply for your embedded device! Be aware that there are exactly two differences between RAM and SWAP, that matter: the access time and the price. A CUPS spooling server will run just fine, when only SWAP is available, whereas some applications may perform very poorly when their data it stored on the SWAP rather then being kept in the "real" RAM. The decision which data is kept in the RAM and which is stored on the SWAP is made by the system. As explained here Debian Forum (german) since Kernel 2.6 you can define the swapiness of your system:

root@OpenWrt:~# sysctl -w vm.swappiness=60 root@OpenWrt:~# echo 60 > /proc/sys/vm/swappiness

In contrast to other operating systems, Linux makes ample use of memory, so that your system runs smoother and more efficiently. If memory is then needed by an application, the system will unload stuff again, and make memory available. For OpenWrt, let us just say to use as much SWAP-Space as needed by your applications running. If this should not perform well, because of the poor access time, it would not help to decrease the amount of SWAP, but only to run fewer services at the same time or increase the amount of RAM with a soldering iron ;-)

OpenWrt vanilla will run just fine, with no SWAP at all. But after you installed a couple of applications, you could try to mount a SWAP-Partition and see what is does for you. Do not worry, you can not brake anything by doing that. The manual commands are swapon /dev/sdaX to mount respectivly swapoff /dev/sdaX to unmount. Type in free to see the usage of memory:

root@OpenWrt:~# free total used free shared buffers Mem: 29484 28540 944 0 1116 Swap: 524280 2336 521944 Total: 553764 30876 522888

In this example there is 32MiB of RAM and 512MiB of SWAP. SWAP is a SWAP-formated 512MiB-Partition on a large USB-Harddisk. In this example, only 2MiB are being used! And you do not see here, that actually half the RAM is being wasted for a TMPFS-Drive. Use df to see that:

root@OpenWrt:~# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 1280 1280 0 100% /rom tmpfs 14744 116 14628 1% /tmp ⇐ Up to 14MiB of RAM may be used here, the tmpfs 512 0 512 0% /dev tmpfs partitions grow and shrink with usage! /dev/mtdblock3 5440 4988 452 92% /overlay mini_fo:/overlay 1280 1280 0 100% / /dev/sda2 2709204 86276 2485284 3% /mnt/sda2 /dev/sda3 7224600 147320 6710196 2% /mnt/sda3

In this example, it would probably perform better, to mount the /tmp-directory on the USB-Harddisk and not use TMPFS at all, rather than using a 512MiB-Swap Partition. But you can also see, that overlay has only 8% space left to install programs on. So in this example it would be even better to use the exroot option. See extroot for that.

Troubleshooting

Sleep before startup

I installed the packages, enabled the fstab, and changed my fstab config file. When I restart, the drive does NOT show up. I can issue an /etc/init.d/fstab start and I get an error that it can't find a file(/tmp/fstab) but the drive mounts. I took the advice from this posting https://forum.openwrt.org/viewtopic.php?id=27210 and put "sleep 15" in the start section of the /etc/init.d/fstab file. (I'm using a USB stick) That fixed the problem.

start() {
        sleep 15
        config_load fstab
        mkdir -p /var/lock
        lock /var/lock/fstab.lck
        #echo '# WARNING: this is an auto generated file, please use uci to set defined filesystems' > /etc/fstab
        lock -u /var/lock/fstab.lck
        config_foreach do_mount mount
        config_foreach do_swapon swap
}

https://forum.openwrt.org/viewtopic.php?id=28311

Back to top

zh-cn/doc/uci/fstab.txt · Last modified: 2011/05/17 17:46 (external edit)