[RHEL7基础篇-5] 文件系统和磁盘管理

[RHEL7基础篇-5] 文件系统和磁盘管理

简介

在RHEL7中文件系统是一个即基础有重要的系统功能,Linux当中所有的配置都是由文件组成的,当然这也包括内核之类的,可想而知如果能了解Linux系统的文件系统的运作模式是多么重要的一步,如果完全了解了这一系统无论是Kail、Ubuntu等都是大同小异的,而磁盘管理则对用于存放文件的硬盘进行管理,相当于Windows当中的分区与分配盘符。该篇文章将会讲述文件系统和磁盘管理的相关配置与使用

文件系统

背景知识:
文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个block。
文件数据都储存在“块”中,那么很显然,我们还必须找到一个地方储存文件的“元信息”,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点“。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

  1. 系统文件的最小存储单位为块
    a:小文件比较多的应用服务存储上使用块小比较好;
    b:存储大容量文件时,块大比较好;
    c:每个文件系统的开始位置的那个块就称为超级块(superblock)

    #查看文件系统相关信息,需要按照文件系统类型来查看
    dumpe2fs  /dev/sda1		# tune2fs和dumpe2fs只能打开ext3/ext4等文件类型
    xfs_info /dev/sda1		# 查看xfs文件类型
    
  2. 文件或目录在硬盘上的存储分为属性存储(inode)和内容存储(block)
    a:inode记录文件的相关属性以及文件内容放置在哪个块中(指针功能)
    b:块放的就是文件内容,对于目录存放就是其下文件或目录的关联性

    # 使用stat查看文件信息
    [root@localhost ~]# stat anaconda-ks.cfg 
      File: ‘anaconda-ks.cfg’
      Size: 1832      	Blocks: 8          IO Block: 4096   regular file
    Device: fd00h/64768d	Inode: 33574978    Links: 1
    Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2019-07-05 21:37:26.290997768 +0800
    Modify: 2019-07-05 21:34:34.896787279 +0800
    Change: 2019-07-05 21:34:34.896787279 +0800
     Birth: -
    # 使用ls查看inode
    [root@localhost ~]# ls -i
    33574978 anaconda-ks.cfg        51533268 Desktop
    # 使用df查看硬盘的inode的占用情况(相当于硬盘空间),当磁盘的inode被占满时将无法创建文件
    [root@localhost ~]# df -i
    Filesystem               Inodes  IUsed   IFree IUse% Mounted on
    /dev/mapper/centos-root 8910848 142833 8768015    2% /
    /dev/sda1                524288    340  523948    1% /boot
    # 使用inode删除文件
    [root@localhost ~]# ls -i
    33574978 anaconda-ks.cfg        51533268 Desktop    33575008 test.c
    [root@localhost ~]# find ./* -inum 33575008 -delete
    
  3. 文件的读取(文件系统的解析)
    首先由根目录获取该文件上层目录的所在的inode,再由该目录所记录文件关联性获取对应文件的inode,然后找到这个对应文件的相关属性和数据存放的地方,同时判断文件权限,有权限情况下,读取对应块中的内容
    文件系统通过inode读取文件的流程图

    # 查找根目录下所有文件的inode和权限信息
    [root@localhost ~]# ls -lia /
    total 32
          64 dr-xr-xr-x.  18 root root  257 Dec 15  2020 .
          64 dr-xr-xr-x.  18 root root  257 Dec 15  2020 ..
     2975300 -rw-------    1 root root   17 Dec 15  2020 .bash_history
      451369 lrwxrwxrwx.   1 root root    7 Jul  5  2019 bin -> usr/bin
    --------------------------省略部分-------------------------------
    16777288 drwxrwxrwt.  17 root root 4096 Dec 26 12:00 tmp
    33754614 drwxr-xr-x.  13 root root  155 Jul  5  2019 usr
    50331713 drwxr-xr-x.  21 root root 4096 Jul 22  2019 var
    # 查找指定文件的inode和权限信息
    [root@localhost ~]# ls  -liad  /etc/crontab  /etc/.
    16777281 drwxr-xr-x. 139 root root 8192 Dec 26 10:55 /etc/.
    17192969 -rw-r--r--.   1 root root  451 Jun 10  2014 /etc/crontab
    
  4. 文件删除
    删除掉的是指针,大容量的数据删除也很快。要进行数据恢复,原则上若无新数据写入,原来的数据块未被清除,这个数据是可以恢复的!找到对应的地址,数据连接是可以重新建立的。

  5. 空间满的问题(examples说明)
    创建一个10M左右的分区,然后使用dd命令用1K大小的文件将它占满

    # dos标签类型的硬盘会受到,3P+1E的限制(3个主分区(primary),1个扩展分区(extended))
    # 超过4个分区的需要在扩展分区的基础上使用l来创建逻辑分区
    [root@localhost ~]# fdisk /dev/sdb
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Device does not contain a recognized partition table
    Building a new DOS disklabel with disk identifier 0x1704f6e1.
    
    Command (m for help): m # 进入菜单选择
    Command action
       a   toggle a bootable flag
       b   edit bsd disklabel
       c   toggle the dos compatibility flag
       d   delete a partition
       g   create a new empty GPT partition table
       G   create an IRIX (SGI) partition table
       l   list known partition types
       m   print this menu
       n   add a new partition
       o   create a new empty DOS partition table
       p   print the partition table
       q   quit without saving changes
       s   create a new empty Sun disklabel
       t   change a partition's system id
       u   change display/entry units
       v   verify the partition table
       w   write table to disk and exit
       x   extra functionality (experts only)
    
    Command (m for help): n # 创建新的分区
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): 
    Using default response p
    Partition number (1-4, default 1): 1
    First sector (2048-2097151, default 2048): 
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +10M
    Partition 1 of type Linux and of size 10 MiB is set
    
    Command (m for help): w # 保存写入,如果不需要保存输入q
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    # 写入内核,如果出现error需要重启系统才能是写分区
    [root@localhost ~]# partprobe
    [root@localhost ~]# fdisk -l
    Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0x1704f6e1
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048       22527       10240   83  Linux
    # 格式化分区,-N是指定inode数量,一般业务不需要,详情可通过man mkfs.ext4查看
    [root@localhost ~]# mkfs.ext4 -N 20 /dev/sdb1
    mke2fs 1.42.9 (28-Dec-2013)
    Filesystem label=
    OS type: Linux
    Block size=1024 (log=0)
    Fragment size=1024 (log=0)
    Stride=0 blocks, Stripe width=0 blocks
    32 inodes, 10240 blocks # 只能分配32个inode
    512 blocks (5.00%) reserved for the super user
    First data block=1
    Maximum filesystem blocks=10485760
    2 block groups
    8192 blocks per group, 8192 fragments per group
    16 inodes per group
    Superblock backups stored on blocks: 
    	8193
    
    Allocating group tables: done                            
    Writing inode tables: done                            
    Creating journal (1024 blocks): done
    Writing superblocks and filesystem accounting information: done
    # 挂载到/mnt下
    [root@localhost ~]# mount /dev/sdb1 /mnt
    # 下面需要用到脚本touch_file.sh进行测试,后面会给出
    # 也可以用dd  if=/dev/zero  of=n    bs=1K  count=1单个文件创建
    [root@localhost mnt]# vim /tmp/touch_file.sh
    [root@localhost mnt]# sh /tmp/touch_file.sh
    ...
    17
    18
    19
    20
    21
    touch: cannot touch ‘21’: No space left on device
    22
    ...
    [root@localhost mnt]# df -hi
    Filesystem              Inodes IUsed IFree IUse% Mounted on
    /dev/sdb1                   32    32     0  100% /mnt
    [root@localhost mnt]# df -h
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/sdb1                9.0M  172K  8.2M   3% /mnt
    # 有空间却无法创建文件
    
    #!/bin/bash
    #function:touch 100000 files
    #author:hellen
    #time:20140401
    cd   /mnt
    for ((i=1;i<=25;i=i+1))
    do
    	echo  $i
    	touch $i
    done
    
  6. 区别
    a:ext2 ext3 —inode 128字节 ext4 256字节
    b:文件系统大小和文件大小
    ext2 16TB 2TB
    ext3 16TB 2TB
    ext4 1EB 16TB
    Xfs 18EB 9EB (64位文件系统)
    c:日志功能(ext2 无,ext3和ext4有,ext4也可灵活关闭,xfs日志指定位置)-o^has_journal
    d:文件索引方式不同(ext4 :extents ext3 ext2:blockmaps),文件读写效率变高!
    e:多块分配和延迟分配
    f :fsck变快(大系统中会有很大效果,fsck会去扫描在用的inode)
    g:默认启用barrier(-o barrier=0 关闭) 类似DB的日志功能,日志落地才能commit1
    h:xfs_repair -L /dev/sda1

