什么是文件系统?
文件系统是基于操作系统的。用来管理和组织保存在磁盘驱动器上的数据的系统软件。通过对数据存储布局,文件命名,安全控制等方面的管理。解决了如何在设备上有效的存储数据。
元数据(metadata)存储文件的重要信息(文件的权限,大小,修改时间,属主,存储位置等)
文件系统是操作系统和硬盘之间 一个桥梁,对磁盘的写操作,都要经过文件系统,然后才到磁盘。
常见的文件系统:
DOS系统的msdoc
windows 下的FAT系统(fat16(最大支持2G)和fat32(最大支持4G))和NTFS文件系统
光盘文件系统 ISO-9660
linux 下 单一文件系统 ext2 和日志文件系统 ext3/ext4/xfs
集群文件系统 gfs (Red Hat Global File System)
虚拟文件系统 (/proc)
加密文件系统 (CFS)
网络文件系统(NFS)
linux标准文件系统是从VFS开始的,然后是ext2。ext3,ext4
ext系列的对比:
ext3是在ext2的基础上增加了日志形式(便于数据恢复)这一思想来源于:超级块和inode设计理念。
ext3是一种日志式的文件系统,在ext2的基础上加入特殊的inode(日志文件)。日志记录功能,用于记录文件系统的元数据或各种写操作的变化。ext3数据的写入顺序;先通过日志文件的记录功能,然后在将数据写入磁盘的最终位置。
ext4 是linux第四代日志文件系统。是ext3文件系统的后续版本。比较ext3的改进:(centos6下的默认文件系统)
1.支持更多的子目录数量(ext3支持32000个子目录)ext4,理论上支持无限数量子目录
2.支持更大的文件系统和更大的文件(ext3 持续贺词32TB的文件系统和2TB的文件,而ext4 容量可达1EB,文件容量增至16TB)
XFS文件系统:
XFS文件系统是SGI(美国硅图公司)开发的一个高级日志文件系统。centos7下作为默认文件系统(centos7 下构架全部是64位了)
文件系统格式化命令mkfs.xfs
# mkfs.xfs -f /dev/sda2 (由于sda2已经完成格式化了。需要-f 强制重新格式化)
meta-data=/dev/sda2 isize=512 agcount=4, agsize=1525824 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=6103296, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2980, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
文件系统一致性检测命令:
xfs_repair -n /dev/sda2 (-n 只是测试不是修复)
修复和监测要把分区卸载了。
这里出现启动问题:
A start job is running for dev-disk-by\x2duuid-.....device(1min \1min 30)
然后是时间超时
然后出现提示: [DEPEND] DEpendency failed for /data
不过 centos7下。的init系统还是比较好的。没有直接拒绝登录系统而是给了修复信息。
Give root passwd for maintenance (输入root密码进入修复)
(or type Control-D to continue):(这种一般是文件系统启动的错误。系统尝试自动修复文件系统)
前面 由于出现提示是/data挂载不了。还是先进入系统看下/etc/fstab
先查看 分区的UUID; # blkid
然后查看 /ect/fstab
对比发现: /data的UUID 有问题。
修改 /data 的UUID
重启,正常。
文件系统使用的差异:
1.读操作频繁,小文件非常多(web应用,邮件应用) ext 4 文件系统比较好。ext4支持更多目录和文件
2.写操作频繁。(需求日志功能)xfs 文件系统较好。(在高并发下:xfs比ext4 省CPU资源)
3.对性能和安全都要求不高。可以用ext2 。(没有日志记录功能,可以省去设备开销)
NFS 网络文件系统的
功能:
让网络上的不同操作系统之间共享数据。NFS首先在远程服务端(共享数据的操作系统)共享出文件或者目录,然后远程
共享出来的文件或者目录,可以通过挂载的方式接到本地的不同系统上。
实现原理:NFS server启动后,开启一个端口为客户端连接。由于这个端口每次都不一样,NFS文件系统通过rpc(remote procedure call)
远程过程调用,监听NFS守护进程的端口号,通知给客户端。
nfs需要2个系统服务。
portmap;RPC的portmap 管理器,管理RPC服务的连接
nfs-utils: 提供 rpc.nfsd 及prc.mountd 这2个 nfs (daemons)的系统服务。
其中:rpc.nfsd 是管理客户端是否有权限登录服务器。rpc.mountd 是管理认证后的客户端是否对文件有使用权。
简单点就是: rpc.nfsd 处理连接请求 rpc.mountd 监督是否有权限操作目录。
nfs是 c/s架构。
NFS 服务器端 安装 需要 rpcbind 和 nfs 包
centos7下一般默认安装了。现在检查下:
# rpm -qa | grep rpcbind
rpcbind-0.2.0-38.el7.x86_64
# rpm -qa | grep nfs
nfs-utils-1.3.0-0.33.el7.x86_64
libnfsidmap-0.25-15.el7.x86_64
主配置文件: /etc/exports
添加一条语句:/app 192.168.1.140(rw,sync,no_root_squash)
在添加的时候vim 不允许保存。显示 read_only file system
解决方法:mount -o remount,rw /(重新挂载/分区为可读写)
格式:共享资源路径 [主机地址][选项]
格式解析:
共享资源路径:就是要共享出来的目录或者磁盘分区。这些目录存在于NFS Server端,以供NFS Client挂载使用。
主机地址:设定允许使用NFS Server共享资源的客户端主机地址,主机地址可以是主机名、域名、IP地址等,支持匹配。
选项:下面是可用的各个选项含义:
ro: 即为:read only,也就是客户端主机对共享资源仅仅有读权限。
rw: 即为:read write,也就是客户端主机对共享资源有读、写权限。
no_root_squash: 信任客户端,根据用户UID进行判断,如果登入到NFS主机的用户是ROOT,那么此用户就拥有对共享资源的最高权限。此参数很不安全,建议不要使用。
root_squash:系统预设值,当登入NFS主机的用户root时,那么这个使用者的权限将被縮成为匿名使用者,也就是它的UID与GID都会变成nfsnobody身份;只有可读权限,例如客户端使用者以UID,GID)=(0,0)的身份使用共享目录时,其身份就被转换为(UID,GID)=(65534,65534) 也就nfsnobody这个用户身份。系统以此为预设值,显然是为了安全考虑。
all_squash:不管登陆NFS主机的是什么用户,都会将共享文件的UID和GID映射为匿名用户nfsnobody。
no_all_squash:系统预设值,保留共享文件的UID和GID默认权限。也就是客户端用户的UID以及GID和服务端共享文件UID和GID相同时,才有对共享文件的读写权限。这种选项保证了共享文件的用户和组权限不会改变。
anonuid:将登入NFS主机的用户都设定成指定的UID,此UID必须存在于NFS Server端/etc/passwd中。
anongid:与“anonuid”含义类似,但是变成 GID了,即用户组ID!
sync:资料同步写入磁盘中。默认选择。
async:资料会先暂时存放在内存中,不会直接写入硬盘。
开启NFS服务:
# systemctl start nfs
# systemctl start rpcbind
exportfs 命令可以临时生效一条策略。系统不重启,就不会生效。
客户端:
安装 rpcbind 和 nfs-utils
启动服务: service rpcbind start
查看nfs服务器提供了哪些服务:
showmount -a ip
查看nfs主机信息
showmount -e ip
查看nfs主机和目录信息
如何使用NFS: 在客户端挂载nfs服务器共享的目录
# mkdir /app
# mount -t nfs 192.168.1.152:/app /app
(需要关闭服务器端口的防火墙 systemctl stop firewalld.service )
NFS应用便捷场景:文件备份。
需要备份的文件为客户端。粗放备份文件的客户端为nfs服务器。
直接在挂载目录下。tar 需要复制的文件。
文件系统是基于操作系统的。用来管理和组织保存在磁盘驱动器上的数据的系统软件。通过对数据存储布局,文件命名,安全控制等方面的管理。解决了如何在设备上有效的存储数据。
元数据(metadata)存储文件的重要信息(文件的权限,大小,修改时间,属主,存储位置等)
文件系统是操作系统和硬盘之间 一个桥梁,对磁盘的写操作,都要经过文件系统,然后才到磁盘。
常见的文件系统:
DOS系统的msdoc
windows 下的FAT系统(fat16(最大支持2G)和fat32(最大支持4G))和NTFS文件系统
光盘文件系统 ISO-9660
linux 下 单一文件系统 ext2 和日志文件系统 ext3/ext4/xfs
集群文件系统 gfs (Red Hat Global File System)
虚拟文件系统 (/proc)
加密文件系统 (CFS)
网络文件系统(NFS)
linux标准文件系统是从VFS开始的,然后是ext2。ext3,ext4
ext系列的对比:
ext3是在ext2的基础上增加了日志形式(便于数据恢复)这一思想来源于:超级块和inode设计理念。
ext3是一种日志式的文件系统,在ext2的基础上加入特殊的inode(日志文件)。日志记录功能,用于记录文件系统的元数据或各种写操作的变化。ext3数据的写入顺序;先通过日志文件的记录功能,然后在将数据写入磁盘的最终位置。
ext4 是linux第四代日志文件系统。是ext3文件系统的后续版本。比较ext3的改进:(centos6下的默认文件系统)
1.支持更多的子目录数量(ext3支持32000个子目录)ext4,理论上支持无限数量子目录
2.支持更大的文件系统和更大的文件(ext3 持续贺词32TB的文件系统和2TB的文件,而ext4 容量可达1EB,文件容量增至16TB)
XFS文件系统:
XFS文件系统是SGI(美国硅图公司)开发的一个高级日志文件系统。centos7下作为默认文件系统(centos7 下构架全部是64位了)
文件系统格式化命令mkfs.xfs
# mkfs.xfs -f /dev/sda2 (由于sda2已经完成格式化了。需要-f 强制重新格式化)
meta-data=/dev/sda2 isize=512 agcount=4, agsize=1525824 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=6103296, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2980, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
文件系统一致性检测命令:
xfs_repair -n /dev/sda2 (-n 只是测试不是修复)
修复和监测要把分区卸载了。
这里出现启动问题:
A start job is running for dev-disk-by\x2duuid-.....device(1min \1min 30)
然后是时间超时
然后出现提示: [DEPEND] DEpendency failed for /data
不过 centos7下。的init系统还是比较好的。没有直接拒绝登录系统而是给了修复信息。
Give root passwd for maintenance (输入root密码进入修复)
(or type Control-D to continue):(这种一般是文件系统启动的错误。系统尝试自动修复文件系统)
前面 由于出现提示是/data挂载不了。还是先进入系统看下/etc/fstab
先查看 分区的UUID; # blkid
然后查看 /ect/fstab
对比发现: /data的UUID 有问题。
修改 /data 的UUID
重启,正常。
文件系统使用的差异:
1.读操作频繁,小文件非常多(web应用,邮件应用) ext 4 文件系统比较好。ext4支持更多目录和文件
2.写操作频繁。(需求日志功能)xfs 文件系统较好。(在高并发下:xfs比ext4 省CPU资源)
3.对性能和安全都要求不高。可以用ext2 。(没有日志记录功能,可以省去设备开销)
NFS 网络文件系统的
功能:
让网络上的不同操作系统之间共享数据。NFS首先在远程服务端(共享数据的操作系统)共享出文件或者目录,然后远程
共享出来的文件或者目录,可以通过挂载的方式接到本地的不同系统上。
实现原理:NFS server启动后,开启一个端口为客户端连接。由于这个端口每次都不一样,NFS文件系统通过rpc(remote procedure call)
远程过程调用,监听NFS守护进程的端口号,通知给客户端。
nfs需要2个系统服务。
portmap;RPC的portmap 管理器,管理RPC服务的连接
nfs-utils: 提供 rpc.nfsd 及prc.mountd 这2个 nfs (daemons)的系统服务。
其中:rpc.nfsd 是管理客户端是否有权限登录服务器。rpc.mountd 是管理认证后的客户端是否对文件有使用权。
简单点就是: rpc.nfsd 处理连接请求 rpc.mountd 监督是否有权限操作目录。
nfs是 c/s架构。
NFS 服务器端 安装 需要 rpcbind 和 nfs 包
centos7下一般默认安装了。现在检查下:
# rpm -qa | grep rpcbind
rpcbind-0.2.0-38.el7.x86_64
# rpm -qa | grep nfs
nfs-utils-1.3.0-0.33.el7.x86_64
libnfsidmap-0.25-15.el7.x86_64
主配置文件: /etc/exports
添加一条语句:/app 192.168.1.140(rw,sync,no_root_squash)
在添加的时候vim 不允许保存。显示 read_only file system
解决方法:mount -o remount,rw /(重新挂载/分区为可读写)
格式:共享资源路径 [主机地址][选项]
格式解析:
共享资源路径:就是要共享出来的目录或者磁盘分区。这些目录存在于NFS Server端,以供NFS Client挂载使用。
主机地址:设定允许使用NFS Server共享资源的客户端主机地址,主机地址可以是主机名、域名、IP地址等,支持匹配。
选项:下面是可用的各个选项含义:
ro: 即为:read only,也就是客户端主机对共享资源仅仅有读权限。
rw: 即为:read write,也就是客户端主机对共享资源有读、写权限。
no_root_squash: 信任客户端,根据用户UID进行判断,如果登入到NFS主机的用户是ROOT,那么此用户就拥有对共享资源的最高权限。此参数很不安全,建议不要使用。
root_squash:系统预设值,当登入NFS主机的用户root时,那么这个使用者的权限将被縮成为匿名使用者,也就是它的UID与GID都会变成nfsnobody身份;只有可读权限,例如客户端使用者以UID,GID)=(0,0)的身份使用共享目录时,其身份就被转换为(UID,GID)=(65534,65534) 也就nfsnobody这个用户身份。系统以此为预设值,显然是为了安全考虑。
all_squash:不管登陆NFS主机的是什么用户,都会将共享文件的UID和GID映射为匿名用户nfsnobody。
no_all_squash:系统预设值,保留共享文件的UID和GID默认权限。也就是客户端用户的UID以及GID和服务端共享文件UID和GID相同时,才有对共享文件的读写权限。这种选项保证了共享文件的用户和组权限不会改变。
anonuid:将登入NFS主机的用户都设定成指定的UID,此UID必须存在于NFS Server端/etc/passwd中。
anongid:与“anonuid”含义类似,但是变成 GID了,即用户组ID!
sync:资料同步写入磁盘中。默认选择。
async:资料会先暂时存放在内存中,不会直接写入硬盘。
开启NFS服务:
# systemctl start nfs
# systemctl start rpcbind
exportfs 命令可以临时生效一条策略。系统不重启,就不会生效。
客户端:
安装 rpcbind 和 nfs-utils
启动服务: service rpcbind start
查看nfs服务器提供了哪些服务:
showmount -a ip
查看nfs主机信息
showmount -e ip
查看nfs主机和目录信息
如何使用NFS: 在客户端挂载nfs服务器共享的目录
# mkdir /app
# mount -t nfs 192.168.1.152:/app /app
(需要关闭服务器端口的防火墙 systemctl stop firewalld.service )
NFS应用便捷场景:文件备份。
需要备份的文件为客户端。粗放备份文件的客户端为nfs服务器。
直接在挂载目录下。tar 需要复制的文件。
本文转自 swallow_zys 51CTO博客,原文链接:http://blog.51cto.com/12042068/1898605,如需转载请自行联系原作者