linux磁盘管理和文件系统建立

1      磁盘管理

1.1    硬盘的构造原理

硬盘分类:node

                        机械式硬盘,固态硬盘linux

硬盘出厂会进行低级格式化,分磁盘,再分扇区,硬盘的第一个磁道的一个扇区就是MBR 512Bytes shell

Master boot record数据库

                                    446 bytes bootloader 主引导程序编程

                                    64bytes :主分区存储 16bytes表示一个主分区,最多4个主分区windows

                                    2bytesmagic number 表示mbr是否有效安全

 

硬盘的注意事项:bash

a)                1.硬盘须要绝对的无尘环境,生活环境拆开,硬盘基本上就是挂掉的网络

b)                2.硬盘的外圈读写速度较快,C盘通常在外圈,所以通常把系统安装在Capp

c)                3.机械硬盘是盘面不端旋转,磁头固定读取数据

 

硬盘组成:

a)                圆形的盘片(存储数据)

b)                机械手臂(旋转读取数据)

c)                主轴马达,转动盘片,让这个机械手臂来读取数据

硬盘构造原理:

a.    硬盘由多个盘片组成 ,每一个盘面都有一个磁头,因此磁头数决定盘面数。通常读写数据都是几个磁头同时进行,这样速度会比较快

b.    盘片划分红多个磁道,外圈中圈….内圈.. 每一个盘面从外圈向内圈编号,具备相同编号的磁道就造成一个圆柱,称之为柱面

c.    磁盘上的每一个磁道被等分为多个弧段,这些弧段就称为磁盘的扇区,扇区是存储的最小单位512bytes

d.    多个扇区组成磁道,多个磁道组成柱面,柱面是分区的最小单位。

e.g:   Disk /dev/sda: 42.9 GB, 42949672960 bytes

                        255 heads, 63 sectors/track, 5221 cylinders

                        Units = cylinders of 16065 * 512 = 8225280 bytes

                        硬盘的容量=柱面数*磁头数*扇区数*512B

每一个柱面经过255个磁头来控制,每一个磁头控制63个扇区,因此一个柱面的大小为

            255*63*512=8225280 bytes

这里就有个问题,扇区确定是外围磁道的大,就是相对面积大,可是为何磁盘作成同样的大小的呢?

a)                磁头单位时间内读取的字节数是必定的;

b)                无论是在这个外圈 中圈 内圈 单位时间扫过的扇区数量是同样的(角速度同样)单位时间略过的面积是不同(线速度不一样);

c)                基于前面的两点,扇区的容量不是按照这个面积做为衡量标准,而是单位时间可以读取的字节数来决定的,因此每一个扇区的存储容量作成同样是最合理的

硬盘的代号和分区关系:

                                    SCSI USB SATA FLASH接口的磁盘

                                    /dev/sd[a-p][1-15]  a-p是硬盘数量, 1-15是分区的数量

 

                                    IDE接口的磁盘

                                    /dev/hd[1-p][1-63]

逻辑分区:

                          1)主分区和扩展分区最多只能有四个(硬盘的限制)

                  2)扩展分区最多只能一个(操做系统限制)

                  3)逻辑分区是经过扩展分区分出来的

                  4)扩展分区是没法使用的,是不能被格式化分区,可以使用的是逻辑分区

                  5)逻辑分区数量是和这个操做系统有关系的,linux中的IDE最多有59个逻辑分区,1-3是主分区 4是扩展分区

                          6)这个SATA USB SCSI硬盘最多有11个逻辑分区。

 

2      文件系统

Linux文件系统支持的类型:

基本文件系统:Ext2, Ext3, Ext4, Reiserfs(支持小文件), xfs(支持大文件), btrfs, JFS, vfat(支持WindowsFAT32, NTFS

交换分区:swap

集群文件系统:GFS2(全局文件系统), OCFS2

网络文件系统:NFS, smbfs(CIFS) Common Internet File System

光盘:iso9660

分布式文件系统:ceph

moosefs, mogilefs, hdfs, gfs, glusterfs

 

(1)日志型文件系统:

非日志型文件系统:ext2

日志型文件系统:ext3

 

(2)swap 交换分区

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

文件系统是经过一层VFSvirtual file system)层来屏蔽全部的文件系统的差别,提供统一的调度接口给用户使用,让用户操做每一个文件系统都是一致的。

