Linux下XFS、Ext2文件系统对比、文件管理、inode、文件名、标准I/O、管道|tee、tr -cs blog by fazionlan July.31st

Linux下XFS、Ext2文件系统对比、文件管理、inode、文件名、标准I/O

Ext2、Fat、XFS文件系统

  文件系统是对一个存储设备上的数据和元数据进行组织的机制,文件系统的创建是在格式化分区的过程中完成的(一个分区就是一个系统),众所周知Windows操作系统使用的文件系统是FAT与NTFS;Linux不同的发行版本使用的文件系统主要有Ext、XFS、Btrfs等。这里重点介绍Ext2文件系统,并列举“拖油瓶”Fat文件系统和“高大上”XFS文件系统的特点。



















Ext2

ext2文件系统是索引式文件系统,分区结构如下:

1.jpg

第一部分是引导扇区,负责加载内核;第二部分是superblock,存储inode/block的总量、使用和剩余量及文件系统的信息;第三部分是inode,存储文件的元数据数据所在的block号;第四部分是block,存储文件的数据。文件的元数据包括文件大小、拥有者、所属组、时间戳等,但是不包括文件名,可用ls -l命令查看文件的元数据。当Linux找到一个文件时,先从目录项中找到文件名和inode,只要找到对应的inode,沿着指针并行把所有数据块收集起来,就可以读取一个完整的文件了,下面是inode的结构图:

2.jpg

由此计算可得block大小为4k时的单个文件的最大容量为4T,但是由于Ext2文件系统本身的限制,单个文件大小不能超过2T:

3.jpg

文件的inode信息可用stat命令查看,如图

4.jpg

这是文件系统的block、inode、目录项的指向情况:可以看到有两个目录项指向同一个inode,链接数会记录在inode中,只有当链接数为0时该文件才会被删除,也就是只有删除所有指向这个inode的文件名时才能删除文件,硬链接的原理就是多个文件名指向同一个inode,因此多个文件名共用一个inode号,达到共享与备份的目的。符号连接(软链接)则是一个有inode号的文件,其原理则是在文件的内容(数据)存放了该符号链接指向的具体文件名,相当于windows的快捷方式。很明显硬链接不能链接目录,也不能跨设备(分区),原因是每个分区都有独立的inode编号。符号链接则可以跨分区,也可以链接目录。




Fat

早期的fat文件系统用在window98系统中,它没有inode作为block的索引,因此读文件是是这样的duang!duang!duang!读完一个块才才知晓下一个块的位置,读取时间较长,效率低。

5.jpg


XFS

在CentOS 7上xfs作为缺省文件系统,目前最常见的文件系统Ext4已经非常优秀,但是随着存储需求越来越大,Ext4渐渐适应不了了,比如现在虽然Ext4 目录索引采用了Hash Index Tree, 但是依然限制高度为2.做过实际测试Ext4的单个目录文件超过200W个,性能下降的就比较厉害了。由于历史磁盘结构原因Ext4 的inode个数限制(32位数)最多只能有大概40多亿文件。而且Ext4的单个文件大小最大只能支持到16T(4K block size),而XFS使用64位管理空间,文件系统规模可以达到EB级别,可以说未来几年XFS彻底取代Ext4是早晚的事情。另外,我看了一下XFS目前redhat至少投入了5个Kernel developer在上面,因为XFS 是基于B+ Ttree管理元数据,即将支持reflink,dedupe等高级特性(Oracle 开发者已经开发了patch)。综上所述,XFS 取代Ext4 已经成为必然。

