一、设备文件

Linux中设备类型分为字符设备与块设备,他们特点分别为:

  • 块设备特性:以“块”为单位进行存取,随机访问,例如磁盘

  • 字符设备特性:以“字节”单位进行存取,线性访问,例如键盘

设备文件:关联至一个驱动程序,进而能够跟与之对应硬件设备进行通信;它仅元数据,没有数据;只有设备号

设备号:设备号分为主设备号,次设备号

  • major:标记设备类型

  • minor:标记同一类型下的不同的设备

例如:

[root@CentOS6 ~]# ll /dev/sd*
brw-rw---- 1 root disk 8,  0 Jan 31 02:35 /dev/sda
brw-rw---- 1 root disk 8,  1 Jan 31 02:35 /dev/sda1
brw-rw---- 1 root disk 8,  2 Jan 31 02:35 /dev/sda2
brw-rw---- 1 root disk 8,  3 Jan 31 02:35 /dev/sda3
brw-rw---- 1 root disk 8, 16 Jan 31 02:35 /dev/sdb
brw-rw---- 1 root disk 8, 17 Jan 31 02:35 /dev/sdb1
brw-rw---- 1 root disk 8, 20 Jan 31 02:35 /dev/sdb4
brw-rw---- 1 root disk 8, 21 Jan 31 02:35 /dev/sdb5

二、磁盘接口类型

  • IDE(ATA):并口, 133MB/s,设备文件:/dev/hd

  • SCSI: 并口,Small Computer System Interface, 640MB/s,15000rpm,设备文件:/dev/sd

  • SATA:串口, 6Gbps, 设备文件:/de/sd

  • SAS: 串口, 6Gbps,设备文件: /dev/sd

  • USB: 串口, 480MB/s,设备文件:/dev/sd

三、磁盘结构

1.物理结构

  • 圆盘(platter):就是硬盘的盘片,为实现大容量,一般都是多个

  • 磁头(head)数:每个盘片一般有上下两面,分别对应1个磁头,共2个磁头,实现数据的存取

2.逻辑结构

  • 磁道(track):当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道,从外边缘的0开始编号,根据磁化方向来存数数据0和1

  • 柱面(cylinder):不同盘片的相同编号的磁道构成的圆柱面就被称之为柱面,磁盘的柱面数与一个盘面上的磁道数是相等的

  • 扇区(sector):每个磁道都别切分成很多扇形区域,每个磁道的扇区数量相同,每个扇区大小为512字节

硬盘的容量=柱面数×磁头数×扇区数×512(字节数)

四.磁盘分区

磁盘分区分为两种方式MBR与GPT。

1.MBR分区

硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成:硬盘主引导程序(BootLoader)、硬盘分区表DPT(Disk Partition table)和魔数(Magic Number)。

  • Boot Loader:主引导程序,启动操作系统的一段代码,占446个字节

  • DPT:占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中

  • Magic Number:结束标志,占2个字节,固定为0xAA55或0x55AA,这取决于处理器类型,如果是小端模式处理器(如Intel系列),则该值为0xAA55;如果是大端模式处理器(如Motorola6800),则该值为0x55AA

可查看:

[root@CentOS6 ~]# hexdump -C -n 512 /dev/sda | tail -10
00000170  00 be 93 7d e8 2a 00 eb  fe 47 52 55 42 20 00 47  |...}.*...GRUB .G|
00000180  65 6f 6d 00 48 61 72 64  20 44 69 73 6b 00 52 65  |eom.Hard Disk.Re|
00000190  61 64 00 20 45 72 72 6f  72 00 bb 01 00 b4 0e cd  |ad. Error.......|
000001a0  10 ac 3c 00 75 f4 c3 00  00 00 00 00 00 00 00 00  |..<.u...........|
000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 80 20  |............... |
000001c0  21 00 83 9f 06 19 00 08  00 00 00 40 06 00 00 9f  |!..........@....|
000001d0  07 19 82 b4 56 1e 00 48  06 00 00 00 40 00 00 b4  |....V..H....@...|
000001e0  57 1e 83 fe ff ff 00 48  46 00 00 b8 f9 05 00 00  |W......HF.......|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200

注:如果没有“55AA”,该分区会被认为是裸分区!!

裸设备(raw device):也叫裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊块设备文件。由应用程序负责对它进行读写操作。不经过文件系统的缓冲。它是不被操作系统直接管理的设备。这种设备少了操作系统这一层,I/O效率更高。不少数据库都能通过使用裸设备作为存储介质来提高I/O效率。 裸分区只能够使用dd来进行备份。

2.分区类型

  • 主分区与活动分区:也被称为主磁盘分区,是磁盘分区的一中类型,其主要作用是用来安装操作系统。一个硬盘最多可创建4个主分区。活动分区是基于主分区的,磁盘分区中的任意主分区都可以设置为活动分区。如果电脑上4个主分区都安装了不同的系统,那被标记为活动分区的主分区将用于初始引导,即启动活动分区内安装的系统。

  • 扩展分区与逻辑分区:因为主分区最多可以创建4个,我们需要使用扩展分区打破4的限制。在磁盘上可以创建多个逻辑分区而创建的这些逻辑分区都被称为扩展分区,您可以用主分区和逻辑分区中储存数据,但是不能用扩展分区储存,因为扩展分区是我们对逻辑分区的总称,只是一中称呼。

