目录

Linux文件系统管理

目录

文件系统部分提供了有关文件系统结构和维护,Btrfs技术预览以及Red Hat完全支持的文件系统的信息:: ext3, ext4, GFS2, XFS, NFS, and FS-Cache.

Note

Btrfs is available as a Technology Preview feature in Red Hat Enterprise Linux 7 but has been deprecated since the Red Hat Enterprise Linux 7.4 release. It will be removed in a future major release of Red Hat Enterprise Linux.

XFS is the default file system in Red Hat Enterprise Linux 7 and Red Hat, and Red Hat recommends you to use XFS unless you have a strong reason to use another file system.

文件系统的结构和维护

文件系统结构是操作系统中最基本的组织结构。操作系统与用户,应用程序和安全模型的交互方式几乎总是取决于操作系统如何组织存储设备上的文件。提供通用的文件系统结构,确保用户和程序可以访问和写入文件。

文件系统将文件分解成两个逻辑类别:

  • 共享 vs.非共享
  • 变量 vs. 静态文件

可共享 文件 可以在本地访问,也可以由远程主机访问; 非共享 文件只可本地使用。变量文件, 例如文档, 可随时更改; 如果没有系统管理员的操作; 静态 文件, (例如二进制文件),不会更改。

以这种方式分类文件有助于将每个文件的功能与分配给保存它们的目录的权限相关联。操作系统及其用户如何与文件进行交互,可以确定放置文件的目录,该目录是以只读还是读/写权限挂载,以及每个用户对该文件的访问级别。这个组织的最高层至关重要; 可以限制对底层目录的访问,否则如果从顶层向下访问规则不遵守严格的结构,则可能会出现安全问题。

文件系统层次结构标准(FHS)概述

Linux 使用 文件系统层次结构标准 (FHS) 文件系统结构, 它定义了许多文件类型和目录的名称,位置和权限.

FHS文档是对任何符合FHS的文件系统的权威参考,但该标准留下了许多未定义或可扩展的区域。本节概述了标准未涉及的文件系统部分的标准和描述。

FHS合规性的两个最重要的要素是:

  • 与其他符合FHS的系统兼容
  • 能够将 /usr/ 分区挂载为只读. 这是特别重要的, 因为 /usr/ 包含通用的可执行文件,不应该被用户改变. 此外, 由于 /usr/ 它是以只读方式挂载的, 因此它应该可以从CD-ROM驱动器或另一台机器通过只读NFS安装进行安装.

FHS 组织

这里提到的目录和文件是由FHS文件指定的一小部分。有关最全面的信息,请参阅最新的FHS文档。

Note

可用的目录取决于任何给定系统上安装的内容。下面的列表只是可能发现的一个例子。

收集文件系统信息

df 命令报告系统的磁盘空间使用情况。其输出看起来类似于以下内容:

df Command Output

1
2
3
4
5
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       11675568   6272120   4810348  57% / /dev/sda1
	                 100691      9281     86211  10% /boot
none                     322856         0    322856   0% /dev/shm

默认情况下, df 以1千字节块显示分区大小,以千字节为单位显示已用和可用磁盘空间量。要查看以兆字节和千兆字节为单位的信息,请使用该命令, df -h. -h argument stands for “human-readable” format. 输出df -h 看起来类似于以下内容:

df -h Command Output

1
2
3
4
5
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                        12G  6.0G  4.6G  57% / /dev/sda1
			99M  9.1M   85M  10% /boot 
none 			316M     0  316M   0% /dev/shm

Note

在上面的例子中,挂载的分区 /dev/shm表示系统的虚拟内存文件系统.

du 命令显示目录中文件使用的估计空间量,显示每个子目录的磁盘使用情况。输出中的最后一行 du 显示目录的总磁盘使用情况; 仅以可读的格式查看目录的总磁盘使用情况,请使用 du -hs. 有关更多选项,请参阅 man du.

要以图形格式查看系统的分区和磁盘空间使用情况,请通过单击 System Monitor by clicking on ApplicationsSystem ToolsSystem Monitor 或使用命令来使用 gnome-system-monitor. 选择 File Systems 选项卡查看系统的分区。

/boot/ 目录

The /boot/ 目录包含启动系统所需的静态文件,例如Linux内核。这些文件对系统正常启动是必不可少的。

Warning

不要删除 /boot/ 目录。这样做会导致系统无法启动。

/dev/ 目录

/dev/目录包含代表以下设备类型的设备节点:

  • 连接到系统的设备;
  • 内核提供的虚拟设备。

这些设备节点对系统正常运行至关重要. udevd 守护进程根据需要创建和删除在设备节点/dev/.

/dev/ 目录和子目录中的 设备被定义为任一 character (仅提供输入和输出的串行流,例如鼠标或键盘) 或者 block(可随机访问,如硬盘驱动器或软盘驱动). 如果安装了GNOME或KDE,则在连接(例如使用USB)或插入(如CD或DVD驱动器)时会自动检测到某些存储设备,并显示一个弹出窗口,显示内容。.

** /dev/目录中的文件的示例**

File Description
/dev/hda 主IDE通道上的主设备.
/dev/hdb 主要IDE通道上的从属设备.
/dev/tty0 第一个虚拟控制台.
/dev/tty1 第二个虚拟控制台.
/dev/sda 主SCSI或SATA通道上的第一个设备.
/dev/lp0 第一个并行端口.

有效的块设备可以是两种类型的条目之一:

  • 映射的设备

    卷组中的逻辑卷,例如, /dev/mapper/VolGroup00-LogVol02.

  • 一个静态设备

    例如,传统的存储卷,其中sdb是存储设备名称,X是分区号 。/dev/*sdb**X*, /dev/sdb*X* 也可以是/dev/disk/by-id/*WWID*,或/dev/disk/by-uuid/*UUID*.

/etc/ 目录

/etc/目录保留给机器本地的配置文件。 它不应该包含二进制文件; 任何二进制文件应该移动到 /usr/bin//usr/sbin/.

例如, /etc/skel/ 目录存储 用户文件"框架" , 用于在首次创建用户时填充主目录。 应用程序还将其配置文件存储在此目录中,并在执行时引用它们. The /etc/exports文件控制哪些文件系统导出到远程主机。

/mnt/ 目录

The /mnt/ 目录保留用于临时挂载的文件系统, 如NFS文件系统挂载. 对于所有可移动存储介质, 请使用 /media/ 目录. 自动检测到的可移动媒体将被安装在 /media 目录中。.

重要

/mnt 目录不能被安装程序使用.

/opt/ 目录

/opt/目录通常保留给不属于默认安装的软件和附加软件包. 安装程序包以 /opt/ 创建名称的目录, 例如, /opt/*packagename*/. 在大多数情况下, 这样的包遵循可预测的子目录结构; 大多数存储他们的二进制文件和他们的页面中 /opt/*packagename*/bin/ and 他们的 man 手册在 /opt/*packagename*/man/中.

/proc/ 目录

/proc/ 目录包含从内核中提取信息或向其发送信息的特殊文件. 这些信息的例子包括系统内存,CPU信息和硬件配置.

/srv/ 目录

/srv/ 目录 包含由Linux系统提供的特定于站点的数据, 该目录为用户提供特定服务, 例如 (FTP, WWW, or CVS.)的数据文件的位置 ,只与特定用户有关的数据应该放在 /home/目录中.

/sys/ 目录

/sys/ 目录利用 sysfs 特定于内核的新虚拟文件系统。 随着对内核中热插拔硬件设备的支持的增加, /sys/ 目录包含类似于所持有的信息 /proc/, 但显示特定于热插拔设备的设备信息的分层视图.

/usr/ 目录

/usr/ 目录适用于可以在多台计算机上共享的文件. /usr/目录通常在自己的分区上,并以只读方式挂载. 至少, /usr/应包含以下子目录:

  • /usr/bin

    该目录用于二进制文件.

  • /usr/etc

    该目录用于系统范围的配置文件.

  • /usr/games

    这个目录存储游戏.

  • /usr/include

    该目录用于 C 头文件.

  • /usr/kerberos

    此目录用于与Kerberos相关的二进制文件和文件。

  • /usr/lib

    这个目录用于不被shell脚本或用户直接使用的目标文件和库.从RHEL7开始, /lib/ 目录已经被合并 /usr/lib. 现在还包含在执行的二进制文件所需的库 /usr/bin//usr/sbin/. 这些共享库图像用于引导系统或在根文件系统中执行命令.

  • /usr/libexec

    该目录包含由其他程序调用的小型帮助程序.

  • /usr/sbin

    从RHEL7开始, /sbin 已经转移到 /usr/sbin. 这意味着它包含所有系统管理二进制文件,包括引导,恢复,恢复或修复系统所必需的二进制文件。二进制文件/usr/sbin/ 需要root权限才能使用.

  • /usr/share

    该目录存储不是特定于体系结构的文件.

  • /usr/src

    这个目录存储源代码.

  • /usr/tmp 链接到 /var/tmp

    该目录存储临时文件.

/usr/ 目录 还应该包含一个 /local/ 子目录. 根据 FHS, 系统管理员在本地安装软件时使用此子目录, 并且在系统更新期间应该安全地被覆盖. /usr/local 目录具有类似的结构 /usr/, 并包含以下子目录 :

  • /usr/local/bin
  • /usr/local/etc
  • /usr/local/games
  • /usr/local/include
  • /usr/local/lib
  • /usr/local/libexec
  • /usr/local/sbin
  • /usr/local/share
  • /usr/local/src

红帽企业Linux的使用 /usr/local/与FHS略有不同. FHS指出 /usr/local/ 应该用来存储应该保持安全的系统软件升级的软件. 由于RPM Package Manager 可以安全地执行软件升级,因此不需要通过存储文件来保护/usr/local/的文件

相反, 红帽企业Linux使用 /usr/local/ 本地软件. 例如, 如果 /usr/ 目录 是从远程主机挂载为只读NFS共享的,则仍然可以在 /usr/local/ 目录下安装程序包或程序.

/var/ 目录

由于FHS 要求Linux以只读方式挂载/usr/ , 因此任何编写日志文件或需要的目录 spool/lock/ 目录都应将其写入 /var/ 目录. FHS/var/ 用于可变数据, 包含卷目录和文件,记录数据,瞬态和临时文件.

以下是目录中的一些/var/ 目录:

  • /var/account/
  • /var/arpwatch/
  • /var/cache/
  • /var/crash/
  • /var/db/
  • /var/empty/
  • /var/ftp/
  • /var/gdm/
  • /var/kerberos/
  • /var/lib/
  • /var/local/
  • /var/lock/
  • /var/log/
  • /var/mail linked to /var/spool/mail/
  • /var/mailman/
  • /var/named/
  • /var/nis/
  • /var/opt/
  • /var/preserve/
  • /var/run/
  • /var/spool/
  • /var/tmp/
  • /var/tux/
  • /var/www/
  • /var/yp/

重要

/var/run/media/*user*包含用作可移动介质(如USB存储介质,DVD,CD-ROM和Zip磁盘)的挂载点的子目录 请注意,以前,/media/ 目录用于此。

系统日志文件, 如 messages and lastlog, 进入 /var/log/ 目录. /var/lib/rpm/目录包含 RPM 系统数据库. 锁定文件在 /var/lock/目录, 通常在使用该文件的程序的目录中. /var/spool/ 目录具有存储某些程序的数据文件的子目录。这些子目录包括:

  • /var/spool/at/
  • /var/spool/clientmqueue/
  • /var/spool/cron/
  • /var/spool/cups/
  • /var/spool/exim/
  • /var/spool/lpd/
  • /var/spool/mail/
  • /var/spool/mailman/
  • /var/spool/mqueue/
  • /var/spool/news/
  • /var/spool/postfix/
  • /var/spool/repackage/
  • /var/spool/rwho/
  • /var/spool/samba/
  • /var/spool/squid/
  • /var/spool/squirrelmail/
  • /var/spool/up2date/
  • /var/spool/uucp/
  • /var/spool/uucppublic/
  • /var/spool/vbox/

特殊的红帽企业Linux文件位置

红帽企业Linux稍微扩展了FHS结构以适应特殊文件.

大多数与RPM相关的文件都保存在 /var/lib/rpm/ 目录中. 有关RPM的更多信息,请参阅 man rpm.

/var/cache/yum/ 目录包含 Package Updater, 使用的文件. 包括系统的RPM头信息。这个位置也可以用来临时存储下载的RPMs,同时更新系统。

红帽企业Linux特定的另一个位置是/etc/sysconfig/ 目录. 这个目录存储了各种配置信息。许多在启动时运行的脚本都使用这个目录中的文件.

/proc 虚拟文件系统

与大多数文件系统不同, /proc 它不包含文本或二进制文件,相反,它包含 virtual files; 如此, /proc 通常被称为虚拟文件系统. 这些虚拟文件的大小通常是零字节,即使它们包含大量的信息。

/proc文件系统不用于存储. 其主要目的是为硬件,内存,运行进程和其他系统组件提供一个基于文件的界面。通过查看相应的 /proc file. 可以在许多系统组件上检索实时信息。其中的一些文件 /proc 也可以被用户和应用程序操作来配置内核.

以下 /proc 文件与管理和监视系统存储相关:

  • /proc/devices

    显示当前配置的各种字符和块设备.

  • /proc/filesystems

    列出内核当前支持的所有文件系统类型.

  • /proc/mdstat

    包含系统上多磁盘或RAID配置的最新信息(如果存在).

  • /proc/mounts

    列出系统当前使用的所有挂载.

  • /proc/partitions

    包含分区块分配信息.

Discard Unused Blocks

批量丢弃和联机丢弃操作是挂载文件系统的功能,丢弃文件系统未使用的块。它们对于固态驱动器和精简配置存储都很有用.

  • 批处理丢弃操作 由用户通过 fstrim命令显式地运行. 该命令放弃文件系统中符合用户标准的所有未使用的块.
  • 在线丢弃操作 是在挂载时指定的, 可以将 -o discard选项作为 mount 命令的一部分,也可以使用文件中的 discard 选项在 /etc/fstab 文件中. 他们在没有用户干预的情况下实时运行。在线丢弃操作只丢弃正在使用的空闲块.

Both operation types are supported for use with ext4 file systems as of Red Hat Enterprise Linux 6.2 and later and with XFS file systems since Red Hat Enterprise Linux 6.4. Also, the block device underlying the file system must support physical discard operations. Physical discard operations are supported if the value stored in the /sys/block/*device*/queue/discard_max_bytes file is not zero.

Red Hat recommends batch discard operations unless the system’s workload is such that batch discard is not feasible, or online discard operations are necessary to maintain performance.

XFS 文件系统

XFS是一个高度可扩展的高性能文件系统,最初是在Silicon Graphics,Inc.设计的。XFS是Red Hat Enterprise Linux 7的默认文件系统.

  • 主要特点

    XFS 支持 元数据日志记录, 这有助于更快的崩溃恢复。XFS文件系统也可以在安装和激活时进行碎片整理和放大。另外,红帽企业版Linux 7支持特定于XFS的备份和恢复实用程序。

  • 分配功能

    XFS 具有以下分配方案:

    • Extent-based allocation
    • Stripe-aware allocation policies
    • Delayed allocation
    • Space pre-allocation

    延迟分配和其他性能优化会以与ext4相同的方式影响XFS。也就是说,除非程序 fsync() 后发出调用,否则程序对XFS文件系统的写入不能保证在磁盘上.

其他 XFS 功能

XFS文件系统还支持以下内容:

  • 扩展属性 (xattr)

    这允许系统为每个文件关联几个附加的名称/值对。它是默认启用的.

  • 配额日记

    这样可以避免在崩溃后需要进行冗长的配额一致性检查.

  • 项目/目录配额

    这允许在目录树上进行配额限制.

  • 秒时间戳

    这允许时间戳到秒.

默认atime行为是 relatime

Relatime对于XFS默认是打开的。相比之下,它几乎没有任何开销 noatime 同时仍然保持理智的 atime 值.

