710661809 发表于 2018-5-22 07:58:50

Linux文件管理系统

  LINUX文件系统体系结构

  用户空间(User space)包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开、读取、写和关闭)提供用户接口。系统调用接口(System call interface)的作用就像是交换器,它将系统调用从用户空间发送到内核空间(Kernel space)中的适当端点。
  VFS(Virutal file systems) 是底层文件系统的主要接口。这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大。有两个针对文件系统对象的缓存(inode 和 dentry)。它们缓存最近使用过的文件系统对象。每个文件系统实现(比如 ext2、JFS 等等)导出一组通用接口,供 VFS 使用。缓冲区缓存会缓存文件系统和相关块设备之间的请求。
  主要结构
  Linux 以一组通用对象的角度看待所有文件系统。这些对象是超级块(superblock)、inode、dentry 和文件。超级块在每个文件系统的根上,超级块描述和维护文件系统的状态。文件系统中管理的每个对象(文件或目录)在 Linux 中表示为一个 inode。inode 包含管理文件系统中的对象所需的所有元数据(包括可以在对象上执行的操作)。另一组结构称为 dentry,它们用来实现名称和 inode 之间的映射,有一个目录缓存用来保存最近使用的 dentry。dentry 还维护目录和文件之间的关系,从而支持在文件系统中移动。最后,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
  (2)swap:交换分区
  创建文件系统:
在分区上执行格式化(高级格式化)要使用某种文件系统,满足两个条件:
(1)内核中:支持此种文件系统
(2)用户空间:有文件系统管理工具
  系统文件一般的管理工具:
  mkfs命令
使用格式: mkfs [-V] [-t fstype] filesys [-L Lable]  作用:创建文件系统
  参数
-V : 详细显示模式
-t : 给定文件系统的格式
-c : 在制做档案系统前,检查该partition 是否有坏轨
-l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
block : 给定 block 的大小
-L:建立lable
实例:设定sda2分区的文件格式为ext3,以下两种方式同样可以实现# mkfs.ext3 /dev/sda2# mkfs -t ext3 /dev/sda2
mke2fs命令使用格式:mke2fs ... 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

(2)创建分区后,使用partx /dev/sda3 重新激活分区表
# 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”
# mke2fs -t ext4 -b 1024 -L test /dev/sda3
(4)使用blkid命令查看结果
# blkid /dev/sda3
/dev/sda3:LABEL="test" UUID="22c70ef3-9497-4b48-b5c9-5067c5b71710"TYPE="ext4"


文件系统属性查看及调整工具
e2label命令
使用格式:e2lable DEVICE
作用: 查看分区的卷标及设置
# 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# mkdir /mnt/test(2)把/dev/sda3挂载到/mnt/test上# mount /dev/sda3 /mnt/test(3)使用df –h 命令查看 # df -hFilesystem            SizeUsed Avail Use% Mounted on/dev/mapper/789-LogVol01                     47G3.5G   41G   8% /tmpfs               491M224K491M   1% /dev/shm/dev/sda1             1.9G   37M1.8G   3% /boot/dev/sr0            3.7G3.7G   0 100% /mnt/iso/dev/sda3             2.0G3.1M1.9G   1% /mnt/test
使用umount命令卸载# umount /mnt/test/# df -hFilesystem            SizeUsed Avail Use% Mounted on/dev/mapper/789-LogVol01                     47G3.5G   41G   8% /tmpfs               491M224K491M   1% /dev/shm/dev/sda1             1.9G   37M1.8G   3% /boot/dev/sr0            3.7G3.7G   0 100% /mnt/iso
交换分区  查看内存(memory)及交换分区(swap)的命令
  free
  -m: 以MB为单位
  -g: 以GB为单位
  # 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 DEVICE
         -L 'LABEL'       指定卷标
  
  swapon:启用交换分区
  格式:swapon
         -a: 激活所有交换分区
         -p PRIORITY: 设定其优先级
  
  swapoff:禁用交换分区
  格式:swapoff
  
  实例:
  创建一个交换分区
# mkswap /dev/sda3
Setting up swapspace version 1, size = 2102928 KiB
no label, UUID=023db09a-ccd8-4714-ad69-337b744e2843
# swapo
swapoffswapon   
# swapo
swapoffswapon   
# swapon /dev/sda3
# swapon –s   
Filename                           Type             SizeUsed      Priority
/dev/dm-1                              partition   2047996       0   -1
/dev/sda3                               partition      2102928       0   -2  

  
  文件系统等空间占用信息的查看工具
  df命令
作用:报告文件系统磁盘空间的使用情况格式:df ... ... 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
                 -s:symbolic link
                 -v:verbose
  
  作业
  创建一个10G文件系统,类型为ext4,要求开机可自动挂载至/mydata目录
  (1)   创建分区
# 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      BlocksIdSystem
/dev/sda1   *         1         256    2048000   83Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             256      6630   51200000   8eLinux LVM
/dev/sda3            6630      6891    2102933+83Linux
/dev/sda4            6892       15665   70477155    5Extended
/dev/sda5            6892      8197   10490413+83Linux  

  
  (2)使用kpatx命令刷新分区表后,查看/proc/partitions下的分区信息
# kpartx /dev/sda5
# cat /proc/partitions
major minor#blocksname
   7      0   3804160 loop0
   8      0 125829120 sda
   8      1   2048000 sda1
   8      251200000 sda2
   8      3   2102933 sda3
   8      4         31 sda4
   8      510490413 sda5
253      049147904 dm-0
253      1   2048000 dm-1  

  
  (3)使用mke2fs命令创建文件系统ext4
# mke2fs -t ext4/dev/sda5
(4)使用blkid命令查看
# blkid /dev/sda5
/dev/sda5: UUID="b6d1d8c9-6496-4e85-9d0f-026b3756c11e" TYPE="ext4"  

  
  (4)创建挂载点并使用mount命令挂载上去;最后编辑/etc/fstab文件
# mkdir /dev/sda5 /mnt/test
# mount /dev/sda5 /mnt/test/
# vim /etc/fstab  



(5)使用mount–a命令再检查一次,使用df命令输出结果。
# mount -a
# df -h
Filesystem            SizeUsed Avail Use% Mounted on
/dev/mapper/789-LogVol01
                     47G3.5G41G   8% /
tmpfs               491M224K 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   23M9.3G1% /mnt/test

  
页: [1]
查看完整版本: Linux文件管理系统