磁盘管理

  1. 磁盘的物理组成
    硬盘是由硬盘片组成分为单盘和多盘(多个盘片)。磁道(track),同盘片相同半径的一个圆。扇区(sector),512字节。扇区是硬盘片上最小物理存储量!
    磁盘结构图
    两个硬盘片上的同一个磁道就是一个柱面(cylinder),柱面是分区时的最小单位。一个柱面约为8MB的数据
    磁柱的组成

  2. 分区要点
    a:MBR(master boot recorder)主引导区
    一块硬盘第0磁道上

    MBR前446字节包含可启动系统的引导加载程序的第一个部分,后跟包含分区表的64字节。在分区表中有关于四个主分区的信息的空间;分区开始位置,结束位置以及指出存储在其中的信息类型的代码。

    b:3P+1E 4P
    MBR 最多4个分区的记忆
    主分区 扩展分区 逻辑分区
    注:分区限制的演示在文件系统的第5点的演示当中有说明

  3. 新建分区和删除分区
    a:fdisk -l 和df -h // 剩余空间的判断
    b:fdisk /dev/sdc // b d l n p q t w
    c:tune2fs -c 0 -i 0 /dev/sdb1 // 对分区进行检查
    注1:创建分区的演示在文件系统的第5点的演示当中有说明
    注2:删除分区时只需要输入d然后选择需要删除的分区即可(需要先卸载先前的挂载)
    删除分区

  4. 格式化系统和挂载

    mkfs.[ext2/ext3/ext4] /dev/sdb1 	# 使用ext2、ext3、ext4格式化分区
    tune2fs  -[option] /dev/sdb1 		# 对分区进行参数的检查
    df -h								# 查看分区挂载情况
    mount /dev/sdb1 /mnt  				# 挂载分区,/etc/mtab 查看挂载情况
    mkfs.ext4 -L "firstp" /dev/sdb1		# 设置磁盘标签
    mount -L firstp /mnt				# 使用磁盘标签进行挂载
    tune2fs -L "firstp" /dev/sdb1		# 设置磁盘标签
    umount /dev/sdb1					# 以分区来卸载
    umount  /mnt						# 以挂载路径来卸载
    
  5. 磁盘的一些相关的操作命令

    fdisk -l		# 查看磁盘的分区状况
    du -sh   		# 查看当前目录下所有文件所占的磁盘空间
    mount -a		# 将/etc/fstab的所有内容重新加载
    

    /etc/fstab 系统启动时自动挂载的分区(创建分区后需要手动添加,否则重启系统后将无法自动挂载)
    /etc/fstab
    a:新建分区随机启动
    b:/etc/fstab出错时的处理

    # /etc/fstab写错或者是出现错误时系统进入了命令行模式,进行以下操作
    mount  -n -o remount,rw   /		# 挂载根目录
    xfs_admin  -u   /dev/sdb1		# 修改/dev/sdb1的UUID
    mkdir /opt/backup				# 创建/opt/backup
    init 6							# 重启系统
    # 为避免/etc/fstab出错,每次修改完后需要使用mount -a来检验有没有出错
    

    注:UUID (-U):通用唯一标识符,如60ab619d-0db0-4d74-9951-c7bd3f67ed85。UUID通常是在创建文件系统时生成的,并且永不改变。可以通过tune2fs -l /dev/sdb1 或dumpe2fs /dev/sdb1来查看对应的分区的UUID号

  6. fsck的模拟试验

    文件系统只读时的处理read-only
    卸载设备  umount /dev/sdb1   
    急救模式下的处理  # 对于根文件系统
    fsck  -c  -y /dev/sdb1
    xfs_repair  -L  /dev/sda1 # 修复系统分区
    