注:主分区的个数小于等于4个,扩展分区个数最多为一个。

3.GPT分区

GPT:GUID patition table 支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block),使用128位UUID 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位,UEFI(统一扩展固件接口)硬件支持GPT,结构如下图所示:

UUID与GUID:

UUID (Universally Unique Identifier)是一个由4个连字号(-)将32个字节长的字符串(32个十六进制数)分隔后生成的字符串(8-4-4-4-12),总共36个字节长。比如:550e8400-e29b-41d4-a716-446655440000 GUID 是微软对UUID这个标准的实现。UUID是由开放软件基金会(OSF)定义的。UUID还有其它各种实现,不止GUID一种。比如我们这里在Java中用到的。

UUID的生成:由当前系统时间+其他内容,组合生成,所以一般不会有重复。

随机生成:

[root@CentOS6 ~]# uuidgen
c38577b6-e369-4825-b09a-caf6f44b6e3f

五、管理磁盘分区

1.fdisk命令Linux分区表操作工具软件

fdisk - Partition table manipulator for Linux    

SYNOPSIS
       fdisk [-uc] [-b sectorsize] [-C cyls] [-H heads] [-S sects] device

子命令说明:

m:显示帮助信息 
p: 显示当前硬件的分区,包括没保存的改动
n: 创建新分区,e: 扩展分区,p: 主分区
d: 删除一个分区
w: 保存退出
q: 不保存退出
t: 修改分区类型
l: 显示所有支持的分区类型

实例:

[root@CentOS6 ~]# fdisk -l /dev/sda1  #列出分区信息

Disk /dev/sda1: 209 MB, 209715200 bytes
255 heads, 63 sectors/track, 25 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

     Device Boot      Start         End      Blocks   Id  System

2.lsblk命令列出所有块设备

[root@CentOS6 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1  3.7G  0 rom  
sda      8:0    0   50G  0 disk 
├─sda1   8:1    0  200M  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0 47.8G  0 part /
sdb      8:16   0   50G  0 disk 
└─sdb1   8:17   0   20G  0 part 
sdc      8:32   0   20G  0 disk 
├─sdc1   8:33   0  9.2G  0 part 
└─sdc2   8:34   0  3.9G  0 part

3.partx、partprobe、kpartx命令:通知内核重读设备的分区表

centos5,7:

partprobe /dev/DEVICE

CentOS 6 通知内核重读指定设备的分区表:

# partx -a /dev/DEVICE
# kpartx -af /dev/DEVICE
-l: 列出指定设备的分区信息

验证是否执行成功:

[root@CentOS6 ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0   52428800 sda
   8        1     204800 sda1
   8        2    2097152 sda2
   8        3   50125824 sda3
   8       16   52428800 sdb
   8       17   20980858 sdb1
   8       32   20971520 sdc
   8       33    9638968 sdc1
   8       34    4024282 sdc2
 253        0    9638968 dm-0
 253        1    4024282 dm-1

4.parted命令:管理磁盘分区

格式:

parted [options] [device [command [options...]...]]

打印分区详情:

[root@CentOS6 ~]# parted /dev/sdc print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos  #MBR分区类型

Number  Start   End     Size    Type     File system  Flags
 1      32.3kB  9870MB  9870MB  primary
 2      9870MB  14.0GB  4121MB  primary
 3      14.0GB  21.5GB  7477MB  primary

新建分区:

[root@CentOS6 ~]# parted /dev/sdb mkpart primary 2 200 #默认单位M
Warning: You requested a partition from 2000kB to 200MB.                  
The closest location we can manage is 21.5GB to 21.5GB.
Is this still acceptable to you?
Yes/No? y                                                                 
Warning: The resulting partition is not properly aligned for best performance.

Ignore/Cancel? i                                                          
Information: You may need to update /etc/fstab.

删除分区:

[root@CentOS6 ~]# parted /dev/sdb rm 2
Information: You may need to update /etc/fstab.

列出所有分区:

[root@CentOS6 ~]# parted -l
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  211MB   210MB   primary  ext4            boot
 2      211MB   2358MB  2147MB  primary  linux-swap(v1)
 3      2358MB  53.7GB  51.3GB  primary  ext4

...

设置分区表类型:

[root@CentOS6 ~]# parted /dev/sdb mklabel gpt #gpt换位msdos则为MBR类型
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? y                                                                 
Information: You may need to update /etc/fstab.

5.gdisk命令:gpt分区表管理

注:gdisk与fdisk相似用来管理GPT分区表。

6.mknod命令:创建块设备文件或字符设备文件

格式:

mknod [OPTION]... NAME TYPE [MAJOR MINOR]

常用选项:

-m:设置权限
-Z:设置安全的上下文

实例:

[root@bash ~]# mknod -m 600 /dev/mysdev b 65 0  
#创建块设备制定权限为600,主设备号65,次设备号0

[root@bash ~]# ll /dev/mysdev 
brw------- 1 root root 65, 0 Feb  6 09:25 /dev/mysdev

补充:

添加硬盘不重启让内核识别命令:

[root@CentOS6 ~]# echo "- - -" > /sys/class/scsi_host/host2/scan