文件管理系统

来源:互联网 发布:一元云购v8源码 编辑:程序博客网 时间:2024/05/17 00:04

这篇日志都是在学习过程记录中的乱而且不确定正确,都是在过程不断记录

知识点

  • 分区(partition):最早是因为想在同一个磁盘上安装多个系统引入了分区的概念,每一个分区当做每一个独立的设备来使用。
  • 扇区(sector):每个扇区512btes,扇区是一段划过的磁道中的一段距离
  • 固定角速度:因为外磁道的周长比内磁道要长所以有了固定角速度。
  • 平均寻道时间:任意磁道,任意位置的信息被访问到的时间

风格线 —————–我也不知道为什么分割,感觉吧

MBR分区格式

  • 磁盘信息存放在磁盘(硬盘)上,移动硬盘上的信息更换不同的电脑都可以被识别就足以证明这点。那么记录磁盘信息的这个地方叫做什么呢?
  • 应该是:MBR:主引导记录。说是有512byte(字节)作用
    • 是在开机的时候让电脑去加载硬盘中的内核中的信息让其可以启动系统一段程序。这个程序叫做:bootloader 占用446bytes(字节)此时剩下66个字节
    • 同时存放着硬盘的分区信息:每个分区占用16个字节,共4个分区占用64个字节 ,此时剩余2个字节。(为什么是4个分区,当时的人觉得4个分区TMD足够用了,别再问我为什么是TMD4个分区–<读书少的人爱说脏话)
    • 剩下2个字节被填充了2个16进制的数据为5A!5A是什么意思:MBR有效性标记。这个有效性标记是干啥的。如何标记的
      那么问题来了,我想要的分区超过5个咋办。拿出4个分区中的1个分区不去记录分区信息,而去记录扩展出来的分区信息。这样就是3+N个分区

分区划分

  • 4个主分区
  • 3个主分区+1个扩展分区
  • 全是扩展分区都可以

    扩展分区:扩展分区不是可以用来格式化创建文件系统的分区,它是引用磁盘上其他多余空间记录着的额外分区表。所以扩展分区不能够格式化使用的,只能根据它记录的分区表去格式化分区表记录的分区然后使用其他分区的。而这些额外的分区叫做逻辑分区(大概能扩展100个左右极限了) 这些都是MBR的分区格式

MBR在系统上是什么形式呢?Linux一切皆文件所以MBR得文件形式是?

硬盘存放位置

/dev/
硬盘接口:
- IDE(ATA):并口,每个控制器可以接两个硬盘,master/slave。一个pc机有2个IDE接口
- SCSI:
- SATA:
- SAS:
- USB:
centOS6以后都用/dev/sd表示
/dev/sd[a-z]:sd开头sd后面加一个a-z的字母表示是哪一块盘。然后用1-4表示主分区5以上表示逻辑分区

    例如:    /dev/sda1  :就是硬盘接口a盘de第一个主分区

系统已经做好了接口方便我们查看分区信息

  • 查看分区信息
[root@10 ~]# cat /proc/partitions  //这个文件保存着分区信息major minor  #blocks  name  11        0    1048575 sr0   8        0    8388608 sda   8        1     512000 sda1   8        2    7834624 sda2 253        0    6991872 dm-0 253        1     839680 dm-1
  • 如果接入一个硬盘,这个硬盘以及分区了。同时这个硬盘还有区域没有分区完成,我们添加了新的分区。这个时候内核不能识别新的分区,需要我们让内核重新读取硬件设备的分区表。分区表在MBR当中,由MBR中的扩展分区指向其他分区的情况也有

GPT分区格式:如果大于2TB的硬盘只能使用GPT的分区格式

根在哪里?

根在内核中,根的数据在磁盘上。那内核在哪里?内核在磁盘上,那去哪个访问内核呢?去磁盘上。怎么回事?
内核在装载之前是没有所谓“根”这个概念。这个分区机制是软件提供的。文件系统也是软件提供的。
文件系统分为原数据区和数据区。只要这个软件能访问原数据去并能读取原数据。知道数据存放在哪里就可以读取数据。和根没有任何关系。和根的关系是什么的?我们把文件系统挂载到根上,它就是根了。那个根在内核上,然后我们把文件系统挂载到根上,让根成为了我们访问文件系统的访问入口。而这个入口我们需要在第一时间读取,所有放在内核上最合适?内核启动时只挂在根分区。其他的分区什么时候挂在呢?等到系统初始化完成后才会挂载。所以如果启动相关的数据、信息只能放在根上。如果在启动的时候找不到相关的信息系统就无法启动。当启动启动完成后,我们想把某个分区或者硬件连接到系统上,我们就送根下创建或者使用某个闲置的目录连接到对应的设备。然后通过这个目录当做访问入口进行操作。这个过程叫挂载。不用链接了就需要卸载。

