首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
函数参数与返回值
传递变长参数
defer 和追踪
内置函数
递归函数
将函数作为参数
闭包
应用闭包:将函数作为返回值
使用闭包调试
计算函数执行时间
通过内存缓存来提升性能
声明和初始化
切片
For-range 结构
切片重组(reslice)
切片的复制与追加
字符串、数组和切片的应用
声明、初始化和 make
测试键值对是否存在及删除元素
for-range 的配套用法
map 类型的切片
map 的排序
将 map 的键值对调
标准库概述
regexp 包
锁和 sync 包
精密计算和 big 包
自定义包和可见性
为自定义包使用 godoc
使用 go install 安装自定义包
自定义包的目录结构、go install 和 go test
通过 Git 打包和安装
Go 的外部包和项目
在 Go 程序中使用外部库
结构体定义
使用工厂方法创建结构体实例
使用自定义包中的结构体
带标签的结构体
匿名字段和内嵌结构体
方法
类型的 String() 方法和格式化描述符
垃圾回收和 SetFinalizer
当前位置:
首页>>
技术小册>>
go编程权威指南(二)
小册名称:go编程权威指南(二)
从本小节我们将要开始 Linux 中的文件系统,在 Linux 系统中,文件系统都是基于硬盘创建的,Linux 系统支持多种不同类型的文件系统管理文件和目录,本小节介绍几种基本常见的文件系统。 Linux 文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有 Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。在 Linux 中普通文件和目录文件保存在称为块物理设备的磁盘或者磁带上,大多数 Linux 发行版在安装时会提供默认的文件系统。 1\. df 命令显示文件系统类型 ----------------- 使用 `df -T -h` 命令可以查看当前文件系统的类型,命令如下: df -T -h 执行结果详解: * 第一列 `文件系统` 表示的含义是 **设备的设备文件位置**; * 第二列 `类型` 表示的含义是 **文件系统类型(图中类型包含 devtmpfs、tmpfs、xfs、ext4、iso9660)**; * 第三列 `容量` 表示的含义是 **能容纳的空间大小**; * 第四列 `已用` 表示的含义是 **已经用了多少空间大小**; * 第五列 `可用` 表示的含义是 **还有多少空间大小可用**; * 第六列 `已用%` 表示的含义是 **已经占用的空间比例**; * 第七列 `挂载点` 表示的含义是 **设备挂载了那个挂载点上**。 2\. ext 文件系统介绍 -------------- Linux 操作系统最开始引入的文件系统是`扩展文件系统`,记作 `ext`,它可以使用虚拟的目录操作硬件设备。`ext` 文件系统采用索引节点存放虚拟目录中存储的文件信息,索引节点系统在每个物理设备中创建一个单独的表(称为索引节点表)来存储这些文件信息,存储在虚拟目录中的每一个文件在索引节点表有一个条目。`ext` 文件系统中的 `extended` 部分来自其跟踪的每个文件的额外数据,这些数据包括: * 文件大小; * 文件的属主; * 文件的访问权限; * 指向存有文件数据的每个硬盘块的指针; * 文件名; * 文件所在的属组。 Linux 通过唯一的数值(称作索引节点号)来引用索引节点表中的每个索引节点,这个值是创建文件时由文件系统分配的。文件系统通过索引节点号而不是文件全名及路径来标识文件。 3\. ext2 文件系统介绍 --------------- 使用最开始的 `ext` 文件系统有很多的限制(如文件最大不能超过2GB),所以在 Linux 系统出现后,很快就有了 `第二代拓展文件系统`,记作 `ext2`。`ext2` 文件系统是 `ext` 文件系统基本功能的一个扩展,而且保持了 `ext` 文件系统一样的结构,`ext2` 文件系统扩展了索引节点表的格式来保存系统上每个文件的更多信息。 `ext2` 的索引节点表为文件添加了创建时间、修改时间和最后一次访问的时间帮助系统来追踪文件的访问情况。`ext2` 文件系统还将允许的最大文件大小增加到了 32 TB(Linux 2.6 之前是 2TB),以容纳数据库服务器中常见的大文件。除了额外扩展的索引节点外,`ext2` 文件系统还改变了文件在数据块中存储的方式。`ext` 文件系统在读取文件时不需要为了数据块查找整个物理设备。 ### 3.1 ext2 文件系统特点 * 当创建 `ext2` 文件系统时,系统管理员可以根据预期的文件平均长度来选择最佳的块大小(从1024B~4096B)。例如,当文件的平均长度小于几千字节时,块的大小为 1024B 是最佳的,因为这会产生较少的内部碎片——也就是文件长度与存放块的磁盘分区有较少的不匹配。另一方面,大的块对于 大于几千字节的文件通常比较合合适,因为这样的磁盘传送较少,因而减轻了系统的开销。 * 当创建 `ext2` 文件系统时,系统管理员可以根据在给定大小的分区上预计存放的文件数来选择给该分区分配多少个索引节点。这可以有效地利用磁盘的空间。 * 文件系统把磁盘块分为组。每组包含存放在相邻磁道上的数据块和索引节点。正是这种结构,使得可以用较少的磁盘平均寻道时间对存放在一个单独块组中的文件并行访问。 * 在磁盘数据块被实际使用之前,文件系统就把这些块预分配给普通文件。因此当文件的大小增加时,因为物理上相邻的几个块已被保留,这就减少了文件的碎片。 * 支持快速符号链接。如果符号链接表示一个短路径名(小于或等于 60 个字符),就把它存放在索引节点中而不用通过由一个数据块进行转换。 ### 3.2 ext2 文件系统健壮性特点 文件更新策略的谨慎实现将系统崩溃的影响减到最少。我们只举一个例子来体现这个优点:例如,当给文件创建一个硬链接时,首先增加磁盘索引节点中 的硬链接计数器,然后把这个新的名字加到合适的目录中。在这种方式下,如果在更新索引节点后而改变这个目录之前出现一个硬件故障,这样即使索引节点的计数 器产生错误,但目录是一致的。因此,尽管删除文件时无法自动收回文件的数据块,但并不导致灾难性的后果。如果这种处理的顺序相反更新索引节点前改变目录,同样的硬件故障将会导致危险的不一致,删除原始的硬链接就会从磁盘删除它的数据块,但新的目录项将指向一个不存在的索引节点。如果那个索引节点号以 后又被另外的文件所使用,那么向这个旧目录的写操作将毁坏这个新的文件。 在启动时支持对文件系统的状态进行自动的一致性检查。这种检查是由外部程序 `e2fsck` 完成的,这个外部程序不仅可以在系统崩溃之后被激活,也 可以在一个预定义的文件系统安装数每次安装操作之后对计数器加 1 之后被激活,或者在自从最近检查以来所花的预定义时间之后被激活。 支持不可变 `immutable` 的文件不能修改、删除和更名和仅追加 `append-only` 的文件只能把数据追加在文件尾。 既与 `Unix System V Release 4(SVR4)` 相兼容,也与新文件的用户组 ID 的 BSD 语义相兼容。在 SVR4 中,新文件采用创建它的进程的用户组 ID;而在 BSD 中,新文件继承包含它 的目录的用户组 ID。`ext2` 包含一个安装选项,由你指定采用哪种语义。 4\. 小结 ------ 本小节介绍了 Linux 系统中较早期的文件系统 `etx` 和 `ext2`,使用 `df -T -h` 可以查看磁盘对应的文件系统类型.
上一篇:
修改文件所属关系
下一篇:
日志文件系统
该分类下的相关小册推荐:
WebRTC音视频开发实战
Golang并发编程实战
深入解析go语言
Go语言入门实战经典
go编程权威指南(一)
深入浅出Go语言核心编程(二)
深入浅出Go语言核心编程(五)
从零写一个基于go语言的Web框架
深入浅出Go语言核心编程(六)
Go Web编程(上)
Go语言从入门到实战
Go开发基础入门