创建一个XFS文件系统

创建一个XFS文件系统, 使用 mkfs.xfs /dev/*device* 命令. 一般来说,默认选项是常用的最佳选择.

mkfs.xfs 包含现有文件系统的块设备上使用时, 使用 -f选项强制覆盖该文件系统.

** mkfs.xfs Command Output**

以下是mkfs.xfs命令的输出示例:

1
2
3
4
5
6
7
8
meta-data=/dev/device            isize=256    agcount=4, agsize=3277258 blks
=                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=13109032, imaxpct=25
=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=6400, version=2
=                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

注意

A在创建XFS文件系统之后,其大小不能减小. 但是,使用 xfs_growfs命令仍然可以扩大.

对于条带块设备(例如RAID5阵列),可以在创建文件系统时指定条带几何。使用适当的条带几何可以极大地提高XFS文件系统的性能.

在LVM或MD卷上创建文件系统时, mkfs.xfs 选择最佳几何体。在某些将几何信息导出到操作系统的硬件RAID上,这也可能是正确的.

如果设备导出条带几何信息, mkfs (for ext3, ext4, and xfs) 将自动使用此几何。如果条纹几何体没有被mkfs检测到,并且即使存储器实际上具有条纹几何体,也可以使用以下选项在mkfs时间手动指定它:

  • su=value

    指定条带单位或RAID块大小. The *value* m必须以字节为单位指定, 具有可选的 k, m, 或 g 后缀.

  • sw=value

    指定RAID设备中的数据磁盘数量,或条带中的条带单元数量.

The following example specifies a chunk size of 64k on a RAID device containing 4 stripe units:

1
# mkfs.xfs -d su=64k,sw=4 /dev/device

挂载 XFS 文件系统

以下示例在包含4个条带单元的RAID设备上指定64k的块大小:

1
# mount /dev/device /mount/point

红帽企业版Linux 7的默认值是inode64.

注意

与mke2fs不同,mkfs.xfs不使用配置文件; 它们都在命令行中指定.

Write Barriers

默认情况下, XFS 使用 write barriers 来确保文件系统完整性,即使启用了写入缓存的设备断电时也是如此。对于没有写入缓存的设备,或使用电池支持写入缓存的设备,请使用以下 nobarrier 选项禁用Write Barriers:

1
# mount -o nobarrier /dev/device /mount/point

Direct Access 技术预览

从红帽企业版Linux 7.3开始, Direct Access (DAX) 作为ext4和XFS文件系统上的技术预览版提供了应用程序将持久内存直接映射到其地址空间的方法。要使用DAX,系统必须具有某种形式的持久性内存,通常以一个或多个非易失性双列直插式内存模块(NVDIMM)的形式提供,并且必须在NVDIMM上创建支持DAX的文件系统( S)。此外,文件系统必须使用 dax 挂载选项进行安装。然后, mmap 挂载在dax上的文件系统上的一个文件将导致存储直接映射到应用程序的地址空间.

XFS配额管理

XFS配额子系统管理磁盘空间 (blocks) 和文件 (inode) 使用的限制. XFS配额控制或报告这些项目在用户,组或目录或项目级别上的使用情况。另请注意,尽管用户,组和项目配额是独立启用的,但组和项目配额是互斥的.

在按目录或按项目进行管理时,XFS管理与特定项目关联的目录层次结构的磁盘使用情况。在这样做的过程中,XFS认可项目之间的跨组织“组”边界。这提供了比为用户或组管理配额时可用的控制级别更广的级别.

XFS配额在安装时启用,具有特定的挂载选项。每个安装选项也可以指定为 noenforce; 这将允许使用报告而不强制任何限制。有效的配额挂载选项是:

  • uquota/uqnoenforce - 用户配额
  • gquota/gqnoenforce - 组配额
  • pquota/pqnoenforce - 项目配额

一旦启用配额 xfs_quota 工具可用于设置限制并报告磁盘使用情况。默认情况下, xfs_quota 以交互方式运行,并处于基本模式。基本模式子命令只是报告使用情况,并可供所有用户使用。基本的 xfs_quota 子命令包括:

  • quota username/userID

    显示给定 *username*或数字的用法和限制 *userID*

  • df

    显示块和inode的空闲和使用计数.

相比之下, xfs_quota 也有一个专家模式。该模式的子命令允许实际配置限制,并且仅对具有提升特权的用户可用。要交互使用专家模式子命令,请运行 xfs_quota -x. 专家模式子命令包括:

  • report /path

    报告特定文件系统的配额信息.

  • limit

    修改配额限制.

有关基本或专家模式的子命令的完整列表,请使用子命令help.

所有子命令也可以使用该 -c选项直接从命令行运行,也可以使用 -x 专家子命令.

显示样本配额报告

例如,要显示 /home (on /dev/blockdevice), 的示例配额报告,请使用该命令 xfs_quota -x -c 'report -h' /home. 这将显示类似于以下内容的输出:

1
2
3
4
5
6
7
User quota on /home (/dev/blockdevice)
Blocks              
User ID      Used   Soft   Hard Warn/Grace   
---------- --------------------------------- 
root            0      0      0  00 [------]
testuser   103.4G      0      0  00 [------]
...

要为用户 john (其主目录是 /home/john), 分别设置500和700的软硬节点数限制,请使用以下命令:

1
# xfs_quota -x -c 'limit isoft=500 ihard=700 john' /home/

在这种情况下,传递 mount_point 这是挂载的xfs文件系统.

默认情况下,limit 子命令将目标识别为用户。在配置组的限制时,使用 -g 如上例)。同样, use -p 用于项目.

软和硬块限制也可以使用 bsoftbhard代替isoftihard.

设置一个软和硬块限制

例如,要分别为 accounting/target/path文 件系统上设置1000m和1200m的软硬件块限制:

1
# xfs_quota -x -c 'limit -g bsoft=1000m bhard=1200m accounting' /target/path

注意

命令 bsoft and bhard 字节计数.

重要

虽然在设置配额时,实时块 (rtbhard/rtbsoft) 被描述man xfs_quota 为有效单位, 但此版本中未启用实时子卷。因此, rtbhard and rtbsoft 选项是不适用的.

设置项目限制

在为项目控制的目录配置限制之前,先将它们添加到/etc/projects。可以添加项目名称/etc/projectid以将项目ID映射到项目名称。项目添加完成后/etc/projects,使用以下命令初始化项目目录:

1
# xfs_quota -x -c 'project -s projectname' project_path

初始化目录的项目的配额然后可以配置,:

1
# xfs_quota -x -c 'limit -p bsoft=1000m bhard=1200m projectname'

通用配额配置工具(quota,repquota,和edquota例如)也可以用于操纵XFS配额。但是,这些工具不能用于XFS项目配额。

重要

红帽推荐使用xfs_quota 和其他所有可用的工具。

有关设置XFS配额的更多信息, 请参阅 man xfs_quota, man projid(5),和man projects(5).

增加XFS文件系统的大小

使用以下 xfs_growfs 命令挂载XFS文件系统:

1
# xfs_growfs /mount/point -D size

-D *size*选项使文件系统增长到指定的*size* (以文件系统块表示). 如果没有选项 -D *size* 选项, xfs_growfs 则会将文件系统增大到设备支持的最大大小.

在生成XFS文件系统之前 -D *size*, 请确保基础块设备具有适当的大小以便稍后保存文件系统. 为受影响的块设备使用适当的调整大小的方法.

注意

虽然XFS文件系统可以在挂载时进行扩容,但是它们的大小根本无法缩小.

修复XFS文件系统

要修复XFS文件系统,请使用 xfs_repair:

1
# xfs_repair /dev/device

xfs_repair 用程序具有高度的可扩展性,能够有效地修复具有多个inode的超大型文件系统。与其他Linux文件系统不同, xfs_repair 即使在XFS文件系统未完全卸载的情况下,也不会在启动时运行, 在不清洁的情况下,xfs_repair 只需在安装时重播日志,确保一致的文件系统。

警告

xfs_repair实用程序无法修复具有脏日志的XFS文件系统。要清除日志,请挂载和卸载XFS文件系统。如果日志损坏且无法重播,请使用-L选项(“强制日志清零”)清除日志,即。请注意,这可能会导致进一步的损坏或数据丢失。, xfs_repair -L */dev/device*. 这可能会导致进一步的损坏或数据丢失.

暂停XFS文件系统

要暂停或恢复对文件系统的写入活动, 请使用 xfs_freeze. 暂停写入活动允许基于硬件的设备快照以一致的状态捕获文件系统.

注意

xfs_freeze实用程序由 xfsprogs 程序包提供, 仅在x86_64上可用.

要暂停(即冻结)XFS文件系统,请使用:

1
# xfs_freeze -f /mount/point

要解冻XFS文件系统,请使用:

1
# xfs_freeze -u /mount/point

在创建LVM快照时,不需要先使用 xfs_freeze 挂起文件系统。相反,LVM管理工具将在拍摄快照之前自动挂起XFS文件系统.

XFS文件系统的备份和恢复

XFS文件系统备份和恢复涉及两个实用程序: xfsdumpxfsrestore. 要备份或转储XFS文件系统,请使用 xfsdump 实用程序. 红帽企业版Linux 7支持备份到磁带驱动器或常规文件映像,并允许将多个转储写入同一个磁带. xfsdump 实用程序实用程序还允许转储跨越多个磁带,但只能将一个转储写入常规文件。此外.xfsdump 支持增量备份,并且可以使用大小,子树或inode标志从备份中排除文件以对其进行过滤.

为了支持增量备份, xfsdump 使用 dump levels 来确定特定转储相对于的基本转储. -l 选项指定转储级别 (0-9). 要执行完整备份,请在文件系统上执行 level 0 转储 (*/path/to/filesystem*), 例如:

1
# xfsdump -l 0 -f /dev/device /path/to/filesystem

注意

-f 选项指定备份的目标.例如, /dev/st0目标通常用于磁带驱动器. 一个 xfsdump 目标可以是磁带机, 常规文件,或远程磁带设备.

相比之下,增量备份只会转储自上次第0级转储以来发生更改的文件。1 转储是完全转储后的第一个增量转储; 下一次增量转储将是级别2,依此类推,最大值为9级。因此,要执行到磁带驱动器的1级转储:

1
# xfsdump -l 1 -f /dev/st0 /path/to/filesystem

相反,该xfsrestore实用程序还原由生成的转储文件系统xfsdump。该xfsrestore实用程序有两种模式:默认简单模式和累积模式。特定转储由会话标识会话标签标识。因此,恢复转储需要相应的会话ID或标签。要显示所有转储(包括完整和增量)的会话ID和标签,请使用以下-I选项:

1
# xfsrestore -I

这将提供类似于以下的输出:

会话ID和所有转储的标签

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
file system 0:
fs id:		45e9af35-efd2-4244-87bc-4762e476cbab
session 0:
mount point:	bear-05:/mnt/test
device:		bear-05:/dev/sdb2
time:		Fri Feb 26 16:55:21 2010
session label:	"my_dump_session_label"
session id:	b74a3586-e52e-4a4a-8775-c3334fa8ea2c
level:		0
resumed:	NO
subtree:	NO
streams:	1
stream 0:
pathname:	/mnt/test2/backup
start:		ino 0 offset 0
end:		ino 1 offset 0
interrupted:	NO
media files:	1
media file 0:
mfile index:	0
mfile type:	data
mfile size:	21016
mfile start:	ino 0 offset 0
mfile end:	ino 1 offset 0
media label:	"my_dump_media_label"
media id:	4a518062-2a8f-4f17-81fd-bb1eb2e3cb4f
xfsrestore: Restore Status: SUCCESS

简单模式 xfsrestore

simple mode 允许用户从恢复整个文件系统 level 0 转储. 在识别 level 0 转储会话 ID (*session-ID*), 之后完全恢复为 */path/to/destination* 使用:

1
# xfsrestore -f /dev/st0 -S session-ID /path/to/destination

注意

-f选项指定转储的位置,而-Sor -L选项指定要恢复的特定转储。该-S选项用于指定会话标识,而该-L选项用于会话标签。该-I选项显示每个转储的会话标签和ID

累计模式 xfsrestore

The 累计 模式 xfsrestore 允许文件系统恢复来自一个特定的增量备份,例如 level 1 to level 9. 要从增量备份还原文件系统,只需添加 -r 选项:

1
# xfsrestore -f /dev/st0 -S session-ID -r /path/to/destination

交互式操作

xfsrestore 实用程序还允许从转储中提取,添加或删除特定文件. 使用xfsrestore 交互使用, 使用-i 选项, 如下所示:

1
# xfsrestore -f /dev/st0 -i /destination/directory

xfsrestore 完成读取指定的设备 后,交互式对话将开始。在这次对话可用的命令包括 cd, ls, add, delete, and extract; 要获得完整的命令列表,请使用 help.

从磁带恢复备份时的信息性消息

从具有多个文件系统备份的磁带恢复备份时, xfsrestore 实用程序可能会发出消息。这些消息通知您 xfsrestore 在按顺序检查磁带上的每个备份时是否找到请求的备份的匹配。例如:

1
2
3
4
5
6
xfsrestore: preparing drive
xfsrestore: examining media file 0
xfsrestore: inventory session uuid (8590224e-3c93-469c-a311-fc8f23029b2a) does not match the media header's session uuid (7eda9f86-f1e9-4dfd-b1d4-c50467912408)
xfsrestore: examining media file 1
xfsrestore: inventory session uuid (8590224e-3c93-469c-a311-fc8f23029b2a) does not match the media header's session uuid (7eda9f86-f1e9-4dfd-b1d4-c50467912408)
[...]

信息性消息一直出现,直到找到匹配的备份.

有关转储和恢复XFS文件系统的更多信息,请参阅, man xfsdumpman xfsrestore.

配置错误行为

在 I/O操作过程中发生错误时 , XFS驱动程序采用以下两种方式之一进行响应:

  • 继续重试,直到:
    • I/O操作成功,或者
    • 超出I/O 操作重试计数或时间限制.
  • 考虑永久性的错误并暂停系统.

XFS目前认识到以下错误情况,您可以专门配置所需的行为:

  • EIO:尝试写入设备时出错
  • ENOSPC: 设备上没有剩余空间
  • ENODEV: 设备找不到

所有其他可能的错误条件(没有定义特定的处理程序)共享一个全局配置.

您可以设置XFS认为错误永久的条件,包括最大重试次数和最长时间(以秒为单位)。当满足任何一个条件时,XFS将停止重试.

无论是否有其他配置,还可以选择在卸载文件系统时立即取消重试。这使得卸载操作即使在持续错误的情况下也能成功.

特定和未定义条件的配置文件

控制错误行为的配置文件位于/sys/fs/xfs/device/error/目录.

该目录包含每个特定错误条件的子目录:/sys/fs/xfs/*device*/error/metadata/

  • /sys/fs/xfs/*device*/error/metadata/EIO/EIO 错误情况
  • /sys/fs/xfs/*device*/error/metadata/ENODEV/ENODEV 错误情况
  • /sys/fs/xfs/*device*/error/metadata/ENOSPC/ENOSPC 错误情况

每一个 都包含以下配置文件’:

  • /sys/fs/xfs/*device*/error/metadata/*condition*/max_retries: 控制XFS重试操作的最大次数.
  • /sys/fs/xfs/*device*/error/metadata/*condition*/retry_timeout_seconds: XFS将停止重试操作的时间限制(以秒为单位)

所有其他可能出现的错误情况,除了上一节中描述的情况之外,在这些文件中共享一个通用配置:

  • /sys/fs/xfs/*device*/error/default/max_retries: 控制最大重试次数
  • /sys/fs/xfs/*device*/error/default/retry_timeout_seconds: 控制重试的时间限制

设置特定和未定义条件的文件系统行为

要设置最大重试次数,请将所需的编号写入 max_retries 文件中.

  • 对于特定的条件:
1
   # echo value > /sys/fs/xfs/device/error/metadata/condition/max_retries
  • 对于未定义的条件:
