硬盘和主板的连接的地方:叫接口,硬盘的接口类型:

iops:i/o per second:每秒的读写次数。

  • IDE(ata):并口(数据并行传输),理论最大传输 133MB/S;iops:100次
  • SCSI:并口,Ultrascsi320:320MB/s;Ultrascsi640:640MB/s;iops:150-200次
  • SATA:串口(不能并行传输),768MB/s;iops:100次
  • SAS:串口,768MB/s;iops:150-200次
  • USB:串口,480MB/s
  • 上述接口的固态硬盘:iops:400次
  • pci-e接口的固态硬盘:iops:10万次

桌面用的固态硬盘的接口一般是SATA的。

并口:同一个线缆可以接多块设备

  • IDE:2个。主硬盘,从硬盘
  • SCSI:
    • 宽带:16-1个
    • 窄带:8-1个

串口:只能接一个。

硬盘种类:机械硬盘,固态硬盘

  • 机械硬盘:由很多盘片组成,盘片上有很多同心圆中心有一个同心轴(叫主轴),每个盘片的正反面都有一个磁头,就像留声机,有一个手臂(arm),支撑所有磁头。

    硬盘结构图片请参考:硬盘的物理结构和工作原理

    • track:磁道

    • sector:扇区,512bytes

    • cylinder:柱面:圆柱体的外表面(除去上下2个圆面)

      分区划分是以柱面为单位的。

    • 平均寻道时间:硬盘的同心轴旋转的速度。越快IO越好。

      5400转/分,7200转/分,10000转/分,15000转/分

    • 最外层的磁道,同一段时间内转过的长度最大,所以IO最快,所以把C盘划分到外层,所以windows的操作系统都装在C盘上。

Linux的哲学思想:一切皆文件

设备类型:

  • block(块):随机访问,数据交换单位是block
  • character(字符):线性访问,数据交换单位是character

设备文件:

  • 关联到设备的驱动程序;设备的访问入口。
  • 设备文件是作为程序的参数,就相当于执行对应的设备驱动程序。
  • 设备文件的特点是没有文件大小,只有设备号。

设备号:

  • major:主设备号:区分设备的类型(鼠标还是键盘),用于标明所需要的驱动程序。

  • minor:次设备号:区分同种类型下的不同设备(有2个显示器,区分是哪个显示器)。是特定设备的访问入口。

创建设备文件命令:mknod:make block or character special files

  • 语法:mknod [OPTION]... NAME TYPE [MAJOR MINOR]

    • NAME:设备文件名字
    • TYPE:设备类型,是block还是character
    • 不指定设备号,会自动分配。
  • 选项:-m:指定设备文件的权限。
# mknod testdev c 111 1
# ll testdev
crw-r--r--. 1 root root 111, 1 Dec 25 18:42 testdev
# mknod -m 664 testdev1 c 111 1
# ll testdev1
crw-rw-r--. 1 root root 111, 1 Dec 25 18:42 testdev1

设备文件的名字不是随便的,是有标准的,由ICANN制定。

操纵系统给硬盘的设备文件的命名规则:

  • IDE接口的硬盘:/dev/hd
  • SCSI,SATA,USB,SAS接口的硬盘:/dev/sd
  • 由于同一种类的接口的硬盘可能存在多个,所以后面加字母a-z。例如hda,hdb;sda,sdb等。
# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 Dec 25 10:10 /dev/sda
brw-rw----. 1 root disk 8, 1 Dec 25 10:10 /dev/sda1
brw-rw----. 1 root disk 8, 2 Dec 25 10:10 /dev/sda2

设备的引用问题:

  • 比如主板上插了2个串口的SCSI硬盘,2个USB
  • 第一次操作系统启动后,把SCSI的2个盘识别为sda,sdb;把2个USB识别为sdc,sdd。
  • 下次操作系统启动后,有可能就倒过来了。所以不好识别。

所以有了下面的设备引用方式:

  • 设备文件的名字:操作系统启动时,识别到了设备,然后给了个名字
  • 卷标(Filesystem label):
  • UUID:随机的128bit的数字:在给分区格式化(安装文件系统)的时候,生成的随机数字。

硬盘分区概念

