#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "Linux System Utilities"

config ACPID
	bool "acpid"
	default n
	help
	  acpid listens to ACPI events coming either in textual form from
	  /proc/acpi/event (though it is marked deprecated it is still widely
	  used and _is_ a standard) or in binary form from specified evdevs
	  (just use /dev/input/event*).

	  It parses the event to retrieve ACTION and a possible PARAMETER.
	  It then spawns /etc/acpi/<ACTION>[/<PARAMETER>] either via run-parts
	  (if the resulting path is a directory) or directly as an executable.

	  N.B. acpid relies on run-parts so have the latter installed.

config FEATURE_ACPID_COMPAT
	bool "Accept and ignore redundant options"
	default n
	depends on ACPID
	help
	  Accept and ignore compatibility options -g -m -s -S -v.

config BLKID
	bool "blkid"
	default n
	select VOLUMEID
	help
	  Lists labels and UUIDs of all filesystems.
	  WARNING:
	  With all submodules selected, it will add ~8k to busybox.

config DMESG
	bool "dmesg"
	default n
	help
	  dmesg is used to examine or control the kernel ring buffer. When the
	  Linux kernel prints messages to the system log, they are stored in
	  the kernel ring buffer. You can use dmesg to print the kernel's ring
	  buffer, clear the kernel ring buffer, change the size of the kernel
	  ring buffer, and change the priority level at which kernel messages
	  are also logged to the system console. Enable this option if you
	  wish to enable the 'dmesg' utility.

config FEATURE_DMESG_PRETTY
	bool "Pretty dmesg output"
	default y
	depends on DMESG
	help
	  If you wish to scrub the syslog level from the output, say 'Y' here.
	  The syslog level is a string prefixed to every line with the form
	  "<#>".

	  With this option you will see:
	    # dmesg
	    Linux version 2.6.17.4 .....
	    BIOS-provided physical RAM map:
	     BIOS-e820: 0000000000000000 - 000000000009f000 (usable)

	  Without this option you will see:
	    # dmesg
	    <5>Linux version 2.6.17.4 .....
	    <6>BIOS-provided physical RAM map:
	    <6> BIOS-e820: 0000000000000000 - 000000000009f000 (usable)

config FBSET
	bool "fbset"
	default n
	help
	  fbset is used to show or change the settings of a Linux frame buffer
	  device. The frame buffer device provides a simple and unique
	  interface to access a graphics display. Enable this option
	  if you wish to enable the 'fbset' utility.

config FEATURE_FBSET_FANCY
	bool "Turn on extra fbset options"
	default n
	depends on FBSET
	help
	  This option enables extended fbset options, allowing one to set the
	  framebuffer size, color depth, etc. interface to access a graphics
	  display. Enable this option if you wish to enable extended fbset
	  options.

config FEATURE_FBSET_READMODE
	bool "Turn on fbset readmode support"
	default n
	depends on FBSET
	help
	  This option allows fbset to read the video mode database stored by
	  default as /etc/fb.modes, which can be used to set frame buffer
	  device to pre-defined video modes.

config FDFLUSH
	bool "fdflush"
	default n
	help
	  fdflush is only needed when changing media on slightly-broken
	  removable media drives. It is used to make Linux believe that a
	  hardware disk-change switch has been actuated, which causes Linux to
	  forget anything it has cached from the previous media. If you have
	  such a slightly-broken drive, you will need to run fdflush every time
	  you change a disk. Most people have working hardware and can safely
	  leave this disabled.

config FDFORMAT
	bool "fdformat"
	default n
	help
	  fdformat is used to low-level format a floppy disk.

config FDISK
	bool "fdisk"
	default n
	help
	  The fdisk utility is used to divide hard disks into one or more
	  logical disks, which are generally called partitions. This utility
	  can be used to list and edit the set of partitions or BSD style
	  'disk slices' that are defined on a hard drive.

config FDISK_SUPPORT_LARGE_DISKS
	bool "Support over 4GB disks"
	default y
	depends on FDISK
	help
	  Enable this option to support large disks > 4GB.

