[置顶] linux菜鸟入门之磁盘

磁盘管理:

磁盘算是IO部件,算是一个外部器件,磁盘自诞生以来他的速度还是没有太大的改变。RAM是掉电丢失的。而数据就得放到其他设备上上。如U盘,光盘,软盘,硬盘,磁带。虽然固态硬盘已经走进大家的市场。但是机械硬盘还是主流的。

首先了解一下磁盘吧,磁盘是由一个一个光盘组成的。多说不宜,还是用图片说话。这样更清晰

引用一下度娘的

硬盘是电脑主要的存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成。碟片外覆盖有铁磁性材料。


这里只能看到一个大概。其实,硬盘的盘片不止一个,一个盘片有两个盘面。下面再引用一个度娘的图片。更清晰一些。

看到了吧,是由好几块磁盘组成的。而且磁头也不止一个呢。这些盘片固定在一个轴上。每一个面都会存在一个磁头去读磁盘上的内容。这下就有了扇区和柱面的概念,不用怕,继续贴百度的图片。这样更好理解。(我自己画太丑了,后面的再我自己画,由于我也是菜鸟,可能有些地方不对,请大神指正


这下就介绍完了,这些同心圆就是磁道track(就是一个圆圈),一些小的扇形就是扇区sector。一般而言一个扇区为512字节。由于费尔和格林贝格尔发现了“巨磁效应”。非常小的磁性变化会导致巨大的电阻变化。就导致现在的硬盘大容量和小型化。(但是读取速度还没有太大的变化)。

比如我们存一个文件,是存到一个盘面的吗?? 不是的,在不同的盘面的同一个位置按照磁道存储的,不同盘面的同一个磁道的连在一起就组成了柱面。就是相同半径的圆圈在不同的磁盘上就组成了一个空性圆柱。

我们的Windows打开我的电脑会发现A,B,C,D四个分区。那为什么要分区呢,首先一个分区可以有一个文件系统,先记住这个概念。分区是逻辑边界,并不是真的在磁盘上用工具刻出一块一块区域。如果不划分分区,那么整块磁盘只能是一个文件系统。

       那么到底磁盘到底怎么划分分区,这些分区的信息怎样保存呢!!!

      磁盘刚出场的时候。磁盘的厂商会对磁盘先格式化。这个过程就是划分磁道,扇区等,但里面没有任何分区。分区就是为了创建一个文件系统的。那怎么划分分区。分区的信息又在哪呢??

      这就有了MBR(主引导记录)他在一个磁盘的最前面。也就是0盘面,0磁道,0扇区。一共是512的byte。

其中  446byte的bootloader(很重要,是引导加载程序)

         64byte的分区表(每16个字节可以标示一个分区,那么也就是说一共可以划分4个主分区)

         2byte的魔术(这两位标记MBR是否有效)

那分区的分法是什么。磁盘的分区是按照柱面存储的,同一个分区的文件在一个分区吧,刚才说了一个文件是在不同磁盘的同一位置。所以分区是按照柱面进行划分的。由高中的知识可以知道,在外面的磁道的线速度最快。所以最外面的柱面是0号柱面。他的读取速度最快。一般是放C盘(系统盘)。

那分区的信息怎么样保存呢?是一个文件直接开始从最前面写一直写到结束,然后再来一个文件继续写,一直写到结束吗?就像下图一样.

那么问题来了,怎么知道一个文件是从什么地方开始什么地方结束呢(因为磁盘上的数据都是0,1),这样写的文件不是把磁盘写成一团乱麻了么。。。所以不能这么写!!!

       那怎么办呢,那必须要给这些数据一个逻辑边界。



linux的普遍的文件系统是ext形式的。

以ext2为例

一个分区存在数个数据块。

1.data块:

 一个块的大小与数量格式化完就不再变了(1k,2k,4k)

一个块只能存放一个文件

2.inode块

一个inode大小固定为128 bytes

inode包含文件的元信息,具体来说有以下内容:
  * 文件的字节数
  * 文件拥有者的User ID
  * 文件的Group ID
  * 文件的读、写、执行权限
  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  * 链接数,即有多少文件名指向这个inode
  * 文件数据block的位置

文件的指向 12个直接指向,1个间接指向,1个二级间接指向,1个三级间接指向
这15个指向一起用可以指向一个60GB的文件。

3.super block(1k大小)
记录了1.block和inode的总量
2.未使用的inode和block数量
3.block和inode的大小
4.文件系统的挂载时间
5.最近一次的写入检验时间,
6.标记位,记录着该文件系统是否被挂起

综上:super block 十分重要

4.文件系统描述符

记录了每个块组的起始位置

5.block 位图

快速定位哪些块是空的

6.inode 位图

同上定位哪些inode是空的



   

目录其实是一张表,这张表记录了以下信息。


      这下文件的信息的在第一片区域。当然这里的文件信息没有文件的名字,有inode号和其他一些属性。因为文件的名字是存放在上级目录中的,


其实上图还是不完全的,一个分区被分成数个数据块,一个数据块又有超级块和文件系统描述等东西存在


分区的开始是Boot Block,和加载操作系统有关。


现在一个分区是存在2个部分的,其实还有第三个,那就是日志文件系统。用来修复一些损坏(如windows 的强行关机,再开机的界面那里就要求修复)



(本菜鸟也是刚学习linux,若有错误,请大神指教)



做一个练习题吧
      假设要我们要在/backup下建立一个叫rest.txt的文件,这个文件共10k的大小。每个数据块2k。那么需要怎么一个过程呢。
1.首先扫描inode表的inode。找一个空闲的inode。于是占用这个块。
2.再找存在的目录/backup的inode。再根据inode表找backup的目录。根据其中的内容找到/backup对应的数据块,在其数据块上写上rest。txt与rest.txt的inode。
3.再找空闲磁盘,那么就得扫描磁盘块位图。找到inode所指示磁盘块后(尽可能是连续的)。然后写入数据

     删目录就是将他在目录中的信息删掉。并在位图中改成空就好了,其数据其实并不需要抹除。(360 的文件粉碎机就是不但将其位图标记为空,还将原数据块的内容全填一些随机数。)
     剪切文件就是将原目录的inode及文件名移到其他目录下就好了,所以在同一个分区里,剪切非常快。

其实磁盘上还有许多的块组,在第一片的全局描述信息中还有关于块组的信息。




软链接和硬链接
在文件的种类中还有一些文件是链接文件。下面讲一下什么事软连接,什么是硬链接。






下面就来看下/etc/下的一些链接文件。
lrwxrwxrwx.  1 root root       14 9月  20 22:57 system-release -> centos-release
看看上面的那个链接文件。既然链接文件本应该写磁盘块的位置没有写磁盘块在哪,而是写的别的文件的路径。都没磁盘块。哪来的大小。那么他的大小是什么呢。我们发现,他是有大小的,大小是14。其实他是被链接文件的字符个数(centos-release)数数刚好14.
 

我们还发现 在权限后面有一个 数字 ,上图是1,那个1代表的是硬链接的次数。也就是说硬链接次数大于1的话,就证明删一次是删不掉的。
[root@localhost test_xuexi]# echo "help" >test
[root@localhost test_xuexi]# ln /root/test_xuexi/test /root/txt 
[root@localhost test_xuexi]# ls ../
anaconda-ks.cfg  Desktop  Documents  Downloads  monitor_man.sh  Music  Pictures  Public  Templates  test_xuexi  txt  Videos
[root@localhost test_xuexi]# ll -i txt
ls: 无法访问txt: 没有那个文件或目录
[root@localhost test_xuexi]# ll -i ../txt
35128852 -rw-r--r--. 2 root root 5 10月 14 22:02 ../txt
[root@localhost test_xuexi]# ll -i ./test 
35128852 -rw-r--r--. 2 root root 5 10月 14 22:02 ./test
[root@localhost test_xuexi]# rm test 
[root@localhost test_xuexi]# cat ../txt 
help

而软链接后,两个文件的inode是不一样的。这就不演示了。如果软链接指向的文件被删除了,再重新建一个相同名字的文件。软链接还是可以指向那个文件呢,因为软链接的inode中块信息没有而是一个字符串(前面提到了这字符串是路径)。

软链接:
1.可以用于目录:
2.可以跨文件系统:
3.不会增加被链接文件的链接次数
4.其大小是指定路径的字符个数


硬链接:
1.只能对文件创建,不能应用于目录
2.不能跨文件系统
3.创建硬链接可以增加文件的被链接次数



再来说一下挂载的相关知识

一个文件系统想要被访问就必须挂载
挂载点一定是一个目录,该目录是进入该文件系统的入口
介绍一下和挂载相关的命令

df -T  可以查看被挂载的文件系统还有其文件系统类型
[root@localhost ~]# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda3      xfs        18G  4.2G   14G  24% /
devtmpfs       devtmpfs  898M     0  898M   0% /dev
tmpfs          tmpfs     912M  516K  912M   1% /dev/shm
tmpfs          tmpfs     912M  9.0M  904M   1% /run
tmpfs          tmpfs     912M     0  912M   0% /sys/fs/cgroup
/dev/sda1      xfs       297M  194M  104M  66% /boot
tmpfs          tmpfs     183M   32K  183M   1% /run/user/0
/dev/sr0       iso9660   4.1G  4.1G     0 100% /mnt/cdrom

blkid 被系统识别的挂载的设备
[root@localhost ~]# blkid
/dev/sr0: UUID="2015-12-09-23-14-10-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sda1: UUID="e19602a8-407c-414d-b38f-83f14718477a" TYPE="xfs" 
/dev/sda2: UUID="cfd32983-7e1e-4d7d-ae3e-1e38dfc17616" TYPE="swap" 
/dev/sda3: UUID="f35003eb-898a-4681-8342-f8f6de03e541" TYPE="xfs" 

fdisk -l 查看真实存在的设备
[root@localhost ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 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: 0x00079f53

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      616447      307200   83  Linux
/dev/sda2          616448     4810751     2097152   82  Linux swap / Solaris
/dev/sda3         4810752    41943039    18566144   83  Linux

mount 挂载命令
设备的使用
mount   设备     挂载点
mount   /dev/sr0  /mnt/cdrom

如果有进程在U盘内,就不能卸载U盘了,如下。这下可以

[root@localhost CentOS 7 x86_64]# umount /dev/sr0
umount: /run/media/root/CentOS 7 x86_64: target is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

卸载
fuser -kvm    设备|挂载点
        -k   kill  -v 显示信息 -m 扫描设备
        -----------------------------------




你可能感兴趣的:(linux,数据,管理,文件系统,磁盘)