Linux作为开源的操作系统,其中一个优点是支持各种各样文件系统类型,从远古的非日志系统到现如今常用的各种日志文件系统。

        

  1. 文件系统的概念:

            

  在储存空间中,储存大量文件时,能实现按名储存的一种机制,它是如何运行呢?这就与文件系统的数据有关了,文件数据不单单只是存储文件的实际内容,还存储一些文件的属性信息(文件的权限和所有者等等)

            

  文件系统通常会将这两部分数据分别储存于不同的块(block),而文件权限和属性信息放于inode中,实际数据则放于data  block中,还有一个超级块(super block)会记录整个文件系统的整体信息,其中包括inode与block的总量,使用量,剩余量等等。

 

简要阐述三个数据:

 

  • block:   记录实际文件的内容,如果文件太大,会占用多个block。

  • inode:   记录文件的属性,一个文件占用一个inode,同时会记录文件数据所在的block号码。

  • super  block: 记录此文件系统的整体信息,包括inode与block的总量,使用量,剩余量以及文件系统的格式和相关信息  。

 

linux文件系统管理_linux文件系统

 

一个分区可以理解为由一个boot block(引导)和多个块儿(block group)组成。

  • boot block:  为预留块,用来引导系统分区,它被MBR中的boot loader 调用

  • 文件系统描述(FSD:) 描述该块组存放的什么数据

  • 块对应表(block  bitmap):  记录哪些block是空的

  • inode对应表(inode bitmap):   记录哪些inode已使用,哪些没有使用

  • inode table: 储存inode条目

  • data block: 放置文件内容

 

  • inode的主要内容为记录文件属性及该文件实际数据放于哪几号的block内,通常为以下这些:


    1. 该文件的访问模式(r/w/x)

    2. 该文件的所有者与组(ower/group)

    3. 该文件的大小

    4. 最近一次的读取时间(atime)

    5. 文件创建或状态改变的时间(ctime)

    6. 最近修改的时间(mtime)

    7. 定义文件特性的标志,如setUID等

    8. 该文件真正内容的指向(pointer)

inode的其他特色属性:

          i.·每个inode大小均固定为128bytes
          j.每个文件都只会占用一个inode,所以文件系统上能创建的文件个数与inode数量有关
          k.inode不记录文件名,文件名的记录在目录block中
          l.系统读取文件是需要先找到inode,并分析inode所记录的权限和用户是否符合,若符合才能开   始实际读取block的内容。


 linux文件系统管理_linux文件系统_02

 

2. linux中所支持的文件系统:

     ext2,ext3,ext4, xfs, btrfs, reiserfs, jfs, swap

                

swap:交换分区


注意:swap分区不是把它当作内存来使用,而是内存中的数据交换到swap分区,即swap交换分区拿出部分空间来存储内存中不常用的空间数据,以此腾出更多的内存空间             

        

光盘:iso9660

 

其他文件系统:

        windows: fat32,ntfs
          Unix: ffs, ufs, jfs2
        网络文件系统:nfs, cifs
        集群文件系统:gfs2, ocfs2
        分布式文件系统:ceph,moosefs, mogilefs, GlusterFS, Lustre 

 

3 . 文件系统的组成部分:

        内核中的模块:ext2, ext3 , ext4, xfs, xfat ........

 

            内核模块所支持的文件系统格式,只有这里边的才可以格式化:

            #cd/lib/modules/`uname -r `/kernel/fs   

目录下ls列出:


 

 

linux文件系统管理_block_03


        

       VFS(Virtual  Filesystem Switch)虚拟文件系统:

                

   linux上的所有文件系统都是通过VFS的内核功能去读取的。通过VFS功能让我们省去了自行设置读取文件的文件系统定义,下边是VFS的缩略图:

                    

                        

 

linux文件系统管理_VFS_04

 

4.  文件系统的管理工具

        

     创建文件系统:
     
        mkfs命令:
            (1) #mkfs.FS_TYPE    /dev/DEVICE
               ext4
                xfs
               btrfs
               vfat     

 

            (2) # mkfs -t   FS_TYPE /dev/DEVICE

            -L 'LABEL': 设定卷标
pa:

[root@localhost ~]# mkfs -t ext4 -b 4096 -L centos/dev/sda3
mke2fs 1.41.12 (17-May-2010)     
Filesystem label=centos                           
OS type: Linux
Block size=4096 (log=2)                            
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
130304 inodes, 130278 blocks
6513 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=134217728
4 block groups
32768 blocks per group, 32768 fragments per group
32576 inodes per group
Superblock backups stored on blocks: 
    32768, 98304