1
  # echo value > /sys/fs/xfs/device/error/default/max_retries

值是1到int的最大可能值之间的一个数字,即C有符号整数类型。这是64位Linux上的2147483647。

要设置时间限制,请将所需的秒数写入 retry_timeout_seconds文件.

  • 对于特定的条件:
1
  # echo value > /sys/fs/xfs/device/error/metadata/condition/retry_timeout_seconds
  • 对于未定义的条件:
1
  # echo value > /sys/fs/xfs/device/error/default/retry_timeout_seconds

value-186400中的数字, 这是一天中的秒数.

max_retriesretry_timeout_seconds 选项中, -1 意味着永远重试, 0 立即停止.

device 设备的名称, 如 /dev/ 目录中所示; 例如, sda.

注意

每个错误条件的默认行为取决于错误上下文。有些错误,比如 ENODEV, 被认为是致命的,无法恢复,不管重试次数如何,所以它们的默认值是 0.

设置卸载行为

如果 fail_at_unmount 设置了该选项,则文件系统将在卸载过程中覆盖所有其他错误配置,并立即在不重试I / O操作的情况下提升文件系统。这使得卸载操作即使在持续错误的情况下也能成功.

设置卸载行为:

1
echo value > /sys/fs/xfs/device/error/fail_at_unmount

value 的值 10:

  • 1 意味着如果发现错误,立即取消重试.
  • 0意味着尊重 max_retriesretry_timeout_seconds的选择.

device是设备的名称, 如 /dev/目录中所示; 例如, sda.

重要

fail_at_unmount在尝试卸载文件系统之前,必须根据需要设置 该选项。卸载操作启动后,配置文件和目录可能不可用.

其他XFS文件系统实用程序

红帽企业Linux 7还提供了其他用于管理XFS文件系统的实用程序:

  • xfs_fsr

    用于对挂载的XFS文件系统进行碎片整理。在没有参数的情况下调用时, xfs_fsr 对所有已挂载的XFS文件系统中的所有常规文件进行碎片整理。此实用程序还允许用户在指定的时间暂停碎片整理,并在以后停止的地方恢复.

    另外, xfs_fsr 还允许只对一个文件进行碎片整理, 如 xfs_fsr*/path/to/file*. 红帽建议不要定期对整个文件系统进行碎片整理,因为XFS默认避免碎片。系统范围的碎片整理可能会导致自由空间碎片的副作用.

  • xfs_bmap

    打印XFS文件系统中文件使用的磁盘块映射。该映射列出了指定文件使用的每个范围,以及文件中没有对应块(即孔)的区域.

  • xfs_info

    打印XFS文件系统信息.

  • xfs_admin

    更改XFS文件系统的参. xfs_admin ,实用程序只能修改未安装的设备或文件系统的参数.

  • xfs_copy

    将整个XFS文件系统的内容并行复制到一个或多个目标.

以下实用程序在调试和分析XFS文件系统时也很有用:

  • xfs_metadump

    将XFS文件系统元数据复制到文件。红帽只支持使用xfs_metadump实用程序来复制未安装的文件系统或只读安装的文件系统; 否则,生成的转储可能被损坏或不一致.

  • xfs_mdrestore

    将XFS metadump映像 (使用生成的 xfs_metadump) 恢复到文件系统映像.

  • xfs_db

    调试XFS文件系统.

有关这些实用程序的更多信息,请参阅各自的 man 页面.

从 XFS迁移到EXT4

从红帽企业Linux 7.0开始,XFS是默认的文件系统,而不是ext4。本节重点介绍使用或管理XFS文件系统时的差异.

红帽企业版Linux 7中仍然完全支持ext4文件系统,可以在安装时进行选择。虽然可以从ext4迁移到XFS,但并不是必需的.

Ext3/4 与XFS的区别

  • 文件系统修复

    Ext3 / 4 e2fsck在启动时在用户空间运行,以根据需要恢复日志。相比之下,XFS在挂载时在内核空间执行日志恢复。提供了一个fsck.xfsshell脚本,但没有执行任何有用的操作,因为它只是满足initscript要求。

    当请求XFS文件系统修复或检查时,请使用该xfs_repair命令。使用该-n选项进行只读检查。

    xfs_repair命令不会在具有脏日志的文件系统上运行。要修复这样的文件系统mountunmount必须首先执行重播日志。如果日志损坏且无法重播,则-L可以使用该选项在日志中将其清零

  • 元数据错误行为

    遇到元数据错误时,ext3/4文件系统具有可配置的行为,默认情况下只是继续。当XFS遇到不可恢复的元数据错误时,将关闭文件系统并返回EFSCORRUPTED错误。系统日志将包含所遇到的错误的详细信息,xfs_repair如果有必要,将建议运行。

  • 配额

    XFS配额不是可重新安装的选项。-o quota必须在初始安装中指定该选项才能使配额生效。

    尽管配额包中的标准工具可以执行基本的配额管理任务(诸如setquotarepquota类的工具),但xfs_quota工具可用于特定于XFS的功能,例如“项目配额管理”。

    quotacheck命令对XFS文件系统没有影响。第一次配额会计开启XFS在quotacheck内部自动执行。因为XFS配额元数据是头等级的日志元数据对象,所以配额系统将始终保持一致,直到手动关闭配额为止

  • 调整文件系统大小

    XFS文件系统没有实用程序来缩小文件系统。XFS文件系统可以通过xfs_growfs命令在线增长

  • Inode numbers

    对于文件系统大于1 TB(256字节inode)或大于2 TB(512字节inode)的文件系统,XFS索引节点数可能会超过2^32。如此大的inode编号会导致32位统计调用失败,并返回EOVERFLOW值。使用默认的红帽企业版Linux 7配置时可能会出现上述问题:不带有四个分配组的条带。自定义配置(例如文件系统扩展或更改XFS文件系统参数)可能会导致不同的行为.

    应用程序通常会正确处理这种更大的inode编号 如果需要,使用-o inode32参数来挂载XFS文件系统,以实施低于2 ^ 32的索引节点号。请注意,使用inode32不会影响已用64位数分配的inode

  • 预分配

    当文件被写入时, XFS使用推测预分配来分配经过EOF的块。这避免了由于NFS服务器上的并发流式写入工作负载而导致的文件碎片。默认情况下,这个预分配随着文件的大小而增加,并在“du”输出中显而易见。如果具有推测预分配的文件在五分钟内未被弄脏,则预分配将被丢弃。如果inode在该时间之前从高速缓存中循环,那么当inode被回收时,预分配将被丢弃。

    如果由于预测性预分配而导致ENOSPC过早出现问题,则可以使用挂载选项来指定固定的预分配量。 -o allocsize=*amount*

  • 碎片相关的工具

    由于启发式和行为(如延迟分配和推测预分配),碎片在XFS文件系统中很少成为一个重要问题。但是,存在用于测量文件系统碎片以及碎片整理文件系统的工具。他们的使用是不鼓励的。

    xfs_db frag命令会尝试将所有文件系统分配提取到单个碎片编号中,以百分比表示。命令的输出需要大量的专业知识来理解其含义。例如,75%的碎片因子意味着每个文件只有平均4个范围。出于这个原因,xfs_db的frag的输出不被认为是有用的,并且推荐对所有碎片问题进行更仔细的分析.

ext3 、ext4与 XFS的命令比较

下表将ext3和ext4中使用的常用命令与特定于XFS的对应项进行了比较。.

ext3 、ext4与 XFS的命令比

任务 ext3/4 XFS
创建一个文件系统 mkfs.ext4 or mkfs.ext3 mkfs.xfs
文件系统检查 e2fsck xfs_repair
调整文件系统的大小 resize2fs xfs_growfs
保存文件系统的图像 e2image xfs_metadump and xfs_mdrestore
标记或调整文件系统 tune2fs xfs_admin
备份文件系统 dump and restore xfsdump and xfsrestore

下表列出了在XFS文件系统上运行的通用工具,但XFS版本具有更多特定的功能,因此建议使用这些工具.

用于ext4 和 XFS的工具

Task ext4 XFS
定额 quota xfs_quota
文件映射 filefrag xfs_bmap

EXT3文件系统

ext3文件系统本质上是ext2文件系统的增强版本。这些改进提供了以下优点:

  • 可用性

    在发生意外的电源故障或系统崩溃(也称为不清洁的系统关闭)之后,必须通过e2fsck程序检查机器上每个安装的ext2文件系统的一致性。这是一个耗时的过程,可以显着延迟系统启动时间,特别是对于包含大量文件的大卷而言。在此期间,卷上的任何数据都无法访问。

    可以fsck -n在一个活的文件系统上运行。但是,如果遇到部分写入的元数据,则不会做出任何更改并可能导致误导结果。

    如果在堆栈中使用LVM,则另一个选择是取得文件系统的LVM快照并fsck在其上运行。

    最后,可以选择以只读方式重新挂载文件系统。所有挂起的元数据更新(和写入)然后在重新装入之前强制到磁盘。这确保文件系统处于一致的状态,只要没有以前的损坏。现在可以运行了fsck -n

    ext3文件系统提供的日志功能意味着在系统不正常关闭后,不再需要这种文件系统检查。使用ext3进行一致性检查的唯一时间是在某些罕见的硬件故障情况下,例如硬盘故障。系统不正常关闭后恢复ext3文件系统的时间不取决于文件系统的大小或文件的数量; 相反,这取决于用来保持一致性的日志的大小。根据硬件的速度,默认的日志大小需要大约一秒的恢复时间.

  • 数据的完整性

    ext3文件系统防止发生不洁系统关闭时丢失数据完整性。ext3文件系统允许您选择数据收到的保护类型和级别。关于文件系统的状态,ext3卷默认配置为保持高水平的数据一致性.

  • 速度

    尽管多次写入一些数据,ext3在大多数情况下比ext2具有更高的吞吐量,因为ext3的日志优化了硬盘驱动器的磁头运动。您可以从三种日志模式中进行选择以优化速度,但是如果系统出现故障,则意味着在数据完整性方面进行权衡.

  • 轻松过渡

    从ext2迁移到ext3非常容易,并且无需重新格式化即可从强大的日志文件系统中获益。有关如何执行此任务的更多信息。

创建 Ext3 文件系统

安装之后,有时需要创建一个新的ext3文件系统。例如,如果将新的磁盘驱动器添加到系统中,则可能需要对驱动器进行分区并使用ext3文件系统.

创建一个ext3文件系统的步骤如下:

创建一个ext3文件系统

1.使用mkfs.ext3格式化分区ext3文件系统或LVM卷 . 2. 使用 e2label标签文件系统.

也可以为文件系统设置特定的UUID。要在创建文件系统时指定UUID,请使用以下-U选项:

1
# mkfs.ext3 -U UUID /dev/device

UUID替换为您要设置的UUID ,例如7cd65de3-e0be-41d9-b66d-96d749c02da7。将设备替换为ext3件系统以添加UUID:例如sda8

转换为EXT3文件系统

tune2fs 命令将 ext2 文件系统转换为 ext3.

注意

要将ext2转换为ext3 ,请始终使用该e2fsck 实用程序在使用前后检查文件系统 tune2fs. 在尝试将ext2转换为ext3之前, 备份所有文件系统以防发生任何错误.

另外,Red Hat建议创建一个新的ext3文件系统并将数据迁移到它,而不是从ext2转换为ext3.

要将 ext2 文件系统转换为 ext3,请以root用户身份登录,然后在终端中键入以下命令:

1
# tune2fs -j block_device

block_device 包含要转换的ext2文件系统.

df 命令以显示已安装的文件系统.

恢复到EXT2文件系统

为了恢复到ext2文件系统,请使用以下步骤.

为简单起见,本节中的示例命令对块设备使用以下值:

/dev/mapper/VolGroup00-LogVol02

从ext3恢复到ext2

  1. 以root身份登录并键入以下命令卸载分区:
1
   # umount /dev/mapper/VolGroup00-LogVol02
  1. 通过输入以下命令将文件系统类型更改为ext2:
1
   # tune2fs -O ^has_journal /dev/mapper/VolGroup00-LogVol02
  1. 输入以下命令来检查分区是否有错误:
1
   # e2fsck -y /dev/mapper/VolGroup00-LogVol02
  1. 然后通过键入以下命令再次将分区挂载为ext2文件系统:
1
   # mount -t ext2 /dev/mapper/VolGroup00-LogVol02 /mount/point

在上述命令中, 将 /mount/point 替换为分区的挂载点.

注意

如果 .journal文件存在于分区的根目录下,请将其删除.

要将分区永久更改为 ext2, 请记住更新该 /etc/fstab 文件, 则将在引导后恢复.

EXT4文件系统

ext4文件系统是ext3文件系统的可扩展扩展。使用红帽企业版Linux 7,它可以支持最大单个文件大小为16 TB,文件系统最大支持50 TB,而红帽企业版Linux 6仅支持高达16 TB的文件系统。它也支持无限数量的子目录(ext3文件系统最多只支持32,000个),但是一旦链接数量超过了65,000,它将重置为1,不再增加。bigalloc功能目前不支持.

注意

和ext3一样,一个ext4卷必须被卸载才能执行fsck.

  • 主要特点

    Ext4使用扩展(与ext2和ext3使用的传统块映射方案相反),这可以提高使用大型文件时的性能,并减少大型文件的元数据开销。此外,ext4还会相应地标记未分配的块组和inode表段,这样可以在文件系统检查过程中跳过它们。这使得文件系统检查更快,随着文件系统规模的扩大,这种检查变得更加有利

  • 分配功能

    ext4文件系统具有以下分配方案: 持续的预分配 延迟分配 多块分配 条纹感知分配 由于延迟分配和其他性能优化,ext4将文件写入磁盘的行为与ext3不同。在ext4中,当程序写入文件系统时,除非程序fsync()发起调用,否则不能保证在磁盘上

默认情况下,即使没有,ext3也会立即强制新建文件到磁盘 fsync()。这种行为隐藏了一些程序中没有fsync()用来确保写入数据在磁盘上的错误。另一方面,ext4文件系统通常会等待几秒钟才能写出对磁盘的更改,从而允许它对写入进行组合和重新排序以获得比ext3更好的磁盘性能.

与ext3不同,ext4文件系统在事务提交时不强制数据到磁盘。因此,将缓冲的写入刷新到磁盘需要更长的时间。与任何文件系统一样,使用数据完整性调用fsync()来确保将数据写入永久存储.

  • 其他Ext4功能

    ext4文件系统还支持以下内容: 扩展属性(xattr) - 这允许系统为每个文件关联几个附加的名称和值对。 配额日志 - 这可避免在崩溃后需要进行冗长的配额一致性检查。

创建一个Ext4文件系统

要创建一个ext4文件系统,请使用mkfs.ext4 命令。一般来说,默认选项对于大多数使用情况是最佳的:

1
# mkfs.ext4 /dev/device

以下是此命令的输出示例,它显示了生成的文件系统几何图形和特征:

mkfs.ext4 Command Output

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)d
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
245280 inodes, 979456 blocks
48972 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1006632960
30 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks: 
 32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

对于条带块设备(例如RAID5阵列),可以在创建文件系统时指定条带几何。使用适当的条纹几何形状极大地提高了ext4文件系统的性能.

在LVM或MD卷上创建文件系统时, mkfs.ext4 选择最佳几何体。在将几何信息输出到操作系统的某些硬件RAID上,这也可能是正确的.

要指定条状结构,使用-E ,mkfs.ext4(即,扩展文件系统选项)具有以下子选项

  • stride=value

    指定RAID块大小.

  • stripe-width=value

    指定RAID设备中的数据磁盘数量,或条带中的条带单元数量.

对于这两个子选项, *value* 必须在文件系统块单位中指定. 例如,要在4k块文件系统上创建一个带有64k步长(即16 x 4096)的文件系统,请使用以下命令:

1
# mkfs.ext4 -E stride=16,stripe-width=64 /dev/device

重要

