Linux文件管理系统

LINUX文件系统体系结构

 wKioL1X2lfviWGxaAAAxgkdBIrM595.gif

 

用户空间(User space)包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开、读取、写和关闭)提供用户接口。系统调用接口(System call interface)的作用就像是交换器,它将系统调用从用户空间发送到内核空间(Kernel space)中的适当端点。

VFS(Virutal file systems) 是底层文件系统的主要接口。这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大。有两个针对文件系统对象的缓存(inode dentry)。它们缓存最近使用过的文件系统对象。每个文件系统实现(比如 ext2JFS 等等)导出一组通用接口,供 VFS 使用。缓冲区缓存会缓存文件系统和相关块设备之间的请求。

 

主要结构

Linux 以一组通用对象的角度看待所有文件系统。这些对象是超级块(superblock)、inodedentry 和文件。超级块在每个文件系统的根上,超级块描述和维护文件系统的状态。文件系统中管理的每个对象(文件或目录)在 Linux 中表示为一个 inodeinode 包含管理文件系统中的对象所需的所有元数据(包括可以在对象上执行的操作)。另一组结构称为 dentry,它们用来实现名称和 inode 之间的映射,有一个目录缓存用来保存最近使用的 dentrydentry 还维护目录和文件之间的关系,从而支持在文件系统中移动。最后,VFS 文件表示一个打开的文件(保存打开的文件的状态,比如写偏移量等等)。

 

虚拟文件系统层

VFS 作为文件系统接口的根层。VFS 记录当前支持的文件系统以及当前挂装的文件系统。

 

超级块

超级块结构表示一个文件系统。它包含管理文件系统所需的信息,包括文件系统名称(比如 ext2)、文件系统的大小和状态、块设备的引用和元数据信息(比如空闲列表等等)。超级块通常存储在存储媒体上,但是如果超级块不存在,也可以实时创建它。

 

Linux系统下可使用的文件系统有

基本文件系统:ext2, ext3, ext4, reiserfs, xfs, btrfs, swap

光盘:iso9660

Windows: fat32(vfat), ntfs

Unix: ffs, ufs, jfs, jfs2

网络文件系统:nfs, cifs

集群文件系统:ocfs2, gfs2

分布式文件系统:ceph, moosefs, mogilefs, hdfs, gfs, glusterfs

 

1)日志型文件系统:非日志型文件系统:ext2

日志型文件系统:ext3

 

2swap:交换分区

 

创建文件系统

在分区上执行格式化(高级格式化)要使用某种文件系统,满足两个条件:

1)内核中:支持此种文件系统

2)用户空间:有文件系统管理工具

 

系统文件一般的管理工具:

mkfs命令

使用格式: mkfs [-V] [-t fstype] [fs-options] filesys [blocks] [-L Lable]

作用:创建文件系统

参数

-V : 详细显示模式
-t : 给定文件系统的格式
-c : 在制做档案系统前,检查该partition 是否有坏轨
-l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
block : 给定 block 的大小
-L:建立lable
 
实例:
设定sda2分区的文件格式为ext3,以下两种方式同样可以实现
[root@localhost ~]# mkfs.ext3 /dev/sda2
[root@localhost ~]# mkfs -t ext3 /dev/sda2
 
mke2fs命令
使用格式:mke2fs [OPTION]... DEVICE
 
常用参数
-t:{ext2|ext3|ext4}  指定需使用的文件系统

-b {1024|2048|4096}      指定块大小

-L 'LABEL'                 设定标签

-j:  mke2fs -t ext3       创建使用ext3卷号的文件系统

-i #                                指定每个inode的字节数

-N #                              指定inode的数量

-m #:                                预留磁盘空间占据多大百分比的空间为后期管理使用;

-O FEATURE[,...]     指定分区特性

-O ^FEATURE      关闭此特性

实例:

(1)     使用fdisk创建分区

fdisk /dev/sda

wKioL1X2lkqhbrrqAAIsmtR1q_A047.jpg

(2)创建分区后,使用partx /dev/sda3 重新激活分区表

[root@localhost~]# partx /dev/sda

#1:      2048-  4098047 ( 4096000 sectors,   2097 MB)

# 2:   4098048-106498047 (102400000 sectors,  52428 MB)

# 3:106498048-110703914 (  4205867sectors,   2153 MB)

(3)创建文件系统为ext4,指定块大小为1024,卷标为“test”

[root@localhost~]# mke2fs -t ext4 -b 1024 -L test /dev/sda3

 (4)使用blkid命令查看结果

[root@localhost~]# blkid /dev/sda3

/dev/sda3:LABEL="test" UUID="22c70ef3-9497-4b48-b5c9-5067c5b71710"TYPE="ext4"


 

文件系统属性查看及调整工具

e2label命令

使用格式:e2lable DEVICE [LABEL]

作用: 查看分区的卷标及设置

