Linux磁盘管理

作者: 千幻流光 | 来源:发表于2019-07-11 17:47 被阅读0次

    一,机械硬盘的结构和工作原理简述

    以下内容部分图片和文字来自知乎 @随风 的知乎回答

    机械硬盘主要由盘片,磁头,盘片转轴以及控制电机,磁头控制器等几个部分组成。

    机械硬盘内部结构(图1.1)

    磁盘由一个或多个盘片组成,每个盘片上下两面各有一个磁头,通过磁头臂控制磁头运动:

    • 电机带动主轴,进而带动磁盘开始高速旋转
    • 磁头与盘面保持一个微小的距离,在磁头动臂的控制下向指定位置移动
    • 磁头到达指定位置,开始对磁盘进行读写操作
    磁盘读写原理示意图(图1.2)

    二,机械硬盘有关的几个基本概念

    磁盘示意图(图2.1) 图2.2
    1. 磁道 track:

    当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。

    1. 扇区 sector:

    磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区,每个扇区可以存放512个字节的信息,磁盘驱动器在向磁盘读取和写入数据时,以扇区为单位。(可参考上图2.1,2.2)

    1. 柱面 cylinder

    硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的"0"号磁道开始编号,从上面的硬盘结构示意图(图2.1)我们可以看出,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。

    1. CHS

    所谓硬盘的CHS,即Cylinder(柱面)、Head(磁头)、Sector(扇区),只要知道了硬盘的CHS的数目,即可确定硬盘的容量,硬盘的容量=柱面数×磁头数×扇区数×512B。


    三,Linux磁盘管理

    一切皆文件,这是Linux的基本理念之一。在Linux中,所有的硬件包括磁盘,也都是作为文件来管理的,通常我们称呼这类文件为设备文件。

    在类Unix操作系统中,设备文件是设备驱动程序的接口,允许应用程序通过标准输入/输出系统调用使用其设备驱动程序与设备进行交互。使用标准系统调用简化了许多编程任务,并且无论设备的特性和功能如何,都可以实现一致的用户空间I / O机制。

    可以粗略的认为,设备文件就是关联至一个设备驱动程序,进而能够跟对应的硬件设备进行通信的文件。

    Linux中的设备文件通常存放在/dev目录下,在ll /dev | grep -v "^[dsl]"查询返回的结果中可以看到类似下图的内容

    部分结果
    结果说明:
    • 第1部分,第一个字母表示文件类型,c表示字符设备,b表示块设备。后九个字母表示文件的权限(r读,w写,x执行,-无),每三位为一组,表明文件的属主属组其他人的权限。
    • 第2部分,数字1,表示文件的硬链次数
    • 第3部分,左边是文件的属主,右边是文件的属组
    • 第4部分,逗号分隔的两个数字,前面是文件的主设备号,后面的是文件的次设备号
    • 第5部分,文件名

    设备文件的主要类型

    1. 字符设备(Character Devices):指在I/O传输过程中,必须按照先后顺序存取数据的设备,以字符为单位进行传输。通常字符设备不使用缓冲区。例如键盘
    2. 块设备(Block Devices):是一种具有一定结构的随机存取设备,对这种设备的读写是以块为单位进行的。它使用缓冲区来暂时存放数据,待条件成熟后,从缓冲区一次性写入设备或从设备中一次性读出放入到缓冲区。例如硬盘
    3. 伪设备(Pseudo-devices):没有对应的物理设备,而是操作系统虚拟出来,用于实现某些特定功能的设备。

    最常用的伪设备是 /dev/null/dev/zero

    • /dev/null,也称为位桶(bit bucket),外号无底洞,黑洞。任何输出到它的数据都会被丢弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
      如果试图从它读取数据,那么永远都只会得到EOF(End Of File)信号。
    • 验证:
    ls  #用于和下方比较执行结果
    ls &> /dev/null  #将结果重定向到/dev/null
    echo $?  #验证命令是否执行成功,0表示成功,其他数字表示错误码
    
    输出到/dev/null的结果
    • /dev/zero,无论从该设备读多少次,每次都会获得一个二进制数字0(即ASCII码为0的字符,在vim里显示为^@),因此也有人形象的称呼它泡泡机,吐零机。
      而如果试图输出数据到它,也会像输出到/dev/null一样被全部丢弃。
    • 验证:
    dd if=/dev/zero of=a.txt count=1 bs=1  #从/dev/zero复制一个字符到a.txt
    
    从/dev/zero复制一个字符成功
    vi a.txt  #查看a.txt的内容
    
    vi中查看a.txt的内容

    相关文章

      网友评论

        本文标题:Linux磁盘管理

        本文链接:https://www.haomeiwen.com/subject/egghkctx.html