Extx 文件系统原理

block group

每个分区(partition)的组成为 boot sector -> block group -> block group -> block group -> ...

而每个block group的组成为 super block -> 文件系统描述 -> 区块对应表(block bitmap) -> inode对应表(inode bitmap) -> inode Table -> Data Block

文件系统描述

描述每个block group开始和结束的block号码。以及每一个区段(superblock、bitmap、inodemap、datablock)分别介于哪一个block号码之间。

block bitmap

用于描述block的使用情况,哪些block为空,哪些block已经在使用。

inode bitmap

用于描述inode的使用情况,哪些inode没在用,哪些inode已经在使用。

通过dumpe2fs观察文件系统

dumpe2fs [-bh] 装置文件名
dumpe2fs -h 仅列出superblock的数据

superblock inode block

  1. superblock 记录文件系统的整体信息,如inode/block的总量、使用量、剩余量、以及文件系统的格式和相关信息。

    superblock记录着

    1. block和inode的总量。
    2. 未使用和已经使用的block和inode数量。
    3. block和inode的大小
    4. 文件系统的挂载时间,最近一个写入数据的时间,最近一个检查硬盘的时间。
    5. 文件系统是否被挂载的标志 valid bit。未挂载为0、挂载为1。
      一般,superblock的大小为1024bytes。
      除了第一个block goup具有superblock,其他不一定具有superblock。若其他blockgroup有,则只是**对superblock的备份。
  • block
  1. inode 记录档案的属性,一个档案占用一个inode,同时记录此档案的数据所在的block号

    inode 记录着

    1. 档案的权限 rwx
    2. 档案的拥有者和群组
    3. 档案的容量
    4. 档案的三个时间ctime,atime,mtime
    5. 档案的特殊权限 SUID、SGID、SBIT
    6. 档案真正的内容指向,指向block区
      inode的大小和数量在格式化后就不能变。
      每个inode的大小为128bytes。
      每个档案占用一个inode。
      文件系统能够建立的档案数量与inode的数量有关。
      inode记录block号码的区域定义为12个直接、一个间接、一个双间接和一个三间接记录区。
      block直接为 -> 数据block
      block间接为 -> 间接block -> 数据block
      block双间接为 -> 间接block -> 间接block -> 数据block
      block三间接为 -> 间接block -> 间接block -> 间接block -> 数据block
  2. block 实际记录档案的内容,若档案太大,会占用多个block

    每个block的大小可以为1kB2KB4kB
    原则上,block的大小和数量格式化后就不能改变。
    每个block只能放置一个档案的内容。
    档案大会占用多个block,档案小会占用一个block,并浪费block其余空间。

文件与目录

目录

每个目录的block记录着目录下的文件名和对应的inode号

日志文件系统

例如,文档创建开始记录日志,文档创建结束记录日志,这种方式有利于数据一致性检查

挂载相关

硬盘的文件系统目录树 结合的方式称为 挂载。文件系统必须挂载到目录树的某个目录后,才能被使用。

文件系统最顶层目录的inode号 一般为 2

通过ls -l /lib/modules/$(uname -r)/kernel/fs 可以查看linux支持的文件系统

通过cat /proc/filesystems 可以查看linux目前加载的文件系统。

VFS(virtual filesystem switch) 会帮助我们管理文件系统。

iso的挂载和制作

iso的挂载

通过命令 mount -o loop /tmp/xx.iso /mnt 进行挂载。

制作大档案进行挂载(制作iso映像)

dd if=/dev/zero of=/home/loopdev bs=1M connt=512 制作/home/loopdev大小为512M的档案,内容为空。
if 指定 input file
of 指定 output file
bs 指定每个block的大小
count 指定有多少个block

然后进行格式化
mkfs -t ext3 /home/loopdev

然后进行挂载
mount -o loop /home/loop/dev /media/cdrom

查看过载情况
df 或 mount

建立 swap partition

  1. 通过fdisk分割磁盘块,并需要修改system id

    通过 fdisk的 t 修改系统ID

  2. 通过mkswap进行格式化

    mkswap /dev/hdc7
    free

  3. 通过swapon将swap启动

    swapon /dev/hdc7
    free

  4. 通过free观察内存的用量
  5. 通过swapoff关掉swap file