硬盘的空间很大,为了更细致的使用它,要给它划分成独立的区域,叫分区。如何识别分区呢?使用/dev/sda#,/dev/hda#。

#:为数字,可能是1位的数字,也可能是2位的数字。

注意:centos5根据硬盘接口的类型,把IDE的命名位hd,把SCSI等的命名位sd。但是centos6和7,不管是什么接口的硬盘,一律用sd[a-z]来命名了。

硬盘分区类型:

  • MBR:Master boot record:主引导记录(扇区)

    在0号track(磁道),0号sector(扇区)里,有512bytes

    这512bytes分为3部分:

    • 前446bytes:bootloader程序,引导操作系统启动的程序。

    • 接下来的64bytes:分区表(fat),用16个字节标识一个硬盘的可使用区域,所以一共只能有4个分区(硬盘的可使用区域)。

      • 如果想要超过4个分区怎么办?

        让某一个分区,不直接指定硬盘空间的具体可使用区域,而是指向硬盘的一个小地方,这个地方又放了一张分区表(fat),这个分区表的大小可以随意指定,所以这个分区表里就可以放n多的分区的索引,再由此索引,指定具体的分区(硬盘的可使用区域)。

        所以就可以有了:

        • 3主分区,1个扩展分区。扩展分区里再分n个逻辑分区。
        • 主分区和扩展分区的数字,是从1-4的;逻辑分区是从5开始,即使主分区+扩展分区还没到4,逻辑分区也是从5开始。
    • 最后2个bytes:MBR区域是否有效的标识。如果是55AA(16进制),则说明有效。否则,说明无效。

  • GPT:未调查

分区管理命令:fdisk

  • 查看硬盘里的分区情况:fdisk -l [-u][device...]

    不指定设备文件的话,就显示所有硬盘的分区情况。

    指定设备文件的话,就显示指定硬盘的分区情况。

    # fdisk -l
    
    Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors(扇区)
    Units = sectors of 1 * 512 = 512 bytes(每个扇区是512bytes)
    Sector size (logical/physical): 512 bytes / 512 bytes(扇区的逻辑/物理size都是512bytes)
    I/O size (minimum/optimal): 512 bytes / 512 bytes(IO大小512bytes)
    Disk label type: dos(dos代表是MBR的分区类型)
    Disk identifier: 0x000bc639(磁盘的UUID,16位的数字) Device Boot Start End Blocks Id System
    /dev/sda1 * 2048 2099199 1048576 83 Linux
    /dev/sda2 2099200 125829119 61864960 8e Linux LVM # fdisk -l /dev/sda Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 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: 0x000bc639 Device Boot Start End Blocks Id System
    /dev/sda1 * 2048 2099199 1048576 83 Linux
    /dev/sda2 2099200 125829119 61864960 8e Linux LVM
    • 【Start End】:centos6是从哪个柱面开始到哪个柱面结束;centos7是从哪个扇区开始到哪个扇区结束。
    • 【Boot】:下的*,代表linux系统装在这个分区里。
    • 【block】:代表这个分区里有多少个block
    • 【Id】:16进制的数字,代表分区的种类
      • 83:一般linux分区
      • 5:扩展分区(Extended)
      • 82:交换分区(Linux swap)
    • 【system】:Id的说明。
  • 管理分区:fdisk device

    fdisk提供一个交互式接口来管理分区,进入交互式以后,在里面可以使用很多子命令。

    所有操作的结果都是暂时保存在内存中,还没有写入到磁盘,直到使用了w命令后,才会把操作反应到磁盘,也就是操作才生效。这个命令非常危险。

Command action
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(显示磁盘种类,也就是上面用fdisk -l命令的指向结果里的Id)
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(修改分区的Id,也就是修改文件系统的种类)
u change display/entry units
v verify the partition table
w write table to disk and exit(保存并退出)
x extra functionality (experts only)

在虚拟机里添加一个硬盘,然后给这个硬盘分区。

下图是在虚拟机上新添加的硬盘,大小是1GB。

添加硬盘前:

# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 Dec 25 10:10 /dev/sda
brw-rw----. 1 root disk 8, 1 Dec 25 10:10 /dev/sda1
brw-rw----. 1 root disk 8, 2 Dec 25 10:10 /dev/sda2