知识点:

进程是无法访问硬盘的只能访问内存,必须用内核才能访问硬盘。那么cp的特殊权限发指令给内核让内核从硬盘中读数据到到内存中,但是数据的读取时一块块的读,如果需要的内容存在硬盘的5块区域中,那么每次读完cpu都要发指令到内核读下一块内容。但是cpu得运行速度是非常快的,但硬盘不行。那么cpu要浪费大部分的时间来等待硬盘的信息读取到内存中是不合理的。这时候cpu需要一个助手来只做内容读取的过程的事情。他就可以去做其他的事情了。那么这个助手在某个时候就拥有了和cpu一样的最高权限,这是非常危险的,所以要求这个助手在完成内容读取这件事后要马上汇报给cpu,这个时候CPU就要把这个助手的权限给收回来。这样的方式称为:直接内存访问机制:DMA(Direct Memory Access);

知识点:机械硬盘的制作工艺中,硬盘在磁盘盒里是真空的封装的。因为在磁盘在每分钟5400-15000转的速度里一粒灰尘对于磁盘来说都相当于陨石撞地球。同时硬盘的转速不是不能在高了而是再高就是离心机了。离心机可以分离铀,如果有了原材料+本科相当的专业知识+可以翻墙后的网上教程=核武器。所以问题的关键不在于制造技术而在于原材料所以不可以让硬盘转的再快了。

Linux是如何识别文件系统的。

    所谓文件系统的区别就是把数据存放的方式不同例如这个横着放,那个竖着放。但是他们共同的是要实现的功能是一样的。但是随之的问题是各种文件系统都要去了解,做一件事要对文件系统做N中if判断。这个的话是扯淡的。随之出现一种解决问题的方式就是加中间层,这个中间层唯一的作用就担当你和各种文件系统之间协调工作。无论何种文件系统都和中间层接触,然后转成自己需要的方便的方式。加以运用。虽然工作都交给了中间层,但是当需要知道是哪种文件系统的时候还是希望知道的。根据计算机的特性给予没用文件系统一个数字标识用以区别每种文件的种类。(大类种类,里面的细分种类不管)

管理文件系统的文件系统种类

  • VFS:Virtual File System虚拟文件系统
    • 文件系统:
      • 基本文件系统(单机):Ext2,Ext3,Ext4 (向后兼容,最新的版本认识老版本的数据,老的不认识新的)
        • Reiserfs(大量的小文件最好的文件系统)
        • xfs:高性能的日志文件系统,支持64位文件系统
        • JFS:日志式文件系统
        • vfat:
        • NTFS:(实验式支持)支持不太好,最好是可以读,但不要写。因为写完后那会Windows,Windows还是否识别就不确定了
      • 集群文件系统:
        • GFS2(Google有同名的分布式文件系统?)
        • OCFS2 (用的人少)
      • 网络文件系统:
        • NFS
        • smbfs(CIFS)
      • 光盘文件下同:
        • iso9660
      • 分布式文件系统:
      • 虚拟文件系统:
      • 还有很多种
        格式化没有做文件系统的叫做裸设备raw;

实际操作;终于操作了。

磁盘分区工具:fdisk,sfdisk,parted,

fdisk分区:

// 开始分区 ,输入命令后会有提示信息。然后进入交互式命令输入,先看下命令帮助,然后开始创建分区[root@10 ~]# fdisk /dev/sda 欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。使用写入命令前请三思。命令(输入 m 获取帮助):m             //输入m可以获得命令帮助命令操作   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)// 翻译解释    d 删除分区    n:新建一个分区    p:列出已有分区(不仅仅是已经划分的分区,还有刚刚新建的分区)    t:调至分区ID (不清楚分区,就l:列出分区id)    l:列出内核支持的分区id 列出    w:保存退出    q:不保存退出     m:帮助//每次输入完命令,就进入交互模式,等待下一个命令命令(输入 m 获取帮助):nPartition type:   p   primary (2 primary, 0 extended, 2 free) 创建主分区   e   extended// 创建扩展分区Select (default p): p  // 选择创建主分区分区号 (3,4,默认 3):3    // 分区号选择3或4 起始 扇区 (16695296-16777215,默认为 16695296)://就是从已时候的柱面之后开始的直接回车选择默认将使用默认值 16695296Last 扇区, +扇区 or +size{K,M,G} (16695296-16777215,默认为 16777215):+500m   //分区选择到那个柱面结束。或者选择这个主分区的大小,这里选择500M大小

分区结束后,要内核重新读取分区列表

  • Centos5:partprobe
    • partprobe /dev/sda :读取设备文件列表
  • Centos6:partx kpartx
    • kpartx -l /dev/sda :列出看看都有哪些
    • kpartx -af /dev/sda
    • partx -a /dev/sda
      以上按顺序来一遍,实际情况经常添加失败,经常要重启。但是通过这种方式可以添加成功。有时候多来几遍也能实现