知识点

数据更改后只会从clean变成dirty,数据从内存到硬盘是异步的。可通过sync命令同步写入到硬盘。

linux会将常用的档案或数据放在主存储器的缓冲区,以加快文件系统的读写,因此linux的物理内存最后都会别用光。

挂载注意:

单一文件系统不应该重复挂载到不同挂载点。
单一目录不应该重复挂载多个文件系统。
挂载点目录理论上应该为空目录。

挂载的一些限制:

根目录/必须挂载,而且必须先于其他挂载点挂载。
挂载点必须为已经建立的目录
挂载点同一时间只能挂载一次
partition同一时间只能挂载一次
不能再挂载点目录进行取消挂载

目录 /etc/fstab/etc/mtab 是开机挂载相关的目录

/etc/fstab 后面的两个数字的意义
第一个数字 是否进行dump备份

0 不做dump备份
1 每天进行dump备份
2 不定日期进行dump备份
第二个数字 是否以fsck检查扇区
0 不检查
1 最早被检验
2 检验,不是最早,一般根目录设定为1最早进行检验。

通过 mount -a/etc/fstab 进行测试,否则影响开机
通过 df 查看 挂载信息。

单人模式下根目录 是只读的。可通过 mount -n -o remount,rw / 重新挂载改成读写。

linux支持的文件系统在 /lib/modules/$(uname -r)/kernel/fs
/etc/filesystems 系统指定的测试挂载文件系统类型
/proc/filesystems 系统已经加载的文件系统类型 d

当通过ls /dev下面的装置时,group后面的是 major号minor号。可以称为主装置号和次装置号。例如

/dev/hda major为 3 minor为 0~63
/dev/hdb major为 3 minor为 64~127
/dev/sda major为 8 minor为 0~15
/dev/sdb major为 8 minor为 16~31

基本上,linux2.6之后,硬件文件名都能被系统实时产生。要手动处理装置档案,可通过 mknod命令

