Linux磁盘管理

磁盘的外部结构

什么是并口、串口

串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口(SerialInterface)是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。

并口一般指并行接口。并行接口,指采用并行传输方式来传输数据的接口标准。从最简单的一个并行数据寄存器或专用接口集成电路芯片如8255、6820等,一直至较复杂的SCSI或IDE并行接口,种类有数十种。一个并行接口的接口特性可以从两个方面加以描述:1.以并行方式传输的数据通道的宽度,也称接口传输的位数;2.用于协调并行数据传输的额外接口控制线或称交互信号的特性。数据的宽度可以从1~128位或者更宽,最常用的是8位,可通过接口一次传送8个数据位。在计算机领域最常用的并行接口是通常所说的LPT接口。

  1. 两者定义不同:并口线即并行接口使用的线路,并行接口指采用并行传输方式来传输数据的接口标准。串口线即简称串行接口使用的线路,串行接口也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。

  2. 接口特点不同:串口线的特点是可以在数据位传送,按位顺序进行,最少只需一根传输线即可完成;成本低但传送速度慢。并口线在数据的各位同时进行传送,其特点是传输速度快,但当传输距离较远、位数又多时,就导致通信线路复杂且成本提高。

  3. 分类不同:并口线在IEEE1284标准中定义了多种并行接口模式,常用的有以下三种:SPP(Standard Parallel Port)标准并行接口、EPP(Enhanced Parallel Port)增强并行接口、ECP(Extended Capabilities Port)扩展功能并行接口。串口线分为同步串行接口和异步串行接口,同步串行接口(SynchronousSerialInterface,SSI)是一种常用的工业用通信接口异步串行接口是指UART(Universal Asynchronous Receiver/Transmitter),通用异步接收/发送。

SATA是串口为何速度比IDE并口还快?

计算机系统的信息交换有两种方式:并行数据传输方式和串行数据传输方式。并行数据传输是以计算机的字长,通常是8位、16位、32位为传输单位,一次传送一个字长的数据。它适合于外部设备与CPU之间近距离信息交换。在相同频率下,并口传输的效率是串口的几倍。

但随着传输频率的提高,并行传输线中信号线与信号线之间的串扰越加明显,所以这也制约了并行通讯传输频率的提高(达到100MHz已经是很难了)。而串行通信则不然,信号线只有一根(或两根),没有串扰(或不明显),所以传输频率可以进一步提高,足够可以将传输速度超过并行通讯。所以说你说的“传输数据并行比串行快”这句话严格来说是不准确的。

串口硬盘的速度为什么比硬盘快呢?因为串口干扰少,随着速度的提高,并口的信号之间相互干扰增加,到一定程度以后并行传输就不能得到正确的数据了。80通道的ATA100的并口硬盘数据线的一半,40根是地线,是用来防止并行信号之间的互相干扰的。

SATA I的硬盘理论上传输速度可以到150M/s,而IDE133的是133M/s,但是由于磁盘的机械部分都是一样的读取方式,使得磁盘内部的传输速度几乎没有什么变化。所以整体看速度变化不是特别明显。单块硬盘的速度在40~60M/s之间,双硬盘组成RAID0阵列读写速度可以达到100M/s以上。读写速度上会有明显的增加。

机械硬盘外部结构

IDE(并口)硬盘

Integrated Drive Electronics,电子集成驱动器。它的本意是指把“硬盘控制器”与“盘体”集成在一起的硬盘驱动器。把盘体与控制器集成在一起的做法减少了硬盘接口的电缆数目与长度,数据传输的可靠性得到了增强,硬盘制造起来变得更容易,因为硬盘生产厂商不需要再担心自己的硬盘是否与其它厂商生产的控制器兼容。对用户而言,硬盘安装起来也更为方便。IDE这一接口技术从诞生至今就一直在不断发展,性能也不断的提高,其拥有的价格低廉、兼容性强的特点,为其造就了其它类型硬盘无法替代的地位。

IDE代表着硬盘的一种类型,但在实际的应用中,人们也习惯用IDE来称呼最早出现IDE类型硬盘ATA-1,这种类型的接口随着接口技术的发展已经被淘汰了,而其后发展分支出更多类型的硬盘接口,比如ATAUltra ATADMAUltra DMA等接口都属于IDE硬盘。 平常所说的IDE接口,也称之为ATA接口。ATA的英文拼写为“Advanced Technology Attachment”,含义是“高级技术附加装置”。

SCSI硬盘