磁盘管理练习

试验习题
a:利用剩余空间创建三个分区(1G 100M 32M)
b:1G的分区做成随机启动,挂在/data目录下
c:利用32M分区模拟分区空间满的情况(节点数满)
d:100M做成加密分区,并且做成随机启动挂载,无需密码输入
e:/etc/fstab被破坏后的恢复
f:fsck模拟试验 (可选题)

swap分区

  1. 交换分区概念
    交换分区,用于扩展系统的物理内存.交换分区为swap分区,系统内存使用紧张时,会将内存中不常用的数据暂时交换到swap分区中!

  2. 交换分区的管理
    Partition ID: 0x82(交换分区ID,fdisk /dev/sdb时输入t进行修改)
    把分区设置为交换分区
    fdisk -l显示的分区信息
    使用swapon 激活交换分区
    使用swapoff 取消激活

    编辑/etc/fstab文件,以便在引导时自动激活交换分区
    /etc/fstab修改后
    激活交换分区:swapon /dev/sdb1
    启用交换分区:swapon -a
    查看已激活的交换分区:swapon -s

  3. swap分区的增加
    a:直接加分区格式为swap格式(2、3,推荐使用,速度更快)
    b:建立虚拟内存文件,格式为swap

    1)dd if=/dev/zero of=/mnt/test.swap bs=1M count =100 ( 建立一个100M的文件)
    2)mkswap /mnt/test.swap (标识为SWAP文件)
    3)swapon /mnt/test.swap (激活SWAP文件)
    4)修改/etc/fstab文件,增加以下内容:
    5)/mnt/test.swap swap swap default 0 0
    6)swapon -s 或free 或cat /proc/swaps 查看。
    
  4. 实例讲解

    a:实验开始前请先确认好你的swap情况

    1)free -m
    

    b:创建swap区域(分区或文件)

    1)建新分区  
    	ID指定为82
    2)如果是用文件的话,用如下格式建立swap虚拟文件
    	dd  if=/dev/zero  of=/tmp/swap bs=10M  count=100
    

    c:格式化swap

    1)设备 mkswap  /dev/sdb1
    2)文件 mkswap  /tmp/swap
    

    d:再次确认free
    e:激活swap

    1)分区:swapon /dev/sdb1
    2)文件:swapon /tmp/swap
    

    f:再次确认free
    成功激活swap

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JovaZou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值