zoukankan      html  css  js  c++  java
  • 管理文件系统

    管理文件系统
    知识要点
    file system
    FS
    文件系统类型
    创建文件系统
    文件系统使用
    文件系统的转换
    移动硬盘、u盘使用
    磁盘物理结构
    硬盘的术语
    文件系统概念++++++
    文件系统是指文件的组织与管理结构,是一个有关于磁盘中各种有用信息的记录——即是保存以下信息的结构记录表
    当前所使用磁盘的容量信息
    磁盘的可用信息,包括已占用和剩余的空间;
    文件与目录的属性;
    文件与目录的在磁盘中确切地址与链接信息。
    一句话总结:文件系统就是管理这块(分区)文件的机制或者说是组织方式
    1.文件系统类型
    文件系统
    Linux 支持多种文件系统
    ext2:Linux基本文件系统
    ext3:ext2的增强版本
    ext4:ext文件系统的第四个版本(rh,centOS6/7)
    swap:交换文件系统
    nfs:网络文件系统,适合Linux或Unix机器间共享
    smbfs:适合Linux或Unix和windows机器间共享
    vfat:windows早期文件系统
    ntfs:windows默认文件系统,功能非常强大
    iso9660:CD光盘的只读文件系统
    GFS:google专用存储海量搜索数据而设计的专用文件系统
    reiserfs:早期linux使用的日志功能的文件系统
    文件系统
    Linux内核采用虚拟文件系统层(VFS),通过该中间层对各类文件系统提供了完美的支持。对于用户来说,这些文件系统几乎是透明的,用户不需要关心底层文件系统的具体实现。
    VFS 基本结构 
    super block 
    dentry
    inode
    data
    Super block    超级块
    存储文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式。文件系统中第一个块被称为超级块
     将物理相邻的若干个扇区称为了一个块。操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是块(block)。块越大存储性能越好,但空间浪费严重。块越小性能相对越低,但空间利用率高。 
    Inode    索引节点
    保存的其实是实际的数据(文件内容)的一些信息,这些信息称为“元数据”(也就是对文件属性的描述)。例如:文件大小,文件拥有者(owner),文件属组(group),文件权限,文件读取或修改的时间戳,链接数量,同时记录此文件的数据所在的 block 号码,文件类型等等。
    注意,数据分成:元数据+数据本身
    每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般每2KB就设置一个inode。一般文件系统中很少有文件小于2KB的,所以预定按照2KB分,一般inode是用不完的。
    一个文件肯定占用一个inode,如果是空文件就不会占用BLOCK ,,如果不是空文件,肯定会占用BLOCK
    一个文件系统内的文件总数,和inode数目一致
    inode号是唯一的,表示不同的文件。其实Linux内核访问文件都是通过inode号来进行的,所谓文件名仅仅是inode号的别名,方便用户识别和使用的。当我们打开一个文件的时候,首先,系统找到这个文件名对应的inode号;然后,通过inode号,在inode table中找到inode信息,最后在inode信息中找到文件数据所在的block,接着就可以处理文件数据了。
    当创建一个文件(包括目录)的时候,就给文件分配了一个inode。inodes最大数量就是文件的最大数量。 
    dentry 目录项
    目录项是描述文件的逻辑属性,只存在于内存中,并没有实际对应的磁盘上的描述,更确切的说是存在于内存的目录项缓存,为了提高查找性能而设计。注意不管是目录还是最终的文件,都是属于目录项,所有的目录项在一起构成一颗庞大的目录树。例如:打开一个文件/opt/data/a.txt,那么/、opt、data、a.txt都是一个目录项,VFS在查找的时候,根据一层一层的目录项找到对应的每个目录项的inode,那么沿着目录项进行操作就可以找到最终的文件。
    注意:目录也是一种文件(所以也存在对应的inode)。打开目录,实际上就是打开目录文件。
    data 数据
    记录文件的实际内容,若文件太大时,会占用多个 block
    linux文件的组成
    链接文件
    内核只识别inode
    硬链接:
    不能跨文件系统
    不同的文件名对应相同的inode
    [root@localhost ~]# ln a.txt a.hard  [root@localhost ~]# cat a.txt 1 [root@localhost ~]# cat a.hard  1
    软连接:
    (快捷方式)对应另一个inode
    可以跨文件系统
    [root@localhost ~]# ln -s a.txt a.link // 命令 -s [root@localhost ~]# cat a.link  1 [root@localhost ~]# ls -i a.* 2097168 a.hard  2097165 a.link  2097168 a.txt  ?//  inode不同 [root@localhost ~]# ln -s /root/a.txt a.soft1 [root@localhost ~]# ll -i a.* 2097168 -rw-r--r--. 2 root root  2 Jan  5 09:52 a.hard 2097165 lrwxrwxrwx. 1 root root  5 Jan  5 09:53 a.link -> a.txt 2097167 lrwxrwxrwx. 1 root root 11 Jan  5 09:56 a.soft1 -> /root/a.txt 2097168 -rw-r--r--. 2 root root  2 Jan  5 09:52 a.txt
    [root@localhost ~]# rm -f a.txt [root@localhost ~]# ls -l total 56 -rw-r--r--. 1 root root    44 Jan  3 11:30 a123 -rw-r--r--. 1 root root     2 Jan  5 09:52 a.hard lrwxrwxrwx. 1 root root     5 Jan  5 09:53 a.link -> a.txt    //报错,a.link无用 -rw-------. 1 root root  1227 Nov 23 14:36 anaconda-ks.cfg -rw-------. 1  508 a1       1 Jan  2 10:17 dead.letter -rw-r--r--. 1 root root   657 Nov 23 14:35 group -rw-r--r--. 1 root root 28534 Dec  2 09:26 install.log -rw-r--r--. 1 root root  7572 Nov 23 14:35 install.log.syslog
    2.创建文件系统
    创建完整的文件系统的四个步骤
    建立分区
    格式化分区建立文件系统
    检验文件系统
    装载文件系统
    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 文件系统类型 分区设备
    修复文件系统
    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
    再次挂载该分区
    df命令
    (查看右边)
    (查看左边)
    df -i
    [root@localhost ~]# df Filesystem     1K-blocks    Used Available Use% Mounted on /dev/sda3      204074816 2153148 191548600   2% / tmpfs             953140       0    953140   0% /dev/shm /dev/sda1         194241   38688    145313  22% /boot /dev/sdb2      158005644   60864 149911880   1% /data1 [root@localhost ~]# df -i Filesystem       Inodes IUsed    IFree IUse% Mounted on /dev/sda3      12967936 56448 12911488    1% / tmpfs            238285     1   238284    1% /dev/shm /dev/sda1         51200    39    51161    1% /boot /dev/sdb2      10043392    11 10043381    1% /data1
    验证:
    1、 创建一个小分区(8M)
    2、创建文件系统
    3、创建空文件
    while: do     touch /sdb1/a${RANDOM} done
    快速使用block
    while: do     cat /etc/passwd >> /test/a.txt done
    4、使用df  df -i    查看空间使用情况
    5、观察
    inode全使用,block还有空闲,这时候不能创建新文件了,但是还可以增加文件内容
    还有inode空闲,block全使用,这时,可以创建新文件,但是,不能增加文件内容
    挂载文件系统
    mount命令
    用途:挂载文件系统、ISO镜像到指定文件夹
    mount  [ -t 类型 ] [ -o 选项 ] 设备名  挂载点目录
    选项
    作用
    ro,rw
    ro:只读 ;rw:读写;默认rw
    exec,noexec
    是否可以运行可执行文件;默认exec
    suid,nosuid
    是否忽略suid权限;默认suid
    remount
    重新挂载分区
    卸载文件系统
    ·
    umount命令
    用途:卸载已挂载的文件系统
    格式:umount  存储设备位置
               umount  挂载点目录
    无法卸载已挂载的设备
    故障原因
    需要卸载的设备正在被使用
    故障现象
    无法卸载设备,提示“... device is busy” 
    解决思路
    将工作目录切换到挂载点以外
    退出正在使用该设备的程序
    或使用fuser命令找出相关进程,并终止该进程
    3.管理交换空间
    虚拟内存也叫交换空间
    短时间缓解物理内存的不足;但不能代替物理内存
    mkswap命令
    用途:Make Swap,创建交换文件系统
    格式:mkswap 分区设备
    -L:设置交换分区文件系统标签
    swapon  分区设备 ----激活交换分区
    swapoff  分区设备----停用交换分区
    /etc/fstab文件
    /etc/fstab配置文件 
    包含了需要开机后自动挂载的文件系统记录
    mount -a命令将逐行读取fstab文件进行所有挂载
    设置自动挂载示例
    每次重新开机后,能够自动完成挂载
     将/dev/sdb1分区挂载到/mailbox目录
    和/etc/fstab文件相关的挂载选项
    选项
    作用
    auto,noauto
    是否允许自动挂载
    user,nouser
    是否允许普通用户挂载事先定义好的设备
    使用文件系统标签标识设备
    例如LABLE=/和/dev/sda1是一样的
    一般用UID,UID是唯一的
    [root@localhost ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Fri Nov 23 14:32:12 2018 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=2e5b7bf6-be3d-4042-a527-ed73ae08eeeb /                       ext4    defaults        1 1 UUID=f6b149b6-a506-403e-9c91-c7837d606639 /boot                   ext4    defaults        1 2 UUID=fe4c20c8-f377-44ae-93b7-9e86d293a060 swap                    swap    defaults        0 0 tmpfs                   /dev/shm                tmpfs   defaults        0 0 devpts                  /dev/pts                devpts  gid=5,mode=620  0 0 sysfs                   /sys                    sysfs   defaults        0 0 proc                    /proc                   proc    defaults        0 0
    在/etc/fstab文件中使用文件系统标签可以避免由于添加删除设备造成的设备文件标识混乱
    其它文件系统命令
    e2label命令
    查看和设置ext2或ext3文件系统的标签
    语法:e2label 分区设备文件 标签名
    e4label命令
    查看和设置ext4文件系统的标签
    语法:e4label 分区设备文件 标签名
    blkid命令
    查看文件系统的标签查看UID
    语法:blkid   [分区设备文件]
    df命令
    用途:查看磁盘文件系统的使用情况
     格式:df  [选项]...  [设备名]
    常用命令选项
    -a:列出所有文件系统
    -h:以更易读的字节单位(K、M等)显示信息
    -T:列出文件系统的类型
    [root@localhost ~]# dumpe2fs dumpe2fs 1.41.12 (17-May-2010) Usage: dumpe2fs [-bfhixV] [-o superblock=<num>] [-o blocksize=<num>] device
    du命令
    用途:统计目录及文件的空间占用情况(estimate file space usage)
     格式:du  [选项]...  [目录或文件名]
    常用命令选项
    -a:统计时包括所有的文件,而不仅仅只统计目录 
    -h:以更易读的字节单位(K、M等)显示信息
    -s:只统计每个参数所占用空间总的大小
    缩写
    名称
    目的
    Access time
    访问时间
    文件数据每次被阅读后更新
    Change time
    改变时间
    文件的i-节点信息每次被改变后更新
    Modify time
    修改时间
    文件数据每次被改变后更新
    建立文件系统
    新加磁盘的完整步骤:
    物理连接  分区  格式化  挂载  更新/etc/fstab文件·
    stat命令
    用途:查看文件inode信息
     格式:stat  [选项]...  文件名
    常用命令选项
    -f:显示文件所在文件系统的信息
    缩写
    名称
    目的
    Access time
    访问时间
    文件数据每次被阅读后更新
    Change time
    改变时间
    文件的i-节点信息每次被改变后更新
    Modify time
    修改时间
    文件数据每次被改变后更新
    4.使用U盘
    U盘或移动硬盘
    设备文件是sd
    如果文件系统是windows的FAT32
    mount   /dev/sdb1 挂载点
    如果文件系统是windows的NTFS,Linux默认不支持
    配置linux支持NTFS文件系统
    安装fuse
    安装ntfs-3g
    mount -t ntfs-3g /dev/sdb1 挂载点
    本章总结
    文件系统inode和block
    mount命令的意义
    fstab文件的意义
    和文件系统相关常用的命令
    分区、格式化、fsck、df、du、交换分区
    如何使用NTFS文件系统的U盘
  • 相关阅读:
    ABCD 谁是小偷
    三剑客-awk(简写)
    三剑客-sed(简写)
    Mysql锁
    MySQL两种内核对比
    netty源码分析(一)
    netty源码分析(二)
    网络编程之NIO
    网络编程之ByteBuffer
    线程池的原码分析(二)
  • 原文地址:https://www.cnblogs.com/qluzzh/p/10306151.html
Copyright © 2011-2022 走看看