欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

文件系统,inode,iostat,dstat

程序员文章站 2024-03-24 14:26:22
...

什么是文件系统:

文件的组织与管理结构,是一个有关于磁盘中各种有用信息的记录——即是保存以下信息的结构记录表:① 当前所使用磁盘的容量信息 ②所存储文件与目录

文件系统如何得到?

  • 将一个分区格式化就可以得到一个文件系统了
  • 分区=文件系统

新加磁盘的完整步骤
物理连接-》分区-》格式化-》挂载-》更新/etc/fstab文件
如下图所示:
文件系统,inode,iostat,dstat

文件系统

Linux 支持多种文件系统:

  • ext2:Linux基本文件系统
  • ext3:ext2的增强版本,是Linux的默认文件系统 —>REDHAT 5
  • ext4:ext文件系统的第四个版本 REDHAT 6
  • swap:交换文件系统—》虚拟:内存使用
  • nfs:网络文件系统,适合Linux或Unix机器间共享
  • smbfs:适合Linux或Unix和windows机器间共享

Linux内核采用虚拟文件系统层(VFS)
规定目录树上所有东西统一为如下结构:

  • dentry
  • i-节点
  • data

文件系统重要参数

  • superblock(超级块):记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式。 一个超级块对应一个文件系统!!保存文件系统的大小、状态、类型等等。(即此文件系统的整体信息)
  • inode 索引节点:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号
  • block:实际记录文件的内容,若文件太大时,会占用多个 block。 (

    文件系统,inode,iostat,dstat

文件系统如何存取文件?

  • ①根据文件名,通过directory的对应关系,找到文件对应的inode number;
  • ②再根据Inode number读取到文件的Inode table;
  • ③再根据Inode table中的Pointer读取到相应的Blocks。

inode的理解

一、inode是什么?
理解inode,要从文件存储说起。
文件存储在硬盘上,硬盘的最小存储单位叫做”扇区”,每个扇区储存512字节。
操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。块的大小,最常见的是4kb,即连续八个sector(扇区)组成一个block(块)。
文件数据都储存在“块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者,文件的创建日期,文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名:索引节点
二、inode的内容?
inode包含文件的元信息,具体来说有以下内容:

  • 文件的字节数
  • 文件拥有者的User ID
  • 文件的Group ID
  • 文件的读写执行权限
  • 文件的时间戳,共有三个:
    • ctime指inode上一次变动的时间;
    • mtime指文件内容上一次变动的时间;
    • atime指文件上一次打开的时间;
  • 链接数(即有多少文件名指向这个inode)
  • 文件数据block的位置;

    可以用stat命令,查看某个文件的inode信息:

#stat a.txt

三、inode的大小
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分为两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1kb或每2kb就设置一个inode。
查看每个硬盘分区的inode总数和已经使用的总量:

#df -i

查看每个inode节点的大小:

#sudo dumpe2fs -h /dev/hda | grep "Inode size"

dumpe2fs命令

dumpe2fs命令:

  • 用于打印”ext2”、”ext3”文件系统的超级块和块组信息。
  • -b:打印文件系统中预留的块信息;
  • -h:仅显示超级块信息;

例子:
#sudo dumpe2fs /dev/sda8 --》查看sda第8块磁盘信息

注意:!因为每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况,这时,也是无法在硬盘上创建新文件的。
四、inode号码
Linux系统内部不使用文件名,而是用inode号码来识别文件
识别文件的过程:

  • ①找到文件名对应的inode号码;
  • ②通过inode号码获取inode信息;
  • ③根据inode信息,找到文件数据所在的block,读出数据。
#ls -i    
#查看文件名对应的inode号码

PS:其它文件系统

  • vfat:windows早期文件系统
  • ntfs:windows默认文件系统,功能非常强大
  • iso9660:光盘的只读文件系统
  • GFS:google专用存储海量搜索数据而设计的专用文件系统
  • reiserfs:早期linux使用的日志功能的文件系统
  • fat32
  • gfs:google出的文件系统
  • tfs:淘宝出的文件系统
  • mfs:分布式文件系统
  • proc文件系统:内存

创建完整的文件系统的四个步骤

  • ①建立分区 (fdisk 磁盘名或者parted GPT)
  • ②格式化分区建立文件系统(mkfs .ext4 磁盘区名)
  • ③检验文件系统
  • ④装载文件系统(mount)
①创建分区

fdisk命令建立分区
用途:在交互式的操作环境中管理磁盘分区
格式:fdisk [磁盘设备]
交互模式中的常用指令:

  • m:查看操作指令的帮助信息
  • p:列表查看分区信息
  • n:新建分区
  • d:删除分区
  • t:变更分区类型
  • w:保存分区设置并退出
  • q:放弃分区设置并退出

(不用记,按m即可看到!)

PS:linux分区常用ID

ID 标签 任务
83 Linux Linux ext2或ext3文件系统
82 Linux Swap Linux交换空间分区
85 Linux extended Linux扩展分区
Fd Linux raid auto Linux软件RAID分区
8e Linux LVM Linux 逻辑卷管理物理卷
②格式化

mkfs命令
用途:Make Filesystem,创建文件系统(格式化)
格式:mkfs -t 文件系统类型 分区设备

例:mkfs -t ext3 /dev/sdb1
或 mkfs.ext3 /dev/sdb1

格式化一个分区时:
ntfs:要有ntfs-3g这个软件
XFS:xfsprogs软件
vfat:dosfstools软件

③修复文件系统

fsck命令
用途:file system check,诊断修复文件系统
格式:fsck -t 文件系统类型 分区设备
-y:自动输入yes(与-a相同)

常见故障原因:
非正常关机、突然断电、设备读写失误等;
文件系统的超级块(super-block)信息被破坏;
模拟对/dev/sdb1分区的破坏操作

dd if=/dev/zero of=/dev/sdb1 bs=512 count=4

检查是否能挂载该分区

报错:mount: you must specify the filesystem type

对/dev/sdb1 分区进行修复

fsck -yt ext3 /dev/sdb1

再次挂载该分区。

⑤挂载文件系统

每个文件系统提供一个根目录作为文件系统的基础;
挂载文件系统时,这个根目录绑定在系统目录树中一个已经存在的目录上;
这个已有的目录叫做文件系统的挂载点

文件系统,inode,iostat,dstat

mount挂载命令

用途:挂载文件系统、ISO镜像到指定文件夹
格式:mount [ -t 类型 ] [ -o 选项 ] 设备名 挂载点目录
选项:

  • ro,rw:只读/读写,默认是rw
  • exec,noexec:是否可以运行可执行文件。默认exec
  • suid,nosuid:是否忽略suid权限;默认suid
  • remount:重新挂载分区

卸载命令umount:
用途:卸载已挂载的文件系统
格式:umount 存储设备位置
umount 挂载点目录
(卸载不掉时:先用lsof 路径名,然后#kill -9 进程号)

PS:无法卸载已挂载的设备
故障原因:

  • 需要卸载的设备正在被使用

故障现象:

  • 无法卸载设备,提示“… device is busy”

解决思路:

  • 将工作目录切换到挂载点以外;
  • 退出正在使用该设备的程序;
  • 或使用fuser命令找出相关进程,并终止该进程:
#fuser -mv /aaa/    --》查找
#fuser -k /aaa/    --》终止

文件系统,inode,iostat,dstat

对已经在使用的磁盘进行分区,让后面新分的区能够使用的解决方法

# df
文件系统                    1K-块      已用      可用 已用% 挂载点
/dev/sda2             16105416   1015336  14271956   7% /
tmpfs                   508336         0    508336   0% /dev/shm
/dev/sda1               495844     30235    440009   7% /boot
/dev/sda3              2015824     35768   1877656   2% /home
/dev/sdc1             10325748    154136   9647092   2% /software
# umount /software/ 卸载正在使用的分区
(卸载不掉时,先用lsof查看文件被谁使用,再kill -9 进程号杀死它。)
# partprobe  /dev/sdc  --》partprode 检测分区
# ls /dev/sdc*
/dev/sdc  /dev/sdc1  /dev/sdc2  /dev/sdc3

管理交换空间

虚拟内存也叫交换空间。
作用:短时间缓解物理内存的不足;但不能代替物理内存。
mkswap命令

# mkswap /dev/sdb5    --》格式化交换分区
Setting up swapspace version 1, size = 2006929 kB 
# swapon /dev/sdb5    --》启动交换分区
# free | grep -i swap
Swap:      3008456          0    3008456
# swapoff /dev/sdb5    --》停用交换分区
# free | grep -i swap    --》查看交换空间
Swap:      1048568          0    1048568

/etc/fstab文件

包含了需要开机后自动挂载的文件系统记录
mount -a 命令将逐行读取fstab文件进行所有挂载
/etc/fstab 与 /etc/rc.local 区别:

  • ①fstab文件可以自动挂载各种文件系统格式的硬盘、分区、可移动设备和远程设备等。
    fstab文件包含了电脑上的存储设备及其文件系统的信息。它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的唯一文件。
  • ②rc.local是开机自动运行里面的。

文件系统,inode,iostat,dstat

具体截图:

  • UUID:是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准
  • Filesystem state: clean 说明此文件系统没有问题,非常正常。
  • not clean 说明文件系统有问题(不纯洁)

如何得知文件系统的UUID?

  • blkid(block id)、dumpe2fs

文件系统,inode,iostat,dstat

磁盘分区名;挂载点;文件系统类型;defaults;0;0

  • 第1列可以使用uuid、设备文件的路径、label(已弃用);
  • 第1个0,代表不支持dump备份;
  • 第2个0,代表开机的时候不使用fsck进行检测;
  • 1,2时:先检测1对应的分区,再检测2对应的分区。

mount -a 全部挂载,挂载的是什么?
答:挂载的是/etc/fstab文件里的所有!

怎么看分区大小:

  • ①fdisk -l /dev/sda(看的是柱面数)
  • ②df -Th(只能看正在使用的)
  • ③parted /dev/sda print(看全部分区大小)

使用文件系统标签标识设备

  • 例如LABLE=/和/dev/sda1是一样的;
  • 在/etc/fstab文件中使用文件系统标签可以避免由于添加删除设备造成的设备文件标识混乱。

Linux正统的文件系统(如ext2、ext3、ext4)中,一个文件由目录项(dentry)、inode和数据块(data)组成。
(每个文件的目录项存储在该文件所属目录的文件内容里(block块里)

①目录项:一个目录项==文件名+索引节点号
索引节点号(inode编号)是指向索引节点表中对应的索引节点的。
通俗理解:因为目录包含子目录,层层嵌套。所以形成文件路径,而文件路径中的每一部分就是所谓的目录项。

②索引节点就是文件系统处理文件所需要的所有信息都存放在被称为索引节点的数据结构中。
Inode:又称文件索引节点,是文件基本信息(类型、大小、权限、时间、链接数等)的存放地和数据块指针存放地。
(一个文件占用一个inode)
inode —>index node 索引节点

文件系统,inode,iostat,dstat

inode结构图:

文件系统,inode,iostat,dstat

硬链接和软链接的区别

  • 硬链接原文件和新文件的inode编号一致。而软链接不一样。
  • 对原文件删除,会导致软链接不可用,而硬链接不受影响。
  • 对原文件的修改,软、硬链接文件内容也一样的修改,因为都是指向同一个文件内容的。

硬连接(ln 源文件 硬连接文件):是给文件一个副本,同时建立两者之间的连接关系。修改其中一个,与其连接的文件同时被修改。如果删除其中一个,其余的文件不受影响;
软连接(ln -s 源文件 软连接文件):也叫符号连接,他只是对源文件在新的位置建立一个“快捷方式”,所以,当源文件删除时,符号连接的文件将成为无根之水,仅仅剩下个文件名了,当然删除这个连接,也不会影响到源文件,但对连接文件的使用、使用都是直接调用源文件的。

文件系统,inode,iostat,dstat

(软连接绕了一下…)

ll显示出来的第二项(链接数)==目录项 指向 inode
例:在xiaoliu目录下新建abc三个文件,ll查看

文件系统,inode,iostat,dstat
(abc的链接数都是1!)

破坏、修复超级块

#partprode    /dev/sdc    -》重新读取磁盘分区表
#ls /dev/sdc*
/dev/sdc    /dev/sdc1    ......
#mount /dev/sdc3 /liupeng
#cd /liupeng     --》发现很多东西
#dd if=/dev/zero of=/dev/sdc3 bs=512 count=8    -》破坏掉超级块
卸掉挂载,重新挂载。进入/liupeng没有东西了!
#fsck /dev/sdc3 -y    --》修复超级块
# dumpe2fs /dev/sdc3|more  修复后,可以查看,说明它是用来查看superblock里的信息的

破坏超级块,超级块是文件系统里的第1个块

[aaa@qq.com music]# dd if=/dev/zero of=/dev/sdb1 bs=512 count=8 
[aaa@qq.com music]# dumpe2fs  /dev/sdb1  -》发现,不能读取超级块里的信息
dumpe2fs 1.41.12 (17-May-2010)
dumpe2fs: Bad magic number in super-block while trying to open /dev/sdb1
Couldn't find valid filesystem superblock.
[aaa@qq.com ~]# mount /dev/sdd3 /test-inode/
mount: you must specify the filesystem type

解决措施:

#fsck 磁盘分区名 -y    --》修复

fsck使用注意事项:
修复文件系统前,建议先将文件系统卸载。再修复。

块的大小可以自己定义:
一个块的大小为4096字节,假如一个文件有21k,就需要6个块来存放
块的大小越小,格式化后产生的块的数量越多,查找读取文件内容的时候,就会需要更加长的时间。
块越大,如果有很多小文件的话,例如:1k的小文件很多,就会导致很多空间就浪费了

inode耗光实验:

[root@mbr /]# mkdir /test-inode
[root@mbr /]# mount /dev/sdd3 /test-inode/
[root@mbr /]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda5             17112424    887276  15355876   6% /
tmpfs                   118188         0    118188   0% /dev/shm
/dev/sda1               495844     30694    439550   7% /boot
/dev/sda3              1007896     17648    939048   2% /home
/dev/sdc2            2874102608    205808 2727900720   1% /zhubb
/dev/sdc1              9611492    152516   8970736   2% /tangsaisai
/dev/sdd3                31108      4124     25380  14% /test-inode

2.查看有多少空闲的inode数

# dumpe2fs /dev/sdd3|more
Free inodes:              8021

3.编写测试脚本

[root@mbr test-inode]# vim test_inode.sh
for i in {1..8021}
#for i in `seq 8021`
#for ((i=1;i<=8021;i++))
do
        touch  linux$i &
done
[root@mbr test-inode]# chmod +x test_inode.sh 
[root@mbr test-inode]# ./test_inode.sh 执行脚本
[root@mbr test-inode]# touch: cannot touch `linux8017': No space left on device
[root@mbr test-inode]# df -TH
Filesystem    Type     Size   Used  Avail Use% Mounted on
/dev/sda5     ext4      18G   909M    16G   6% /
tmpfs        tmpfs     122M      0   122M   0% /dev/shm
/dev/sda1     ext4     508M    32M   451M   7% /boot
/dev/sda3     ext4     1.1G    19M   962M   2% /home
/dev/sdc2     ext4     3.0T   211M   2.8T   1% /zhubb
/dev/sdc1     ext4     9.9G   157M   9.2G   2% /tangsaisai
/dev/sdd3     ext4      32M   4.6M    26M  15% /test-inode
[root@mbr test-inode]# mkdir xiaoliu
mkdir: cannot create directory `xiaoliu': No space left on device

解决方法:

#cd /test-inode,然后把东西删除即可。

了解tmpfs和ramfs、proc、sysfs、devpts文件系统

Linux内核的虚拟内存(VM)资源同时来源于您的RAM和交换分区
process –》/proc
①proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。
proc文件系统里存放了很多进程和内核工作的信息,包括进程、相关系统管理功能的文件。内核在工作的时候会读取这些文件里的内容,做为参数来开启某些功能,如果我们修改这些文件里的值,可以间接的达到修改内核参数的目的,告诉内核如何去实现某些功能。可以达到自定义修改内核参数的目地。

内核的作用:
1.对cpu进行调度管理
2.对进程进行管理
3.对内存进行分配管理
4.对文件系统进行管理
5.对其他硬件进行管理

②sysfs是一个基于内存的文件系统,它的作用是将内核信息以文件的方式提供给用户程序使用。
③TFS(Taobao !FileSystem)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,它构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问。TFS为淘宝提供海量小文件存储,通常文件大小不超过1M,满足了淘宝对小文件存储的需求,被广泛地应用在淘宝各项应用中。它采用了HA架构和平滑扩容,保证了整个文件系统的可用性和扩展性。同时扁平化的数据组织结构,可将文件名映射到文件的物理地址,简化了文件的访问流程,一定程度上为TFS提供了良好的读写性能。

TFS链接:
http://code.taobao.org/p/tfs/wiki/index/

PS:
驱动程序是告诉操作系统某个硬件是做什么用的,如果操作系统需要的时候,调用。然后驱动程序就会告诉相关的硬件,操作要硬件做什么事情。

VFS(virtual File System)的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统,即为各类文件系统提供了一个统一的操作界面和应用编程接口。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。

XFS 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大 小为263 = 9 x 1018 = 9 exabytes,最大文件系统尺寸为18 exabytes
REDHAT 7 、CENTOS 7里采用XFS文件系统。

PS:VM(虚拟内存)=物理内存+swap分区

# cat  /proc/sys/net/ipv4/ip_forward   为1开启路由功能
1
# echo 0 >  /proc/sys/net/ipv4/ip_forward  关闭路由功能
# cat  /proc/sys/net/ipv4/ip_forward 
0
# echo 1 >  /proc/sys/net/ipv4/ip_forward 
# cat  /proc/sys/net/ipv4/ip_forward 
1

# cat /proc/cpuinfo  查看cpu的信息  
# cat /proc/meminfo   查看内存的信息

windows里的文件系统:
ntfs、fat32
iso9660
windows里是否能够识别linux的ext4、XFS等文件系统?
linux里是否能识别NTFS、fat32文件系统?
redhat和centos默认情况下不能识别ntfs,但是可以识别fat32文件系统
ubuntu 能识别windows里所有的文件系统,ntfs和fat32
NTFS (New Technology File System),NTFS取代了老式的FAT文件系统。 —》推荐
FAT:是File Allocation Table的简称,不支持大分区。
linux里是vfat
vfat=fat32

为什么用创建日志?
当我们往磁盘里写数据的所有的操作,都会记录。可以利用日志去恢复数据。

lost+found这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
存放修复或损坏的文件的,一般情况下里面没有东西
如果某目录下有这个文件,说明这个目录是单独的一个分区挂载到此目录的。

/home分区空间已经使用完,重新添加一块磁盘100G的磁盘,需要挂载到/home,同时以前/home下的内容必须保留。
你如何实施?

  • 1.备份原来/home目录下的内容,然后将新的磁盘格式化挂载到/home目录下,将备份的内容复制过来。
  • 2.使用dd命令直接对磁盘设备文件进行复制
# dd if=/dev/sda3 of=/dev/sdd1

dd复制的时候是物理层面的复制,不是通过文件系统层面来进行的。

buffer—》缓冲器—》内存往磁盘写数据的一个临时存放数据的空间
cached—》高速缓存–》当内存从磁盘读数据的时候,经常使用的数据存放在此

当交换分区开始使用的时候,说明你的物理内存不够使用了,如何处理?

扩容的问题:

根分区(标准分区)空间不够了,如何扩容?
就是增加一块磁盘,挂载到aa目录下,然后把今后常用的数据文件存放到这个aa目录下就可以了,消耗新的磁盘的空间,不使用旧的磁盘的空间!

扩展swap分区的容量

分区—》格式化—》扩容—》查看

[root@localhost home]# cat /proc/swaps   查看那个磁盘的那个分区做的swap分区
Filename                Type        Size    Used    Priority
/dev/sda5                               partition    2046968    0    -1
[root@localhost ~]# fdisk -l /dev/sdb  分区

Disk /dev/sdb: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc47e2f6e
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  83  Linux
/dev/sdb2             133         394     2104515   83  Linux
/dev/sdb3             395        5221    38772877+   5  Extended
/dev/sdb5             395         656     2104483+  83  Linux
[root@localhost ~]# mkswap /dev/sdb5   格式化
Setting up swapspace version 1, size = 2104476 KiB
no label, UUID=510684f2-b0c9-4951-8e09-6309ec1dc1b0
[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           982        140        842          0         12         66
-/+ buffers/cache:         61        921
Swap:         1999          0       1999
[root@localhost ~]# swapon /dev/sdb5  扩容
[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           982        141        840          0         12         66
-/+ buffers/cache:         62        920
Swap:         4055          0       4055
[root@localhost ~]# cat /proc/swaps  查看交换分区的组成
Filename                Type        Size    Used    Priority
/dev/sda3                               partition    2047992    0    -1
/dev/sdb5                               partition    2104472    0    -2 
[root@localhost ~]# swapoff /dev/sdb5  停用
[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           982        140        841          0         12         66
-/+ buffers/cache:         61        921
Swap:         1999          0       1999
[root@localhost ~]# cat /proc/swaps  查看效果
Filename                Type        Size    Used    Priority
/dev/sda3                               partition    2047992    0    -1
[aaa@qq.com ~]# blkid  查看磁盘分区的UUID和文件系统类型
/dev/sda2: UUID="dceff403-85ea-4849-b95f-45364aafb696" TYPE="ext4" 
/dev/sda3: UUID="16500f8a-4334-43fc-94d6-f867ffbc4e63" TYPE="swap" 
/dev/sda5: UUID="e725f227-6051-4760-8fed-ccbf561aba44" TYPE="ext4" 
/dev/sda1: UUID="2ae8aff8-5175-4bc4-a06d-c798c6b90aa1" TYPE="ext4" 
/dev/sdb1: UUID="269709b8-8d60-4b59-adb1-f96700b24ad7" TYPE="ext4" 
/dev/sdb2: UUID="1f14c12d-a948-45d4-bd54-e535d8f53bc2" TYPE="ext4" 
/dev/sdb5: UUID="510684f2-b0c9-4951-8e09-6309ec1dc1b0" TYPE="swap" 
/dev/sdb6: UUID="32fc1f30-5fab-4ffb-9741-e4f706fe92de" TYPE="swap" 
/dev/sdc1: LABEL="music" UUID="ede0f887-6df5-4426-a719-cd4b71d00ba4" TYPE="ext4" 

练习题目:

在虚拟机上完成
1.ntfs-3g软件的安装,挂载ntfs文件系统
2.swap分区的扩容,扩到8G
3.开机自动挂载ntfs分区和swap扩容分区
4.
4.1.添加2块磁盘,大小为50G和100G
4.2.将50G的磁盘分成2个主分区,大小分别为10G和20G和1个扩展分区,扩展分区下划分2个逻辑分区,大小分别为5G和15G
4.3.然后将4个分区都格式化为ext4文件系统,新建挂载目录,具体挂载如下
10G—-》/mail—-》ext4—》读写
20G—-》/software—》ext4—–》只读挂载
5G—-》/movie—–》ntfs—》读写
15G—》/photo—-》vfat—》读写
4.4.将100G的磁盘的分区表采用GPT方式,新建2个分区大小分别为40G和60G
4.5.然后格式化为ext4文件系统,新建挂载目录,具体挂载如下:
40G —-》/ftp—》ext4—》读写
60G —》/www—》ext4—》读写
5.实现开机自动挂载上面的所有的文件系统(分区)

/etc/fstab
mount
blkid
ntfs –>ntfs-3g
XFS –>xfsprogs
vfat –>dosfstools


iostat

iostat主要用于监控系统设备的IP负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行次命令后的信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

#yum install dstat systat -y
# iostat
Linux 2.6.32-431.el6.x86_64 (liupeng) 20160726日 _x86_64_  (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                   0.16      0.00     0.46        0.48        0.00      98.91

Device:        tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               1.80        70.62         5.39     218948      16714
sdb               0.10         0.76         0.00       2368          0
sdc               0.10         0.76         0.00       2368          0
scd0              0.01         0.12         0.00        360          0
dm-0              2.83        61.67         5.37     191194      16648
dm-1              0.10         0.83         0.00       2576          0

入门用法:iostat -d -k 2
-d:显示磁盘的使用状态
-k:某些使用block为单位的列强制使用kilobytes为单位;2表示,数据显示每隔2秒刷新一次。
eg:#iostat -d -k 2 4 –》每两秒输出一次,累计输出4次,如下图:

文件系统,inode,iostat,dstat

输出信息的意义:

  • TPS:该设备每秒的传输次数,一次传输意思是”一次I/O请求”。多个逻辑请求可能会被合并为”一次I/O请求”。”一次传输”的大小是未知的。(注意:TPS是瞬间值,不一定等于总和)
  • KB_read/s:每秒向设备读取的数据量
  • KB_wrtn/s:每秒向设备写入的数据量
  • KB_read:读取的总数据量
  • KB_read:写入的总数据量。这些单位都是Kilobytes

-x:显示和io相关的扩展数据(最重要的选项)
如下图:

文件系统,inode,iostat,dstat

  • rrqm/s:每秒这个设备相关的读取请求有多少被Merge(合并)了。–》此值太高,一般是出现了大量的全表扫描。
  • wrqm/s:每秒这个设备相关的写入请求有多少被合并了。–》此值太高,一般是出现了大量的DML操作。
  • r/s:每秒读了多少次
  • w/s:每秒写了多少次
  • rsec/s:每秒读取的扇区数
  • wsec/s:每秒写入的扇区数
  • rkB/s:每秒的读取请求数
  • wkB/s:每秒的写入请求数
  • avgrq-sz:平均请求扇区的大小
  • avgqu-sz:平均请求队列的长度。越短越好。
  • await:每一个IO请求的处理的平均时间(单位是微秒、毫秒)。即IO的响应时间,一般低于5ms.
  • svctm:平均每次设备I/O操作的服务时间(ms)。svctm值约等于await,则磁盘性能好。await>>svctm,则队列等待时间太长,运行的应用程序将变慢。
  • %util:表示了设备的繁忙程度。在统计时间内所有处理IO时间,除以总共统计时间。eg:统计间隔1秒,设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util=0.8/1=80%

iostat -c –》查看cpu的一些信息
如下图:

文件系统,inode,iostat,dstat

常用选项PS:

  • -C 显示CPU使用情况
  • -d 显示磁盘使用情况
  • -k 以 KB 为单位显示
  • -m 以 M 为单位显示
  • -N 显示磁盘阵列(LVM) 信息
  • -n 显示NFS 使用情况
  • -p[磁盘] 显示磁盘和分区的情况
  • -t 显示终端和CPU的信息
  • -x 显示详细信息
  • -V 显示版本信息

dstat

dstat包含了iostat的一些功能。
dstat将以列表的形式提供选项信息并清晰地告诉你是在何种幅度和单位显示输出。这样更好地避免了信息混乱和误报。
特点:

  • ①结合了vmstat、iostat、ifstat、netstat以及更多的信息;
  • ②实时显示统计情况
  • ③在分析和排障时可以通过启用监控项并排序;
  • ④模块化设计;
  • ⑤使用python语言编写的,更方便扩展现有的工作任务;
  • ⑥容易扩展和添加自己的计数器

文件系统,inode,iostat,dstat

选项:

  • -c:只显示cpu的情况
  • -d:只显示磁盘的信息
  • -N:看网卡的流量
  • –top-io –top-cpu –top-mem:查看使用最多的IO/cpu/mem
  • -l:显示负载统计量
  • -m:显示内存使用率(包括used,buffer,cache,free值)
  • -r:显示I/O统计
  • -s:显示交换分区使用情况
  • -t:将当前时间显示在第一行
  • –fs:显示文件系统统计数据(包括文件总数量和inodes值)
  • –nocolor:不显示颜色(有时候有用)
  • –socket:显示网络统计数据
  • –tcp:显示常用的TCP统计
  • –udp:显示监听的UDP接口及其当前用量的一些动态数据

关注能查看系统性能的列:

  • —disk-util:显示某一时间磁盘的忙碌状况
  • —freespace:显示当前磁盘空间使用率
  • —proc-count:显示正在运行的程序数量
  • —top-bio:指出块I/O最大的进程
  • —top-cpu:图形化显示cpu占用最大的进程
  • —top-io:显示正常I/O最大的进程
  • —top-mem:显示占用最多内存的进程
#cat    /proc/cpuinfo    --》查看所有cpu的详细信息
#top,然后按1    --》查看所有cpu的详细信息
#dstat -C  0,1,tocal   --》查看cpu0,cpu1以及统计cpu的详细信息
#cat    /proc/meminfo    --》查看所有内存详细信息

思考:

1.如何知道磁盘读写是否非常频繁,磁盘性能如何?当前有无遇到瓶颈?
2.如何知道内存、cpu、磁盘I/O最大的进程?
3.删除一个文件到底删除了哪些内容为啥删除一个大文件比一个小文件慢?软连接和硬链接?
(1)目录项、inode表和block表
(2)inode映射表和block映射表。一个大文件block多,而一个inode仅仅512字节。慢就慢在block映射表上。
(3)目录项指向了inode,inode table里面有个指针,指向具体的块。
硬连接(ln 源文件 硬连接文件):是给文件一个副本,同时建立两者之间的连接关系。修改其中一个,与其连接的文件同时被修改。如果删除其中一个,其余的文件不受影响;
软连接(ln -s 源文件 软连接文件):也叫符号连接,他只是对源文件在新的位置建立一个“快捷方式”,所以,当源文件删除时,符号连接的文件将成为无根之水,仅仅剩下个文件名了,当然删除这个连接,也不会影响到源文件,但对连接文件的使用、使用都是直接调用源文件的。