可以使用 tune2fs 在ext3文件系统上开启某些ext4功能. 但是, tune2fs 以这种方式使用还没有经过充分的测试,因此在红帽企业版Linux 7中不支持。因此,红帽无法保证通过使用转换或挂载的ext3文件系统的一致性能和可预测的行为 tune2fs.

It is also possible to set a specific UUID for a file system. To specify a UUID when creating a file system, use the -U option:

1
# mkfs.ext4 -U UUID /dev/device

UUID替换为您要设置的UUID,例如 7cd65de3-e0be-41d9-b66d-96d749c02da7. 将设备替换为 ext4文件系统以添加UUID:例如, sda8.

挂载EXT4文件系统

一个ext4文件系统可以挂载,没有额外的选项。例如:

1
# mount /dev/device /mount/point

ext4文件系统也支持多个挂载选项来影响行为。例如,acl参数启用访问控制列表,而user_xattr参数启用用户扩展属性。要启用这两个选项,请使用它们各自的参数-o,如下所示:

1
# mount -o acl,user_xattr /dev/device /mount/point

和ext3一样,data_err=abort如果在文件数据中发生错误,该选项可以用来中止日志.

1
# mount -o data_err=abort /dev/device /mount/point

tune2fs实用程序还允许管理员在文件系统超级块中设置默认挂载选项。有关这方面的更多信息,请参阅man tune2fs.

写屏障

默认情况下,ext4使用写入屏障来确保文件系统完整性,即使启用写入缓存的设备断电也是如此。对于没有写入缓存的设备或使用电池供电的写入缓存,请使用nobarrier选项禁用屏障,如下所示:

1
# mount -o nobarrier /dev/device /mount/point

直接访问

从红帽企业版Linux 7.3开始,Direct Access(DAX)作为ext4和XFS文件系统上的技术预览版提供了应用程序将持久内存直接映射到其地址空间的方法。要使用DAX,系统必须具有某种形式的持久性内存,通常以一个或多个非易失性双列直插式内存模块(NVDIMM)的形式提供,并且必须在NVDIMM上创建支持DAX的文件系统( S)。此外,文件系统必须使用dax安装选项进行安装。然后,mmap安装在dax上的文件系统上的一个文件将导致存储直接映射到应用程序的地址空间.

调整EXT4文件系统的大小

在扩展ext4文件系统之前,请确保底层的块设备具有适当的大小以便稍后保存文件系统。为受影响的块设备使用适当的调整大小的方法.

ext4文件系统可以在使用以下resize2fs命令挂载时扩展:

1
# resize2fs /mount/device size

resize2fs命令还可以减小未挂载的 ext4文件系统的大小:

1
# resize2fs /dev/device size

在调整ext4文件系统resize2fs的大小时,实用程序将以文件系统块大小为单位读取大小,除非使用了指定特定单元的后缀。以下后缀表示特定单位:

  • s — 512字节的扇区
  • K — 千字节
  • M — 兆字节
  • G — 千兆字节

注意

size参数在扩展时是可选的(通常是冗余的)。所述resize2fs自动膨胀以填充所述容器的所有可用空间,通常是一个逻辑卷或分区。

有关调整ext4文件系统大小的更多信息,请参阅 man resize2fs.

备份 ext2/3/4 文件系统

**备份 ext2/3/4 **文件系统备份的一个例子

  1. 在尝试进行任何类型的恢复操作之前,必须备份所有数据。数据备份应该定期进行。除了数据之外,还有应该保存的配置信息,包括/etc/fstab和输出fdisk -l。运行sosreport/sysreport将会捕获这些信息,强烈推荐
  2. .
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
   # cat /etc/fstab
   LABEL=/            /               ext3    defaults        1 1
   LABEL=/boot1       /boot           ext3    defaults        1 2
   LABEL=/data        /data           ext3    defaults        0 0
   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
   LABEL=SWAP-sda5    swap            swap    defaults        0 0
   /dev/sda6          /backup-files   ext3    defaults        0 0

   # fdisk -l
      Device Boot    Start      End    Blocks      Id  System
   /dev/sda1 *           1       13    104391      83  Linux
   /dev/sda2            14      1925   15358140    83  Linux
   /dev/sda3          1926      3200   10241437+   83  Linux
   /dev/sda4          3201      4864   13366080    5   Extended
   /dev/sda5          3201      3391   1534176     82  Linux swap / Solaris
   /dev/sda6          3392      4864   11831841    83  Linux

在这个例子中,我们将使用/dev/sda6分区来保存备份文件,我们假设它/dev/sda6被挂载/backup-files.

  1. 如果要备份的分区是操作系统分区,请将系统启动到单用户模式。正常的数据分区不需要这一步.
  2. 使用dump备份分区的内容:
1
2
3
   # dump -0uf /backup-files/sda1.dump /dev/sda1
   # dump -0uf /backup-files/sda2.dump /dev/sda2
   # dump -0uf /backup-files/sda3.dump /dev/sda3

注意

如果系统已经运行了很长时间,建议e2fsck在备份之前在分区上运行.

重要

备份操作系统分区时,必须卸载该分区。

尽管挂载时可以备份普通数据分区,但建议尽可能将其卸载。尝试备份安装的数据分区的结果可能是不可预知的。

如果您需要备份使用的挂载文件系统dump,请在文件系统不负载较重的情况下进行备份。备份时文件系统上发生的活动越多,备份损坏的风险就越高。

如果你想做远程备份,你可以同时使用ssh或者配置非密码登录:

1
# dump -0u -f - /dev/sda1 | ssh root@remoteserver.example.com dd of=/tmp/sda1.dump

注意

如果使用标准重定向,该-f选项必须单独传递。

恢复ext2/3/4 文件系统

** ext2/3/4 文件系统恢复示例**

  1. 如果您要还原操作系统分区,请将系统引导至Rescue Mode(救援模式)。普通数据分区不需要这一步。

  2. 使用 fdisk 命令重建sda1/sda2/sda3/sda4/sda5 by using the.

    注意

    如有必要,创建分区以包含还原的文件系统。新的分区必须足够大以包含还原的数据。开始和结束数字是正确的。这些是分区的起始和结束扇区号。

  3. 使用 mkfs 命令, 格式化目标分区,如下所示.

    重要

    不要格式化 /dev/sda6 因为它保存了备份文件.

    1
    2
    3
    
    # mkfs.ext3 /dev/sda1
    # mkfs.ext3 /dev/sda2
    # mkfs.ext3 /dev/sda3
    
  4. 如果创建新的分区,重新标记所有分区,以便它们匹配 fstab文件. 如果没有重新创建分区,则不需要执行此步骤.

    1
    2
    3
    4
    
    # e2label /dev/sda1 /boot1
    # e2label /dev/sda2 /
    # e2label /dev/sda3 /data
    # mkswap -L SWAP-sda5 /dev/sda5
    
  5. 准备工作目录.

    1
    2
    3
    4
    5
    6
    7
    8
    
    # mkdir /mnt/sda1
    # mount -t ext3 /dev/sda1 /mnt/sda1
    # mkdir /mnt/sda2
    # mount -t ext3 /dev/sda2 /mnt/sda2
    # mkdir /mnt/sda3
    # mount -t ext3 /dev/sda3 /mnt/sda3
    # mkdir /backup-files
    # mount -t ext3 /dev/sda6 /backup-files
    
  6. 恢复数据.

    1
    2
    3
    4
    5
    6
    
    # cd /mnt/sda1
    # restore -rf /backup-files/sda1.dump
    # cd /mnt/sda2
    # restore -rf /backup-files/sda2.dump
    # cd /mnt/sda3
    # restore -rf /backup-files/sda3.dump
    

    如果要从远程主机进行还原或从远程主机上的备份文件进行还原,则可以使用ssh或rsh。您将需要为以下示例配置无密码登录:

    登录到10.0.0.87,并从本地sda1.dump文件恢复sda1:

    1
    
    # ssh 10.0.0.87 "cd /mnt/sda1 && cat /backup-files/sda1.dump | restore -rf -"
    

    登录到10.0.0.87,并从远程10.66.0.124 sda1.dump文件恢复sda1:

    1
    
    # ssh 10.0.0.87 "cd /mnt/sda1 && RSH=/usr/bin/ssh restore -r -f 10.66.0.124:/tmp/sda1.dump"
    
  7. Reboot.

其他EXT4文件系统工具

红帽企业版Linux 7还提供了用于管理ext4文件系统的其他实用程序:

  • e2fsck

    用于修复ext4文件系统。这个工具比ext3更有效地检查和修复ext4文件系统,这要归功于ext4磁盘结构的更新.

  • e2label

    更改ext4文件系统上的标签。这个工具也适用于ext2和ext3文件系统.

  • quota

    控制和报告ext4文件系统上用户和组的磁盘空间(块)和文件(inode)使用情况.

  • fsfreeze

    要暂停对文件系统的访问,请使用该命令将其冻结并解冻。这会暂停对文件系统的访问,并在磁盘上创建一个稳定的映像。 # fsfreeze -f *mount-point*``# fsfreeze -u *mount-point*.

tune2fs实用程序还可以调整ext2,ext3和ext4文件系统的可配置文件系统参数。另外,以下工具在调试和分析ext4文件系统时也很有用::

  • debugfs

    调试ext2,ext3或ext4文件系统.

  • e2image

    调试ext2,ext3或ext4文件系统.

有关这些实用程序的更多信息,请参阅各自的man页面.

BTRFS(技术预览)

注意

Btrfs在红帽企业版Linux 7中作为技术预览功能提供,但自从红帽企业版Linux 7.4发行版以来已经被弃用了。它将在未来的红帽企业Linux主要版本中被删除.

Btrfs是下一代Linux文件系统,提供先进的管理,可靠性和可扩展性功能。它在提供快照,压缩和集成设备管理方面是独一无二的。

创建一个btrfs文件系统

为了建立一个基本的btrfs文件系统,使用下面的命令:

1
# mkfs.btrfs /dev/device

挂载一个BTRFS文件系统

要在btrfs文件系统中安装任何设备,请使用以下命令:

1
# mount /dev/device /mount-point

其他有用的安装选项包括:

  • device=/dev/name

    将此选项附加到mount命令会告诉btrfs为指定的设备扫描btrfs卷。这用于确保挂载将成功,因为尝试挂载不是btrfs的设备将导致挂载失败。

  • max_inline=number

    使用此选项可设置可用于在元数据B树叶中内联数据的最大空间量(以字节为单位)。默认是8192字节。对于4k页面,由于需要适合叶子的附加头文件,它被限制为3900字节

  • alloc_start=number

    使用此选项可以设置磁盘分配的起始位置。

  • thread_pool=number

    使用此选项分配分配的工作线程数。

  • discard

    使用此选项可以释放释放块上的TRIM。

  • noacl

    使用此选项禁用ACL的使用。

  • space_cache

    使用此选项将可用空间数据存储在磁盘上,以便更快地缓存块组。这是一个持久的变化,可以安全地引导到旧的内核。

  • nospace_cache

    使用此选项可禁用上述功能space_cache

  • clear_cache

    在安装过程中使用此选项清除所有可用空间缓存。这是一个安全的选项,但会触发空间缓存重建。因此,请保持文件系统安装,以便重建过程完成。此安装选项旨在仅在问题出现在可用空间后才能使用。

  • enospc_debug

    这个选项用于调试“没有剩余空间”的问题。

  • recovery

    使用此选项可以在安装时启用自动恢复。

调整BTRFS文件系统的大小

无法调整btrfs文件系统的大小,但可以调整其使用的每个设备的大小。如果只有一个设备正在使用,那么这与调整文件系统的大小相同。如果有多个设备正在使用,则必须手动调整大小以达到预期的效果。

注意

单位大小不是特定的情况; 它接受两者GgGiB。

该命令不接受t千兆字节或千兆p字节。它只接受kmg

扩大btrfs文件系统

To enlarge the file system on a single device, use the command:

1
# btrfs filesystem resize amount /mount-point

For example:

1
2
# btrfs filesystem resize +200M /btrfssingle
Resize '/btrfssingle' of '+200M'

要放大多设备文件系统,必须指定要放大的设备。首先,显示具有指定挂载点的btrfs文件系统的所有设备:

1
# btrfs filesystem show /mount-point

For example:

1
2
3
4
5
6
7
8
9
# btrfs filesystem show /btrfstest
Label: none  uuid: 755b41b7-7a20-4a24-abb3-45fdbed1ab39
	Total devices 4 FS bytes used 192.00KiB
	devid    1 size 1.00GiB used 224.75MiB path /dev/vdc
	devid    2 size 524.00MiB used 204.75MiB path /dev/vdd
	devid    3 size 1.00GiB used 8.00MiB path /dev/vde
	devid    4 size 1.00GiB used 8.00MiB path /dev/vdf

Btrfs v3.16.2

然后,在识别devid要放大的设备之后,使用以下命令:

1
# btrfs filesystem resize devid:amount /mount-point

For example:

1
2
# btrfs filesystem resize 2:+200M /btrfstest
Resize '/btrfstest/' of '2:+200M'

注意

amount 也可以是 max 代替特定量。这将使用设备上剩余的所有空间。

缩小btrfs文件系统

要在单个设备上缩小文件系统,请使用以下命令:

1
# btrfs filesystem resize amount /mount-point

For example:

1
2
# btrfs filesystem resize -200M /btrfssingle
Resize '/btrfssingle' of '-200M'

要缩小多设备文件系统,必须指定要收缩的设备。首先,显示具有指定挂载点的btrfs文件系统的所有设备:

1
# btrfs filesystem show /mount-point

For example:

1
2
3
4
5
6
7
8
9
# btrfs filesystem show /btrfstest
Label: none  uuid: 755b41b7-7a20-4a24-abb3-45fdbed1ab39
	Total devices 4 FS bytes used 192.00KiB
	devid    1 size 1.00GiB used 224.75MiB path /dev/vdc
	devid    2 size 524.00MiB used 204.75MiB path /dev/vdd
	devid    3 size 1.00GiB used 8.00MiB path /dev/vde
	devid    4 size 1.00GiB used 8.00MiB path /dev/vdf

Btrfs v3.16.2

然后,在识别devid要缩小的设备之后,使用以下命令:

1
# btrfs filesystem resize devid:amount /mount-point

For example:

1
2
# btrfs filesystem resize 2:-200M /btrfstest
Resize '/btrfstest' of '2:-200M'

设置文件系统大小

要在单个设备上将文件系统设置为特定大小,请使用以下命令:

1
# btrfs filesystem resize amount /mount-point

For example:

1
2
# btrfs filesystem resize 700M /btrfssingle
Resize '/btrfssingle' of '700M'

要设置多设备文件系统的文件系统大小,必须指定要更改的设备。首先,显示在指定的挂载点上具有btrfs文件系统的所有设备

1
# btrfs filesystem show /mount-point

For example:

1
2
3
4
5
6
7
8
9
# btrfs filesystem show /btrfstest
Label: none  uuid: 755b41b7-7a20-4a24-abb3-45fdbed1ab39
	Total devices 4 FS bytes used 192.00KiB
	devid    1 size 1.00GiB used 224.75MiB path /dev/vdc
	devid    2 size 724.00MiB used 204.75MiB path /dev/vdd
	devid    3 size 1.00GiB used 8.00MiB path /dev/vde
	devid    4 size 1.00GiB used 8.00MiB path /dev/vdf

Btrfs v3.16.2

然后,在识别出devid要更改的设备后,使用以下命令:

1
# btrfs filesystem resize devid:amount /mount-point

For example:

1
2
# btrfs filesystem resize 2:300M /btrfstest
Resize '/btrfstest' of '2:300M'

多个设备的集成卷管理

可以在许多设备上创建btrfs文件系统,在创建文件系统之后可以添加更多的设备。默认情况下,元数据将在两台设备之间镜像,数据将在所有设备上进行分条,但是如果只有一台设备,元数据将在该设备上复制。

使用多个设备创建文件系统

The mkfs.btrfs 命令接受数据选项和元数据选项。有效的规格是: -d for data, and -m for metadata. 有效的规格是:

  • raid0
  • raid1
  • raid10
  • dup
  • single

