root_squash的效果如下: ruler@ruler-virtual-machine:/nfs$ ls -alh total 12K drwxrwxrwx 2 root root 4.0K 5月 31 22:12 . drwxr-xr-x 25 root root 4.0K 5月 27 22:16 .. -rw-r--r-- 1 root root 6 5月 31 22:05 client.txt -rw-r--r-- 1 root root 0 5月 31 22 :11 no_root_squash -rw-r--r-- 1 nobody nogroup 0 5月 31 22:12 root_squash exportfs主要用于管理当前NFS服务器的文件系统
relatime 0 0/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0devpts /dev/pts devpts rw,relatime,gid=5, relatime 0 0/dev/sdb1 /media/android ext4 rw,relatime,barrier=1,data=ordered 0 0[root@T-bagwell ~]# 到这里文件系统的注册和磁盘的挂载完成
物理文件系统由定义在NuGet包“Microsoft.Extensions.FileProviders.Physical”中的PhysicalFileProvider来构建。 这是一个公共类型,如果我们具有监控物理文件系统变化的需要,可以直接使用这个类型。 六、小结 我们借助下图所示的UML来对由PhysicalFileProvider构建物理文件系统的整体设计做一个简单的总结。 [ASP.NET Core 3框架揭秘] 文件系统[1]:抽象的“文件系统” [ASP.NET Core 3框架揭秘] 文件系统[2]:总体设计 [ASP.NET Core 3框架揭秘] 文件系统[3] :物理文件系统 [ASP.NET Core 3框架揭秘] 文件系统[4]:程序集内嵌文件系统
具体的文件系统分为: 磁盘文件系统:ext4/xfs/btrfs/zfs 内存文件系统:/proc 、/sys 网络文件系统:NFS、SMB 注意文件系统使用时需要挂载(mount)到某个目录才能使用 首先我们来分类认识一些具体的文件系统 (如果你已经使用过一段时间 Linux 系统,其实应该会对这些文件系统的名字有点熟悉) 磁盘文件系统 磁盘文件系统是我们经常使用到的文件系统,比如:ext4/xfs 内存文件系统 除了使用磁盘进行文件存储的文件系统之外,常见的就是我们的内存文件系统,最常见的就是我想说的 proc 文件系统。 //xiaolincoding.com/os/6_file_system/file_system.html#%E8%BF%9E%E7%BB%AD%E7%A9%BA%E9%97%B4%E5%AD%98%E6% 94%BE%E6%96%B9%E5%BC%8F https://segmentfault.com/a/1190000008481493 https://docs.huihoo.com/doxygen/linux
一、树形层次结构 IFileProvider对象为我们构建了一个具有层次化目录结构的文件系统。 由于IFileProvider是一个接口,所以由它构建的是一个抽象化的文件系统,这里所谓的目录和文件都是一个抽象的概念。 为了让读者朋友们对这个文件系统有一个大体认识,我们先来演示几个简单的实例。 文件系统管理的所有文件以目录的形式进行组织,一个IFileProvider对象可以视为针对一个根目录的映射。 对文件系统实施监控并在其发生改变时发送通知也是IFileProvider对象提供的核心功能之一。 我们以每隔5秒的间隔对文件data.txt作一次修改,而文件的内容为当前时间。所以当我们的程序启动之后,每隔5秒钟当前时间就会以如下图的方式呈现在控制台上。 ?
, "MergedDir": "/var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab /diff", "WorkDir": "/var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab sudo ls /var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab/merged ,upperdir=/var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab/diff ,workdir=/var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab/work
文件系统的第一块是超级块,描述文件系统的总体信息,挂载文件系统的时候在内存中创建超级块的副本。 (2)挂载描述符。虚拟文件系统在内存中把目录组织为一棵树。 每次挂载文件系统,虚拟文件系统就会创建一个挂载描述符:mount 结构体,并且读取文件系统的超级块,在内存中创建超级块的一个副本。 (3)文件系统类型。 (5)目录项。文件系统把目录看作文件的一种类型,目录的数据是由目录项组成的,每个目录项存储一个子目录或文件的名称以及对应的索引节点号。 (5)块设备文件。 (6)命名管道(FIFO)。 (7)套接字(socket)。 内核支持两种链接: (1)软链接,也称为符号链接,这种文件的数据是另一个文件的路径。 umode_t); int (*set_acl)(struct inode *, struct posix_acl *, int);//设置访问控制参数 } ____cacheline_aligned; 5.
由于内嵌于程序集的资源文件采用扁平化存储形式,所以在通过 EmbeddedFileProvider构建的文件系统中并没有目录层级的概念。我们可以认为所有的资源文件都保存在程序集的“根目录”下。 由于资源文件系统并不具有层次化的目录结构,它所谓的物理路径毫无意义,所以PhysicalPath属性直接返回Null。 对于内嵌资源文件系统来说,根本就不存在所谓的文件更新的问题,所以它的Watch方法会返回一个HasChanged属性总是False的IChangeToken对象。 [ASP.NET Core 3框架揭秘] 文件系统[1]:抽象的“文件系统” [ASP.NET Core 3框架揭秘] 文件系统[2]:总体设计 [ASP.NET Core 3框架揭秘] 文件系统[3] :物理文件系统 [ASP.NET Core 3框架揭秘] 文件系统[4]:程序集内嵌文件系统
: SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name, char __user *, type, unsigned fstype) return -EINVAL; type = get_fs_type(fstype);//根据文件系统名字查找文件系统类型 if (! (多见于FUSE),设置子文件系统类型名 if (! do_add_mount(real_mount(mnt), path, mnt_flags); if (err) mntput(mnt); return err; } do_new_mount挂载函数首先根据文件系统名字查找文件系统类型 ;2.新文件系统的挂载实例的根inode是一个符号链接,这两种情况返回错误。
11111101101110111 如果 i = 0表明数据块i 是空闲的, 反之是分配的 使用简单但是可能会是一个big vector: 例如: 160GB disk →(有40MB的空闲块) 40M blocks → 5MB worth of bits(需要5MB来表示160GB磁盘的空闲情况) 然而,如果空闲空间在磁盘中均匀分布,那么再找到”0”之前需要扫描 磁盘上数据块总数 (n)/ 空闲块的数目(r) 这个管理空闲空间的数据块空间 使用多个并行磁盘来增加: 吞吐量(通过并行),可靠性和可用性(通过冗余) RAID - 冗余磁盘阵列: 各种磁盘管理技术;RAID levels: 不同RAID分类, 如RAID-0,RAID-1,RAID-5 向两个磁盘写入,从任何一个读取) 三、RAID-4 数据块级磁带配有专用奇偶校验磁盘: 允许从任意一个故障磁盘中恢复 条带化和奇偶校验按byte-by-byte或者bit-by-bit: RAID-0,4,5: block-wise ;RAID-3: bit-wise 四、RAID-5 每个条带快有一个奇偶校验块,允许有一个磁盘错误 五、RAID-6 两个冗余块,有一种特殊的编码方式,允许两个磁盘错误 磁盘调度
1.文件系统概览 文件系统本质就是磁盘和用户进程之间的中介 1.1.文件系统的作用 数据存储和组织:文件系统将存储设备划分成文件和目录,使得用户进程更易使用,实际还是存储到存储设备的磁盘块 数据命名和定位 : 允许用户对文件进行命名,可通过不同文件系统的inode进行文件定位 数据持久化:会将数据持久化到磁盘 数据共享和包含:文件系统提供了文件权限机制,可以控制不同用户对文件的权限类型不同,比如rwx-wxr ,然后被格式化为具体的文件类型,比如ext4 结构: 超级块:记录整个文件系统实例的元数据(大小,数量,空闲块数量等) inode表:记录文件和目录的元数据 数据块:实际存储文件内容的地方 2.常用文件系统 RPC 主要作用 实现文件级别的共享,类似于共享网盘 3.文件系统使用 3.1 创建分区 (在存储设备上创建可容纳文件系统的分区) 创建分区工具 fdisk : 任意存储设备上创建和管理分区,最大处理2TB (数据存储到分区之前,必须用文件系统对其进行格式化) 文件系统工具 3.3 将分区挂载到虚拟目录 4.逻辑卷(logic volumn manager LVM) 4.1 解决问题 在线、动态地调整大小
sudo lsof -i:22122COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEfdfs_trac 37158 root 5u sudo lsof -i:23000COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEfdfs_stor 37171 root 5u /fdfs/storage.conf提示:[2022-11-06 13:56:44] DEBUG - base_path=/home/fastdfs/storage, connect_timeout=5,
home - 用户主目录的父目录 /lib - 共享库文件 /lib64 - 共享64位库文件 /lost+found - 存放未链接文件 /media - 自动识别设备的挂载目录 /mnt - 临时挂载文件系统的挂载点 opt - 可选插件软件包安装位置 /proc - 内核和进程信息 /root - root账户主目录 /run - 存放系统运行时需要的东西 /sbin - 超级用户的二进制文件 /sys - 设备的伪文件系统 磁盘管理 列出文件系统的磁盘使用状况 - df。 磁盘分区表操作 - fdisk。 格式化文件系统 - mkfs。 文件系统检查 - fsck。 挂载/卸载 - mount / umount。
文件系统的了解阶段 当文件没有打开的时候,那么文件存储在磁盘之中。 扇区就是磁盘的基本单位 虽然磁盘的基本单位是扇区(512字节),但是比较小,而且有可能不同的生产商给出的扇区的大小可能本不一样,所以操作系统(文件系统)和磁盘进行I/O操作的基本单位的块 块是对磁盘存储和访问的抽象 块通常由下面几个部分构成: Block Group:ext2文件系统根据分区的大小划分为数个快组BlockGroup。 ,且每一个BlockGroup都有着相同的结构 Block Group分为: 超级块:存放文件系统本身的结构信息。
无论是本地的Ext4、NTFS,还是网络文件系统NFS,甚至是设备驱动的“伪文件系统”,只要它们按照VFS的“模板”实现一套自己的操作方式,就能接入VFS。 5. VFS“派单”给驱动:VFS说:“哦,原来这是个设备文件,它的活不归文件系统管,得找它的驱动。” 于是,VFS直接调用 file->f_op->read(...) 它从鼠标的硬件寄存器或内存缓冲区中,读取一次“鼠标移动”的原始数据(比如 dx=5, dy=10)。 它可能对这些原始数据进行一些处理,然后复制到VFS提供的用户缓冲区 buf 中。 7. 七、关键概念图 Linux文件系统与设备驱动协作 ├── 核心纽带:VFS(虚拟文件系统) │ ├── 作用:统一接口,屏蔽差异 │ ├── 对接对象:文件系统、设备驱动、用户程序 │ └─ 匹配对应设备驱动 ├── 5. 创建file结构体记录会话 └── 6.
作为一名QT开发工程师,对于QT的文件系统操作的便利性推崇备至,但在非QT程序中仅仅因为操作文件系统而集成QT库显得过于繁重。 C++17引入了std::filesystem,使得文件系统操作变得前所未有的便捷和高效。 同时,文件系统操作的相应功能是在std中的filesystem命名空间内,所以在包含头文件<filesystem>的基础上,还要注意使用命名空间。 filesystem_error& ex) { std::cerr << "Exception caught (" << ex.what() << ")\n"; } 结语 std::filesystem不仅极大地简化了文件系统的操作
Check brick nodes 5. Client 5.1. /etc/fstab 6. Other 1. # gluster peer status Number of Peers: 2 Hostname: brick1.example.com Uuid: c8acab33-ed6a-4aa5-8b77 -5be84695ffce State: Peer in Cluster (Connected) Hostname: brick2.example.com Uuid: bf309355-7444-48e4 0 0 brick1.example.com:49152 brick1.example.com:1020 ESTABLISHED 13841/glusterfsd 5. ) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,
文件系统中重要的概念有大概有超级块、inode、file、文件描述符、文件缓存系统、目录。下面我们逐个说一下。 文件系统的概念: 1.超级块 超级块是负责管理整个文件系统,他记录了文件系统的元数据。 从数据结构中我们可以看到他记录了文件系统的inode数量、文件系统在硬盘中占据的扇区数、inode位图、数据块位图、文件系统在硬盘中第一块的块号、该文件系统中文件大小的最大值。 5 文件缓存系统 相对内存读写而言,读写硬盘的速度是非常慢的,如果每次读写都要和硬盘打交道,那无疑是很低效的。所以文件系统中加了一层缓存。缓存系统管理着文件数据的有效性。减少对硬盘的操作。 文件系统的数据结构 文件系统的本质是利用一些策略对一块存储进行管理。所以我们首先需要了解文件系统的数据结构。 ) * * 0 - unused (nodev) * 1 - /dev/mem * 2 - /dev/fd * 3 - /dev/hd * 4 - /dev/ttyx * 5 - /dev
目录 c语言文件操作: linux文件系统调用: open: 标志位传参: 虚拟文件系统: write: close: 跨平台性: c语言文件操作: 先来简单回顾一下c语言的文件操作, linux文件系统调用: 在linux中,我们还可以使用系统调用来对文件进行修改,我们来认识几个系统调用接口: open: 我们先在linux下查一下这个函数的系统调用手册 虚拟文件系统: 回到open函数,可以注意到之前的代码,open函数有一个返回值,这个返回值是这个文件的文件标识符,一个进程,可能会打开很多文件,当一个文件被打开会创建一个struct files来描述这个文件 这套文件系统被称为虚拟文件系统 。 所以我们的操作系统在对文件进行操作时,只认文件描述符fd!!! write: 这里传fd的作用,想必不需要我多讲了,这个函数功能应该很明了了。
Wikipedia对文件系统定义: In computing, a file system or filesystem is used to control how data is stored and 翻译成中文大致意思:文件系统主要是管理数据存储以及数据如何检索的,而数据存储在磁盘或内存中。上期我们聊过了漫谈虚拟内存,本期我们就重点介绍磁盘中的机械磁盘的组成以及工作原理,然后引申到文件系统。 文件系统设计 文件系统采用分层设计,最底层的是设备,接着是IO控制(设备驱动),基本文件系统(向设备驱动程序发出命令),文件组织模块(负责文件的逻辑块和物理块,以及管理空闲空间),逻辑文件系统(管理元数据 ) 文件系统的实现 文件系统的实现包括磁盘结构和内存结构,即我们将文件以什么结构存储于磁盘,以什么结构存储于内存。