config FEATURE_FDISK_WRITABLE
	bool "Write support"
	default y
	depends on FDISK
	help
	  Enabling this option allows you to create or change a partition table
	  and write those changes out to disk. If you leave this option
	  disabled, you will only be able to view the partition table.

config FEATURE_AIX_LABEL
	bool "Support AIX disklabels"
	default n
	depends on FDISK && FEATURE_FDISK_WRITABLE
	help
	  Enabling this option allows you to create or change AIX disklabels.
	  Most people can safely leave this option disabled.

config FEATURE_SGI_LABEL
	bool "Support SGI disklabels"
	default n
	depends on FDISK && FEATURE_FDISK_WRITABLE
	help
	  Enabling this option allows you to create or change SGI disklabels.
	  Most people can safely leave this option disabled.

config FEATURE_SUN_LABEL
	bool "Support SUN disklabels"
	default n
	depends on FDISK && FEATURE_FDISK_WRITABLE
	help
	  Enabling this option allows you to create or change SUN disklabels.
	  Most people can safely leave this option disabled.

config FEATURE_OSF_LABEL
	bool "Support BSD disklabels"
	default n
	depends on FDISK && FEATURE_FDISK_WRITABLE
	help
	  Enabling this option allows you to create or change BSD disklabels
	  and define and edit BSD disk slices.

config FEATURE_FDISK_ADVANCED
	bool "Support expert mode"
	default n
	depends on FDISK && FEATURE_FDISK_WRITABLE
	help
	  Enabling this option allows you to do terribly unsafe things like
	  define arbitrary drive geometry, move the beginning of data in a
	  partition, and similarly evil things. Unless you have a very good
	  reason you would be wise to leave this disabled.

config FINDFS
	bool "findfs"
	default n
	select VOLUMEID
	help
	  Prints the name of a filesystem with given label or UUID.
	  WARNING:
	  With all submodules selected, it will add ~8k to busybox.

config FREERAMDISK
	bool "freeramdisk"
	default n
	help
	  Linux allows you to create ramdisks. This utility allows you to
	  delete them and completely free all memory that was used for the
	  ramdisk. For example, if you boot Linux into a ramdisk and later
	  pivot_root, you may want to free the memory that is allocated to the
	  ramdisk. If you have no use for freeing memory from a ramdisk, leave
	  this disabled.

config FSCK_MINIX
	bool "fsck_minix"
	default n
	help
	  The minix filesystem is a nice, small, compact, read-write filesystem
	  with little overhead. It is not a journaling filesystem however and
	  can experience corruption if it is not properly unmounted or if the
	  power goes off in the middle of a write. This utility allows you to
	  check for and attempt to repair any corruption that occurs to a minix
	  filesystem.

config MKFS_EXT2
	bool "mkfs_ext2"
	default n
	help
	  Utility to create EXT2 filesystems.

config MKFS_MINIX
	bool "mkfs_minix"
	default n
	help
	  The minix filesystem is a nice, small, compact, read-write filesystem
	  with little overhead. If you wish to be able to create minix
	  filesystems this utility will do the job for you.

comment "Minix filesystem support"
	depends on FSCK_MINIX || MKFS_MINIX

config FEATURE_MINIX2
	bool "Support Minix fs v2 (fsck_minix/mkfs_minix)"
	default y
	depends on FSCK_MINIX || MKFS_MINIX
	help
	  If you wish to be able to create version 2 minix filesystems, enable
	  this. If you enabled 'mkfs_minix' then you almost certainly want to
	  be using the version 2 filesystem support.

config MKFS_REISER
	bool "mkfs_reiser"
	default n
	help
	  Utility to create ReiserFS filesystems.

config MKFS_VFAT
	bool "mkfs_vfat"
	default n
	help
	  Utility to create FAT32 filesystems.