添加硬盘后:发现多了一个/dev/sdb,所以新添加的硬盘被操作系统识别到了。

# ll /dev/sd*
brw-rw----. 1 root disk 8, 0 Dec 26 13:26 /dev/sda
brw-rw----. 1 root disk 8, 1 Dec 26 13:26 /dev/sda1
brw-rw----. 1 root disk 8, 2 Dec 26 13:26 /dev/sda2
brw-rw----. 1 root disk 8, 16 Dec 26 13:28 /dev/sdb

查看一下新硬盘的情况:

发现硬盘大小是:1073MB,和添加的1GB大小符合;硬盘分区类型是MBR

# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2). Command (m for help): p Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x0e2a2184 Device Boot Start End Blocks Id System

创建一个主分区:

Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p(问你是创建主分区p,还是扩展分区e)
Partition number (1-4, default 1): 1(因为上面选的是主分区,所以问你主分区的分区号)
First sector (2048-2097151, default 2048): 2048(正在创建的这个分区,从哪个扇区开始创建)
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +200M(创建多大的分区)
Partition 1 of type Linux and of size 200 MiB is set(告诉你一个200M的分区创建成功了) Command (m for help): p Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x87b57c10 Device Boot Start End Blocks Id System
/dev/sdb1 2048 411647 204800 83 Linux
Command (m for help): w(保存!)
The partition table has been altered! Calling ioctl() to re-read partition table.
Syncing disks.

上面创建了一个/dev/sdb1分区。

查看刚创建的分区是否被操作系统识别了:查看文件/proc/partitions,发现/dev/sdb1已经在里面了,就说明了操作系统已经识别了刚创建的分区了。

# cat /proc/partitions
major minor #blocks name 8 0 62914560 sda
8 1 1048576 sda1
8 2 61864960 sda2
8 16 1048576 sdb
8 17 204800 sdb1
11 0 1048575 sr0
253 0 38834176 dm-0
253 1 4063232 dm-1
253 2 18960384 dm-2

上面创建分区的操作是在centos7里做的,所以操作系统才能马上就识别到刚创建的分区/dev/sdb1,但是如果是centos5或者6,就不能马上识别出刚创建出来的分区。需要用下面的命令,告诉操作系统我刚创建了一个分区,请识别它,谢谢。下面的命令一般执行第一次时,不会成功,再执行一次就好了。

  • centos5:partprobe [device]

  • centos6/7:partxkpartx

    partx -a [device]

    kpartx -af [device]

如果磁盘空间满了,系统就无法工作了

所以,在划分数据区的时候,最好预留一块区域,当满了的时候,管理员可以启动这块预留区域,然后操作系统就能工作了。