文件管理

  1. root用户下mv、rm、cp都定义了别名,加了-i提示的选项

  2. touch 刷新时间(-),创建空文件 touch f? ?表示一个字符 

    • touch -m -t 201710100220 file

    • touch -c #如果文件存在,则不予创建

    • touch -m #仅改变mtime

    • touch -a #仅改变atime

    • cp – copy files and directories

    • cp -i #提示覆盖或删除的信息,root下alias cp=’cp -i’避免权限过大乱cp

    • cp #直接复制会丢失属性

    • cp –preserve=ownership,timeship,mode或all #保留想要的属性,号隔开

    • cp -f #删除并从新复制,用户在自己的家目录可以-f覆盖其他用户的文件

    • cp -r #复制整个目录(文件和目录),可指定复制的目录,如果目录存在直接复制文件夹到存在的目录,目录不存在则复制目录到的内容到新的文件夹

    • cp -a #归档,保留原来的属性,链接还是链接

    • cp -d #不复制原文件,只复制链接名

    • cp -p #复制所有属性,链接变源文件

    • alias 别名命令 存放在~.bashrc和/etc/bashrc中

    • alias name=’command -option argument’

    • unalias name

    • \command or ‘command’ or /path/command #执行原命令

  3. mv 移动和重命名文件 

    • mv -i

    • mv -f

  4. rm 

    • rm -i

    • rm -f

    • rm -r

    • rm –no-preserve-root #cent6增加的选项

    • rm -rf = \rm

    • rmdir 删除空目录

    • rmdir -p递归删除空目录

  5. tree 

    • rpm -i /misc/cd/Packages/tree

    • tree -d

    • tree -L

    • tree -P

    • tree -p

    • mkdir

    • tree -p

    • tree -v

    • tree -m

  6. inode index node 

    在Linux中文件的链接方式有两种,一种是类似Windows的快捷方式,可以链接文件或目录,我们称之为软链接符号链接;另一种是直接链接到文件的inode并产生新的文件名,这种称之为硬链接(hard link)。文件由元数据和数据组成,其中元数据指的是文件的属性(大小、拥有者、权限、时间戳等信息,不包括文件名),数据就是文件的内容。元数据存放在inode中,数据存放在inode指向的一个或多个数据块(block)中。

    软链接

    (1)软链接有自己的inode号
    (2)软连接可以跨设备(分区)
    (3)软连接可以链接目录与文件(软连接)
    (4)软连接不会增加链接数
    (5)文件大小为链接地址的字符个数
    (6)软连接权限无关要紧
    硬链接(1)硬链接的inode相同
    (2)硬链接不能跨设备(分区)
    (3)硬链接不能应用于目录
    (4)每增加一个硬链接,该文件的链接数加一
    • 文件引用根据inode号,一般inode会占用文件系统磁盘空间的1%

    •  删除文件:分配inode,增加该目录的目录项,分配数据块

    •  增加文件:释放inode,减少该目录的目录项,数据块回收

    •  移动文件:创建新的目录项,删除旧目录的目录项,inode不变。但是不同分区间相当于先复制整个文件再删除原文件

    • file 查看文件类型,确定文件内容file -c #详细显示指令执行的过程,便于排错或分析程序执行

    • file -f #查看文件名的文件类型

    • file -F“—” #指定文件名后的分隔符

    • file -L file /zero告诉你这是一个软连接,file -L /zero告诉你文件类型

    • file -i #输出mime类型的字符串

    • file -b #列出文件的类型,但是不显示文件名

    • 不同分区的节点号可以不同,同一个分区用节点号唯一标识一个文件

    • df -i #显示每个分区的inode大小和利用率

    • ln f1 f2 #f2硬链接到f1的inode相同(ls -li),链接数加1

    • ln f1 /boot/f2 #硬链接不能跨设备(分区),且硬链接的文件不能是目录,软连接能跨设备(分区)

    • 目录的链接数量至少是2,本身和 . 都指向该目录,创建一个子目录会增加一个链接数

    • centos6 /目录下 -ai显示inode为2的表示一个分区的根

    • centos7 /目录下 -ai显示inode为128表示一个分区的根

    • ln -s f1 /testdir/f2 #软连接、符号链接,可以是文件或目录,f1软链接到f2(链接

    • 不同目录时f1用绝对路径或f1的相对路径,否则看到f2闪烁,centos中多用相对路径),使用了不同的inode