config GETOPT
	bool "getopt"
	default n
	help
	  The getopt utility is used to break up (parse) options in command
	  lines to make it easy to write complex shell scripts that also check
	  for legal (and illegal) options. If you want to write horribly
	  complex shell scripts, or use some horribly complex shell script
	  written by others, this utility may be for you. Most people will
	  wisely leave this disabled.

config FEATURE_GETOPT_LONG
	bool "Support option -l"
	default y if LONG_OPTS
	depends on GETOPT
	help
	  Enable support for long options (option -l).

config HEXDUMP
	bool "hexdump"
	default n
	help
	  The hexdump utility is used to display binary data in a readable
	  way that is comparable to the output from most hex editors.

config FEATURE_HEXDUMP_REVERSE
	bool "Support -R, reverse of 'hexdump -Cv'"
	default n
	depends on HEXDUMP
	help
	  The hexdump utility is used to display binary data in an ascii
	  readable way. This option creates binary data from an ascii input.
	  NB: this option is non-standard. It's unwise to use it in scripts
	  aimed to be portable.

config HD
	bool "hd"
	default n
	select HEXDUMP
	help
	  hd is an alias to hexdump -C.

config HWCLOCK
	bool "hwclock"
	default n
	help
	  The hwclock utility is used to read and set the hardware clock
	  on a system. This is primarily used to set the current time on
	  shutdown in the hardware clock, so the hardware will keep the
	  correct time when Linux is _not_ running.

config FEATURE_HWCLOCK_LONG_OPTIONS
	bool "Support long options (--hctosys,...)"
	default n
	depends on HWCLOCK && LONG_OPTS
	help
	  By default, the hwclock utility only uses short options. If you
	  are overly fond of its long options, such as --hctosys, --utc, etc)
	  then enable this option.

config FEATURE_HWCLOCK_ADJTIME_FHS
	bool "Use FHS /var/lib/hwclock/adjtime"
	default y
	depends on HWCLOCK
	help
	  Starting with FHS 2.3, the adjtime state file is supposed to exist
	  at /var/lib/hwclock/adjtime instead of /etc/adjtime. If you wish
	  to use the FHS behavior, answer Y here, otherwise answer N for the
	  classic /etc/adjtime path.

	  pathname.com/fhs/pub/fhs-2.3.html#VARLIBHWCLOCKSTATEDIRECTORYFORHWCLO

config IPCRM
	bool "ipcrm"
	default n
	select FEATURE_SUID
	help
	  The ipcrm utility allows the removal of System V interprocess
	  communication (IPC) objects and the associated data structures
	  from the system.

config IPCS
	bool "ipcs"
	default n
	select FEATURE_SUID
	help
	  The ipcs utility is used to provide information on the currently
	  allocated System V interprocess (IPC) objects in the system.

config LOSETUP
	bool "losetup"
	default n
	help
	  losetup is used to associate or detach a loop device with a regular
	  file or block device, and to query the status of a loop device. This
	  version does not currently support enabling data encryption.

config MDEV
	bool "mdev"
	default n
	help
	  mdev is a mini-udev implementation for dynamically creating device
	  nodes in the /dev directory.

	  For more information, please see docs/mdev.txt

config FEATURE_MDEV_CONF
	bool "Support /etc/mdev.conf"
	default n
	depends on MDEV
	help
	  Add support for the mdev config file to control ownership and
	  permissions of the device nodes.

	  For more information, please see docs/mdev.txt

config FEATURE_MDEV_RENAME
	bool "Support subdirs/symlinks"
	default n
	depends on FEATURE_MDEV_CONF
	help
	  Add support for renaming devices and creating symlinks.

	  For more information, please see docs/mdev.txt

config FEATURE_MDEV_RENAME_REGEXP
	bool "Support regular expressions substitutions when renaming device"
	default n
	depends on FEATURE_MDEV_RENAME
	help
	  Add support for regular expressions substitutions when renaming
	  device.

config FEATURE_MDEV_EXEC
	bool "Support command execution at device addition/removal"
	default n
	depends on FEATURE_MDEV_CONF
	help
	  This adds support for an optional field to /etc/mdev.conf for
	  executing commands when devices are created/removed.

	  For more information, please see docs/mdev.txt