查看是否添加成功

// 看看配置文件内是否添加成功- cat /proc/partitions// 看下实际有没有挂载成功- ls /dev/sda*

删除分区

[root@10 ~]# fdisk /dev/sda 欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。使用写入命令前请三思。命令(输入 m 获取帮助):d //删除分区分区号 (1,2,默认 2): 2 // 输入分区号就可以了

调整分区格式

命令(输入 m 获取帮助):t分区号 (1,2,默认 2):2Hex 代码(输入 L 列出所有代码): 输入对应分区类型id如果不知道对应的id ,在命令出输入l或L 就出现所有列表

挂载后,接下来就格式化创建文件系统。

Linux:默认支持ext2,3,4.

创建文件系统的命令:mkfs:通过一个-t的选项指定文件系统之后对其格式化- mkfs - -t fstype /dev/somedevice(已经挂载的分区) :指定文件系统的类型,对其进行格式化
例:格式化新挂载分区mkfs -t ext3 /dev/sda3  |实际mkfs -t 调用的是命令mkfs.ext3实际相当于以下情况Ext4:mkfs -t ext4 = mkfs.ext4 = mke2fs -t ext4Ext3(日志文件系统):mkfs -t ext3 = mkfs.ext3 = mke2fs -t
sdfsdfssdf

实际使用中一般用功能更强大的mke2fs命令

  • mke2fs:

    • 配置文件:/etc/mke2fs.conf

    • -t:指定文件类型{ext2,ext3,ext4}

    • -j:?

    • -L label: 指定卷标,

    • -b{一般设定值1024|2028|默认:4096}:指定块大小

    • -i # :#个字节给指定一个indone

    • -N # : 直接指定预留多少个indone

    • -I # : 指定Inode大小

    • -m # :预留给管理员的空间百分比,默认为5

    • -O :指定分区特性

  • e2label /dev/SOMEDEVICE 查看卷标,

  • e2label /dev/SOMEDEVICE Label 直接更改卷标
  • blkid 查看设备属性,包括UUID(随机生成的一组数字)和TYPE
      -

dumpe2fs 查看超级块和是否有碎片
-h:仅显示超级块中保存的信息
tune2fs:调整mke2fs的信息
-l:查看超级块中的信息
-L: 设定卷标
-m:预留管理员的空间百分比
-j:如果原来的文件系统为ext2,-j能够将其提升为ext3
-o:[^]mount-options[,…] 指定默认挂载选项
-O:[^]feature[,…] 调整分区特性
tune2fs -o 挂载选项 设备
tune2fs -o ^设备选项 取消
fsck:文件系统检测
-t 文件类型 设备
-f 强行检测
-a 自动修复错误
-r 交互式修复错误
e2fsck -t 指定时间
-y 自动回答为yes
-f 强行检测

交换分区:
虚拟内存
mkswap 格式化为虚拟内存
-L label 指定卷标
swapon 启动虚拟内存
-a 启动所有的虚拟分区
-p:指定优先级
swapoff 关闭虚拟内存

总结:fdisk,mke2fs,mkfs,blkid,e2label,dumpe2fs,tune2fs,fsck,e2ffsck,mkswap,swapon,swapoff

ext 文件系统的格式;分为原数据区和数据去

元数据区

  • 元数据区有很多条目叫做inode,inode里面保存的是文件的属性{时间戳,inode号,属主,属组,权限,文件放置的位置}

数据区:被化作很多很多块,这个快必须是2的n次方倍。一个扇区是512字节,块的大小是可以指定有几个扇区来组成一个块。这个块叫做block,一个block只能存放一个文件,不能两个文件公用一个文件。(硬连接除外硬连接还是同一个文件)。每个block对应着有一个inode号。每个inode号自己也需要空间存储。那么就会出现一个问题,在一个固定大小的硬盘中inode号和block对应的匹配度越高越好。否则inode号用完了,剩下的block也就浪费了或者block用完了,剩下inode号白占空间了。文件系统有个默认的inode和数据块的比例,这个在格式化的时候都要指定的,比如32:1,64:1。就是32个块对应一个inode 。inode放的文件存放的信息

在块的实际使用会出现对应的磁盘碎片

超级块(super block):

硬盘分区中每个block的大小、硬盘分区上一共有多少个block group、以及每个block group中有多少个inode

第0个块组中,有1个块是做超级快的备份的。 超级块也就是某一个块中
超级块用来做什么,比如有天某个块坏了,我去超级块中找到那个备份,把那个坏的覆盖掉了。那么数据又回来了

位图:

  • inode 位图 :在元数据区还有一块区域叫做位图用来记录inode有没有被使用。要么用了,要么没用
  • 块位图:记录块用了,还是没用。
0 0