-m single选项指示不会重复元数据。这在使用硬件RAID时可能是需要的。

注意

RAID 10至少需要四台设备才能正常运行。

创建一个RAID 10 btrfs文件系统

在四个设备上创建一个文件系统(元数据镜像,数据条带化)

1
# mkfs.btrfs /dev/device1 /dev/device2 /dev/device3 /dev/device4

在不镜像的情况下分割元数据。

1
# mkfs.btrfs -m raid0 /dev/device1 /dev/device2

将raid10用于数据和元数据。

1
# mkfs.btrfs -m raid10 -d raid10 /dev/device1 /dev/device2 /dev/device3 /dev/device4

不要在单个驱动器上复制元数据。

1
# mkfs.btrfs -m single /dev/device

single当驱动器大小不同时, 使用该选项可以使用每个驱动器的全部容量。

1
# mkfs.btrfs -d single /dev/device1 /dev/device2 /dev/device3

要将新设备添加到已创建的多设备文件系统,请使用以下命令:

1
# btrfs device add /dev/device1 /mount-point

在重新启动或重新加载btrfs模块之后,使用该btrfs device scan命令来发现所有多设备文件系统。

扫描btrfs设备

使用btrfs device scan扫描下的所有块设备/dev和探测BTRFS卷。如果使用文件系统中的多个设备运行,则必须在加载btrfs模块后执行此操作。

要扫描所有设备,请使用以下命令:

1
# btrfs device scan

要扫描单个设备,请使用以下命令:

1
# btrfs device scan /dev/device

将新设备添加到btrfs文件系统

使用该btrfs filesystem show命令列出所有btrfs文件系统以及它们包含的设备。

btrfs device add命令用于将新设备添加到已安装的文件系统。

btrfs filesystem balance命令在所有现有设备之间平衡(重新分配)分配的盘区。

所有这些命令一起添加新设备的示例如下:

添加新设备到btrfs文件系统

首先,创建并挂载一个btrfs文件系统。

1
2
# mkfs.btrfs /dev/device1
# mount /dev/device1

接下来,将第二个设备添加到已安装的btrfs文件系统。

1
# btrfs device add /dev/device2 /mount-point

这些设备上的元数据和数据仍然只存储在 /dev/*device1*. 现在必须平衡分布在所有设备上。

1
# btrfs filesystem balance /mount-point

平衡文件系统需要一些时间,因为它读取文件系统的所有数据和元数据,并在新设备上重写。

转换一个btrfs文件系统

要将非raid文件系统转换为raid,请添加设备并运行更改块分配配置文件的平衡过滤器。

转换一个btrfs文件系统

要将现有的单个设备系统(/dev/sdb1在这种情况下)转换为两个设备raid1系统以防止单个磁盘发生故障,请使用以下命令:

1
2
3
# mount /dev/sdb1 /mnt
# btrfs device add /dev/sdc1 /mnt
# btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt

重要

如果元数据未从单一设备默认转换,则保持为DUP。这并不保证块的副本位于不同的设备上。如果数据未被转换,则根本没有任何多余的副本。

删除btrfs设备

使用该btrfs device delete命令删除在线设备。它将任何正在使用的扩展区重新分配给文件系统中的其他设备,以便安全地删除。

删除btrfs文件系统上的设备

首先创建并安装几个btrfs文件系统。

1
2
# mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd /dev/sde
# mount /dev/sdb /mnt

将一些数据添加到文件系统。

最后,移除所需的设备。

1
# btrfs device delete /dev/sdc /mnt

替换btrfs文件系统上的失败设备

如果仍然可以读取超级块,则可以删除brtfs设备呢哦来删除发生故障的设备。但是,如果设备丢失或超级块损坏,文件系统将需要以降级模式进行挂载:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# mkfs.btrfs -m raid1 /dev/sdb /dev/sdc /dev/sdd /dev/sde


  ssd is destroyed or removed, use -o degraded to force the mount
  to ignore missing devices


# mount -o degraded /dev/sdb /mnt


  'missing' is a special device name


# btrfs device delete missing /mnt

该命令btrfs device delete missing将删除由文件系统元数据描述的第一个设备,但在装入文件系统时不会显示该设备。

重要

  1. 这是不可能的,低于特定raid布局所需的最低设备数量,甚至包括缺少的设备。可能需要添加新设备才能删除失败的设备。

    例如,对于具有两个设备的raid1布局,如果设备出现故障,则需要:

    1. 以降级模式挂载,
    2. 添加一个新的设备,
    3. 并删除丢失的设备。

/etc/fstab文件中注册一个btrfs文件系统

如果您没有安装initrd或不执行btrfs设备扫描,则可以btrfs通过将文件系统中的所有设备明确传递到mount命令来安装多卷文件系统。

** /etc/fstab 条目**

一个合适的/etc/fstab条目的例子是:

1
/dev/sdb    /mnt    btrfs    device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde    0

请注意,使用通用唯一标识符(UUID)也可以工作,并且比使用设备路径更稳定。

SSD优化

使用btrfs文件系统可以优化SSD。有两种方法可以完成。

第一种方法是当单个指定设备的 /sys/block/*device*/queue/rotational为零时, mkfs.btrfs 在单个设备上关闭元数据复制。 这相当于在命令行上指定-m single。 可以通过提供-m dup选项来覆盖它并复制元数据。 由于SSD固件可能会丢失两个副本,所以不需要复制。 这浪费空间并且是性能成本。

第二种方式是通过一组SSD挂载选项: ssd, nossd, and ssd_spread.

ssd 选项有几个作用:

  • 它允许更大的元数据集群分配。
  • 它尽可能按顺序分配数据。
  • 它禁用btree叶重写匹配键和块顺序。
  • 它提交日志片段而不分批处理多个进程。

注意

ssd安装选项不但可以让SSD选项。使用该nossd选项来禁用它。

一些固态硬盘在经常重复使用块编号时性能最好,而另一些则在聚类严格分配大量未使用空间时性能更好。默认情况下,mount -o ssd将查找有多个空闲块的块的分组,这些空闲块可能已经分配了混合块。该命令mount -o ssd_spread确保没有混合分配的块。这样可以提高低端SSD的性能。

注意

ssd_spread选项启用ssdssd_spread选项。使用nossd来禁用这两个选项。

ssd_spread如果没有提供任何ssd选项并且任何设备不旋转,则 该选项永远不会自动设置。

这些选项都需要使用特定的版本进行测试,以查看它们的使用是否改善或降低了性能,因为SSD固件和应用程序负载的每个组合都不相同。

BTRFS参考

手册页btrfs(8)涵盖了所有重要的管理命令。具体包括:

  • 所有用于管理快照的子卷命令。
  • device管理设备 的命令。
  • scrubbalancedefragment命令。

手册页mkfs.btrfs(8)包含有关创建btrfs文件系统的信息,包括与之相关的所有选项。

btrfsck(8)有关fsckbtrfs系统信息 的手册页。

GFS2

GFS2 是直接与Linux内核文件系统接口(VFS层)接口的本地文件系统。作为集群文件系统实施时,GFS2采用分布式元数据和多个日志。

GFS2基于64位体系结构,理论上可以容纳8字节的文件系统。但是,当前支持的最大GFS2文件系统大小为100 TB。如果系统要求GFS2文件系统大于100 TB,请联系您的红帽服务代表。

在确定文件系统的大小时,请考虑其恢复需求。fsck在非常大的文件系统上运行该命令可能需要很长时间并消耗大量的内存。此外,如果发生磁盘或磁盘子系统故障,恢复时间受限于备份介质的速度。

在Red Hat Cluster Suite中进行配置时,可以使用Red Hat Cluster Suite配置和管理工具来配置和管理Red Hat GFS2节点。然后,红帽GFS2在红帽集群中的GFS2节点之间提供数据共享,并在GFS2节点之间提供一个统一的文件系统名称空间视图。这允许不同节点上的进程以相同的方式共享GFS2文件,即同一节点上的进程可以共享本地文件系统上的文件,而不会有明显的差异。有关红帽群集套件的信息,请参阅“红帽群集管理指南”。

GFS2必须构建在线性或镜像卷的逻辑卷(使用LVM创建)上。使用LVM在Red Hat集群套件中创建的逻辑卷由CLVM守护进程启用clvmd并在Red Hat Cluster Suite集群中运行的CLVM(集群范围的LVM实现)进行管理。守护进程可以使用LVM2来管理集群中的逻辑卷,从而允许集群中的所有节点共享逻辑卷。

gfs2.ko内核模块实现了GFS2文件系统,并装载在GFS2集群节点。

网络文件系统(NFS)

一个网络文件系统NFS)允许远程主机通过网络挂载文件系统并与那些文件系统,就好像它们是本地安装的互动。这使得系统管理员可以将资源整合到网络上的中央服务器上。

本章重点介绍NFS的基本概念和补充信息。

NFS简介

目前,Red Hat Enterprise Linux中包含两个主要的NFS版本。NFS版本3(NFSv3)支持安全异步写入,并且在错误处理方面比以前的NFSv2更强大; 它还支持64位文件大小和偏移量,允许客户端访问超过2 GB的文件数据。NFSv4通过防火墙和Internet工作,不再需要rpcbind服务,支持ACL并利用有状态的操作。

红帽企业版Linux 7增加了对NFS版本4.1(NFSv4.1)的支持,该版本提供了许多性能和安全增强功能,包括对并行NFS(pNFS)的客户端支持。NFSv4.1不再需要单独的TCP连接进行回调,即使无法联系客户端(例如,当NAT或防火墙干扰),也允许NFS服务器授予委派。此外,NFSv4.1现在提供了真正的一次语义(重启操作除外),防止了以前的问题,即如果回复丢失并且操作被发送了两次,某些操作可能返回不准确的结果。

红帽企业版Linux 7支持NFSv3,NFSv4.0和NVSv4.1客户端。NFS客户端默认尝试使用NFSv4.0进行挂载,如果挂载操作不成功,NFS客户端将回退到NFSv3。

注意

Red Hat不再支持NFS版本2(NFSv2)。

NFS的所有版本都可以使用通过IP网络运行的传输控制协议TCP),而NFSv4则需要它。NFSv3可以使用通过IP网络运行的用户数据报协议(UDP)来提供客户端和服务器之间的无状态网络连接。

在UDP中使用NFSv3时,无状态UDP连接(正常情况下)的协议开销比TCP少。这可以转化为非常干净,非拥塞的网络上更好的性能。但是,因为UDP是无状态的,所以如果服务器意外关闭,那么UDP客户端继续使用服务器的请求来饱和网络。另外,当使用UDP丢失一个帧时,整个RPC请求必须被重新传输。与TCP,只有丢失的帧需要重新发送。由于这些原因,在连接到NFS服务器时,TCP是首选协议。

安装和锁定协议已被纳入NFSv4协议。服务器也监听众所周知的TCP端口2049这样上,NFSv4的不需要与之交互rpcbindlockdrpc.statd守护程序。该rpc.mountd守护程序仍需要在NFS服务器上设置了出口,但不参与任何过度的线操作。

注意

TCP是红帽企业版Linux下NFS版本3的默认传输协议。可以根据需要将UDP用于兼容目的,但不建议将其用于广泛的用途。NFSv4需要TCP。

所有RPC / NFS守护进程都有一个'-p'可以设置端口的命令行选项,使得防火墙配置更容易。

在TCP封装器授予对客户端的访问权后,NFS服务器引用/etc/exports配置文件以确定是否允许客户端访问任何导出的文件系统。一旦验证完成,所有的文件和目录操作都可供用户使用。

重要

为了让NFS在启用了防火墙的情况下使用Red Hat Enterprise Linux的默认安装,请使用默认的TCP端口2049配置IPTables。如果没有正确的IPTables配置,NFS将无法正常运行。

NFS初始化脚本和rpc.nfsd进程现在允许在系统启动期间绑定到任何指定的端口。但是,如果端口不可用,或者与另一个守护进程发生冲突,则可能会出现错误。

必需的服务

红帽企业Linux使用内核级支持和守护进程的组合来提供NFS文件共享。所有NFS版本都依赖于客户端和服务器之间的远程过程调用RPC)。Red Hat Enterprise Linux 7下的RPC服务由rpcbind服务控制。要共享或安装NFS文件系统,下列服务可以协同工作,具体取决于实施的NFS版本:

注意

portmap服务用于在早期版本的红帽企业版Linux中将RPC程序编号映射到IP地址端口号组合。rpcbind红帽企业版Linux 7 现在取代了这项服务,以支持IPv6。

  • NFS

    systemctl start nfs 启动NFS服务器和相应的RPC进程来处理共享NFS文件系统的请求。

  • nfslock

    systemctl start nfs-lock 激活一个强制服务,启动相应的RPC进程,允许NFS客户端锁定服务器上的文件。

  • RPCBIND

    rpcbind接受来自本地RPC服务的端口保留。这些端口然后可用(或通告),以便相应的远程RPC服务可以访问它们。rpcbind响应对RPC服务的请求,并建立到请求的RPC服务的连接。这不用于NFSv4。

以下RPC过程便于NFS服务:

  • rpc.mountd

    NFS服务器使用此进程来处理MOUNT来自NFSv3客户端的请求。它检查所请求的NFS共享当前是否由NFS服务器导出,并允许客户端访问它。如果允许安装请求,则rpc.mountd服务器将回复一个Success状态,并将File-Handle此NFS共享提供给NFS客户端。

  • rpc.nfsd

    rpc.nfsd允许服务器通告的明确的NFS版本和协议被定义。它与Linux内核一起工作,以满足NFS客户端的动态需求,例如每次NFS客户端连接时提供服务器线程。这个过程对应于nfs服务。

  • 门锁配套

    lockd是在客户端和服务器上运行的内核线程。它实现了网络锁管理器(NLM)协议,它允许NFSv3客户端锁定服务器上的文件。无论何时运行NFS服务器以及挂载NFS文件系统,都会自动启动。

  • 的rpc.statd

    此过程实现了网络状态监视器(NSM)RPC协议,该协议在NFS服务器未正常关闭的情况下重新启动时通知NFS客户端。rpc.statdnfslock服务自动启动,不需要用户配置。这不用于NFSv4。

  • rpc.rquotad

    此过程为远程用户提供用户配额信息。rpc.rquotadnfs服务自动启动,不需要用户配置。

  • rpc.idmapd

    rpc.idmapd提供NFSv4客户端和服务器上线,该上线在线上NFSv4名称(形式为字符串)与本地UID和GID 之间进行映射。为了与NFSv4一起运行,必须配置文件。至少应该指定“Domain”参数,它定义了NFSv4映射域。如果NFSv4映射域与DNS域名相同,则可以跳过此参数。客户端和服务器必须同意NFSv4映射域的ID映射才能正常工作。 *user*@*domain*``idmapd``/etc/idmapd.conf注意在红帽企业版Linux 7中,只有NFSv4服务器使用rpc.idmapd。NFSv4客户端使用基于密钥环的idmapper nfsidmapnfsidmap是由内核按需调用的执行ID映射的独立程序; 这不是一个守护进程。如果客户有问题,nfsidmap可以重新使用rpc.idmapd。有关的更多信息nfsidmap可以在nfsidmap手册页上找到。


pNFS

支持并行NFS(pNFS)作为NFS v4.1标准的一部分,自Red Hat Enterprise Linux 6.4起可用。pNFS体系结构提高了NFS的可扩展性,并可能提高性能。也就是说,当服务器也实现pNFS时,客户端可以同时通过多个服务器访问数据。它支持三种存储协议或布局:文件,对象和块。

注意

该协议允许三种可能的pNFS布局类型:文件,对象和块。虽然红帽企业Linux 6.4客户端只支持文件布局类型,红帽企业版Linux 7支持文件布局类型,对象和块布局类型作为技术预览。

要启用此功能,请在启用了pNFS的服务器上使用以下安装选项:

1
-o v4.1