config FEATURE_MDEV_LOAD_FIRMWARE
	bool "Support loading of firmwares"
	default n
	depends on MDEV
	help
	  Some devices need to load firmware before they can be usable.

	  These devices will request userspace look up the files in
	  /lib/firmware/ and if it exists, send it to the kernel for
	  loading into the hardware.

config MKSWAP
	bool "mkswap"
	default n
	help
	  The mkswap utility is used to configure a file or disk partition as
	  Linux swap space. This allows Linux to use the entire file or
	  partition as if it were additional RAM, which can greatly increase
	  the capability of low-memory machines. This additional memory is
	  much slower than real RAM, but can be very helpful at preventing your
	  applications being killed by the Linux out of memory (OOM) killer.
	  Once you have created swap space using 'mkswap' you need to enable
	  the swap space using the 'swapon' utility.

config FEATURE_MKSWAP_UUID
	bool "UUID support"
	default n
	depends on MKSWAP
	help
	  Generate swap spaces with universally unique identifiers.

config MORE
	bool "more"
	default n
	help
	  more is a simple utility which allows you to read text one screen
	  sized page at a time. If you want to read text that is larger than
	  the screen, and you are using anything faster than a 300 baud modem,
	  you will probably find this utility very helpful. If you don't have
	  any need to reading text files, you can leave this disabled.

config FEATURE_USE_TERMIOS
	bool "Use termios to manipulate the screen"
	default y
	depends on MORE || TOP
	help
	  This option allows utilities such as 'more' and 'top' to determine
	  the size of the screen. If you leave this disabled, your utilities
	  that display things on the screen will be especially primitive and
	  will be unable to determine the current screen size, and will be
	  unable to move the cursor.

config VOLUMEID
	bool #No description makes it a hidden option
	default n

config FEATURE_VOLUMEID_EXT
	bool "Ext filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_BTRFS
	bool "btrfs filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_REISERFS
	bool "Reiser filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_FAT
	bool "fat filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_HFS
	bool "hfs filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_JFS
	bool "jfs filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

### config FEATURE_VOLUMEID_UFS
###	bool "ufs filesystem"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

config FEATURE_VOLUMEID_XFS
	bool "xfs filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_NTFS
	bool "ntfs filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_ISO9660
	bool "iso9660 filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_UDF
	bool "udf filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_LUKS
	bool "luks filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_LINUXSWAP
	bool "linux swap filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

### config FEATURE_VOLUMEID_LVM
###	bool "lvm"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

config FEATURE_VOLUMEID_CRAMFS
	bool "cramfs filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

### config FEATURE_VOLUMEID_HPFS
###	bool "hpfs filesystem"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

config FEATURE_VOLUMEID_ROMFS
	bool "romfs filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_SYSV
	bool "sysv filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

### config FEATURE_VOLUMEID_MINIX
###	bool "minix filesystem"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### These only detect partition tables - not used (yet?)
### config FEATURE_VOLUMEID_MAC
###	bool "mac filesystem"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO
###
### config FEATURE_VOLUMEID_MSDOS
###	bool "msdos filesystem"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

config FEATURE_VOLUMEID_OCFS2
	bool "ocfs2 filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

### config FEATURE_VOLUMEID_HIGHPOINTRAID
###	bool "highpoint raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### config FEATURE_VOLUMEID_ISWRAID
###	bool "intel raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### config FEATURE_VOLUMEID_LSIRAID
###	bool "lsi raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### config FEATURE_VOLUMEID_VIARAID
###	bool "via raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### config FEATURE_VOLUMEID_SILICONRAID
###	bool "silicon raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### config FEATURE_VOLUMEID_NVIDIARAID
###	bool "nvidia raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### config FEATURE_VOLUMEID_PROMISERAID
###	bool "promise raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

config FEATURE_VOLUMEID_LINUXRAID
	bool "linuxraid"
	default n
	depends on VOLUMEID
	help
	  TODO