vfs详解:

   cpu 4个级别

               ring 0 内核运行级别  内核空间(内核模式)

               ring 1 2 历史缘由,没有使用

               ring 3  进程运行的级别 (用户模式 用户空间

   文件系统是操做硬盘硬件,所以要在内核空间下进行system call,功能调用接口

   vfs弥合了全部文件系统的不一样之处,提供一个统一的调用接口给程序的开发者

#查看系统支持的文件系统

clip_image001

#说明这些是内核有装载的内核模块,之后要新增文件系统类型,须要本身去装载模块

2.1    linux Ext2Ext3文件系统的特性分析(很是重要)

文件系统:分区--格式化成相应操做系统支持的文件系统格式。

                分区就是文件系统,文件系统是一个分区?这句话在传统时代是没问题的。

                不过如今有了这个lvm raid技术,一个分区能够再逻辑的分为多个分区。因此如今通常认为是一个能够挂载的数据文件为一个文件系统,记得dd一个磁盘镜像么,它也能够单独格式化成相应的文件系统,而后挂载。

 

  如今就开始介绍这个linuxext2文件系统是如何来运行的,怎么记录文件的权限等元数据和存储真实数据的。

主要有下面的集中存储数据的块:

1.    data block :实际存储数据的块

2.    inode 存储数据的元数据(权限,时间戳,文件大小,block存储位置等)

3.    super block:主要记录block inode的总量和已使用量,和文件系统的格式等一堆相关信息,dump2fs能够查询

4.    inode bitmap:利用bit来记录这个inode是否已经使用了。

5.    block bitmap:利用这个bit来记录这个block是否已经使用了

 

linux 文件系统和windowsfat ntfs系统对比

a.    linux文件系统是利用这个索引文件查找方式,因此一个inode记录的数据库均可以快速查找到。至关一下指向全部block的存储位置,这样就能够立刻进去数据的读取。

b.    FAT格式的系统是利用链表的形式来读取这个数据,因此要第一个读取了才能知道下一个数据在哪里,效率比较低。

 

c.    这就涉及到这个磁盘碎片整理了,假如FAT格式的文件系统读写太频繁,这个数据比较乱,可能盘片须要旋转不少圈才能读取到,很正常。可是linuxext2系统就不须要这样,索引方式一次遍历就能所有找到可能有时会有点分散,仍是须要必定寻道时间。

综上可知:

A.    windows下的NTFSFAT通常使用一段时间后须要进行这个磁盘碎片整理;若是这个文件系统分区存储的数据比较少,建议备份,而后从新格式化,这样能够减小这个读写次数,保护磁盘;

B.    linux系统不须要磁盘碎片整理;

 

 

inode详解:

                        一个文件占用一个inode

                        inode记录了文件数据存储的data block块位置,各种权限,时间戳,文件大小等元数据

                        inode的大小为128bytes

 

因为一个磁盘过大,通常会把一个分区分红多个block group,每一个组都有一套inode data block

inode bitmap block bitmap

clip_image002

superblock: blockinode的总量

                                    blockinode的使用量,为使用量天然就能够算出来剩余量

                                    block块大小

                                    block gourp 组个数

                                    superblock只有部分block group中有,通常是1 3 5 7 9包含,备份

GDT   第一个block bitmap所在的block

                          第一个inode bitmap所在的block

                          第一个inode tables所在的block

                          group中空闲的block总数

                          group中空闲的inode总数

                          目录数

block的大小为 1024bytes 2048bytes 4096bytes

block大小                                           1024                2048                4096

最大的单一文件限制              16GB               256GB             2TB

最大的文件系统容量              2TB                             8TB                             16TB

 

因为一个文件占用一个inode,所以建立的文件数量要小于等于inode的数量

因为inode里面有存放这个data block 的位置,存放单个block num4bytes,可是inode的大小是固定的128bytes,所以inode作成了多重索引的形式,12个直接索引,1个间接索引,1个双间接索引和1个三间接索引.

clip_image004

假如block=1K,则单个文件最大支持多少?

直接:12*1K(一个直接索引放一个block

                                    单间接=256*1K=256K

            双间接=256*256*1K=64M

                                    三间接=256*256*256*1K=16G

一个block能够存储block num 1024/4=256

2K 4K因为文件系统的限制,没法这样计算。

经过stat来查看这个文件的属性信息,存储在inode里面。

clip_image006

为何block的大小为 1K 2K 4K 2n次方的?

答:数据块是要存在内存中,而内存是按页框来计算的,页框通常就是4K

为何设备文件没有大小?

答:设备文件只是一个入口,只占用inode,没有存储数据。

clip_image008

block块大小是事先设定好的,inode的预留数量要多少比较合适,比例多少?

答:其实根据系要存的文件的大小的总体状况来定义,尽可能多点inode,以防止不够使用

 

2.2    建立文件系统

建立文件系统须要两个条件

            1.内核支持这种文件系统

            2.用户空间有这个文件系统的管理工具

2.2.1  文件系统的基本操做和查看工具

df  du   ls  ln

 

ls

ls命令

功能:查看文件的inode

语法:

                        ls [option]

经常使用的选项

                        -i  :显示inode

                        -d :显示目录

                        -l  :显示详细信息

 

例子:

clip_image010

df

df命令

功能:列出文件系统的总体使用量

语法:

            df  [option]  [目录|文件名|文件系统]

经常使用的选项:

                        -h human-readable 人类易看

                -k KB显示,默认

                -m MB显示

                -i inode数量显示

                -a 列出文件系统  后面无参数

                -T system type ext2 ext3

 

例子:

#查看分区sdb2

[root@localhost ~]# df /dev/sdb2

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sdb2              4031680     74104   3752776   2% /home

#查看已经挂载的分区(真实文件系统)的使用状况

clip_image011

#查看全部的文件系统的状况

clip_image013

#显示/etc目录的状况

clip_image014

#显示当前系统挂载的分区的文件系统格式

clip_image016

mount命令也能够查看

 

du

du命令

功能:估计文件的占用空间量(偏差)

语法:

            du [OPTION]... [FILE]...

经常使用的选项:

                        -a :列出当前目录的全部数据,包括目录和文件

                -s :计算总量

                -m MB显示

                        -k  KB显示

                -h  :人类易看的方式

                        -S 不包括当前目录的子目录的大小(文件则只显示文件)

                                                会显示每一个目录的大小

                       

           

 

例子:

1.    .显示/etc/目录下的大小

clip_image017

2.    显示根目录下每一个目录的大小,procsys0,可能会部分报错

clip_image018

3.    列出当前目录的全部数据,包括目录和文件,最底部计算总量

clip_image019

4.    显示tmp目录下各个目录的大小 /tmp不包括子目录

clip_image020

ln

ln命令

功能:连接文件

语法:

            ln [OPTION]...  TARGET LINK_NAME

            默认是硬连接

经常使用的选项:

                -s :建立符号连接,建议使用绝对路径

                -v :打印连接结果

                        -f  :目标文件存在则删除后建立

硬连接文件:每一个文件都有一个inode,而一个inode能够被多个文件所指

                             而以前说到的读取文件是要从这个目录来读取,而目录也是一个文件

                             目录也是占用一个inode,而inode指向的block存放着目录文件下

                             的文件名和对应的inode号。

                             因此硬连接就是在文件的所在的目录的block里面的对应项写着不一样

                             文件名,可是是同一个inode。就是这么简单。

硬链接的好处:

1.    将一个硬链接产生的文件名删除后,该文件对应的inodeblock都仍是存在      

(真正删除须要最后一个链接到该inode的文件删除,这时候对应的inodeblock才会回收)

2.    对任何一个文件名进行修改,其实都是修改了相同的inodeblock文件,结果同样

3.    设置了硬链接后磁盘空间通常不会改变,除非存放硬链接文件的目录的block超过block大小

缺点:

1不能跨文件系统,每一个文件系统都一套inodeblock bitmap,没法指向同个inode

                        2不能链接到目录,连接目录后,目录下的文件和子目录也要作硬链接,linux暂时不支持,太过复杂

 

符号连接 symbolic link

1.    符号链接实际上是该文件在本身所在目录下面有一个单独的inode和文件名

2.    inode存储的block里面存放着这个符号链接原文件的文件名,所以,符号文件的大小是这个连接的原文件名长度

3.    只要指定目录有文件名一致,则符号连接有效,即便该文件(更换后)的inode不一样也不要紧

4.    能够建立目录连接,至关进入指定的目录下

5.    target建议使用绝对路径

clip_image021

符号链接的好处:

                        1:能够链接不一样的文件系统和这个目录,应用普遍(连接只是包含文件的路径名)

                        2:删除数据本来数据后比较安全,不怕有备份

            坏处:

                        1占用这个独立的inodeblock

                        2删除原文件后,符号链接文件成为无效链接,打不开,占用磁盘存储空间

clip_image022

 

例子:

1.建立硬连接和软连接,显示其区别

clip_image024

2.删除源文件后,硬连接和软连接的区别

clip_image026

硬连接正常,软连接找不到目标。

3.建立目录的软连接

clip_image028

2.2.2  磁盘的分区,格式化,检验和挂载

mknod ,fdiskmkfsmke2fse2lableblkiddumpe2fstune2fsfscke2fsck

mknod

mknod命令

功能:建立设备文件

设备文件:(没有大小)

            b: 按块为单位,随机访问的设备;

            c:按字符为单位,线性设备;

           

            b: 硬盘

            c: 键盘

/dev

            主设备号 major number

                        标识设备类型

            次设备号 minor number

                        标识同一种类型中不一样设备

 

 

语法:

                        mknod [OPTION]... NAME TYPE [MAJOR MINOR]

经常使用的选项

                        -m MODE  :文件的权限

 

设备文件只是做为硬件的访问入口,须要有内核可以识别一个设备的主设备号为66 的才可使用

 

例子:

1.建立一个设备文件

clip_image029

2.建立设备文件,手动指定权限

clip_image030

3.发送信息给xshell登陆的伪终端设备

clip_image031

           

fdisk

2.2.2.1            分区

fdisk命令

功能:磁盘分区

硬盘设备的设备文件名:

IDE, ATAhd

SATAsd

SCSI: sd

USB: sd

a,b,c,...来区别同一种类型下的不一样设备

sda1: 第一个主分区

            sda2:

            sda3:

            sda4:

            sda5: 第一个逻辑分区(即便主分区只是用了2个)

 

 

语法:

                        fdisk  [-uc]  [-b sectorsize] [-C cyls] [-H heads] [-S

       sects] device

 

       fdisk -l [-u] [device...] 显示全部磁盘的分区状况或者是特定的磁盘

 

       fdisk -s partition... 显示分区或者磁盘的大小(block的大小)

 

       fdisk –v  :显示版本

 

       fdisk –h  :显示帮助信息

经常使用的选项

                        fdisk device 经常使用选项:

                                    p: 显示当前硬件的分区,包括没保存的改动

                                    n: 建立新分区

                                    e: 扩展分区

                                    p: 主分区

                                    d: 删除一个分区

                                    w: 保存退出

                                    q: 不保存退出

                                    t: 修改分区类型

                                                L: list code

                                    l: 显示所支持的全部类型

                                                这个命令是比较特殊的交换命令,不用背,进入按提示操做便可

                                                记得q能够不保存退出 w则是保存,别按错后悔了。

                                    m|h:帮助信息

 

新建完分区后,须要让内核识别:

            rhel5使用命令partprobe device partprobe /dev/sdc

            rhel6版本的系统在新建分区后,w保存,会自动调用内核识别

Calling ioctl() to re-read partition table.

            假如没有可使用命令partx device  如:partx /dev/sdc

例子:

1.显示系统上的全部分区

clip_image032

2.新建一个分区为1G的逻辑分区,修改系统的格式给lvm

clip_image034

 

 

 

 

 

 

 

mkfs

2.2.2.2            格式化

mkfs命令

功能:磁盘分区格式化

支持ext2 ext3 ext4 vfat

 

语法:

                        mkfs [-V] [-t fstype] [fs-options] filesys [blocks]

经常使用的选项

                        -t fstype  指定要建立何种文件类型

-c  在制作档案系统前,检查该分区是否有坏道

-fs  指定创建文件系统时的参数

使用方法:

[root@localhost ~]# mkfs.

mkfs.cramfs   mkfs.ext3     mkfs.ext4dev  mkfs.msdos

mkfs.ext2     mkfs.ext4     mkfs.minix    mkfs.vfat

mkfs –t ext3 /dev/sdc6 == mkfs.ext3 /dev/sdc6

事实上mkfs是调用了命令mke2fs

例子:

[root@localhost ~]# mkfs.ext2 /dev/sdc6

[root@localhost ~]# mkfs.ext3 /dev/sdc6

[root@localhost ~]# mkfs.ext4 /dev/sdc6

 

mke2fs

mke2fs命令

功能:建立文件系统

专门建立ex系列的文件系统

 

[root@localhost ~]# cat /etc/mke2fs.conf  #查看建立的文件系统的默认配置

[defaults]

            base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr

            blocksize = 4096 #block的大小是4K

            inode_size = 256 #inode大小是256字节,上面的128字节是比较老的数据

            inode_ratio = 16384

[fs_types]

            ext3 = {

                        features = has_journal

            }

            ext4 = {

                        features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize

                        inode_size = 256

            }

……

语法:

                        mke2fs [-b block大小] [-i 多少容量给一个inodeblock计算)] [-L卷标] [-cj] 设备

经常使用的选项

                        -c fsck检查磁盘错误,一个-c,进行快速的读取测试

                                                两个-c -c 进行这个读写测试

                        -j 默认建立ext2,加入这个命令后就建立这个journal成为这个ext3

                        -m # :指定预留给超级用户使用的块数百分比

注解:卷标的做用是为了用于引用使用,方便,类型域名了。

          -b BLOCK_SIZE: 指定块大小,默认为4096;可用取值为102420484096

          -L LABEL:指定分区卷标;

          -t fs-type :文件系统类型

          -m #: 指定预留给超级用户的块数百分比 默认是百分之5

          -i #: 用于指定为多少字节的空间建立一个inode,默认为8192;这里给出的数值应该为块大小的2^n倍;

          -N #: 指定inode个数;

          -F: 强制建立文件系统;被挂载也能够强制建立文件系统

          -E: 用户指定额外文件系统属性;

例子:建立一个2G大小的ext4的文件系统,卷标指定为testblock大小为2048

1.fdisk建立一个分区

clip_image036

2.确保分区已经被内核识别

[root@localhost ~]# cat /proc/partitions

  8       39    2104483 sdc7

若是未识别,则让内核从新读取

clip_image037

3.建立文件系统

clip_image039

 

 

 

 

blkid

blkid命令

功能:查询或查看磁盘设备(已有文件系统)的相关属性

UUID

        TYPE

        LABEL

 

语法:

                        blkid [device]

 

clip_image041

 

 

 

 

e2label

e2label命令

功能:用于查看和定义卷标

 

语法:

                        设定卷标:e2label 设备文件 卷标

                        查看卷标:e2label 分区

例子:

clip_image042

 

 

dumpe2fs

dumpe2fs命令

功能:显示文件系统的属性信息等

 

 

block group的信息

                        通常 0 1 3 5 7 9 包含superblock的信息 1个主 5个备

 

语法:

                        dumpe2fs partition

经常使用选项

                        -h :仅查看超级块中的信息

例子

clip_image044

 

tune2fs

tune2fs命令

功能:调整ex2ex3ex4文件系统的参数

 

语法:

                        tune2fs [option]  device

经常使用的选项

                        -j: 不损害原有数据,将ext2升级为ext3

                        -L LABEL: 设定或修改卷标;

                        -m #: 调整预留百分比;

                        -r #: 指定预留块数;

                        -o: 设定默认挂载选项;

                                     acl

                        -c #:指定挂载次数达到#次以后进行自检,0-1表关闭此功能;

                        -i #: 每挂载使用多少天后进行自检;0-1表示关闭此功能;

                        -l: 显示超级块中的信息;

 

例子:

#把预留块比例改成百分之三,挂载多少次都不自检,卷标修改成test4

clip_image045

 

2.2.2.3   检查

e2fsck

e2fsck命令

功能:专门修复ext2/ext3/ext4

 

语法:

                        e2fsck [option]  device

经常使用的选项

                        -f:强制检查

                        -p: 自动修复

                        -v:执行时显示详细的信

              -y: 对问题自动回答为yes

e2fsck执行后的传回值及表明意义以下:

0 没有任何错误发生。

1 文件系统发生错误,而且已经修正。

2 文件系统发生错误,而且已经修正。

4 文件系统发生错误,但没有修正。

8 运做时发生错误。

16 使用的语法发生错误。

128 共享的函数库发生错误

 

 

注意:   一般是这个系统有问题的时候才使用root用户来检查文件系统的一致性

                  若是正常状况下使用可能会形成文件系统的损害。

                  因为fsck扫描磁盘的时候会对这个文件系统形成损坏,因此必定不要把要检查的

                  分区挂载上去,意思就是要在卸载的状况下检查

             每一个分区格式化成为这个文件系统后都会自动生成一个lost+found的目录,

             做用其实就是来存放fsck检查后有问题的数据的,通常里面是没有数据的,

             假若有数据的话,那确定是这个文件系统有问题了。

例子:

修复/dev/sdc7

clip_image047

 

fsck

fsck命令

功能:磁盘检验,保证文件系统的统一,调用e2fsck

 

语法:

                        fsck [-t 文件系统] [-ACay] 设备名称|挂载点

经常使用的选项

                        -t  ext2 ext3 通常不须要 linux自动检测blkid检测

     -A 根据/etc/fstab的内容,将须要的设备扫描检测一次,一般开机会执行这个命令

     -a 自动修复有问题的分区,不用手动y确认

     -y 相似a部分文件系统仅仅支持-y

     -C 检测过程当中用直方图显示这个进度

     -f  强制检查,通常没有发现unclean标志,不会进入细化检查,要细化检查须要这个参数

 

2.2.2.4   挂载与卸载

挂载点的选择注意事项:

                        1 单一文件系统不该该重复挂载在不一样的目录(挂载点)

                        2 单一目录不该该被屡次挂载,必定要一一对应

                        3 挂载点应该是空目录才合理,若是该目录有东西的话,那会被暂时隐藏

                          直到该文件系统卸载后才能看到。

 

mount

mount命令

功能:挂载文件系统

 

语法:

                        mount 设备 挂载点

            设备:

                        设备文件:/dev/sda5

                        卷标:LABEL=“”

                        UUID UUID=“”

            挂载点:目录

                        要求:

                                    1、此目录没有被其它进程使用;

                                    2、目录得事先存在;

                                    3、目录中的原有的文件将会暂时隐藏;

经常使用的选项

                        -a mount all file system base /etc/fstab

                        -l 单纯输入mount会输出当前的挂载信息, -l加上多显示label信息

                        -t 加上这个文件系统,不加则系统使用blkid去获取文件系统的类型

                        -n 默认状况下,这个系统挂载会实时写入这个/etc/mstab中,以给其余

                           程序运行使用,可是某些状况(例如单用户模式)为了不问题,

                           会刻意不写入 -n就是这个效果了

                        -L 利用卷标来挂载,必须独一无二  使用这个就不用-t

                        -r :只读挂载,经常使用于光盘

                        -w:读写挂载

                        -o:后面跟一些挂载的参数,

                                    rorw   只读,读写

                                    asyncsync:文件系统同步写入仍是异步,确定是异步效率高了

                                                     数据先保存在内存,定时或者隔一段时间写回硬盘,属于异步操做

                                    devnodev: 是否容许建立设备

                                    suidnosuid:是否容许文件有suid/sgid文件格式

                                    autonoauto:是否容许被自动挂载 -a

                                    execnoexec:是否能够执行二进制文件

                                    usernouser:下达user容许通常用户挂载

                                    default rwsuiddevexecautonousersync

                                    remount :从新挂载,系统出错,更新参数的时候特别有用

                        suid比较危险,若是我在本身机子赋予suid,而后挂载到其余机子,被挂载,极可能就有了suid,能够执行恶意程序

 

注意:挂载文件系统的时候能够不指定类型,系统会去自行测试,主要根据配置文件/etc/filesystems

[root@localhost ~]# cat /etc/filesystems

ext4

ext3

ext2

nodev proc

nodev devpts

iso9660

vfat

hfs

hfsplus

 

LINUX系统支持的文件系统的驱动所在目录为:[root@localhost ~]# ll /lib/modules/`uname -r`/kernel/fs/

例子:

1.挂载labeltest4的文件系统到/media/test4下,挂载属性为user,noexecro

[root@localhost ~]# mount LABEL="test4" /media/test4/ -o user,noexec

2.查看挂载的文件系统

clip_image049

2,挂载光驱,前面提到,系统会自动去检测系统的类型 iso9660包括在检测列表,因为光盘是写保护的,会自动挂载为只读ro

[root@localhost ~]# mount /dev/cdrom /media/cdrom/

mount: block device /dev/sr0 is write-protected, mounting read-only

指定类型:

[root@localhost ~]# mount -t iso9660 /dev/cdrom/ /media/cdrom/

mount: block device /dev/sr0 is write-protected, mounting read-only

 

3.挂载U

经过fdisk -l来查找这个新添加的设备的名称

mount -t vfat -o iocharset=cp950 /dev/sdb4 /mnt/flash

iocharset用来指定这个语系 cp950是这个中文语系

 

4.从新挂载,出故障的时候特别管用

[root@localhost ~]# mount -o remount,rw,auto /media/test4/

根目录是最重要的部分,而根目录是没有办法卸载的,假如要修改挂载参数

              那要如何从新挂载?重启,其实能够不用的

[root@localhost ~]# mount -o remount,rw,auto /

 

umount

umount命令

功能:卸载设备

 

语法:

                        umount [-fn] 设备文件名或者挂载点

经常使用的选项

                        -f 强制卸载

                        -n 不更新/etc/mtab,正常挂载会把记录在此文件,卸载则移除

卸载注意事项:

                        挂载的设备没有进程使用,若是有,则没法卸载,须要使用fuser命令

例子:

1.卸载/dev/sdc7labeltest4

[root@localhost ~]# umount /media/test4/

[root@localhost ~]# umount /dev/sdc7

 

 

fuser

fuser命令

功能:验证某个进程正在使用的文件或者套接字

                 强制杀掉挂载点上的全部进程

语法:

                        fuser [option]  name(挂载点)

经常使用的选项

                        -v 查看某文件上正在运行的进程

                        -k kill文件

                        -km mountpoint :终止正在访问此挂载点的全部进程,bash终端会被干掉

 

例子:

1.查看光驱挂载点运行的程序

clip_image050

2.强制卸载有程序运行的设备

clip_image051

clip_image052

同时会把bash终端也杀掉。

2.3    读取文件的底层详解

2.3.1  目录树读取文件的原理:

                                    因为在目录下操做文件须要有写权限,首先须要这个目录有写权限

                                    系统经过挂在信息能够获得/根的inode号,经过stat查看是inode号是2,,而后就能够根据inode号读取blocknum,去blocknum里面找到对应的信息主要是inode号码  文件名字,依次类推,就能够找到对应的文件所在的位置

clip_image054

例子:读取文件/etc/passwd的过程:,root身份

clip_image056

1.    首先找到/inode 2,而且具备rx权限,找到对应的block,来找到etc对应的inode

2.    接着在etc目录对应的block里面找到相应的passwdinode

3.    最后经过passwdinode来查找对应block,因为具备rw权限,所以能够读取passwd里面的数据

在目录/backup/下建立文件test的步骤是:

            1.扫描inode位图,找到一个空闲的inode

            2./,经过挂载点获取inode,而后在其block中找是否有backup(无则报错结束)

            3.经过backupinode号找到其block,在里面把test文件的inode和文件名写进去

            4.再扫描bitmap,占用,而后把block分配给文件存储(通常会多分配block(未使用),防止增加而形成文件碎片)

在目录/backup下删除文件test的步骤:

            1./backup目录的block文件的条目删除

            2.testinode条目清除,inode bitmap位图也释放

            3.bitmap块位图也释放test文件占用的块

 

同个分区下剪切文件为何那么快?

答:把文件名和inode在旧目录下删除,在新的目录下写入同样的inode和文件名

 

那是否是一个目录就占用一个block呢?

答:固然不是了,那要看下这个目录自己存放的文件的多少

clip_image058

 

2.3.2  linux系统下新建一个文件要怎么处理呢?

             1.首先看下该用户要在该目录下是否是有这个r权限与这个x权限,有则进入该目录

             2.再看下该用户是否有这个w,有的话才有资格添加文件

             3.查看这个inode bitmap找到一个空余的inode号码,并将这个权限和属性写进去,

               而且写入这个目录的block文件名对应条目

             4.查看这个block bitmap找到没有使用block,根据大小选择相对应数量的block

               把该文件的数据写进去,而且更新inode指向的block号码

             5.将这个blockinodeinode bitmapblock bitmap等信息写入这个superblock和备份的superblock中去

其中这个superblockinode bitmapblock bitmap是在每次文件添加,删除,更新过程常常会变化的,属于中间数据

从上面能够看出,要建立一个文件必须保持5个步骤一次性完成,才不会形成文件系统的不一致。

所以这些操做必须异步进行,因此最后必定要同步到各个记录数据点去。那假如系统在文件建立一半的时候崩溃了

那该如何解决这个问题呢?

            ext2系统只能同fsck e2fsck文件系统一致性检查,看下有没有这个unclean数据,如这个该inode bitmap使用了,

            可是这个inode里面却仍是空数据的状况。不过要检查整个文件系统,这是很是浪费时间的。那有什么办法可以在系统挂掉的时候记录挂掉以前还未完成的任务呢?

            那就是日志文件系统了,相似数据库学过的保持数据完整性的方法是同样的。

            1.当系统要写入一个文件的时候,先把给文件要写入的关键信息记录在日志中

            2.进行数据的正常写入

            3.正常完成数据的写入,在日志记录中完成文件的正常写入

        windows系统异常关机也会进行磁盘的一致性修正,相似ext3windows也有日志的功能,所以速度快点。

2.3.3  linux文件系统采起异步模式

 

linux文件系统是采用这个异步操做的模式,这样能够提升这个系统的运行速度

                众所周知,内存速度比硬盘快了不少,因此若是把常常用到的数据写到这个内存

                中,这样能够提升系统性能;当这个内存文件被修改过,就会被定义为dirty数据,此时

                就按照某种机制写回硬盘,sync就是强制内存数据写回硬盘的操做的。

                因此关机的时候系统会自动调用sync来写回数据回硬盘,记得多调用几回sync,比较安全

                若是意外断电了,那就要花不少时间了检查文件系统的一致性了,甚至是文件系统部分数据

                的丢失损坏.

2.3.4  挂载点的意义:

                        挂载点必定是目录,目录是文件系统的入口

3      练习

练习:

1、建立一个1G的分区,文件系统为ext4,卷标为DATA,块大小为1024,预留管理空间为磁盘分区的8%;挂载至/backup目录,要求使用卷标进行挂载,且在挂载时启动此文件系统上的acl功能;

mke2fs –t ext4 –L DATA –b 1024 –m 8 

mount –o acl LABEL=”DATA” /backup

clip_image059

2、将此文件系统的超级块中的信息中包含了blockinode的行保存至/tmp/partition.txt中;

[root@localhost ~]# dumpe2fs -h /dev/sdc7 | grep -E "block|inode" > /tmp/partition.txt

 

3、复制/etc目录中的全部文件至此文件系统;然后调整此文件系统类型为ext3,要求不能损坏已经复制而来的文件;

ext2已经不使用了,此题不作

4、调整其预留百分比为3%

tune2fs –m 3 /dev/sdc7

clip_image060

5、以从新挂载的方式挂载此文件系统为不更新访问时间戳,并验正其效果;

[root@localhost backup]# cp /etc/inittab .

clip_image062

[root@localhost ~]# mount -o remount,noatime /dev/sdc7 /backup

 

访问文件[root@localhost backup]# cat inittab

clip_image064

时间戳不变

 

6、对此文件系统强行作一次检测;

            [root@localhost ~]# umount /backup/ #必须先卸载

[root@localhost ~]# e2fsck -f /dev/sdc7

e2fsck 1.41.12 (17-May-2010)

Pass 1: Checking inodes, blocks, and sizes

Pass 2: Checking directory structure

Pass 3: Checking directory connectivity

Pass 4: Checking reference counts

Pass 5: Checking group summary information

DATA: 12/131584 files (0.0% non-contiguous), 69386/2104480 blocks

 

7、删除复制而来的全部文件,并将此文件系统从新挂载为同步(sync);然后再次复制/etc目录中的全部文件至此挂载点,体验其性能变化;

cp –r /etc/* /backup/ #速度很是快

rm –rf /backup/*

[root@localhost ~]# mount -o remount,sync /dev/sdc7 /backup

cp –r /etc/* /backup/  #速度至关慢

相关文章
相关标签/搜索