SCSI的英文全称为“Small Computer System Interface”(小型计算机系统接口),是同IDE(ATA)完全不同的接口,IDE接口是普通PC的标准接口,而SCSI并不是专门为硬盘设计的接口,是一种广泛应用于小型机上的高速数据传输技术。SCSI接口具有应用范围广、多任务、带宽大、CPU占用率低,以及热插拔等优点,但较高的价格使得它很难如IDE硬盘般普及,因此SCSI硬盘主要应用于中、高端服务器和高档工作站中。

SATA(串口)硬盘

SATA是Serial ATA的缩写,即串行ATA。这是一种完全不同于并行ATA的新型硬盘接口类型,由于采用串行方式传输数据而得名。SATA总线使用嵌入式时钟信号,具备了更强的纠错能力,与以往相比其最大的区别在于能对传输指令(不仅仅是数据)进行检查,如果发现错误会自动矫正,这在很大程度上提高了数据传输的可靠性。串行接口还具有结构简单、支持热插拔的优点。

与并行ATA相比,SATA具有比较大的优势。首先,Serial ATA以连续串行的方式传送数据,可以在较少的位宽下使用较高的工作频率来提高数据传输的带宽。Serial ATA一次只会传送1位数据,这样能减少SATA接口的针脚数目,使连接电缆数目变少,效率也会更高。实际上,Serial ATA 仅用四支针脚就能完成所有的工作,分别用于连接电缆、连接地线、发送数据和接收数据,同时这样的架构还能降低系统能耗和减小系统复杂性。其次,Serial ATA的起点更高、发展潜力更大,Serial ATA 1.0定义的数据传输率可达150MB/sec,这比目前最块的并行ATA(即ATA/133)所能达到133MB/sec的最高数据传输率还高,而在已经发布的Serial ATA 2.0的数据传输率将达到300MB/sec,最终Serial ATA 3.0将实现600MB/sec的最高数据传输率。

SAS(串口SCSI)

SAS(Serial Attached SCSI)即串行连接SCSI,是新一代的SCSI技术,和现在流行的Serial ATA(SATA)硬盘相同,都是采用串行技术以获得更高的传输速度,并通过缩短连结线改善内部空间等。SAS是并行SCSI接口之后开发出的全新接口。此接口的设计是为了改善存储系统的效能、可用性和扩充性,并且提供与SATA硬盘的兼容性。

SAS的接口技术可以向下兼容SATA。具体来说,二者的兼容性主要体现在物理层和协议层的兼容。在物理层,SAS接口和SATA接口完全兼容,SATA硬盘可以直接使用在SAS的环境中,从接口标准上而言,SATA是SAS的一个子标准,因此SAS控制器可以直接操控SATA硬盘,但是SAS却不能直接使用在SATA的环境中,因为SATA控制器并不能对SAS硬盘进行控制;在协议层,SAS由3种类型协议组成,根据连接的不同设备使用相应的协议进行数据传输。其中串行SCSI协议(SSP)用于传输SCSI命令;SCSI管理协议(SMP)用于对连接设备的维护和管理;SATA通道协议(STP)用于SAS和SATA之间数据的传输。因此在这3种协议的配合下,SAS可以和SATA以及部分SCSI设备无缝结合。

SSD固态硬盘外部结构

SATA

MSATA

M.2

M.2用于取代MSATA的新的接口,他又两种表现形式:

PCI-E

磁盘的内部结构

机械盘的内部结构

  1. 一块硬盘一般包含3-5个盘片,主要用来数据存储

  2. 盘片的两面都存储数据(光盘只存储一面),所有一个盘片通常对应两个磁头,分别读取正面和反面的数据

  3. 当电源关闭时,磁头将会停放在主轴周边的启动区上

  4. 磁头将会被传动臂带动做径向运动,也就是机械运动,对盘片进行读写。而传动臂是由步进电机驱动的

  5. 主轴会带动磁盘进行旋转,这样磁头就可以访问每个盘片的每个位置,进行数据读写

  6. 磁头不会与盘片直接接触,主轴旋转速度一般在250次/s以上,磁头的数据读取通过电磁转换进行操作

固态盘的内部结构

主要分为三个部分:

  1. 主控芯片,控制SSD正常工作

  2. 缓存芯片,缓存内存、CPU的数据

  3. 闪存颗粒,存储数据

Raid技术

廉价冗余磁盘阵列, Redundant Array of Inexpensive Disk。是一种将一块或者多块独立的物理磁盘按照不同的技术方式组合起来形成一个磁盘组,在逻辑上看起来就是一块大的磁盘阵列。比单个物理磁盘更大的存储容量或者更高的存储性能,同时又能提供不同级别数据冗余备份的一种技术。

服务器使用Raid的主要原因有:

  1. 单块磁盘的容量不够大

  2. 磁盘损坏数据丢失

  3. 磁盘速度不够快