config MOUNT
	bool "mount"
	default n
	help
	  All files and filesystems in Unix are arranged into one big directory
	  tree. The 'mount' utility is used to graft a filesystem onto a
	  particular part of the tree. A filesystem can either live on a block
	  device, or it can be accessible over the network, as is the case with
	  NFS filesystems. Most people using BusyBox will also want to enable
	  the 'mount' utility.

config FEATURE_MOUNT_FAKE
	bool "Support option -f"
	default n
	depends on MOUNT
	help
	  Enable support for faking a file system mount.

config FEATURE_MOUNT_VERBOSE
	bool "Support option -v"
	default n
	depends on MOUNT
	help
	  Enable multi-level -v[vv...] verbose messages. Useful if you
	  debug mount problems and want to see what is exactly passed
	  to the kernel.

config FEATURE_MOUNT_HELPERS
	bool "Support mount helpers"
	default n
	depends on MOUNT
	help
	  Enable mounting of virtual file systems via external helpers.
	  E.g. "mount obexfs#-b00.11.22.33.44.55 /mnt" will in effect call
	  "obexfs -b00.11.22.33.44.55 /mnt"
	  Also "mount -t sometype [-o opts] fs /mnt" will try
	  "sometype [-o opts] fs /mnt" if simple mount syscall fails.
	  The idea is to use such virtual filesystems in /etc/fstab.

config FEATURE_MOUNT_LABEL
	bool "Support specifiying devices by label or UUID"
	default n
	depends on MOUNT
	select VOLUMEID
	help
	  This allows for specifying a device by label or uuid, rather than by
	  name. This feature utilizes the same functionality as blkid/findfs.
	  This also enables label or uuid support for swapon.

config FEATURE_MOUNT_NFS
	bool "Support mounting NFS file systems"
	default n
	depends on MOUNT
	select FEATURE_HAVE_RPC
	select FEATURE_SYSLOG
	help
	  Enable mounting of NFS file systems.

config FEATURE_MOUNT_CIFS
	bool "Support mounting CIFS/SMB file systems"
	default n
	depends on MOUNT
	help
	  Enable support for samba mounts.

config FEATURE_MOUNT_FLAGS
	depends on MOUNT
	bool "Support lots of -o flags in mount"
	default y
	help
	  Without this, mount only supports ro/rw/remount. With this, it
	  supports nosuid, suid, dev, nodev, exec, noexec, sync, async, atime,
	  noatime, diratime, nodiratime, loud, bind, move, shared, slave,
	  private, unbindable, rshared, rslave, rprivate, and runbindable.

config FEATURE_MOUNT_FSTAB
	depends on MOUNT
	bool "Support /etc/fstab and -a"
	default y
	help
	  Support mount all and looking for files in /etc/fstab.

config PIVOT_ROOT
	bool "pivot_root"
	default n
	help
	  The pivot_root utility swaps the mount points for the root filesystem
	  with some other mounted filesystem. This allows you to do all sorts
	  of wild and crazy things with your Linux system and is far more
	  powerful than 'chroot'.

	  Note: This is for initrd in linux 2.4. Under initramfs (introduced
	  in linux 2.6) use switch_root instead.

config RDATE
	bool "rdate"
	default n
	help
	  The rdate utility allows you to synchronize the date and time of your
	  system clock with the date and time of a remote networked system using
	  the RFC868 protocol, which is built into the inetd daemon on most
	  systems.

config RDEV
       bool "rdev"
       default n
       help
	  Print the device node associated with the filesystem mounted at '/'.

config READPROFILE
	bool "readprofile"
	default n
	help
	  This allows you to parse /proc/profile for basic profiling.

config RTCWAKE
	bool "rtcwake"
	default n
	help
	  Enter a system sleep state until specified wakeup time.

config SCRIPT
	bool "script"
	default n
	help
	  The script makes typescript of terminal session.