[root@localhost~]# e2label /dev/sda3
test


 

tune2fs命令

显示ext系列文件系统的属性,或调整其属性;

-l:显示超级块中的信息;显示整个文件的属性及布局等相关信息;

-L: 'LABEL':修改卷标;

-m#: 调整预留给管理员的管理空间百分比;

-j:ext2 --> ext3

-O:文件系统属性的启动或关闭

-o:文件系统默认挂载选项的启用或关闭

 

dumpe2fs命令

-h: 仅显示超级块信息

 

文件系统检测

fsck(Filesystem check)命令

fsck-t type

fsck.type

-a: 自动修复错误

-r: 交互式修复错误

-f: 强制检测

 

e2fsck命令:ext系列文件系统专用的检测修复工具;

-y: 自动回答为“yes”

-f:force

 

文件系统的挂载和使用

将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件系统访问入口的行为,称之为挂载;

解除此关联关系的过程为卸载。

挂载点:mount point, 设备挂载至目录;

注意:挂载点在挂载在之后,其内部原有的文件会被暂时隐藏;建立使用空目录做为挂载点

常用的挂载命令有

mount

格式为:mount [-afFhnrvVw] [-L<标签>] [-o<选项>] [-t<文件系统类型>] [设备名] [加载点]
作用: 加载指定的文件系统。
常用参数和选项: 
-a 加载文件/etc/fstab中设置的所有设备。 
-f 不实际加载设备。可与-v等参数同时使用以查看mount的执行过程。 
-F 需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度。 
-h 显示在线帮助信息。 
-L<标签> 加载文件系统标签为<标签>的设备。 
-n 不将加载信息记录在/etc/mtab文件中。 
-o<选项> 指定加载文件系统时的选项。有些选项也可在/etc/fstab中使用。这些选项包括: 
    async 以非同步的方式执行文件系统的输入输出动作。 
    atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime。 
    auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto。 
    defaults 使用默认的选项。默认选项为rw、suid、dev、exec、anto nouser与async。 
    dev 可读文件系统上的字符或块设备,取消选项为nodev。 
    exec 可执行二进制文件,取消选项为noexec。 
    noatime 每次存取时不更新inode的存取时间。 
    noauto 无法使用-a参数来加载。 
    nodev 不读文件系统上的字符或块设备。 
    noexec 无法执行二进制文件。 
    nosuid 关闭set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位。 
    nouser 使一位用户无法执行加载操作,默认设置。 
    remount 重新加载设备。通常用于改变设备的设置状态。 
    ro 以只读模式加载。 
    rw 以可读写模式加载。 
    suid 启动set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位,取消选项为nosuid。 
    sync 以同步方式执行文件系统的输入输出动作。 
    user 可以让一般用户加载设备。 
-r 以只读方式加载设备。 
-t<文件系统类型> 指定设备的文件系统类型。常用的选项说明有: 
    minix Linux最早使用的文件系统。 
    ext2 Linux目前的常用文件系统。 
    msdos MS-DOS 的 FAT。 
    vfat Win85/98 的 VFAT。 
    nfs 网络文件系统。 
    iso9660 CD-ROM光盘的标准文件系统。 
    ntfs Windows NT的文件系统。 
    hpfs OS/2文件系统。Windows NT 3.51之前版本的文件系统。 
    auto 自动检测文件系统。 
-v 执行时显示详细的信息。 
-V 显示版本信息。 
-w 以可读写模式加载设备,默认设置。
 
unmount:卸载命令
# umount DEVICE
       # umount MOUNT_POINT
 