文件系统命令

  1. dumpe2fs (观察文件系统的各部分,superblock inode block等)
  2. df (查看目前挂载的装置,查看整体磁盘使用量)

    df -h 以GB、MB等方式显示
    df -h /etc 查看/etc的可用磁盘容量。
    df -ih 显示可用的inode数量。

  3. e2fsck (进行数据一致性检查,inode bitmap、block bitmap、superblock等元数据的一致性)
  4. sync (在内存中dirty的数据同步写入硬盘)
  5. du (查看文件系统磁盘使用量,默认以kB为单位)

    du -a 档案的容量也列举出来
    du -s /* 目录的容量

  6. ln (制作链接档)

    ln srcfile dst_linkfile 创建硬链接
    ln -s srcfile dst_linkfile 创建软链接
    硬链接不占用inode和block,软链接占用inode和block
    du -sd;df -i 查看当前目录的总大小和inode使用情况

  7. fdisk (进行磁盘分区,仅对装置起作用,只有root才能执行)

    df / 找出根目录所在磁盘
    fdisk /dev/sda 对/dev/sda进行操作
    fdisk -l 列出所有装置的分区情况

  8. partprobe (强制让核心重新捕捉partition table)

    在fdisk进行分区后使用

  9. mkfs (格式化分区 make file system)

    mkfs [-t 文件系统格式] 装置文件名

  10. mke2fs (自定义格式户分区)

    mke2fs -b [1024|2048|4096] 指定block大小
    mke2fs -j 创建ext3文件系统,默认为ext2
    mke2fs -L LABEL 设定文件系统的label
    mke2fs -i size 设定每多少字节分配一个inode

  11. fsck (进行文件系统检测修复)

    fsck -t type 指定文件系统类型
    fsck -A 依据/etc/fstab的内容,对需要的装置扫描一遍。
    fsck -a 自动修复,不需要老按y
    fsck -C 扫描过程中使用直方图显示进度
    fsck -f 强制检查clean的地方
    最好在卸载情况下扫描

  12. mount (挂载命令)

    mount -a 根据/etc/fstab对未挂载的文件系统进行挂载
    mount -l 显示目前的挂载信息,及label
    mount -t type 指定文件系统类型
    mount -n 默认会将挂载信息写入/etc/mtab,-n则不写入
    mount -L 通过label进行挂载
    mount -o 后接挂载参数
    mount 装置文件名 挂载点
    mount /dev/sda5 /mnt
    mount -t iso9660 /dev/cdrom /media 挂载光盘
    mount -t vfat /dev/fd0 /media 挂载软盘
    mount -p loop /root/xxx.iso /mnt 挂载iso映像文件。
    fdisk -l 找出U盘的装置文件名
    mount -t vfat -o iocharset=cp950 /dev/sda1 /mnt/flash 挂载U盘,不能是NTFS格式
    mount -o remount,rw,auto / 重新挂载根目录,并加入参数rw,auto
    mount --bind /home /mnt/home 将某个目录挂载到其他目录
    mount -L "LABEL" /mnt 通过Label进行挂载
    挂载参数 -o
    async/sync 设定磁盘是否以异步方式运作,默认为async异步
    auto/noauto 是否注定测试挂载
    rw/ro 设定读写还是只读
    exec/noexec 设定是否可执行
    user/nouser 是否允许用户通过mount挂载
    suid/nosuid 是否允许suid的存在
    usrquota 启动文件系统支持磁盘配额
    grpquota 启动文件系统支持群组磁盘配额
    defaults 默认参数

  13. umount (取消挂载)

    umount [-fn] 装置文件名或挂载点
    umount -f 强制取消挂载
    umount -n 不更新 /etc/mtab

  14. mknod (手动设置装置档案)

    mknod 装置文件名 [bcp] [major] [minor]
    参数 b 为设定装置名称成为一个周边存储设备档案,例如硬盘。
    参数 c 为设定装置名称成为一个周边输入设备档案,例如鼠标、键盘。
    参数 p 为设定装置名称成为一个FIFO档案。
    mknod /dev/hdc10 b 22 10
    mknod /tmp/testpipe p

  15. e2label (格式化之后修改文件系统的label)

    e2label 装置文件名 newLabelName
    e2label /dev/hdc10 "my_label" 修改/dev/hdc10的LABEL为my_label
    dumpe2fs -h /dev/hdc10 可以查看文献系统的label

  16. tune2fs ()

    tune2fs [-jlL] 装置号
    tune2fs -l 类似于 dumpe2fs -h
    tune2fs -j 将ext2升级为ext3
    tune2fs -L 修改文件系统的LABEL

  17. hdparm (侦测和修改IDE接口的硬盘参数)

    hdparm -Tt /dev/sda 可以测试SATA硬盘的读取效能

  18. mkswap (格式化swap分区)
  19. swapon (加载swap分区)
  20. swapoff (卸载swap分区)
  21. parted

    parted 装置 [指定[参数]]
    parted /dev/sda print 列出分割表信息
    parted /dev/sda mkpart logical ext3 19.2GB 19.7GB //创建逻辑分区
    parted /dev/sda rm 8 删除8号分区

其他知识点

硬链接

硬链接不能跨文件系统
硬链接不能对目录进行

参考

鸟哥的Linux私房菜 第三版

linux备忘录-文件系统管理的更多相关文章

  1. linux btrfs文件系统管理与应用

    btrfs文件系统管理与应用 1.btrfs文件系统 基本介绍 btrfs文件系统在CentOS7.x上属于技术预览版 btrfs文件系统英文名:B-tree  FileSystem或者Butter ...

  2. linux的文件系统管理(ext4-tune2fs-e2fsck-xfs文件系统)

    文件系统管理 文件系统是Linux系统存放文件的空间.文件系统的类型有很多种,CentOS支持多种文件系统,目前常用的是ext4和xfs文件系统.我们以ext4文件系统为例来说明对文件系统的管理. U ...

  3. Linux高级文件系统管理(8)

    如果您的 Linux 服务器有多个用户经常存取数据时,为了维护所有使用者在硬盘容量的公平使用,磁碟配额 (Quota) 就是一项非常有用的工具,另外,如果你的用户常常抱怨磁盘容量不够用,那么更进阶的文 ...

  4. Linux学习 -- 文件系统管理

    1 分区和文件系统 分区类型 主分区:<= 4个 扩展分区:只能有一个,也算主分区的一种   不能存储数据和格式化,只能用来包含逻辑分区 逻辑分区:扩展分区中划分的   IDE--最多59个   ...

  5. Linux进阶文件系统管理之RAID

    RAID 1.引言 RAID全称Redundant Arrays of Inexpensive Disks / Redundant Arrays of Independent Disks,即独立冗余磁 ...

  6. linux备忘录-基本命令

    基本命令 将命令分类为获取信息类,文件管理类,目录管理类,文本处理类,系统类,工具类. 获取信息类 uname # 输出所有信息 # 一行输出,空格分割 uname -a # 输出内核名称 uname ...

  7. 『学了就忘』Linux文件系统管理 — 57、Linux文件系统介绍

    目录 1.了解硬盘结构(了解即可) (1)硬盘的逻辑结构 (2)硬盘接口 2.Linux文件系统介绍 (1)Linux文件系统的特性 (2)Linux常见文件系统 3.整理一下对文件系统的认识 在了解 ...

  8. Linux磁盘及文件系统管理

    在LINUX中我们知道一个很重要的概念,那就是"一切皆文件",这里的一切表示所有在LINUX系统的对象,自然也包括了LINUX中的硬盘设备.在LINUX中所有设备都被抽象成一个文件 ...

  9. linux下fdisk分区管理、文件系统管理、挂载文件系统等

    分区管理工具有:fdisk, parted, sfdisk fdisk:对于一块硬盘来讲,最多只能管理15分区: # fdisk -l [-u] [device...]  查看硬盘设备分区信息 # f ...

随机推荐

  1. base_lr, blobs_lr

    caffe里面,原来以为是不可以随便调整学习率的,现在看来是可以的.base_lr是适用于所有层的学习率,而针对单个层,可以通过增加两个blobs_lr,用来调整该层的学习率,为什么是两个呢,因为一个 ...

  2. HashMap的使用

    HashMap的使用 import java.util.HashMap; import java.util.Iterator; //HashMap<key, value>():键值对的形式 ...

  3. Liunx 配置sshd服务

    简介 SSH(Secure Shell)是一种能够提供安全远程登录会话的协议,也是目前远程管理Linux系统最首选的方式,因为传统的ftp或telnet服务是不安全的,它们会把帐号口令和数据资料等数据 ...

  4. juicer

    function financingBodyTable(){ var jsonData = { FinancingBodyJSON:${relaListArr}//list数组 } var addMo ...

  5. 解决方法:SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正(转载)

    引用:http://luowei1371984.blog.163.com/blog/static/44041589201491844323885/ SQL2008运行select count(*) f ...

  6. px与em的区别,权重的优先级

    px与em的区别,权重的优先级 PX特点:px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的.EM特点:1. em的值并不是固定的:2. em会继承父级元素的字体大小. 权重 ...

  7. php 微信公众号图文消息回复的实现 与access_token

    //代码如下 <?phpclass IndexAction extends Action { public function __construct(){ } public function i ...

  8. HDU 6274 二分+预处理(CCPC K题

    #include"bits/stdc++.h" #define db double #define ll long long #define vec vector<ll> ...

  9. 2015 acm taipei L-Reward the Troop(uvalive 7465)(找规律)

    原题链接 就大概说的是一个将军要给部下发勋章,他的部下以和别人不一样的勋章为荣,但是他没这么多钱,所以问你最少要多少钱 要求是每个人的上司是他的上两级,他的下两级是他的部下,每个人的勋章不能和他的上司 ...

  10. SyntaxError: Non-ASCII character '\xe4' in file test.py on line 3, but no encoding declared。

    可以查看到pycharm右下角文件的编码方式, 如果编码方式不一致,则在设置中修改编码方式: http://jingyan.baidu.com/article/c843ea0ba55f0977931e ...