/etc/fstab
格式简介
<file system> <dir> <type> <options> <dump> <pass>
UUID=2cf9a36f-eafe-4f5a-ada1-cf3994dcd11f / ext4defaults,barrier=0 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
none /proc/xen xenfs defaults 0 0
/dev/xvdb1 /mnt ext3 defaults 0 0
一、<file system>
常见的类型
1
、磁盘分区
# ll /dev/xvdb1
[font=&]brw-rw----
1 root disk 202, 17 Aug 24 18:39 /dev/xvdb1
这一列是块特殊文件(
b
开头)面向块的设备,而是是我们通常理解的文件系统
2
、
UUID
UUID=2cf9a36f-eafe-4f5a-ada1-cf3994dcd11f / ext4defaults,barrier=0 1 1
UUID(Universally Unique Identifier)
全局唯一标识符
,
是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会
(OSF)
制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片
ID
码和许多可能的数字。由以下几部分的组合:当前日期和时间
(UUID
的第一个部分与时间有关,如果你在生成一个
UUID
之后,过几秒又生成一个
UUID
,则第一个部分不同,其余相同
)
,时钟序列,全局唯一的
IEEE
机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),
UUID
的唯一缺陷在于生成的结果串会比较长。
如何查看本机的
UID
# cat /boot/grub/menu.lst |grep UUID|awk '{print$4}'|sort -u
root=UUID=2cf9a36f-eafe-4f5a-ada1-cf3994dcd11f
3
、
tmpfs
tmpfs
是一种虚拟内存文件系统,而不是块设备。是基于内存的文件系统,创建时不需要使用
mkfs
等初始化。它最大的特点就是它的存储空间在
VM(virtual memory)
,
VM
是由
linux
内核里面的
vm
子系统管理的。
linux
下面
VM
的大小由
RM(Real Memory)
和
swap
组成
,RM
的大小就是物理内存的大小,而
Swap
的大小是由自己决定的。
4
、
devpts
也是内核虚拟文件,和
proc
类似,是
Linux
提供给管理员通过文件系统和内核进行沟通(读
\
写)的一种渠道。
pts
是远程虚拟终端。
devpts
即远程虚拟终端文件设备。通过
/dev/pts
可以了解目前远程虚拟终端的基本情况。因为这个设备文件并不代表真正的硬件,只是存在于内存中的虚拟设备。通过访问这样的文件,可以达到和内核即使通信的目的(读
/
写)。
5
、
sysfs(
这个本身是一个非常深奥的概念,在这里只能简单的介绍)
Sysfs
是
Linux 2.6
所提供的一种虚拟文件系统。这个文件系统不仅可以把设备(
devices
)和驱动程序
(drivers)
的信息从内核输出到
用户空间,也可以用来对设备和驱动程序做设置。
sysfs
的目的是把一些原本在
procfs
中的,关于设备的部份,独立出来,以
‘
设备层次结构架构
’
(
device tree
)的形式呈现。这个文件系统由
Patrick Mochel
所写,稍后
Maneesh Soni
撰写
"sysfs backing store path"
,以降低在大型系统中对存储器的需求量。
6
、
proc
/proc
是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
二、<dir>
这个没什么好陈述的就是将其加入至哪个目录位置,如
/home
或
/,
这其实就是在安装时提示的挂入点,这个挂载是受后续的
type
限制的,所以不能为所欲为的,比如:
type
是
proc
你就只能挂载到
/proc
目录
三、<type>
这列是文件系统类型
之前列举的
<file system>
第
3-6
的文件类型是需要严格遵守的,
UUID
和磁盘分区的
type
是自定义的,常见的
Linux
的文件系统类型是
ext2
,
ext3
,
ext4
,
xfs
,
fs, smbfs, iso9660, vfat, ntfs, swap
和
auto
等,
'auto'
不是一个文件系统,而是让
mount
命令自动判断文件类型,特别对于可移动设备,软盘,
DVD
驱动器,这样做是很有必要的,因为可能每次挂载的文件类型不一致。文件系统是磁盘分区格式化后得到的
常见的
mkfs
命令比如:
mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.ext4dev mkfs.msdos mkfs.vfat
四、<options> 可以通过“
man mount
“
看到完整版
这部分是最有用的设置,也是最容易出问题的分区,大家千万不要脑洞打开随便写,写完了重启服务器之后就嗝屁了
,
它能使你所挂载的设备在开机时自动加载、使中文显示不出现乱码、限制对挂载分区读写权限。它是与
mount
命令的用法相关的,要想得到一个完整的列表,参考
mount manpage.
当前的挂载情况可以通过如下命令查看
# cat /proc/mounts
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,relatime,size=497792k,nr_inodes=124448,mode=7550 0
devpts /dev/pts devptsrw,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,relatime 0 0
/dev/xvda1 / ext4 rw,relatime,nobarrier,data=ordered 0 0
none /proc/xen xenfs rw,relatime 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
/dev/mapper/vgbo-lvbo /mnt ext4 rw,relatime,data=ordered0 0
常用的设置如下(
defaults
使用默认设置。等于
rw,suid,dev,exec,auto,nouser,async
)
noatime
关闭
atime
特性,提高性能,这是一个很老的特性,放心关闭,还能减少
loadcycle
defaults
使用默认设置。等于
rw,suid,dev,exec,auto,nouser,async
,具体含义看下面的解释。
自动与手动挂载
:
auto
在启动或在终端中输入
mount -a
时自动挂载
noauto
设备(分区)只能手动挂载
读写权限
:
ro
挂载为只读权限
rw
挂载为读写权限
可执行
:
exec
是一个默认设置项,它使在那个分区中的可执行的二进制文件能够执行
noexec
二进制文件不允许执行。千万不要在你的
root
分区中用这个选项!!!
I/O
同步
:
sync
所有的
I/O
将以同步方式进行
async
所有的
I/O
将以非同步方式进行
户挂载权限
:
user
允许任何用户挂载设备。
Impliesnoexec,nosuid,nodev unless overridden.
nouser
只允许
root
用户挂载。这是默认设置。
ext2
和
ext3
的设置下如下(官方介绍)
ext2
这是最传统的
Linux
标准文件系统。
大多数选项的默认值都由文件系统的超级块
(superblock)
决定,并可以使用
tune2fs(8)
工具调整。
acl|noacl
是否支持
POSIX Access Control Lists(
需要内核开启
CONFIG_EXT2_FS_POSIX_ACL)
bsddf|minixdf
设置系统调用
statfs
的行为。
minixdf
表示在
"f_blocks"
字段返回文件系统的总块数,
bsddf(
默认值
)
则表示要减去被
ext2
文件系统所用而无法再存储文件的块数。
因此会出现如下的差异:
% mount/k -o minixdf; df /k; umount /k
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/sda6 2630655 86954 2412169 3% /k
% mount/k -o bsddf; df /k; umount /k
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/sda6 2543714 13 2412169 0% /k
debug
在每次
(re)mount
的时候输出调试信息。
errors={continue|remount-ro|panic}
定义遇到错误时的行为:
continue
表示忽略错误,只将文件系统标记为不正确的,然后继续;
remount-ro
重新只读挂载它;
panic
则挂起系统。
grpid|nogrpid
定义新创建的文件应该获得怎样的
GID
。默认值是
"nogrpid"
。
grpid
表示使用其父目录的
GID
;
nogrpid
的含义如下:
(1)
如果新建文件的父目录没有
setgid
位,那么使用创建此文件的进程的
GID
。
(2)
如果新建文件的父目录带有
setgid
位,那么使用其父目录的
GID
;
(3)
并且如果新建的是目录时,还要同样设置
setgid
位。
nouid32
禁用
32-bit UID/GID
以保持与旧版内核互操作
oldalloc|orlov
oldalloc
表示使用旧的块分配算法,
orlov(
默认
)
表示使用新的更快速的
Orlov
块分配算法。
resgid=n
resuid=n
ext2
会保留一定比例的可用空间
(
默认
5%
,参见
mke2fs(8)
和
tune2fs(8))
。
这些选项决定了谁
(
拥有指定
UID
或者属于指定
GID
组的用户
)
可以使用这些保留的空间。
sb=n
使用第
n
块而不是第一块作为超级块。在文件系统被损坏时,这样很有用。
以前,超块在每
8192
个块处都会复制一个:
1, 8193, 16385 ...
如果文件系统很大,将被复制很多次。
后来
mke2fs
便默认使用
-s(
稀疏超块
)
选项,可以减少超块备份的数量。
这样做意味着使用较新的
mke2fs
创建的
ext2
文件系统无法在
Linux-2.0.*
中以读写方式挂载。
这里块编号的单位是
1k
。因此,如果想使用以
4k
为单位的文件系统中的第
32768
块,应当用
"sb=131072"
。
user_xattr|nouser_xattr
是否支持
"user."
扩展属性
(
需要内核开启
CONFIG_EXT2_FS_XATTR)
xip
如果可能尽量使用就地执行
(execute in place)
特性
ext3
ext3
是
ext2
的日志加强版,除了上述
ext2
选项外,它还支持以下额外的选项
journal=update
更新
ext3
文件系统的日志为当前的格式。
journal=inum
如果一个日志已存在,这个选项将被忽略。否则,将用指定编号的
inode
保存日志文件,
ext3
将创建一个新日志,覆盖
inode
编号为
inum
的文件的原有内容。
journal_dev=devnum/journal_path=path
当外部日志设备的主
/
次设备号变化的时候,这个选项可以让用户重新指定日志的存储位置。
这个位置既可以是
"XXxx"
十六进制形式表示的设备,也可以是
path
指定的设备节点文件。
norecovery/noload
在挂载时不读取
ext3
文件系统的日志。用于挂载已经损坏的文件系统。
但是跳过文件系统日志重放,可能会导致各种错误。
data={journal|ordered|writeback}
指定文件数据的日志模式。元数据
(metadata)
总是被记入日志。
要在根文件系统上指定日志模式,那么就必须使用例如
"rootflags=data=journal"
这样的内核引导参数
journal
在写入文件系统之前,所有数据都首先被提交到日志中。这是最安全、性能最低的模式。
ordered
这是默认的模式,所有数据在它的元数据被提交给日志之前,被强制直接写入文件系统。
writeback
写入顺序不定,数据可能在元数据已被提交给日志之后写入文件系统。这是效率最高的方式。
它保证了文件系统内部的一致性,但是在崩溃和恢复后文件内可能出现旧数据。
data_err={ignore|abort}
在
ordered
日志模式下,遇到文件内容的数据出错时如何处理。
默认值
ignore
忽略错误,但是打印出错误消息,而
abort
则直接退出。
barrier=0 / barrier=1
开启
/
关闭
barrier
特性。
barrier=0
关闭,
barrier=1
开启。
ext3
默认关闭此特性。
磁盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,
因此文件系统必须在日志数据写入磁盘之后才能写
commit
记录,
若
commit
记录写入在先,而日志有可能损坏,那么就会影响数据完整性。
barrier
强制日志以正确的次序提交到磁盘,这样就可安全的使用磁盘上的内部缓存,代价是降低一些性能。
除非你的硬盘有后备电池之类的装载,请务必开启
barrier
特性,否则意外掉电可能会造成数据错误。
commit=nrsec
每
nrsec
秒向磁盘上刷新一次数据和
metadata
,默认值是
5
秒,
0
表示默认值。
这样,即使忽然掉电,你也最多只损失最近
nrsec
秒的数据。较大的
nrsec
值带来更好的性能。
5
秒或者更小的数字对性能有显著的不利影响,但是能让损失降到最低。
四、<dump>
备份命令:
dump utility
用来决定是否做备份的
. dump
会检查
entry
并用数字来决定是否对这个文件系统进行备份。允许的数字是
0
和
1
。如果是
0
,
dump
就会忽略这个文件系统,如果是
1
,
dump
就会作一个备份。大部分的用户是没有安装
dump
的,所以对他们而言
<dump>
这个
entry
应该写为
0
。
五、<pass>
是否以
fsck
检验扇区:启动的过程中,系统默认会以
fsck
检验我们的
filesystem
是否完整
(clean)
。
不过,某些
filesystem
是不需要检验的,例如内存置换空间
(swap)
,或者是特殊文件系统例如
/proc
与
/sys
等等。
fsck
会检查这个头目下的数字来决定检查文件系统的顺序,允许的数字是
0, 1,
和
2
。
0
是不要检验,
1
表示最早检验
(
一般只有根目录会配置为
1)
,
2
也是要检验,不过
1
会比较早被检验啦!一般来说
,
根目录配置为
1,
其他的要检验的
filesystem
都配置为
2
就好了。
不确定的参数不要乱写,写对了可能不影响服务器启动,写错了就嗝屁了