# c/c++ 学习互助QQ群:877684253
![](https://img2018.cnblogs.com/blog/1414315/201811/1414315-20181106214320230-961379709.jpg)
# 本人微信:xiaoshitou5854

linux 文件系统管理三部曲之一:磁盘分区的更多相关文章

  1. linux 文件系统管理三部曲之三:挂载文件系统

    linux 文件系统管理三部曲之一:磁盘分区 linux 文件系统管理三部曲之二:创建文件系统 上面说明了,硬盘的划分和格式化,那么怎么使用,还没说,这里说一下,怎么使用创建好的文件系统. 使用文件系 ...

  2. linux 文件系统管理三部曲之二:创建文件系统

    创建文件系统的含义:就是格式化一个硬盘分区,不同的格式化方式,就是创建了不同的文件系统. 格式化: 低级格式化:划分分区前执行,主要是划分硬盘的磁道等. 高级格式化:划分分区后执行,创建文件系统 创建 ...

  3. 『学了就忘』Linux文件系统管理 — 63、磁盘配额介绍

    目录 1.磁盘配额概念 2.磁盘配额条件 3.磁盘配额的相关概念 4.磁盘配额实践规划 1.磁盘配额概念 磁盘配额是限制用户或者用户组在一个分区上可以使用的空间大小和文件个数的限制. 扩展: 管理员可 ...

  4. 『学了就忘』Linux文件系统管理 — 64、磁盘配额的配置步骤

    目录 1.手工建立一个5GB的分区 2.建立需要做限制的三个用户 3.在分区上开启磁盘配额功能 4.建立磁盘配额的配置文件 5.开始设置用户和组的配额限制 6.启动和关闭配额 7.磁盘配额的查询 8. ...

  5. Linux文件系统管理命令(第二版)

    Linux文件系统管理命令 常用命令 1.df命令 查看分区使用情况 常用选项 -h 比较人性化 -m 以兆字节显示分区使用情况 显示信息: Mounted on:挂载点 Filesystem:对应的 ...

  6. Linux 文件系统管理

    Linux 文件系统管理 课程大纲  文件系统构成及命令  硬盘分区及管理  磁盘配额  备份与恢复   文件系统构成 /usr/bin ./bin:存放所有用户可以执行的命令 /usr/s ...

  7. Linux文件系统管理

    第九讲 文件系统管理   基础知识点:   硬盘的构成:主要由盘片.机械手臂.磁头与主轴马达所组成,实际的数据都是写在具有磁性物质上的盘片,通过主轴马达让盘片转动,机械手臂可伸展让磁头在盘片上读取数据 ...

  8. Linux文件系统管理 常见命令df、du、fsck、dumpe2fs

    概述 Linux文件系统管理 常见命令df.du.fsck.dumpe2fs. 文件系统查看命令:df 通过 df 命令可以査看已经挂载的文件系统的信息包括设备文件名.文件系统总大小.已经使用的大小. ...

  9. Linux文件系统简介一(磁盘分区、开机过程、目录结构、文件权限、文件扩展名、目录管理)

    Linux:就是一组软件,一套操作系统=核心+系统呼叫接口层. 1.操作系统 操作系统 = 核心(内核) + 系统呼叫(接口) 操作系统其实也是一组程序,重点在于管理计算机的所有活动以及驱动系统中的所 ...

随机推荐

  1. linux命令之---ping

    1)命令简介 ping命令用来测试主机之间网络的连通性.执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常. 2)命令参数 ...

  2. Hibernate4.x 报错 Space is not allowed after parameter prefix ':'

    1.问题描述  hibernate4.0使用原生sql:   (SELECT a.user_id,(@rowno:=@rowno+1) as rowno,a.goods_value FROM n_wo ...

  3. centos7安装bind(DNS服务)

    环境介绍 公网IP:149.129.92.239 内网IP:172.17.56.249 系统:CentOS 7.4 一.安装 yum install bind bind-utils -y 二.修改bi ...

  4. 高级安全Windows防火墙概述以及最佳实践

    本文简单介绍Windows防火墙的概念,给出使用场景并列出了常见的防火墙操作. 简介 在Windows NT6.0之后微软推出了高级安全Windows防火墙(简称WFAS),高级安全Windows防火 ...

  5. chkcongfig 命令

    chkconfig   命令主要用来  更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig ...

  6. U盘制作macOS Sierra的启动盘

    1.macOS Sierra的几种安装方式 *开机时按住command+option+r 进行联网在线安装.PS:在网速好的情况还行,但是如果网络差的时候,它会让你崩溃的. *使用光盘进行安装. *今 ...

  7. C# 获取键盘钩子,屏蔽键盘按键

    static int hHook = 0; public delegate int HookProc(int nCode, int wParam, IntPtr lParam); //LowLevel ...

  8. HA: Chakravyuh Vulnhub Walkthrough

    靶机链接: https://www.vulnhub.com/entry/ha-chakravyuh,388/ 主机探测扫描: 端口扫描: ╰─ nmap -p- -sC -sV 10.10.202.1 ...

  9. Ansible学习笔记(一):部署管理Windows机器遇到的一些坑

    在给国盛通上海测试环境做Ansible管理Windows服务器的时候,遇到了一些坑,Google解决掉了,特此记录,坑用红色标记. 一.环境说明 1.Ansible管理主机 操作系统:CentOS 7 ...

  10. linux中shell内置命令和外置命令

    shell内置命令 无法通过which或者whereis去查找命令的位置 例如cd,cp这些命令是shell解释器内置的命令 当shell内置命令传入shell解释器,shell解释器通过内核获取相关 ...