Raid 级别

将多个物理磁盘通过不同的技术方式组成的磁盘阵列,这个不同的技术方式就称为RAID级别。Raid的级别主要有:

  • 0

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 0+1 (也称为10)

  • 53

生产环境常用的Raid级别主要有 0,1,5,10

Raid的实现方式

  1. 内置主板集成Raid控制器

  2. 通过os软件实现,也就是软Raid,性能较差(相比硬Raid相差百分之10),且操作系统容易丢失数据

磁盘分区

Linux设备文件夹为 /dev,其磁盘设备位置与命名为:

  • IDE: /dev/hda, /dev/hdb, ...

  • SCSI(SAS, SATA): /dev/sda, /dev/sdb, ...

对应设备的分区位置与命名主要为:

  • /dev/sda1,设备/dev/sda的第一个分区

  • /dev/sda2,设备/dev/sda的第二个分区

查看每个块的UUID:

root@nas:~# blkid
/dev/mapper/ubuntu--vg-ubuntu--lv: UUID="0eae6bfd-896c-4073-bd40-6291426badb4" BLOCK_SIZE="4096" TYPE="ext4"
/dev/sda2: UUID="e64df125-fc41-4c9b-969e-ab0e3aa5501a" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="5f2d1fb6-ef8d-4e00-b7f9-c56ca745a07a"
/dev/sda3: UUID="PJHl2P-M5X8-FYne-oKD0-ODVS-x6aL-8Hd0Hc" TYPE="LVM2_member" PARTUUID="511f21f7-6d0b-46c6-9830-0a6f39119e92"
/dev/loop1: TYPE="squashfs"
/dev/sdb: PTUUID="e5f682a4-fcc6-47b9-8f06-394c286ee10e" PTTYPE="gpt"
/dev/loop4: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop0: TYPE="squashfs"
/dev/sda1: PARTUUID="7d7d05ae-3228-4249-9c17-6053977d868c"
/dev/loop5: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"

常见的磁盘分区类型

  • DOS分区表(只能用于小于2T的硬盘,或者Raid之后的硬盘)

  • GPT分区表(万能分区表)

DOS分区表

DOS分区表分为三个部分:

  1. 主分区(Primary)

    1. 是系统中必须存在的分区,系统盘一般会选择主分区安装系统

    2. 分区编号只能是1-4,比如 sda1, sda2, sda3, sda4

    3. 主分区最多为四个

  2. 扩展分区

    1. 类似一个独立的小磁盘,拥有独立的分区表,不能直接存储数据

    2. 必须在扩展分区中建立逻辑分区才能存放数据

    3. 分区编号占用主分区的编号,在2-4之间

    4. 最多只能有一个,也可以没有

    5. 主分区+扩展分区最多四个

  3. 逻辑分区

    1. 不能独立存在,必须建立在扩展分区上

    2. 编号必须大于5,不可能小于5

    3. 逻辑分区一般用于存放数据

假设有一块SAS银盘,需要将其分为6个区,那么他的可选的方式以及分区编号为:

1P+1E(5L)       sda1, sda5, sda6, sda7, sda8, sda9
2P+1E(4L)       sda1, sda2, sda5, sda6, sda7, sda8
3P+1E(3L)       sda1, sda2, sda3, sda5, sda6, sda7

磁盘分区原理

  1. 修改的是磁盘的分区表(DPT),没有改变磁盘数据

  2. 分区表的位置位于0磁道、0柱面、扇区的前446字节接下来的64字节

  3. fdisk分区工具本质就是修改这64字节

64字节分为16字节四个部分,每个部分存储了这个分区的元数据:

16字节中每个字节的含义,从上到下:

字节数字段说明

1Bytes

State

分区状态,0=未激活 0x80=激活

1Bytes

StateHead

分区起始磁头号

2Bytes

StartSC

起始6位为扇区号,剩余的10位为柱面号

1Bytes

Type

分区类型,0x0b=FAT32,0x83=Linux,00代表未启用

1Bytes

EndHead

分区结束的磁头号

2Bytes

EndSC

分区结束扇区和柱面号

4Bytes

Relative

线性寻址方式下分区相对扇区地址(对于基本分区即为绝对地址)

4Bytes

Sectors

分区大小,也就是总扇区数

磁盘分区工具

  1. fdisk,适合小于2T的磁盘分区,适合MBR分区表、DOS分区表

  2. parted,gdisk,适合GPT格式的分区表

使用中如果磁盘小于2T,使用fdisk即可,如果大于2T,使用parted,gdisk。

fdisk 分区管理

