开发者社区> 问答> 正文

ECS-CentOS  /etc/fstab格式简介

/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 就好了。
不确定的参数不要乱写,写对了可能不影响服务器启动,写错了就嗝屁了



展开
收起
游客nm6mpjb2722bc 2015-08-27 12:38:14 14368 0
1 条回答
写回答
取消 提交回答
  • 解决方案工程师,负责为企业规划上云迁移方案和云上架构设计,在网站建设开发和云计算领域有多年经验,专注于Linux平台的系统维护以及应用部署。致力于以场景化的方式让云计算,用更加通俗易懂的方式让更多人体验云计算,让云端的计算更质朴的落地。
    最好再优化一下帖子。

    整体的阅读体验都好差。。 灰蒙蒙一片
    2015-08-27 12:40:46
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云服务器可观测能力的探索与实践 立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手 立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册 立即下载