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密码。

 
 
原文地址:https://www.cnblogs.com/Lonelychampion/p/10911514.html