服务器启用pNFS后,nfs_layout_nfsv41_files内核会自动加载到第一个安装位置。输出中的装载条目应该包含minorversion=1。使用以下命令验证模块是否已加载:

1
$ lsmod | grep nfs_layout_nfsv41_files

配置NFS客户端

mount命令在客户端挂载NFS共享。其格式如下:

1
# mount -t nfs -o options server:/remote/export /local/directory

该命令使用以下变量:

  • options

    以逗号分隔的挂载选项列表

  • server

    输出您希望装载的文件系统的服务器的主机名,IP地址或标准域名

  • /remote/export

    服务器中导出的文件系统或目录,即要安装的目录

  • /local/directory

    其中客户端位置*/远程/出口*被安装

红帽企业版Linux 7中使用的NFS协议版本由mount选项nfsversvers。默认情况下,mount将使用NFSv4 mount -t nfs。如果服务器不支持NFSv4,客户端将自动下载到服务器支持的版本。如果nfsvers/ vers选项用于传递服务器不支持的特定版本,则挂载将失败。由于传统原因,文件系统类型nfs4也是可用的; 这相当于跑步。mount -t nfs -o nfsvers=4 *host*:*/remote/export**/local/directory*

更多细节参考man mount

如果手动挂载NFS共享,那么在重新引导时,共享将不会自动挂载。红帽企业Linux提供了两种在启动时自动安装远程文件系统的方法:/etc/fstab文件和autofs服务.

使用安装NFS文件系统/etc/fstab

从另一台机器上挂载NFS共享的另一种方法是在/etc/fstab文件中添加一行。该行必须声明NFS服务器的主机名,要导出的服务器上的目录,以及要装载NFS共享的本地计算机上的目录。您必须是root用户才能修改/etc/fstab文件。

语法示例

/etc/fstab的一般语法如下:

1
server:/usr/local/pub    /pub   nfs    defaults 0 0

/pub在执行此命令之前,客户机上必须存在 安装点。在/etc/fstab客户端系统上添加此行后,使用该命令mount /pub,并/pub从服务器挂载安装点。

/etc/fstab挂载NFS导出的 有效条目应包含以下信息:

1
server:/remote/export /local/directory nfs options 0 0

变量server/remote/export/local/directory和*options与手动挂载NFS共享时使用的是相同的

Note

在读取之前 ,挂载点 /local/directory 必须存在于客户端上/etc/fstab。否则,挂载将失败。

有关更多信息/etc/fstab,请参阅man fstab

autofs

使用的一个缺点/etc/fstab是,无论用户访问挂载的NFS文件系统的频率如何,系统都必须投入资源来保持挂载的文件系统。这对于一个或两个坐骑来说不是问题,但是当系统一次维护到多个系统时,整个系统的性能可能会受到影响。另一种方法/etc/fstab是使用基于内核的automount实用程序。自动挂载器由两部分组成:

  • 一个实现文件系统的内核模块
  • 一个执行所有其他功能的用户空间守护进程。

automount实用程序可以自动安装和卸载NFS文件系统(按需安装),从而节省系统资源。它可以用来安装其他文件系统,包括AFS,SMBFS,CIFS和本地文件系统

重要

nfs-utils软件包现在是“NFS文件服务器”和“网络文件系统客户端”组的一部分。因此,默认情况下,基本组不会默认安装。确保在尝试自动挂载NFS共享之前,先在系统上安装nfs-utils。

autofs也是“网络文件系统客户端”组的一部分。

autofs使用/etc/auto.master(主映射)作为其默认主配置文件。这可以更改为使用名称服务交换机制(NSS)机制中的autofs配置(in /etc/sysconfig/autofs)使用其他支持的网络源和名称。autofs针对主映射中配置的每个安装点运行版本4守护程序的实例,因此可以从命令行手动运行任何给定安装点。这是不可能的autofs版本5,因为它使用单个守护程序来管理所有配置的挂载点; 因此,必须在主映射中配置所有自动装载。这符合其他行业标准自动加载器的通常要求。挂载点,主机名,导出目录和选项都可以在一组文件(或其他支持的网络源)中指定,而不是为每个主机手动配置它们。

autofs版本5比版本4改进