实例:
(1)  创建挂载点 /mnt/test
[root@localhost ~]# mkdir /mnt/test
(2)把/dev/sda3挂载到/mnt/test上
[root@localhost ~]# mount /dev/sda3 /mnt/test
(3)使用df �Ch 命令查看
 [root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/789-LogVol01
                       47G  3.5G   41G   8% /
tmpfs                 491M  224K  491M   1% /dev/shm
/dev/sda1             1.9G   37M  1.8G   3% /boot
/dev/sr0              3.7G  3.7G     0 100% /mnt/iso
/dev/sda3             2.0G  3.1M  1.9G   1% /mnt/test
 
使用umount命令卸载
[root@localhost ~]# umount /mnt/test/
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/789-LogVol01
                       47G  3.5G   41G   8% /
tmpfs                 491M  224K  491M   1% /dev/shm
/dev/sda1             1.9G   37M  1.8G   3% /boot
/dev/sr0              3.7G  3.7G     0 100% /mnt/iso

交换分区

查看内存(memory)及交换分区(swap)的命令

free

-m: MB为单位

-g: GB为单位

[root@localhost ~]# free -m

            total       used       free    shared    buffers     cached

Mem:           981        710        270          3         62        312

-/+ buffers/cache:        336        645

Swap:         1999         0       1999

 

创建交换分区

mkswap

格式:mkswap [option] DEVICE

       -L 'LABEL'       指定卷标

 

swapon:启用交换分区

格式:swapon [option] [DEVICE]

       -a: 激活所有交换分区

       -p PRIORITY: 设定其优先级

 

swapoff:禁用交换分区

格式:swapoff [option] [DEVICE]

 

实例:

创建一个交换分区

[root@localhost ~]# mkswap /dev/sda3
Setting up swapspace version 1, size = 2102928 KiB
no label, UUID=023db09a-ccd8-4714-ad69-337b744e2843
[root@localhost ~]# swapo
swapoff  swapon   
[root@localhost ~]# swapo
swapoff  swapon   
[root@localhost ~]# swapon /dev/sda3
[root@localhost ~]# swapon �Cs    
Filename                           Type             SizeUsed      Priority
/dev/dm-1                              partition     2047996       0     -1
/dev/sda3                               partition      2102928       0     -2


 

文件系统等空间占用信息的查看工具

df命令

作用:报告文件系统磁盘空间的使用情况
格式:df [OPTION]... [FILE]... POSIX 选项: [-kP]

 

常用参数

df: disk free                      显示磁盘空间

-h: human-readable   用常见的格式显示出大小
-i: inode数量       用信息索引点代替块表示使用状况

-P:                                     Posix兼容的格式输出

du: disk usage

-s: summary

 

文件系统上的链接文件:

硬链接:

特性:(1)两个路径指向同一个inode

2)不能对目录进行;

       3不能跨分区进行

注意:指向同一个inode的多个不同路径; 创建文件的硬链接会增加inode的引用计数;删除硬链接仅是删除其一个访问路径,只到最后一个路径被删除;

 

符号链接(软链接):

特性:(1)链接文件的数据指向另一个文件路径

2)可以对目录进行;

3)可以跨分区;

注意:指向的是另一个文件路径,而非inode。对文件创建符号链接不会增加其引用计数;删除原文件,符号链接文件也将无法;

ln [-s] SRC DEST

                 -ssymbolic link

                 -vverbose

 

作业

创建一个10G文件系统,类型为ext4,要求开机可自动挂载至/mydata目录

(1)   创建分区

[root@localhost ~]# fdisk /dev/sda
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e                                             因只能分四个主分区,之前已有3个在用,因此此处第4个分区分为
Selected partition 4               extended(扩展)
First cylinder (6892-15665, default 6892): 
Using default value 6892
Last cylinder, +cylinders or +size{K,M,G} (6892-15665, default 15665): 
Using default value 15665
Command (m for help): n
First cylinder (6892-15665, default 6892): 
Using default value 6892
Last cylinder, +cylinders or +size{K,M,G} (6892-15665, default 15665): +10G
Command (m for help): p
Device Boot      Start         End      Blocks  Id  System
/dev/sda1   *           1         256    2048000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             256        6630   51200000   8e  Linux LVM
/dev/sda3            6630        6891    2102933+  83  Linux
/dev/sda4            6892       15665   70477155    5  Extended
/dev/sda5            6892        8197   10490413+  83  Linux


 

2)使用kpatx命令刷新分区表后,查看/proc/partitions下的分区信息

[root@localhost ~]# kpartx /dev/sda5
[root@localhost ~]# cat /proc/partitions 
major minor  #blocks  name
   7        0   3804160 loop0
   8        0 125829120 sda
   8        1   2048000 sda1
   8        2  51200000 sda2
   8        3   2102933 sda3
   8        4         31 sda4
   8        5  10490413 sda5
 253        0  49147904 dm-0
 253        1   2048000 dm-1


 

3)使用mke2fs命令创建文件系统ext4

[root@localhost ~]# mke2fs -t ext4  /dev/sda5
 (4)使用blkid命令查看
[root@localhost ~]# blkid /dev/sda5
/dev/sda5: UUID="b6d1d8c9-6496-4e85-9d0f-026b3756c11e" TYPE="ext4"


 

4)创建挂载点并使用mount命令挂载上去;最后编辑/etc/fstab文件

[root@localhost ~]# mkdir /dev/sda5 /mnt/test
[root@localhost ~]# mount /dev/sda5 /mnt/test/
[root@localhost ~]# vim /etc/fstab


wKioL1X2lmuBi2NsAAIMaXYUaFw469.jpg

 

(5)使用mount�Ca命令再检查一次,使用df命令输出结果。

[root@localhost~]# mount -a
[root@localhost~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/789-LogVol01
                       47G  3.5G  41G   8% /
tmpfs                 491M  224K 491M   1% /dev/shm
/dev/sda1             1.9G   37M 1.8G   3% /boot
/dev/sr0              3.7G 3.7G     0 100% /mnt/iso
/dev/sda5            9.8G   23M  9.3G  1% /mnt/test



你可能感兴趣的:(linux,interface,应用程序,文件管理,Systems)