Writing inode tables:done                           
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


 

 

        mke2fs:  fext系列文件系统专用管理工具
            -t {ext2|ext3|ext4}
            -b {1024|2048|4096}
            -L 'LABEL'
            -j: 相当于 -t ext3
               mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
            -i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小;
            -N #:为数据空间创建个多少个inode;
            -m #: 为管理人员预留的空间占据的百分比;
            -O FEATURE[,...]:启用指定特性
                -O^FEATURE:关闭指定特性

        mkswap:创建交换分区格式化
            mkswap [options]device
                -L'LABEL'

                -U:UUID
            前提:调整其分区的ID为82;
 

swapon: 挂载交换分区

swapoff: 卸载交换分区   



    其它常用工具:

        blkid:块设备属性信息查看
            blkid [OPTION]...[DEVICE]
                -UUUID: 根据指定的UUID来查找对应的设备
                -LLABEL:根据指定的LABEL来查找对应的设备

[root@localhost ~]# blkid     #查看块设备的UUID信息
/dev/sda1: UUID="7918efe3-8f5a-4c5e-9dcb-bade1bfab346"TYPE="ext4" 
/dev/sda2: UUID="F7EZwN-Nlq6-mpBf-k2pw-1A6g-jM5F-dYkCd1"TYPE="LVM2_member" 
/dev/sda3: LABEL="centos"UUID="9825c356-6a78-4090-ab39-7e2399632110" TYPE="ext4" 
/dev/mapper/vg0-root: UUID="b3d0d7e1-a5bc-4142-bf34-244b1b7fd748"TYPE="ext4" 
/dev/mapper/vg0-swap: UUID="028a57e9-3707-4c7f-bdd7-947dd16c965d"TYPE="swap" 
/dev/mapper/vg0-usr: UUID="956576c9-f7ad-4a9f-b76a-d3137946bcfe"TYPE="ext4" 
/dev/mapper/vg0-var: UUID="ef108cb5-b186-4967-bc72-6d59a1cca991"TYPE="ext4"


        e2label:管理ext系列文件系统的LABEL
            # e2label DEVICE[LABEL]

[root@localhost ~]# e2label -l centos /dev/sda3
Usage: e2label device [newlabel]
[root@localhost ~]# e2label /dev/sda3 
centos


        tune2fs:重新设定ext系列文件系统可调整参数的值
            -l:查看指定文件系统超级块信息;super block
            -L 'LABEL':修改卷标
            -m #:修预留给管理员的空间百分比
            -j: 将ext2升级为ext3
            -O: 文件系统属性启用或禁用
            -o: 调整文件系统的默认挂载选项
            -U UUID: 修改UUID号;

        dumpe2fs:
            -h:查看超级块信息

[root@localhost ~]# dumpe2fs -h /dev/sda3
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: centos #
卷标名
Last mountedon: <not available>
Filesystem UUID: 9825c356-6a78-4090-ab39-7e2399632110
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features:  has_journal ext_attrresize_inode dir_index filetype extent flex_bg sparse_super large_filehuge_file uninit_bg dir_nlink extra_isize
Filesystem flags:  signed_directory_hash
Default mount options: (none)
Filesystem state:     clean
Errors behavior:      Continue
Filesystem OS type:    Linux  #
文件系统类型
Inode count:          130304  #总的inode大小
Block count:          130278  #
总的块大小
Reserved blockcount:   6513
Free blocks:          121997  #
空闲block大小
Free inodes:          130293  #
空闲的inode大小
Firstblock:             0
Block size:           4096   #
块的大小单位4096个字节  
Fragmentsize:         4096
Reserved GDT blocks:    31
Blocks per group:     32768  #
每个块组中的block数
Fragments pergroup:   32768
Inodes per group:     32576  #
每个组中的inode数
Inode blocks pergroup: 1018
Flex block group size:  16
Filesystem created:  Sat Aug 15 16:15:132015 #
文件系统创建时间
Last mounttime:  n/a
Last write time:     Sat Aug15 16:15:25 2015

   

 free:查看内存使用情况

        -m:    以M为单位

        -g:  以G为单位

[root@localhost ~]# free -m
             total       used       free    shared    buffers     cached