autofs 与版本4相比,版本5具有以下增强功能:

  • 直接映射支持

    直接映射autofs提供了在文件系统层次结构中的任意点自动挂载文件系统的机制。直接映射由/-主映射中的挂载点表示。直接映射中的条目包含绝对路径名称作为键(而不是间接映射中使用的相对路径名)。

    懒惰安装和卸载支持

    多安装映射条目描述了单个密钥下的安装点层次结构。一个很好的例子就是-hosts地图,通常用于自动挂载主机下的所有导出,作为多装入映射条目。当使用地图,一个的将安装的autofs触发器安装用于从每个出口主机。这些会在访问时挂载和过期。这可以大大减少访问具有大量导出的服务器时所需的活动坐标的数量。/net/*host*``-hosts``ls``/net/*host*****

    增强的LDAP支持

    autofs配置文件(/etc/sysconfig/autofs)提供了一种机制,以指定autofs一个站点执行的模式,从而排除,需要通过在应用程序本身试错法来确定这一点。另外,现在支持通过LDAP服务器认证的绑定,并使用通用LDAP服务器实现支持的大多数机制。为此支持添加了新的配置文件:/etc/autofs_ldap_auth.conf。默认配置文件是自我记录的,并使用XML格式。

    正确使用名称服务Switch(nsswitch)配置。

    名称服务交换机配置文件的存在是为了提供一种确定特定配置数据来自何处的方法。这种配置的原因是允许管理员灵活地使用所选择的后端数据库,同时保持统一的软件接口来访问数据。虽然版本4自动挂载机在处理NSS配置方面越来越好,但它仍然不完整。另一方面,Autofs版本5是一个完整的实现。

    请参阅man nsswitch.conf此文件的支持语法的更多信息。并非所有的NSS数据库都是有效的地图源,解析器将会拒绝那些无效的地图源。合法来源的文件,ypnisnisplusldap,和hesiod

    每个autofs安装点有多个主映射条目

    有一件经常使用但尚未提及的事情是处理直接安装点的多个主映射条目/-。每个条目的地图键合并,并作为一个映射。

    每个自动安装点的多个主映射条目

    1
    2
    3
    
    /- /tmp/auto_dcthon
    /- /tmp/auto_test3_direct
    /- /tmp/auto_test4_direct
    

配置autofs

自动挂载程序的主要配置文件/etc/auto.master也称为主映射,主映射列出autofs了系统上的控制挂载点以及相应的配置文件或称为自动挂载映射的网络源。主图的格式如下:

1
mount-point map-name options

这种格式使用的变量是:

  • mount-point

    autofs安装点,/home等。

  • map-name

    包含挂载点列表的映射源的名称以及应该从中挂载这些挂载点的文件系统位置。地图条目的语法如下所述。

  • options

    如果提供,这些将适用于给定的地图中的所有条目,只要它们本身没有指定的选项。此行为与autofs选项累积的版本4 不同。这已经被改变以实现混合的环境兼容性。

/etc/auto.master文件

以下是来自/etc/auto.master文件(显示cat /etc/auto.master)的示例行:

1
/home /etc/auto.misc

地图的一般格式类似于主地图,但是“选项”出现在装载点和位置之间,而不是在主地图的入口末尾:

1
mount-point   [options]   location

这种格式使用的变量是:

  • mount-point

    这是指autofs安装点。这可以是间接装入的单个目录名称,也可以是直接装入的装入点的完整路径。每个直接和间接映射条目键(*mount-point*上面)后面都可以跟一个以空格分隔的偏移目录列表(每个以“/”开头的子目录名称),使它们成为所谓的多装入条目。

  • options

    无论何时提供,这些是没有指定自己的选项的地图项的装载选项。

  • location

    这指的是文件系统位置,例如本地文件系统路径(以“/”开头的映射名称以太阳映射格式转义符“:”开头),NFS文件系统或其他有效的文件系统位置。

以下是地图文件中的内容示例(例如/etc/auto.misc):

1
2
payroll -fstype=nfs personnel:/dev/hda3
sales -fstype=ext3 :/dev/hda4

映射文件中的第一列指示autofs安装点(salespayroll从调用的服务器personnel)。第二列表示autofs安装选项,第三列表示安装源。按照上述配置,autofs挂载点会/home/payroll/home/sales。该-fstype=选项通常被忽略,通常不需要正确的操作。

自动挂载程序将创建目录,如果它们不存在。如果目录在启动自动挂载程序之前存在,则自动挂载程序在退出时不会将其删除。您可以通过发出以下两个命令来启动或重新启动automount守护进程:

  • 如果自动挂载服务已停止:
1
  # systemctl start autofs
  • 如果服务正在运行:
1
  # systemctl restart autofs

使用上述配置,如果进程需要访问autofs卸载的目录(例如/home/payroll/2006/July.sxc,automount守护进程),则会自动挂载目录。如果指定超时,如果目录在超时期间未被访问,则目录将自动被卸载。

您可以通过发出以下命令来查看automount守护进程的状态:

1
# systemctl status autofs

覆盖或增加站点配置文件

覆盖客户端系统上特定挂载点的站点默认值可能很有用。例如,考虑以下条件:

  • Automounter地图存储在NIS中,/etc/nsswitch.conf文件具有以下指令:

    1
    
    automount:    files nis
    
  • auto.master文件包含以下内容

    1
    
    +auto.master
    
  • NIS auto.master映射文件包含以下内容:

    1
    
    /home auto.home
    
  • NIS auto.home地图包含以下内容:

    1
    2
    3
    
    beth        fileserver.example.com:/export/home/beth
    joe        fileserver.example.com:/export/home/joe
    *       fileserver.example.com:/export/home/&
    
  • 文件映射/etc/auto.home不存在。

给定这些条件,让我们假设客户端系统需要重写NIS映射auto.home并从不同的服务器挂载主目录。在这种情况下,客户端将需要使用以下/etc/auto.master映射:

1
2
/home /etc/auto.home
+auto.master

/etc/auto.home地图包含的条目:

1
*    labserver.example.com:/export/home/&

由于自动挂载程序仅处理挂载点的首次出现,/home将包含/etc/auto.homeNIS auto.home映射的内容。

另外,为了增加auto.home只有几个条目的站点范围的地图,创建一个/etc/auto.home文件地图,并在其中放入新的条目。最后,包括NIS auto.home地图。然后/etc/auto.home文件映射将看起来类似于:

1
2
mydir someserver:/export/mydir
+auto.home

鉴于auto.home上面列出的NIS 地图,ls /home现在将输出:

1
beth joe mydir

这最后一个示例按预期方式工作,因为autofs不包含与正在读取的同名文件映射的内容。因此,autofs移到nsswitch配置中的下一个映射源。

使用LDAP存储自动更新映射表

必须在配置为从LDAP中检索自动安装程序映射的所有系统上安装LDAP客户端库。在Red Hat Enterprise Linux上,openldap软件包应该作为依赖项自动安装automounter。要配置LDAP访问,请修改/etc/openldap/ldap.conf。确保为您的网站适当地设置BASE,URI和架构。

最近建立的用于在LDAP中存储自动安装映射的模式描述如下rfc2307bis。要使用这个模式,有必要通过从模式定义中删除注释字符来将其设置在autofsconfiguration(/etc/sysconfig/autofs)中。例如:

设置autofs配置

1
2
3
4
5
DEFAULT_MAP_OBJECT_CLASS="automountMap"
DEFAULT_ENTRY_OBJECT_CLASS="automount"
DEFAULT_MAP_ATTRIBUTE="automountMapName"
DEFAULT_ENTRY_ATTRIBUTE="automountKey"
DEFAULT_VALUE_ATTRIBUTE="automountInformation"

确保这些是在配置中未注释的唯一模式条目。该automountKey替换cn的属性rfc2307bis架构。一个LDIF样品的配置的描述如下:

LDF配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: (&(objectclass=automountMap)(automountMapName=auto.master))
# requesting: ALL
#

# auto.master, example.com
dn: automountMapName=auto.master,dc=example,dc=com
objectClass: top
objectClass: automountMap
automountMapName: auto.master

# extended LDIF
#
# LDAPv3
# base <automountMapName=auto.master,dc=example,dc=com> with scope subtree
# filter: (objectclass=automount)
# requesting: ALL
#

# /home, auto.master, example.com
dn: automountMapName=auto.master,dc=example,dc=com
objectClass: automount
cn: /home

automountKey: /home
automountInformation: auto.home

# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: (&(objectclass=automountMap)(automountMapName=auto.home))
# requesting: ALL
#

# auto.home, example.com
dn: automountMapName=auto.home,dc=example,dc=com
objectClass: automountMap
automountMapName: auto.home

# extended LDIF
#
# LDAPv3
# base <automountMapName=auto.home,dc=example,dc=com> with scope subtree
# filter: (objectclass=automount)
# requesting: ALL
#

# foo, auto.home, example.com
dn: automountKey=foo,automountMapName=auto.home,dc=example,dc=com
objectClass: automount
automountKey: foo
automountInformation: filer.example.com:/export/foo

# /, auto.home, example.com
dn: automountKey=/,automountMapName=auto.home,dc=example,dc=com
objectClass: automount
automountKey: /
automountInformation: filer.example.com:/export/&

常见的NFS挂载选项

除了在远程主机上使用NFS挂载文件系统之外,还可以在挂载时指定其他选项,以使挂载的共享更易于使用。这些选项可用于手动mount命令,/etc/fstab设置和autofs

以下是NFS安装常用的选项:

  • intr

    如果服务器关闭或无法访问,则允许NFS请求中断。

  • lookupcache=mode

    指定内核如何管理给定挂载点的目录条目的缓存。为有效参数模式allnonepos/ positive

  • nfsvers=version

    指定版本为3或4 的NFS协议的版本。对于运行多个NFS服务器的主机很有用。如果未指定版本,则NFS使用内核和mount命令支持的最高版本。

    该选项versnfsvers此版本相同,并且出于兼容性原因包含在此版本中。

  • noacl

    关闭所有ACL处理。当与旧版本的Red Hat Enterprise Linux,Red Hat Linux或Solaris接口连接时,这可能是需要的,因为最新的ACL技术与旧系统不兼容。

  • nolock

    禁用文件锁定。连接到较旧的NFS服务器时偶尔需要此设置。

  • noexec

    防止在挂载的文件系统上执行二进制文件。如果系统挂载包含不兼容的二进制文件的非Linux文件系统,这非常有用。

  • nosuid

    禁用set-user-identifierset-group-identifier位。这可以防止远程用户通过运行setuid程序获得更高的权限。

  • port=num

    禁用set-user-identifierset-group-identifier位。这可以防止远程用户通过运行setuid程序获得更高的权限。

  • rsize=num and wsize=num

    这些设置加快NFS通信为读(rsize)和写入(wsize)通过设定较大的数据块的大小(NUM,以字节为单位),在同一时间进行传输。更改这些值时要小心; 一些较旧的Linux内核和网卡在较大的块大小下不能正常工作。对于NFSv3,两个参数的默认值均设置为8192.对于NFSv4,两个参数的默认值均设置为32768。

  • sec=mode

    它的默认设置是sec=sys使用本地UNIX UID和GID。这些用于AUTH_SYS验证NFS操作。

    sec=krb5 使用Kerberos V5而不是本地UNIX UID和GID来认证用户。

    sec=krb5i 使用Kerberos V5进行用户身份验证,并使用安全校验和来执行NFS操作的完整性检查,以防止数据被篡改。

    sec=krb5p使用Kerberos V5进行用户验证,完整性检查以及加密NFS流量以防止流量嗅探。这是最安全的设置,但它也涉及最高的性能开销。

  • tcp

    指示NFS挂载使用TCP协议。

  • udp

    指示NFS挂载使用UDP协议。

有关选项的完整列表和更详细的信息,请参阅man mountman nfs

启动和停止NFS服务器

要运行未配置为仅使用NFSv4的NFS服务器,rpcbind服务必须正在运行。要验证它rpcbind是否处于活动状态,请使用以下命令:

1
# systemctl status rpcbind

如果rpcbind服务正在运行,则nfs服务可以启动。要启动NFS服务器,请使用以下命令:

1
# systemctl start nfs

要使NFS在引导时启动,请使用以下命令:

1
# systemctl enable nfs-server

注意

对于NFSv3,如果NFS设置为在引导时启动,则nfs-lock需要启用该服务。在红帽企业版Linux 7.1及更高版本上,nfs-lock如果需要自动启动,并尝试手动启用它将失败。在Red Hat Enterprise Linux 7.0上,运行检查状态systemctl status nfs-lock。如果nfs-lock未启用,请运行systemctl start nfs-lock。要设置nfs-lock为在Red Hat Enterprise Linux 7.0上自动启动,请运行systemctl enable nfs-lock

要停止服务器,请使用:

1
# systemctl stop nfs

restart选项是停止然后启动NFS的简写方式。在编辑NFS配置文件后,这是使配置更改生效的最有效的方法。重新启动服务器类型:

1
# systemctl restart nfs

编辑

1
/etc/sysconfig/nfs

文件后,通过运行以下命令重新启动nfs-config服务以使新值生效:

1
# systemctl restart nfs-config

try-restart命令仅nfs在当前正在运行时才开始。这个命令相当于红帽init脚本中的condrestart条件重启),并且非常有用,因为如果NFS没有运行,它不会启动守护进程。

要有条件地重新启动服务器类型:

1
# systemctl try-restart nfs

重新加载NFS服务器配置文件而不重新启动服务类型:

1
# systemctl reload nfs

配置NFS服务器

  • 方法可以在NFS服务器上配置导出:
    • 手动编辑NFS配置文件,即/etc/exports,和
    • 通过命令行,即通过使用该命令 exportfs

/etc/exports配置文件

/etc/exports文件控制将哪个文件系统导出到远程主机并指定选项。它遵循以下语法规则:

  • 空白行被忽略。
  • 要添加评论,请使用散列标记(#)开始一行。
  • 你可以用一个反斜杠(\)包住长长的一行。
  • 每个导出的文件系统应该在自己的行中。
  • 在导出的文件系统之后放置的任何授权主机列表必须用空格字符分隔。
  • 每个主机的选项都必须放在主机标识符后面的括号中,而主机和第一个括号之间没有任何空格。

导出文件系统的每个条目具有以下结构:

1
export host(options)

上述结构使用以下变量:

  • export

    正在导出的目录

  • host

    要共享导出的主机或网络

  • options

    要用于主机的选项

可以指定多个主机,以及每个主机的特定选项。为此,请将它们列在空格分隔的列表的同一行上,每个主机名后跟其各自的选项(括号),如下所示:

1
export host1(options1) host2(options2) host3(options3)

最简单的形式是/etc/exports文件只指定导出的目录和允许访问的主机,如下例所示:

/etc/exports文件

1
/exported/directory bob.example.com

在这里,bob.example.com可以/exported/directory/从NFS服务器上挂载。由于在本例中没有指定选项,NFS将使用默认设置。

默认设置是:

  • ro

    导出的文件系统是只读的。远程主机不能更改在文件系统上共享的数据。要允许主机对文件系统进行更改(即读/写),请指定该rw选项。

  • sync

    在将先前的请求所做的更改写入磁盘之前,NFS服务器不会回应请求。要启用异步写入,请指定该选项async

  • wdelay

    如果怀疑另一个写入请求即将发生,NFS服务器将延迟写入磁盘。这可以提高性能,因为它减少了磁盘必须通过单独的写入命令访问的次数,从而减少了写入开销。要禁用此功能,请指定no_wdelayno_wdelay仅在sync还指定了默认选项时才可用。

  • root_squash

    这防止远程连接的root用户(与本地相反)拥有root权限; 相反,NFS服务器将为其分配用户标识nfsnobody。这有效地将远程root用户的权限“压缩”到最低的本地用户,从而防止在远程服务器上可能的未经授权的写入。要禁用root压缩,请指定no_root_squash

要压缩每个远程用户(包括root),请使用all_squash。要指定NFS服务器应从特定主机分配给远程用户的用户和组ID ,请分别使用anonuidanongid选项,如下所示:

1
export host(anonuid=uid,anongid=gid)

在这里,uidgid分别是用户ID号和组ID号。在anonuidanongid选项允许您创建远程NFS用户共享一个特殊的用户和组帐户。

默认情况下,红帽企业版Linux支持访问控制列表ACL)。要禁用此功能,请no_acl在导出文件系统时指定该选项。

每个导出的文件系统的每个默认值必须被显式覆盖。例如,如果rw未指定该选项,则导出的文件系统将以只读方式共享。以下是/etc/exports覆盖两个默认选项的示例行:

/another/exported/directory 192.168.0.3(rw,async)

在这个例子中,192.168.0.3可以挂载/another/exported/directory/读/写,并且所有写入磁盘都是异步的。有关导出选项的更多信息,请参阅man exportfs

其他选项在没有指定默认值的情况下可用。其中包括禁用子树检查,允许从不安全的端口访问,以及允许不安全的文件锁定(对于某些早期的NFS客户端实现是必需的)。请参阅man exports这些较少使用的选项的详细信息。

重要

/etc/exports文件 的格式非常精确,特别是在使用空格字符方面。请记住始终使用空格字符将导出的文件系统与主机和主机相互隔离。但是,除了注释行之外,文件中不应该有其他空格字符。

例如,以下两行并不意味着同一件事:

1
2
/home bob.example.com(rw) 
/home bob.example.com (rw)

第一行只允许用户bob.example.com读/写访问/home目录。第二行允许用户bob.example.com将目录挂载为只读(默认),而世界其他地方可以挂载它的读/写。

exportfs命令

文件中列出了每个使用NFS导出到远程用户的文件系统以及这些文件系统的访问级别/etc/exports。当nfs服务启动时,/usr/sbin/exportfs命令将启动并读取此文件,将控制权交给rpc.mountd(如果NFSv3)实际的安装过程,然后传递rpc.nfsd到远程用户可以使用的文件系统的位置。

当手动发布时,该/usr/sbin/exportfs命令允许root用户有选择地导出或取消导出目录,而无需重新启动NFS服务。当给出正确的选项时,该/usr/sbin/exportfs命令将导出的文件系统写入/var/lib/nfs/xtab。由于在决定对文件系统的访问权限时rpc.mountd引用xtab文件,对导出的文件系统列表的更改立即生效。

以下是可供选择的常用选项列表/usr/sbin/exportfs

  • -r

    /etc/exports通过在中构建新的导出列表, 导致列出的所有目录被导出/etc/lib/nfs/xtab。此选项可以有效地刷新导出列表并进行任何更改/etc/exports

  • -a

    导致所有目录被导出或取消导出,具体取决于传递到的其他选项/usr/sbin/exportfs。如果没有指定其他选项,则/usr/sbin/exportfs导出在中指定的所有文件系统/etc/exports

  • -o file-systems

    指定未列入的要导出的目录/etc/exports。将文件系统替换为要导出的其他文件系统。这些文件系统必须按照指定的相同方式进行格式化/etc/exports。此选项通常用于测试导出的文件系统,然后将其永久添加到要导出的文件系统列表中。

  • -i

    忽略/etc/exports; 只有从命令行给出的选项用于定义导出的文件系统。

  • -u

    取消导出所有共享目录。该命令/usr/sbin/exportfs -ua挂起NFS文件共享,同时保持所有的NFS守护进程。要重新启用NFS共享,请使用exportfs -r

  • -v

    详细操作,exportfs执行该命令时将更详细地显示正在导出或未导出的文件系统。

如果没有选项传递给exportfs命令,则会显示当前导出的文件系统的列表。有关该exportfs命令的更多信息,请参阅man exportfs

exportfs与NFSv4一起使用

在红帽企业版Linux 7中,不需要额外的步骤来配置NFSv4导出,因为所提及的任何文件系统都可以自动使用相同路径的NFSv3和NFSv4客户端。以前的版本并非如此。

为了防止客户端使用的NFSv4,通过设置将其关闭RPCNFSDARGS= -N 4/etc/sysconfig/nfs

在防火墙后面运行NFS

NFS要求rpcbind为RPC服务动态分配端口,并可能导致配置防火墙规则的问题。要允许客户端访问防火墙后面的NFS共享,请编辑该/etc/sysconfig/nfs文件以设置运行RPC服务的端口。

/etc/sysconfig/nfs文件在所有系统上默认情况下不存在。如果/etc/sysconfig/nfs不存在,请创建它并指定以下内容:

  • RPCMOUNTDOPTS="-p port"

    这将“-p port ” 添加到rpc.mount命令行:。 rpc.mount -p *port*

To specify the ports to be used by the nlockmgr service, set the port number for the nlm_tcpport and nlm_udpport options in the /etc/modprobe.d/lockd.conf file.

要指定nlockmgr服务使用的端口,请为文件中的nlm_tcpportnlm_udpport选项设置端口号/etc/modprobe.d/lockd.conf

如果NFS无法启动,请检查/var/log/messages。通常,如果您指定了一个已经在使用的端口号,NFS将无法启动。编辑之后/etc/sysconfig/nfs,您需要重新启动nfs-config服务以使新值在红帽企业版Linux 7.2及更高版本中生效,方法是运行以下命令:

1
#systemctl restart nfs-config

然后,重新启动NFS服务器:

1
#systemctl restart nfs-server

运行rpcinfo -p确认更改已生效。

注意

许NFSv4.0回调通过防火墙设置,/proc/sys/fs/nfs/nfs_callback_tcpport并允许服务器连接到客户端的端口。

不需要用于的NFSv4.1或更高,而对于其他端口这个过程mountdstatdlockd不以纯的NFSv4环境必需的。

发现NFS export

有两种方法可以发现NFS服务器导出的文件系统。

首先,在任何支持NFSv3的服务器上,使用以下showmount命令:

1
2
3
4
$ showmount -e myserver
Export list for mysever
/exports/foo
/exports/bar

其次,在任何支持NFSv4的服务器上,挂载/并浏览。

1
2
3
4
5
6
# mount myserver:/ /mnt/
#cd /mnt/
exports
# ls exports
foo
bar

在同时支持NFSv4和NFSv3的服务器上,这两种方法都可以工作,并得到相同的结果。

注意

在旧版NFS服务器上的红帽企业版Linux 6之前,根据配置方式,可以将文件系统导出到不同路径的NFSv4客户端。由于这些服务器默认情况下不启用NFSv4,因此通常不会造成问题。

通过防火墙访问RPC配额

如果导出使用磁盘配额的文件系统,则可以使用配额远程过程调用(RPC)服务向NFS客户端提供磁盘配额数据。

使RPC配额可以在防火墙后面访问

  1. 要启用rpc-rquotad服务,请输入:
1
# systemctl enable rpc-rquotad 
  1. 要启动rpc-rquotad服务,请输入:

1
# systemctl start rpc-rquotad 

请注意rpc-rquotad,如果启用,启动nfs-server服务后自动启动。

  1. 要使配额RPC服务在防火墙后可访问,875需要打开UDP或TCP端口。默认的端口号是在/etc/services文件中定义的。

    您可以通过附加到文件中的变量来覆盖默认的端口号。 -p *port-number*``RPCRQUOTADOPTS``/etc/sysconfig/rpc-rquotad

  2. 重新启动rpc-rquotad了在改变/etc/sysconfig/rpc-rquotad文件生效:

    1
    
    # systemctl restart rpc-rquotad
    

从远程主机设置配额

默认情况下,配额只能被远程主机读取。要允许设置配额,请将该-S选项附加到文件中的RPCRQUOTADOPTS变量/etc/sysconfig/rpc-rquotad

重新启动rpc-rquotad了在改变/etc/sysconfig/rpc-rquotad文件生效:

1
# systemctl restart rpc-rquotad

主机名格式

host(s)可以采用以下形式:

  • Single machine

    一个完全合格的域名(可由服务器解析),主机名(可由服务器解析)或IP地址。

  • Series of machines specified with wildcards

    使用*?字符来指定一个字符串匹配。通配符不能与IP地址一起使用; 但是,如果反向DNS查找失败,他们可能会意外地工作。在完全限定的域名中指定通配符时,通配符中.不包含dots()。例如,*.example.com包括one.example.com但不是include one.two.example.com

  • IP networks

    使用abcd / *z,其中abcd是网络,z是网络掩码中的位数(例如192.168.0.0/24)。另一种可接受的格式是abcd / *netmask,其中abcd是网络,netmask是网络掩码(例如,192.168.100.8/255.255.255.0)。

  • Netgroups

    使用格式@ group-name,其中group-name是NIS网络组的名称。

通过RDMA启用NFS(NFSoRDMA)

如果RDMA支持硬件,则远程直接内存访问(RDMA)服务将在Red Hat Enterprise Linux 7中自动运行。

安装rdma软件包。该/etc/rdma/rdma.conf文件包含一条XPRTRDMA_LOAD=yes默认设置的行,它要求rdma服务加载NFSoRDMA 客户端模块。

要启用NFSoRDMA 服务器模块的自动加载,请添加SVCRDMA_LOAD=yes一个新行/etc/rdma/rdma.conf

*RPCNFSDARGS="–rdma=20049"*在该/etc/sysconfig/nfs文件中指定NFSoRDMA服务侦听客户端的端口号。RFC 5667指定在20049通过RDMA提供NFSv4服务时,服务器必须侦听端口。

nfs编辑/etc/rdma/rdma.conf文件后 重新启动服务:

1
#service nfs restart

请注意,对于较早的内核版本,编辑后需要重新启动系统才能/etc/rdma/rdma.conf使更改生效。

保护NFS

NFS适用于大量已知主机透明共享整个文件系统。但是,易用性带来了各种潜在的安全问题。要最大限度地降低NFS安全风险并保护服务器上的数据,请在将NFS文件系统导出到服务器上或挂载到客户机上时考虑以下几节。

使用AUTH_SYS和导出控件的NFS安全性

传统上,NFS提供了两个选项来控制对导出文件的访问。

首先,服务器限制哪些主机可以通过IP地址或主机名来安装哪些文件系统。

其次,服务器以与本地用户相同的方式为NFS客户端上的用户强制执行文件系统权限。传统上,它使用AUTH_SYS(也称为AUTH_UNIX)依赖于客户端来声明用户的UID和GID。请注意,这意味着恶意或错误配置的客户端可能很容易出错,并允许用户访问不应该访问的文件。

为了限制潜在的风险,管理员经常允许只读访问权限或压缩用户权限到普通用户和组ID。不幸的是,这些解决方案阻止了NFS共享的使用方式。

此外,如果攻击者获得对导出NFS文件系统的系统使用的DNS服务器的控制,则可以将与特定主机名或完全限定的域名关联的系统指向未授权的机器。此时,未经授权的机器允许安装NFS共享的系统,因为没有交换用户名或密码信息来为NFS安装提供额外的安全性。

在通过NFS导出目录时,应该谨慎使用通配符,因为通配符的范围可能包含比预期更多的系统。

也可以通过TCP封装来限制对rpcbind服务的访问。与创建规则iptables还可以限制访问由使用的端口rpcbindrpc.mountdrpc.nfsd

有关保护NFS的更多信息rpcbind,请参阅man iptables

NFS安全与AUTH_GSS

NFSv4通过强制实施RPCSEC_GSS和Kerberos版本5 GSS-API机制,彻底改变了NFS的安全性。但是,RPCSEC_GSS和Kerberos机制也适用于所有版本的NFS。在FIPS模式下,只能使用FIPS认可的算法。

与AUTH_SYS不同,使用RPCSEC_GSS Kerberos机制,服务器不依赖于客户端来正确表示哪个用户正在访问该文件。而是使用加密技术来向服务器验证用户身份,从而防止恶意客户端在没有该用户的Kerberos凭据的情况下冒充用户。使用RPCSEC_GSS Kerberos机制是保护安装最直接的方式,因为在配置Kerberos之后,不需要额外的安装。

配置Kerberos

在配置支持NFSv4 Kerberos的服务器之前,您需要安装并配置Kerberos密钥分发中心(KDC)。Kerberos是一个网络认证系统,它允许客户端和服务器通过使用对称加密和可信的第三方KDC相互认证。红帽推荐使用身份管理(IdM)来设置Kerberos。

程序8.2。为IdM配置NFS服务器和客户端以使用RPCSEC_GSS

    • 在NFS服务器端 创建主体。nfs/hostname.*domain@REALM*
    • 在服务器和客户端都 创建主体。host/hostname.*domain@REALM*
    • 将相应的密钥添加到客户端和服务器的密钥表中。

  1. 在服务器端,使用sec=选项来启用所需的安全风格。要启用所有的安全风格以及非加密安装:

    1
    
    /export *(sec=sys:krb5:krb5i:krb5p)
    

    与该sec=选项一起使用的有效安全风格是:

    • sys:没有密码保护,默认
    • krb5:只有身份验证
    • krb5i:完整性保护
    • krb5p: 隐私保护
  2. 在客户端,添加sec=krb5(或sec=krb5i,或者sec=krb5p,取决于设置)到挂载选项:

    1
    
    #mount -o sec=krb5 server:/export / mnt
    

尽管红帽建议使用IdM,但也支持Active Directory(AD)Kerberos服务器。

使用NFSv4的NFS安全性

NFSv4包含基于Microsoft Windows NT模型的ACL支持,而不是POSIX模型,因为Microsoft Windows NT模型的功能和广泛的部署。

NFSv4的另一个重要安全功能是删除使用MOUNT协议来安装文件系统。MOUNT由于协议处理文件处理的方式,该协议带来了安全风险。

文件权限

一旦NFS文件系统被远程主机读取/写入,每个共享文件的唯一保护就是其权限。如果共享相同用户标识值的两个用户安装相同的NFS文件系统,则可以修改彼此的文件。另外,以root身份登录到客户端系统的任何人都可以使用该su -命令访问具有NFS共享的任何文件。

默认情况下,红帽企业版Linux支持访问控制列表(ACL)。红帽建议保持启用此功能。

默认情况下,NFS 在导出文件系统时使用root压缩。这将在本地计算机上以root用户身份设置访问NFS共享的任何用户的用户标识nobody

以只读方式导出NFS共享时,请考虑使用该all_squash选项。此选项使每个访问导出的文件系统的用户都可以获取用户的用户标识nfsnobody

NFS AND RPCBIND

注意

以下部分仅适用于需要rpcbind向后兼容服务的NFSv3实现。

rpcbind实用的地图RPC服务上,他们听的端口。RPC进程rpcbind在启动时进行通知,注册他们正在监听的端口以及他们期望提供的RPC程序编号。客户端系统然后rpcbind用特定的RPC程序号在服务器上联系。该rpcbind服务将客户端重定向到正确的端口号,以便与请求的服务进行通信。

因为基于RPC的服务依赖rpcbind与传入的客户端请求进行所有连接,所以rpcbind必须在这些服务中的任何一个启动之前可用。

rpcbind服务使用TCP包装进行访问控制,并使用访问控制规则来rpcbind影响所有基于RPC的服务。或者,可以为每个NFS RPC守护进程指定访问控制规则。这些规则的man页面rpc.mountdrpc.statd包含有关这些规则的精确语法的信息。

NFS和rpcbind故障排除

因为rpcbind提供了RPC服务和用于与之通信的端口号之间的协调,所以rpcbind在排除故障时查看当前RPC服务的状态是非常有用的。该rpcinfo命令用端口号,RPC程序号,版本号和IP协议类型(TCP或UDP)显示每个基于RPC的服务。

要确保启用适当的基于NFS RPC的服务rpcbind,请发出以下命令:

1
# rpcinfo -p

rpcinfo -p命令输出

以下是此命令的输出示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
program vers proto  port service
      100021    1   udp  32774  nlockmgr
      100021    3   udp  32774  nlockmgr
      100021    4   udp  32774  nlockmgr
      100021    1   tcp  34437  nlockmgr
      100021    3   tcp  34437  nlockmgr
      100021    4   tcp  34437  nlockmgr
      100011    1   udp    819  rquotad
      100011    2   udp    819  rquotad
      100011    1   tcp    822  rquotad
      100011    2   tcp    822  rquotad
      100003    2   udp   2049  nfs
      100003    3   udp   2049  nfs
      100003    2   tcp   2049  nfs
      100003    3   tcp   2049  nfs
      100005    1   udp    836  mountd
      100005    1   tcp    839  mountd
      100005    2   udp    836  mountd
      100005    2   tcp    839  mountd
      100005    3   udp    836  mountd
      100005    3   tcp    839  mountd

如果其中一个NFS服务启动不正确,rpcbind将无法将来自该服务的客户端的RPC请求映射到正确的端口。在许多情况下,如果rpcinfo输出中不存在NFS,则重新启动NFS会使服务正确注册rpcbind并开始工作。

有关更多信息和选项列表rpcinfo,请参阅其man页面。

NFS参考

管理NFS服务器可能是一个挑战。许多选项(包括本章中未提及的许多选项)都可用于导出或装载NFS共享。有关更多信息,请参阅以下资源。

已安装的文档

  • man mount - 全面了解NFS服务器和客户端配置的安装选项。
  • man fstab- 提供/etc/fstab在启动时用于装入文件系统的文件格式的详细信息。
  • man nfs - 提供有关NFS特定的文件系统导出和安装选项的详细信息。
  • man exports- 显示/etc/exports导出NFS文件系统时在文件中使用的常用选项。

FS缓存

FS-Cache是一个持久的本地缓存,可以被文件系统用来从网络上获取数据并将其缓存在本地磁盘上。这有助于最大限度地减少从网络上安装的文件系统(例如NFS)访问数据的用户的网络流量。

下图是FS-Cache工作原理的高级示例:

https://blog-image.nos-eastchina1.126.net/bB9d6a5FD8.png?imageslim

FS-Cache被设计为尽可能透明的系统的用户和管理员。与cachefsSolaris 不同,FS-Cache允许服务器上的文件系统直接与客户端的本地缓存进行交互,而无需创建超量安装的文件系统。通过NFS,挂载选项指示客户端挂载启用FS缓存的NFS共享。

FS-Cache不会改变在网络上工作的文件系统的基本操作 - 它只是为文件系统提供一个可以缓存数据的永久位置。例如,无论是否启用FS-Cache,客户端仍可以挂载NFS共享。另外,缓存的NFS可以处理不适合缓存的文件(无论是单独的还是整体的),因为文件可以被部分缓存,并且不需要在前面完整地读取。FS-Cache还隐藏了客户端文件系统驱动程序中发生在缓存中的所有I / O错误。

为了提供缓存服务,FS-Cache需要一个缓存后端。高速缓存后端是配置为提供高速缓存服务(即cachefiles)的存储驱动程序。在这种情况下,FS-Cache需要一个挂载的基于块的文件系统,支持bmap和扩展属性(例如ext3)作为其缓存后端。

FS-Cache不能随意缓存任何文件系统,无论是通过网络还是以其他方式:共享文件系统的驱动程序必须进行更改以允许与FS-Cache进行交互,数据存储/检索以及元数据设置和验证。FS-Cache需要来自缓存文件系统的密钥一致性数据进行索引以支持持久性:索引键将文件系统对象与缓存对象进行匹配,以及通过一致性数据确定缓存对象是否仍然有效。

注意

在红帽企业版Linux 7中,cachefilesd默认情况下不安装,需要手动安装。

履约担保

FS-Cache并不能保证性能的提高,但是通过避免网络拥塞来保证一致的性能。使用高速缓存后端会导致性能降低:例如,高速缓存的NFS共享将磁盘访问添加到跨网络查找。尽管FS-Cache尝试尽可能异步,但在不可能的地方存在同步路径(例如读取)。

例如,使用FS-Cache在两台计算机之间缓存非共享GigE网络的NFS共享,将不会显示文件访问方面的任何性能改进。相反,NFS请求将从服务器内存而不是从本地磁盘得到满足。

因此FS-Cache的使用是各种因素之间的妥协。例如,如果正在使用FS-Cache来缓存NFS流量,则可能会稍微降低客户端的速度,但通过在本地满足读取请求而大幅减少网络和服务器负载,而不消耗网络带宽。

设置一个缓存

目前,红帽企业Linux 7只提供cachefiles缓存后端。该cachefilesd守护程序启动和管理cachefiles。该/etc/cachefilesd.conf文件控制如何cachefiles提供缓存服务。要配置此类型的缓存后端,cachefilesd必须安装该包。

在缓存后端配置的第一个设置是将哪个目录用作缓存。要配置它,请使用以下参数:

1
$ dir /path/to/cache

通常,高速缓存后端目录设置/etc/cachefilesd.conf/var/cache/fscache,如下所示:

1
$ dir /var/cache/fscache

FS-Cache将缓存存储在主机的文件系统中*/path/to/cache*。在笔记本电脑上,建议使用根文件系统(/)作为主机文件系统,但对于桌面计算机来说,将特别为高速缓存装入磁盘分区将更为谨慎。