标准I/O设备

  1. 程序=指令+数据 

    • 读入数据:input

    • 输出数据:output

  2. 文件描述符fd,存放在/proc/任一进程号/fd/中,用ll可看到标准I/O设备

  3. Linux提供3种I/O设备,标准输入、输出、错误 

    • 标准输入(stdin)0,默认接收来自键盘的输入。

    • 标准输出(stdout)1,默认输出到终端窗口。

    • 标准错误(stderr)2,默认输出到终端窗口。

  4. I/O重定向 —— 输出:即改变默认位置 

    • ls > /dev/pts/2 #标准输出重定向到设备或文件中

    • `在执行命令的时候,可把输出信息重定向到到/dev/null中,干干净净

    • > f1 #stdout重定向,可创建一个空文件

    • 2> #stderr重定向

    • &> #stdout与stderr重定向

    • &>> 2>> >> #追加,不覆盖

    • f1 2>&1 #stdout输出到f1,把stderr变成stdout再输出到f1

    • set -C #禁止覆盖当前终端会话有效

    • set +C #允许覆盖

    • cat f1 f2 > f3 #合并到f3

  5. I/O重定向 —— 输入:用文件代替键盘的输入 

    • cat < f1 #把f1输入到cat中

    • cat > f1 <<eof  #多行重定向,在标准输时使用标准输入,表示输入eof就结束,此时才写入文件,Ctrl d退出。还有一个好处是可以一行一行的输入,不必放在一行

    • mail中默认是 . 表示结束,如 mail -s subject user <<eof 则表示以eof结

  6. 管道(pipe) 

    1. 默认只管传递正确地命令,即标准输出,可使用 2>&1 或 |&实现标准错误的重定向

    2. sjdgosgo 2>&1 |grep(旧写法) = sdshdgo |& grep(新写法) #把标准错误重定向到标准输出,再通过管道传递

    3. |tee #可实现在终端显示并写入文件,默认是覆盖文件 |tee -a 追加文件

    4. |less #一页一页地查看

  7. tr – 转换和删除字符 

    1. tr[OPTION]… SET1 [SET2]

    2. tr ‘a-z’ ‘A-Z’ 或 tr ‘[:lower:]’ ‘[:upper:]’ #逐个字符替换,若后者小于前者,则其余字符用最后一个字符替换

    3. -c或–complerment:取字符集的补集,取字符集以外的所有字符

    4. -d或–delete:删除所有属于第一字符集的字符;

    5. -s或–squeeze-repeats:压缩连续重复的字符用单独一个字符表示,如删除空行

    6. -t或–truncate-set1:先删除第一字符集较第二字符集多出的字符

练习

2016-07-31_142752.jpg

Ext2、Fat、XFS文件系统


原创文章,作者:helloc,如若转载,请注明出处:http://www.178linux.com/27044

(0)
hellochelloc
上一篇 2016-07-29
下一篇 2016-08-01

相关推荐

  • bash编程尾声

    数组 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合。 数组名和索引     索引:编号从0开始,属于数值索引     注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引, bash4.0版本之后开始支持。  &nb…

    Linux干货 2016-08-25
  • Linux启动之grub详解,故障排除,自建linux

    概述     上篇我们以CentOS6为例介绍了一下系统启动流程,本篇将承接上篇,详细的介绍一下系统启动流程中的grub,以及系统启动过程中的各种故障的排除,以及利用现有内核自己构建一个能够正常启动的简单Linux系统。具体分为一下几个部分:     1、grub相关概念详解 &…

    Linux干货 2016-09-13
  • 第1周-1:计算机的组成及其功能以及部分常见Linux发行版简介

    一、计算机的组成及其功能: 计算机主要由硬件部分和软件部分组成。 1、硬件部分 (1)中央处理器 由控制器和运算器两大部分组成,是计算机的大脑,硬件部分里最关键的部分。决定着整个计算机系统的性能。 控制器负责协调计算机硬件的其他部分同步工作,对其他的硬件进行发号施令。是计算机系统的司令。控制器从存储器中读取指令,分析指令的含义,要完成什么操作,需要什么数据,…

    Linux干货 2016-11-01
  • vim编辑器

    在使用Linux的管理过程中有很多的工作就是要修改或设置某些重要软件的配置文件,这些配置文件都是以ASCLL的纯文本格式存在的,所以能够学好一个文本编辑器就至关重要了,vim作为高级版的vi编辑器不仅可以用不同的颜色来高亮显示某些重要关键字或字符还能进行如shell脚本的编写,c程序的编辑等功能。 vim编辑器和nano编辑器是一个全屏的编辑器。vim打开文…

    Linux干货 2016-12-20
  • 0804正则表达式作业

    用正则表达式表示IP地址         首先来分析一下,制IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(1…

    Linux干货 2016-08-10
  • linux进程和计划任务

    内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、 安全功能等 进程管理:     系统优先级:数字越小,优先级越高    实时优先级: 99-0,值最大优先级最高    nice值:-20 到19 ,对应系统优先级100-139或99 Linux 内核:抢占式多任务  &nb…

    Linux干货 2017-03-23