适合小于2T的磁盘分区,适合MBR分区表、DOS分区表。

连接一块新的硬盘,然后重启。

# 查看当前操作系统的分区信息,找到未被分区的新的磁盘
fdisk -l

# 对磁盘进行分区
fdisk /dev/sdb

# 使用m查看帮助
Help:

  GPT
   M   enter protective/hybrid MBR

  Generic
   d   delete a partition                   # 删除分区
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition                  # 添加新的分区
   p   print the partition table            # 打印分区表
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu                      # 帮助信息
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit         # 保存并退出
   q   quit without saving changes          # 退出不保存

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table

# 分区,一个主分区, 一个扩展分区包含三个逻辑分区  1P+1E(3L)
Command (m for help): n                       # 创建分区
Partition number (1-128, default 1): 1        # 分区号
First sector (34-1953525134, default 2048): 2048  # 分区开始位置
# 分区容量
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1953525134, default 1953525134): +100G

Created a new partition 1 of type 'Linux filesystem' and of size 100 GiB.
Partition #1 contains a VMFS_volume_member signature.

Do you want to remove the signature? [Y]es/[N]o: Y

The signature will be removed by a write command.

Command (m for help): p

Disk /dev/sdb: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: HGST HTS541010B7
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: E5F682A4-FCC6-47B9-8F06-394C286EE10E

Device     Start       End   Sectors  Size Type
/dev/sdb1   2048 209717247 209715200  100G Linux filesystem

Filesystem/RAID signature on partition 1 will be wiped.

Command (m for help): n
Partition number (2-128, default 2): 5
First sector (209717248-1953525134, default 209717248):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (209717248-1953525134, default 1953525134): +200G

Created a new partition 5 of type 'Linux filesystem' and of size 200 GiB.

Command (m for help): p
Disk /dev/sdb: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: HGST HTS541010B7
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: E5F682A4-FCC6-47B9-8F06-394C286EE10E

Device         Start       End   Sectors  Size Type
/dev/sdb1       2048 209717247 209715200  100G Linux filesystem
/dev/sdb5  209717248 629147647 419430400  200G Linux filesystem

Filesystem/RAID signature on partition 1 will be wiped.

Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

# 通知内核分区表发生变更
root@nas:/# partprobe /dev/sdb

# 使用lsblk可以查看所有的分区
root@nas:/# lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0    20G  0 disk
├─sda1                      8:1    0     1M  0 part
├─sda2                      8:2    0   1.8G  0 part /boot
└─sda3                      8:3    0  18.2G  0 part
  └─ubuntu--vg-ubuntu--lv 253:0    0    10G  0 lvm  /
sdb                         8:16   0 931.5G  0 disk
└─sdb1                      8:17   0   100G  0 part

gdisk 分区管理

大于2T的磁盘分区管理,适合GPT格式的分区表

parted 分区管理

大于2T的磁盘分区管理,适合GPT格式的分区表

格式化

对分区格式化,格式化后才可以挂载,可以不分区直接对磁盘进行格式化,然后挂载。

格式化的本质是在磁盘中创建文件系统,是组织文件以及目录的方式。当前Centos的文件系统为 XFS,较早版本的Linux都是Ext文件系统(Ext2 3 4)。

# mkfs 命令的主要参数
# -b 设置数据区块占用空间大小,目前支持1024、2048、4096 bytes每个块,默认为4k。是存放数据的最小单元
# -t 设置文件系统,可以是 ext4或者xfs
# -i 设置inode的大小,默认256字节,inode主要用于存储文件属性(权限、文件类型、文件组)
# -N 设置inode的数量,防止indode数量不够,导致磁盘空间不足
# 格式化分区sdb1
mkfs.xfs /dev/sdb1
# 或者
mkfs -t xfs /dev/sdb1

# 格式化整个磁盘
mkfs.xfs /dev/sdb

挂载到文件系统

将目标设备挂载到指定的目录中:

root@nas:/# mkdir /mnt/nfs-data
root@nas:/# mount /dev/sdb /mnt/nfs-data

系统盘扩容

Ubuntu下系统盘扩容

分配磁盘大小增加后,需要通过如下命令扩容系统盘:

df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              393M  2.7M  390M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   18G  3.1G   14G  18% /
tmpfs                              2.0G     0  2.0G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          1.8G  127M  1.5G   8% /boot

其中 /dev/mapper/ubuntu--vg-ubuntu--lv就是系统盘,也就是 /

将这个设备所有的空余的磁盘空间都分给系统盘:

lvextend -l +100%free /dev/mapper/ubuntu--vg-ubuntu--lv

重新计算文件系统大小:

resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

最后更新于