config SCRIPTREPLAY
	bool "scriptreplay"
	default n
	help
	  This program replays a typescript, using timing information
	  given by script -t.

config SETARCH
	bool "setarch"
	default n
	help
	  The linux32 utility is used to create a 32bit environment for the
	  specified program (usually a shell). It only makes sense to have
	  this util on a system that supports both 64bit and 32bit userland
	  (like amd64/x86, ppc64/ppc, sparc64/sparc, etc...).

config SWAPONOFF
	bool "swaponoff"
	default n
	help
	  This option enables both the 'swapon' and the 'swapoff' utilities.
	  Once you have created some swap space using 'mkswap', you also need
	  to enable your swap space with the 'swapon' utility. The 'swapoff'
	  utility is used, typically at system shutdown, to disable any swap
	  space. If you are not using any swap space, you can leave this
	  option disabled.

config FEATURE_SWAPON_PRI
	bool "Support priority option -p"
	default n
	depends on SWAPONOFF
	help
	  Enable support for setting swap device priority in swapon.

config SWITCH_ROOT
	bool "switch_root"
	default n
	help
	  The switch_root utility is used from initramfs to select a new
	  root device. Under initramfs, you have to use this instead of
	  pivot_root. (Stop reading here if you don't care why.)

	  Booting with initramfs extracts a gzipped cpio archive into rootfs
	  (which is a variant of ramfs/tmpfs). Because rootfs can't be moved
	  or unmounted*, pivot_root will not work from initramfs. Instead,
	  switch_root deletes everything out of rootfs (including itself),
	  does a mount --move that overmounts rootfs with the new root, and
	  then execs the specified init program.

	  * Because the Linux kernel uses rootfs internally as the starting
	  and ending point for searching through the kernel's doubly linked
	  list of active mount points. That's why.

config UMOUNT
	bool "umount"
	default n
	help
	  When you want to remove a mounted filesystem from its current mount
	  point, for example when you are shutting down the system, the
	  'umount' utility is the tool to use. If you enabled the 'mount'
	  utility, you almost certainly also want to enable 'umount'.

config FEATURE_UMOUNT_ALL
	bool "Support option -a"
	default n
	depends on UMOUNT
	help
	  Support -a option to unmount all currently mounted filesystems.

comment "Common options for mount/umount"
	depends on MOUNT || UMOUNT

config FEATURE_MOUNT_LOOP
	bool "Support loopback mounts"
	default n
	depends on MOUNT || UMOUNT
	help
	  Enabling this feature allows automatic mounting of files (containing
	  filesystem images) via the linux kernel's loopback devices.
	  The mount command will detect you are trying to mount a file instead
	  of a block device, and transparently associate the file with a
	  loopback device. The umount command will also free that loopback
	  device.

	  You can still use the 'losetup' utility (to manually associate files
	  with loop devices) if you need to do something advanced, such as
	  specify an offset or cryptographic options to the loopback device.
	  (If you don't want umount to free the loop device, use "umount -D".)

config FEATURE_MTAB_SUPPORT
	bool "Support for the old /etc/mtab file"
	default n
	depends on MOUNT || UMOUNT
	select FEATURE_MOUNT_FAKE
	help
	  Historically, Unix systems kept track of the currently mounted
	  partitions in the file "/etc/mtab". These days, the kernel exports
	  the list of currently mounted partitions in "/proc/mounts", rendering
	  the old mtab file obsolete. (In modern systems, /etc/mtab should be
	  a symlink to /proc/mounts.)

	  The only reason to have mount maintain an /etc/mtab file itself is if
	  your stripped-down embedded system does not have a /proc directory.
	  If you must use this, keep in mind it's inherently brittle (for
	  example a mount under chroot won't update it), can't handle modern
	  features like separate per-process filesystem namespaces, requires
	  that your /etc directory be writeable, tends to get easily confused
	  by --bind or --move mounts, won't update if you rename a directory
	  that contains a mount point, and so on. (In brief: avoid.)

	  About the only reason to use this is if you've removed /proc from
	  your kernel.

endmenu
