zoukankan      html  css  js  c++  java
  • linux 磁盘与文件系统管理 (鸟哥私房菜)

    各种接口磁盘在Linux中的文件名分别为

    /dev/sd[a-p][1-15]:为SCSI,SATA,USB,Flash随身碟等接口的磁盘文件名   

    /dev/hd[a-d][1-63]:为IDE接口的磁盘文件名

    注:sd/hd为硬盘接口,即为sd接口还是ide接口。  a-p 字母为 硬盘的个数,即  a为第一块硬盘,b为第二块硬盘以此类推。

    主分区,延伸分区(扩展分区),逻辑分区的区别。

    硬盘分区有三种,主磁盘分区、扩展磁盘分区、逻辑分区
    一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个。且主分区+扩展分区总共不能超过4个。逻辑分区可以有若干个。
    在windows下激活的主分区硬盘启动分区,他是独立的,也是硬盘的第一个分区,正常分的话就是C区。 在linux下主分区逻辑分区都可以用来放系统,引导os开机,grub会兼容windows系统开机启动。
    分出主分区后,其余的部分可以分成扩展分区,一般是剩下的部分全部分成扩展分区,也可以不全分,那剩的部分就浪费了。
    但扩展分区是不能直接用的,他是以逻辑分区的方式来使用的,所以说扩展分区可分成若干逻辑分区。他们的关系是包含的关系,所有的逻辑分区都是扩展分区的一部分。
    在linux中第一块硬盘分区为hda分区,主分区编号为hda1-4,逻辑分区从5开始。
    硬盘的容量=主分区的容量+扩展分区的容量
    扩展分区的容量=各个逻辑分区的容量之和
    主分区也可成为“引导分区”,会被操作系统和主板认定为这个硬盘的第一个分区。所以C盘永远都是排在所有磁盘分区的第一的位置上。
    MBR(主引导记录)的分区表主分区表)只能存放4个分区,如果要分更多的分区的话就要一个扩展分区表(EBR),扩展分区表放在一个系统ID为0x05的主分区上,这个主分区就是扩展分区,扩展分区能可以分若干个分区,每个分区都是个逻辑分区
     
    详情 链接 https://www.cnblogs.com/w-wfy/p/8870598.html  wwfy的博客所写的内容
     
    硬盘分区格式化的目的
    磁盘分区完成后,还需要进行格式化。format,之后操作系统才能使用该分区,格式化的原因是每种操作系统所设定的文件属性/权限并不相同,为了存放这些档案所需的数据,因此需要将分区进行格式化,以成为操作系统能够利用的【文件系统格式(filesystem)】
     
    inode,data block,superblock之间的解释与联系
    Linux中,档案的权限(rwx)与文件属性(user,gorup,mtime等),文件系统通常会将这两部分的数据分别存放在不同的区块,曲线和属性放置在inode中,实际数据则放置在data block中,整个文件系统的整体信息,包括inode,block的总量,使用量,剩余量则放置在superbolock中。
    superbolck  记录此filesystem的整体信息,包括inode,block的总量使用量剩余量以及文件系统的格式等相关信息
    inode   记录档案的属性,一个档案占用一个inode,同时记录此档案的数据所在的block的号码
    block   实际记录档案的内容,若档案太大时,会占用多个block
     
    注:每个档案都有一个Inode,每个inode记录着档案block的编号,通过编号就能读取该档案的实际内容。提高读取档案的效率
    注:微软最新的NTFS文件系统采用的是BTree形式进行索引,每一个Node节点储存的是父节点指针,关键字,子节点指针。NTFS搜索文件是,直接折中搜索,将整个系统分成上下两部分,然后通过关键字来比对,来判断是在上半区还是下半区,然后在将半区进行折中平分,再比对,直到找到档案所在的datablock为止。BTree必须是顺序节点的附加,这样才能保证折中搜索的顺利进行。
    1  data block

     

    2 inode table 

    3 Superblock 

     

    命令  dumpe2fs 查看相关硬盘信息。

    查询信息的上半部分为  superblock的内容

    下半部分为block group的信息

    ls -i这个命令来获得档案所占用的inode号码

     

     ll-d 命令来获得每个档案所占用的block数。

     

    目录读取树

    新增档案

    日志式文件系统的来龙去脉(joumaling filesystem)

    根据上图中可得知,当在写入数据时,需要写入inode和block。同时更新inode bitmap和block bitmap,superblock三块区域。

    若在写入inode和block后,突然遇到意外情况,如断电等,会导致后续更新inode bitmap 和 super block的停止,从而造成数据的不一致性。在ext2中,就会有superblock当中记录的valid bit(是否挂载)与 filesystem state(clean 与否)等状态来判断是否强制性进行数据一致性检查。通过e2fsck命令来执行。主要针对metadata和数据存放区域来比对,就需要对整个filesystem进行一致性检查,从造成系统主机复原时间比较长。为了避免出现上述情况,就出现了日志式文件系统。如下图

     Linux 文件系统的运作

    硬盘文件需要加载到内存中才能被cpu所处理。如果在编辑的过程中频繁的操作硬盘,而硬盘的读写效率又是如此的低下,这会导致文件字读写过程过程中的漫长等待。所以Linux采用了异步处理(asynchronously)的方式。

    。这样操作有个问题,就是如果你在档案写入的过程中,出现断电等异常情况,会导致内存中的dirty数据无法回写到硬盘中,从而导致数据丢失的状况出现,所以我们要不定时的利用sync命令来强制写入硬盘。

    Linux文件系统与内存的关系如下图

     默认centos 不支持NTFS格式的磁盘,而要挂在NTFS格式磁盘,就需要用到软件,具体操作如下链接

    https://blog.csdn.net/sinat_32867867/article/details/78210847

    Linux VFS(Virtual Filesystem Switch)

    即通过VFS系统,Linux系统自动将每个挂在点所采用的文件系统进行管理。而不需要用户自己去选择和操作

    关系如下

     

    但如果Linux不支持某个文件系统,如NTFS,则就无法通过VFS系统来自动加载识别,则需要再上个段落中所需要的第三方软件来手动加载读取。

    深入学习的链接 http://linux.vbird.org/linux_basic/1010appendix_B.php

    【df】 列出文件系统的整体磁盘使用量

    【du】评估文件系统的磁盘使用量|(常用在推估目录所占容量)

     

    硬连接 hard link 

    https://www.cnblogs.com/hanxianlong/p/3478338.html(winodws与linux创建硬连接和软连接)

    我们知道,如果两个目录block,但是只要他们的inode的数字是相同的,那就代表这两个路径不同的block内容时相同的。这就是所谓的硬连接。比方说,我们在视窗操作系统中所看到的所谓的文件夹其实是目录名即(block)。目录名通过关联inode码来关联档案数据。如果有两个目录名同时指向inode码,那这就是硬连接。注意区分硬连接与快捷方式的区别。

     图例

     注意:hardlink的限制条件

    不能夸Filesyste

    不能link目录  (因为目录下面或许有很多文件,如果link目录,则会将下面的所有档案全部link,复杂度就非常高了)

     Symbolic link (符号链接,快捷方式)

    上面两张图我觉得说的还不是很清楚,大白话就是,硬连接 两个block指向同一个inode.软连接就是,每个block都有自己的inode,然后软连接通过与复制第一个block的方式进行访问真实数据。也就是说,对于真实数据来说,硬连接是两个人同时针对他,软连接是一个人针对他,另一个人针对另一个人。程序理解就是

    A a=new a

    B b =new b  b=a  硬连接  两个对象同时指向同一块内存区域

    A a= new a

    B b=a  软连接   一个对象指向内存区域,另一个对象指向该对象

     【ln】 命令来创建软链接和硬链接

    eg

    将/etc/passwd文件复制到tmp本目录。注意passwd后面有个 “."。然后查看容量大小为 2259823

      对passwd进行硬连接为 passwd-hd

    查看容量大小。还是2259823.验证了硬连接在一般情况下是不会额外增加block的数量的。一种例外,就是恶心遇到了恶心他妈的情况,比如你这个block已经满了,然后你又创建了一个硬连接,那就恶心到家了。

    然后建立软连接,passwd-so。通过ll-li可以发现,硬连接 passwd和passwd-hd他们的inode码是相同的,但是软连接passwd-so的inode码是不一样的。668138和668139.而增量也增加到了2259829.2259829-2259823=6.那这6个byte是从何而来呢,因为passwd的每个字母都占用了一个byte,也从中可以验证,passwd-so存储的是passwd的文件名。

    删除源文件passwd。passwd-hd与passwd-so的区别是如何呢?

    。看到了吧,也就是说,硬连接即使你把源文件删除,但是因为保存的是相同的inode码,所以照样能够读取到passwd的内容。而软连接因为连接的是源文件,所以源文件删除之后自然就无法读取到文件了。

    针对硬盘管理。需要以下几个步骤

    1  对磁盘进行分割,已建立可用的partion(分区)  fdisk

    2  对该partition进行格式化(format),以建立系统可用的filesystem,(格式化)mkfs

    3 若想要仔细一点,则可对刚刚建立好的filesystem进行检验,(磁盘检测)  fsck,badblocks

    4 在Linux系统上,需要建立挂载点(亦即是目录),并将他挂在上来(windows中磁盘管理,添加盘符)mount/unmount

    命令:

    【fdisk】磁盘分区

       命令  df / , 列出根目录所在的路径名   /dev/mapper/centos-root 。输入fdisk+路径名  则会列出fdisk相关的命令信息,如下图

    【mkfs】 格式化磁盘

    用法   mkfs -t ext4 分区目录

    在进行fidsk进行磁盘分区后,有可能会出现需要reboot才能生效的情况,这时就需要partprobe命令,核心进行重新加载,然后才能进行挂载等操作。

     【fsck】  磁盘检验

    【badblocks】检验硬盘或软件扇区是否有坏轨

    磁盘挂载与卸除

     挂在条件

    。单一文件系统不应该被重复挂载在不同的挂载点(目录)中

    。单一目录不应该重复挂载多个文件系统

    。要作为挂载点的目录,理论上应该都是空目录才是。(如果挂载点目录非空,则新挂载点会隐藏原目录中的内容,即该挂载点只会显示新挂载的硬盘信息,原信息会被隐藏,直到该挂载被卸载)

     【mount】指令,挂载硬盘

     

    查看挂载信息 【mount -l】

    挂载u盘 【mount -t vfat -o iocharset=cp950  挂载点】

     

    注:如果带有中文名的数据,可以再挂载时指定挂载文件系统所使用的语系数据。在man mount找到vfat文件格式当中可以使用iocharset来指定语系,cp950是中文语系。

    百度之后参考链接

    https://www.cnblogs.com/jiu0821/p/6489249.html

     【mount -o remount,rw,auto/】将/(根目录)重新挂载,并加入参数rw与auto。

    当根目录出现只读状态时,重新挂载的方法。

    【mount --bind /home /mnt/home】 类似于软连接的方式(symbolick link)。将两个目录进行软连接,类似于建立了一个home的快捷方式

    最后一行证明,二者已经建立软连接。

    这点我跟硬连接搞混了。最后才搞明白原来建立的是软连接。硬连接ln 无法对目录进行硬连接,具体原因如下链接进行解释。

    https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html#major2

    【e2label】 设置文件系统标头的Label。就类似于windows硬盘原来是c.d.e.f。然后你给改成  文件,数据等等

     设定开机挂载,俗称系统挂载

    /etc/fstab及/etc/mtab

    意思就是在/etc/fstab文件中,将磁盘分区进行挂载。这个东西一开始弄不熟悉,不知道该咋弄,后来查看了文档明白了。实际操作如下

    首先,先检查一下你的磁盘  fdisk-l

    我这有两块磁盘,一块sda,一块sdb。我现在想将/dev/sdb6放到 /mnt/hdc6目录中进行挂载

     输入命令, nano /etc/fastb   打开/etc/fastb编辑器,永久挂载就是在这个文件中进行写入。然后系统会读取,从而实现自动挂载。

    弹出如下图所示界面,这就是这个文件的编辑器

    上图界面第一行是文件名,就表示你正在操作的文件。第二行是各种操作步骤。下方所有命令都是ctrl+具体的操作字母。

    在这个编辑器中输入,要进行挂载的命令。如下图

    你要挂载的分区  挂载的目的地路径  文件类型   默认方式   能否被dump备份指令作用  (具体介绍我会在下面单独列示)

    然后就是保存,ctrl+o

    ,这里这个文件名一般不会变,但是保不准你手贱就随便按了一下就变了,这里我的就变了,后面多加了一个a,所以要把a删除掉再保存,这里记得看清楚。

    按回车。会提示已写入一行,然后ctrl+x离开界面

    然后操作命令  mount -a

    df    进行查看,看是否进行了挂载,如下图  

    好吧,以上操作导致了虚拟机的崩溃,无法启动。。。。后续原因再查找。现在需要 去搞小程序了,留着再回来看

     好了,回过头来继续解决问题。今天在继续往下看的过程中,突然注意到这么一句话

    让我们用虚拟机来试一下这句话能不能行。我一开始以为这是一个初始化的命令,现在才明白,这个是在单人模式下时,配置文件是只读模式,通过上面命令,可以将只读模式的文件进行可读写权限。这样就可以配置fstab的配置文件选项了,同样,还可以通过这个命令来修改root密码。

     
     
  • 相关阅读:
    【福利】idea最新激活码,绝对可用
    最好用的录屏工具Bandicam (班迪录屏)
    markdown改变字体、颜色和大小
    idea 2020最新破解教程(可激活至2089年)
    解决电脑桌面图标变白消失
    常见排序
    算法
    uWSGI、WSGI和uwsgi
    RabbitMQ
    flask请求和应用上下文
  • 原文地址:https://www.cnblogs.com/Lonelychampion/p/10911514.html
Copyright © 2011-2022 走看看