支持FS-Cache缓存后端所需功能的文件系统包括以下文件系统的Red Hat Enterprise Linux 7实施:

  • ext3(启用扩展属性)
  • EXT4
  • BTRFS
  • XFS

主机文件系统必须支持用户定义的扩展属性; FS-Cache使用这些属性来存储一致性维护信息。要为ext3文件系统(即*device*)启用用户定义的扩展属性,请使用:

1
# tune2fs -o user_xattr /dev/device

或者,可以在挂载时启用文件系统的扩展属性,如下所示:

1
# mount /dev/device /path/to/cache -o user_xattr

缓存后端通过在托管缓存的分区上维持一定量的可用空间来工作。它使用可用空间来响应系统的其他元素来增长和缩小缓存,使其可以安全地用于根文件系统(例如,在笔记本电脑上)。FS-Cache设置此行为的默认值,可以通过高速缓存剔除限制进行配置。

一旦配置文件就位,启动该cachefilesd服务:

1
 systemctl start cachefilesd

要配置cachefilesd为在引导时启动,请以root身份执行以下命令:

1
 systemctl enable cachefilesd

通过NFS使用高速缓存

除非明确指示,否则NFS不会使用缓存。要将NFS挂载配置为使用FS高速缓存,请-o fscmount命令中包含以下选项:

1
# mount nfs-share:/ /mount/point -o fsc

对文件的所有访问*/mount/point*都将通过缓存,除非打开文件直接I / O或写入。NFS使用NFS文件句柄索引缓存内容,而不是文件名; 这意味着硬链接文件正确共享缓存。

NFS的版本2,3和4支持缓存。但是,每个版本使用不同的分支进行缓存。

缓存共享

NFS缓存共享有几个潜在的问题。由于缓存是持久的,因此缓存中的数据块将按照四个键的顺序进行索引:

  • 级别1:服务器详细信息
  • 等级2:一些安装选项; 安全类型; FSID; 唯一标志
  • 等级3:文件句柄
  • 级别4:文件中的页码

为了避免超级块之间的一致性管理问题,所有希望缓存数据的NFS超级块都有唯一的2级密钥。通常情况下,两个具有相同源卷和选项的NFS安装将共享一个超级块,并共享缓存,即使它们在该卷内安装不同的目录。

缓存共享

采取以下两个mount命令:

mount home0:/disk0/fred /home/fred -o fsc

mount home0:/disk0/jim /home/jim -o fsc

在这里,/home/fred并且/home/jim很可能会分享超级因为他们有同样的选择,特别是如果他们来自同一个卷/分区NFS服务器上(home0)。现在考虑接下来的两个安装命令:

mount home0:/disk0/fred /home/fred -o fsc,rsize=230

mount home0:/disk0/jim /home/jim -o fsc,rsize=231

在这种情况下,/home/fred/home/jim不会因为他们有不同的网络接入参数,这是二级键的一部分共享超级块。以下装载顺序也是如此:

mount home0:/disk0/fred /home/fred1 -o fsc,rsize=230

mount home0:/disk0/fred /home/fred2 -o fsc,rsize=231

这里,两个子树(/home/fred1/home/fred2)的内容将被缓存两次

避免超级数据块共享的另一种方法是用nosharecache参数明确地禁止它。使用相同的例子:

mount home0:/disk0/fred /home/fred -o nosharecache,fsc

mount home0:/disk0/jim /home/jim -o nosharecache,fsc

然而,在这种情况下,只有超级块中的一个将被允许使用高速缓存,因为没有什么区分等级的2键home0:/disk0/fredhome0:/disk0/jim。为了解决这个问题,添加一个唯一的标识符对安装件中的至少一个,即,。例如: fsc=*unique-identifier*

mount home0:/disk0/fred /home/fred -o nosharecache,fsc

mount home0:/disk0/jim /home/jim -o nosharecache,fsc=jim

这里,唯一标识符jim将被添加到缓存中使用的级别2密钥中/home/jim

使用NFS缓存限制

从共享文件系统中打开直接I / O文件将自动绕过缓存。这是因为这种访问类型必须直接连接到服务器。

从共享文件系统中打开文件以进行写入在NFS版本2和3上将不起作用。这些版本的协议不能为客户端提供足够的一致性管理信息,以检测来自另一个客户端的同一文件的并发写入。

因此,从共享文件系统中为直接I / O或写入打开文件将刷新文件的缓存副本。FS-Cache将不会再次缓存文件,直到不再为直接I / O或写入而打开。

而且,这个FS-Cache的版本只缓存常规的NFS文件。FS-Cache 不会缓存目录,符号链接,设备文件,FIFO和套接字。

设置高速缓存限制

cachefilesd守护程序的工作原理是从共享文件系统的远程数据缓存到磁盘上的可用空间。这可能会消耗所有可用的可用空间,如果该磁盘也容纳了根分区,则这可能是不好的。为了控制这一点,cachefilesd通过从缓存中丢弃旧对象(即,最近访问较少)来尝试保持一定量的可用空间。这种行为被称为高速缓存剔除

高速缓存剔除是根据块的百分比和底层文件系统中可用文件的百分比来完成的。有六个限制由以下设置控制/etc/cachefilesd.conf

  • brun N%(块的百分比),frun N%(文件的百分比)

    如果可用空间量和缓存中可用文件的数量超过这两个限制,则关闭剔除。

  • bcull N%(块的百分比),fcull N%(文件的百分比)

    如果可用空间量或缓存中的文件数量低于这些限制中的任何一个,则将开始剔除。

  • bstop N%(块的百分比),brun/ frun`- 10%

  • bcull/ fcull- 7%

  • bstop/ fstop- 3%

配置这些设置时,必须满足以下条件:

0 <= bstop< bcull< brun<100

0 <= fstop< fcull< frun<100

这些是可用空间和可用文件的百分比,并不显示为100减去df程序显示的百分比。

重要

剔除同时取决于b xxx和f xxx对; 他们不能分开处理。

统计信息

FS-Cache也跟踪一般的统计信息。要查看此信息,请使用:

cat /proc/fs/fscache/stats

FS-Cache统计信息包括有关决策点和对象计数器的信息。有关FS-Cache提供的统计信息的更多细节,请参阅以下内核文档:

/usr/share/doc/kernel-doc-*version*/Documentation/filesystems/caching/fscache.txt

FS-高速缓存引用

有关cachefilesd如何配置的更多信息,请参阅man cachefilesdman cachefilesd.conf。以下内核文档还提供了附加信息:

  • /usr/share/doc/cachefilesd-*version-number*/README
  • /usr/share/man/man5/cachefilesd.conf.5.gz
  • /usr/share/man/man8/cachefilesd.8.gz

有关FS-Cache的一般信息,包括其设计约束,可用统计信息和功能的详细信息,请参阅以下内核文档:

/usr/share/doc/kernel-doc-*version*/Documentation/filesystems/caching/fscache.txt