Mem:           980        761        219          0         83        448
-/+ buffers/cache:        229        751
Swap:         2047          0       2047

 #以G为单位不够1G则显示为0


 

 

    文件系统检测:
        fsck: File System CheCk
            fsck.FS_TYPE
            fsck -t FS_TYPE
                -a:自动修复错误
                -r:交互式修复错误

               Note: FS_TYPE一定要与分区上已经文件类型相同;

[root@localhost ~]# fsck -t ext4  /dev/sda3
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
centos: clean, 11/130304 files, 8281/130278 blocks


        e2fsck:ext系列文件专用的检测修复工具
            -y:自动回答为yes;
            -f:强制修复;

                    

[root@localhost ~]# e2fsck -f /dev/sda3
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
centos: 11/130304 files (0.0% non-contiguous), 8281/130278 blocks


       

5.文件系统挂载

 

定义:将额外的文件系统与根文件系统,建立关联关系。使得其作为此额外文件

系统的访问入口的过程。

 

挂载前需要注意的事儿:

         单一文件系统不应该被重复挂载在不同的挂载点(目录)中

    单一目录不应重复挂载多个文件系统

    作为挂载点的目录理论上应该都是空白目录,不然原来目录下的文件会被隐藏

   

mount  挂载命令

    mount: 通过查看/etc/mtab文件显示当前系统已挂载的所有设备

    mount [ -fnrsvw] [-t vfstype] [-o options]device dir

            device:指明要挂载的设备;

                (1) 设备文件:例如/dev/sda5

                (2) 卷标:-L 'LABEL', 例如 -L 'MYDATA'

                (3) UUID, -U 'UUID':例如 -U'0c50523c-43f1-45e7-85c0-a126711d406e'

                (4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs

            dir:挂载点

                事先存在;建议使用空目录;

                进程正在使用中的设备无法被卸载;

        常用命令选项:

                -t vsftype:指定要挂载的设备上的文件系统类型;

                -r: readonly,只读挂载;

                -w: read and write, 读写挂载;

                -n: 不更新/etc/mtab;

                -a:自动挂载所有支持自动挂载的设备;(定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能)

                -L 'LABEL': 以卷标指定挂载设备;

                -U 'UUID': 以UUID指定要挂载的设备;

                -B, --bind: 绑定目录到另一个目录上;

 

            注意:查看内核追踪到的已挂载的所有设备:cat /proc/mounts

[root@localhost~]# mkdir /mnt/sda3
[root@localhost ~]#mount /dev/sda3 /mnt/sda3/
[root@localhost ~]#df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg0-root  20511356 305956  19156824   2% /
tmpfs                   502176       0   502176   0% /dev/shm
/dev/sda1               194241   27901   156100  16% /boot
/dev/mapper/vg0-usr   10190136 1963888   7701960 21% /usr
/dev/mapper/vg0-var   20511356 198880  19263900   2% /var
/dev/sda3               488384     396   461936   1% /mnt/sda3


 

 

 

-o options:(挂载文件系统的选项)

                async:异步模式;

                sync:同步模式;

                atime/noatime:包含目录和文件;

                diratime/nodiratime:目录的访问时间戳

                auto/noauto:是否支持自动挂载

                exec/noexec:是否支持将文件系统上应用程序运行为进程

                dev/nodev:是否支持在此文件系统上使用设备文件;

                suid/nosuid:

                remount:重新挂载

                ro:

                rw:

                user/nouser:是否允许普通用户挂载此设备

                acl:启用此文件系统上的acl功能

 

                注意:上述选项可多个同时使用,彼此使用逗号分隔;

                      默认挂载选项:defaults

                            rw,suid, dev, exec, auto, nouser, and async

 

 

[root@localhost ~]# mkdir /mnt/home
[root@localhost ~]# mount --bind /home//mnt/home/
[root@localhost ~]# ls -ild /home//mnt/home/
524290 drwxr-xr-x.3 root root 4096 Aug 14 20:52 /home/
524290 drwxr-xr-x.3 root root 4096 Aug 14 20:52 /mnt/home/
[root@localhost ~]# mount -l
/dev/mapper/vg0-root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts(rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/vg0-usr on /usr type ext4 (rw)
/dev/mapper/vg0-var on /var type ext4 (rw)
none on /proc/sys/fs/binfmt_misc typebinfmt_misc (rw)
/dev/sda3 on /mnt/sda3 type ext4 (rw)[centos]
/home on /mnt/hometype none (rw,bind)


 

 

umount  卸载命令
                   umount/mnt/home/
 
fuser 查看哪些进程在使用挂载点
fuser –v  挂载点
fuser –km  强制终止正在使用挂载点的进程