磁盘存储

磁盘存储

机械硬盘的原理,分区类型,磁盘管理工具

设备文件

  • Linux上一切皆文件,包括硬盘,网卡…

  • 文件一般包含:open(),read(),write(),close()

  • 设备类型:
    (1)块设备:block,存取单位:block,典型的块设备:磁盘
      特性①访问单位:block 512B或4K ;块设备的存/取都是以块为单位进行的,若读取一个字节数据,进行的操作是先将所要读取的block读至内存中,然后由CPU进行处理,CPU可以一个一个进行处理,磁盘的存取均是一块为最小单位的。
      特性②随机读写:块设备的读写是随机的
      特性③支持缓存:块设备支持缓存,缓存可加速读取

    (2)字符设备:char,存取单位:字符 ,典型的字符设备:键盘
      特性①访问单位:char
      特性②顺序读写
      特性③无缓存

  • 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信

  • 设备号码:
    主设备号:major number,标识设备类型
    次设备号:minor number,标识同一类型的不同设备
    注意: Linux上主次设备号相同就表示同一设备

可使用mknod - 创建设备
mknod 设备名  设备类型  主设备号  次设备号
    [root@centos7 test]# ll /dev/sr0
    brw-rw----+ 1 root cdrom 11, 0 Aug  2 18:03 /dev/sr0
    [root@centos7 test]# mknod /dev/cd   b  11  0 
    [root@centos7 test]# ll /dev/cd
    brw-r--r-- 1 root root 11, 0 Aug  8 13:41 /dev/cd
    [root@centos7 test]# mount /dev/cd /data/test/
    [root@centos7 data]# ls -n1 test/
.... /dev/cd内容部分显示
/dev/cd和光盘内容一样,/dev/cd 与/dev/sr0 为同一设备
    drwxr-xr-x 3 0 0    2048 Nov 26  2018 images
    drwxr-xr-x 2 0 0    2048 Nov 26  2018 isolinux
    drwxr-xr-x 2 0 0    2048 Nov 26  2018 LiveOS
    drwxrwxr-x 2 0 0 1656832 Nov 25  2018 Packages
  • 硬盘接口类型:
    并行:
      IDE:133MB/s
      SCSI:640MB/s
    串口:
      SATA:6Gbps
      SAS:6Gbps
      USB:480MB/s

  • 设备命名:
    1)centos版本差异:
    centos5及之前版本将IDE接口的硬盘命名为:/dev/hd
      其余类型接口命名为:/dev/sd
      光盘在5版本上被命名为:/dev/hdc
    centos6开始:所有接口类型的硬盘统一命名为:/dev/sd
      光盘被命名为:/dev/sr0
    2)设备命名
      磁盘设备的设备文件名:/dev/DEVICENAME
      SCSI,SATA,SAS,IDE,USE:/dev/sd
      虚拟磁盘:/dev/vd(kvm),/dev/xvd
      不同磁盘标识:a-z,aa,ab…
        /dev/sda,/dev/sdb,…
      同一设备上的不同分区:1,2,3…
        /dev/sda1,/dev/sda2…

机械硬盘和固态硬盘

  • 机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤

  • 固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致

  • 相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍

  • 相较于SSD,HDD在价格、容量占有绝对优势

  • 机械硬盘故障数据可恢复,固态硬盘损坏,数据不可恢复,硬盘损坏很常见,因此备份必不可少,而在存储数据方面,一般选择机械硬盘,固态硬盘目前不能完全取代机械硬盘

  • Linux中机械硬盘与固态硬盘如何区分?
    Linux中有一个标识可以区分机械硬盘与固态硬盘:
      查看/dev/sda硬盘类型
      cat /sys/block/sda/queue/rotational
       1 – 机械硬盘
       0 – 固态硬盘
       rotational – 是旋转,转速之意

机械硬盘的结构

  • 硬盘存储的术语:
    head:磁头
    track:磁道
    sector:扇区,512bytes
    cylinder:柱面

  • 机械硬盘结构

磁盘存储

CHS前期的扇区划分:
磁盘存储
CHS采用24bit寻址
特点:track=sector
前10bit cylinder
中间8bit head
后面6bit sector
cylinder - head - sector 硬盘三围
因此磁盘总空间 = cylinder * head * sector * 512 = 8G

最大寻址空间即磁盘总容量为8G
CHS的缺点:CHS的寻址空间最大为8G,在磁盘容量大于8G时,CHS不适用

后期扇区划分 :ZBR(Zoned Bit Recording)
磁盘存储
LBA(logical block addressing)只关心扇区
  LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址
  ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定
义的28位LBA上限达到128 GiB。2002年ATA-6规范采用48位LBA,同样以
每扇区512位组计算容量上限可达128 Petabytes

  • 根据硬盘的结构,可实现加速IO访问的优化方式
    ①从物理角度:将机械硬盘换成固态硬盘?
    ②从物理角度:机械硬盘的转速、缓存
    ③数据在机械硬盘存放的位置:数据存放至连续的空间,即同一柱面,访问较快
    ④放置于标号较小的柱面,即磁盘靠外;相同时间内,在靠外圈的柱面读取速率较快

机械硬盘的使用

  • 磁盘分区,为什么磁盘要分区?
    优化IO性能
    实现磁盘空间配额限制
    提高修复速度
    隔离操作系统和程序
    安装多个操作系统
    采用不同的文件系统

  • 磁盘分区方式有两种:MBR,GPT

MBR分区方式

  • 1)MBR:Master Boot Record (主引导记录)

  • 2)MBR分区特点:
      ①使用32位表示扇区数
      ②分区不超过2T
      ③按柱面进行分区
      ④主分区+扩展分区最多4个
      ⑤分区信息无备份,分区信息被破坏,即使硬盘数据犹在也无法访问

  • 3)0磁道0扇区:512 bytes
      446 bytes :boot loader
       64 bytes : 分区表,16位标识一个分区
       2 bytes :55AA 此位有标识,表示磁盘分区

  • 4)MBR分区结构
    磁盘存储
      硬盘主引导记录MBR由4个部分组成
      主引导程序(偏移地址0000H–0088H),它负责从活动分区中装载,并运行系统引导程序
      出错信息数据区,偏移地址0089H–00E1H为出错信息,00E2H–01BDH全为0字节
      分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH–01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4
      结束标志字,偏移地址01FE–01FF的2个字节值为结束标志55AA

GPT分区方式

  • 1)GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z( 512Byte/block )64Z ( 4096Byte/block)

  • 2)使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位

  • 3)UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使操作系统启动

磁盘存储

EFI部分又可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区、备份区域

管理分区

  • 列出块设备
    lsblk
    cat /proc/partitions
      这两个命令均是查看内存分区信息,在刚执行完分区操作时,内存中的分区表未同步磁盘分区表时,上述两个命令查看的分区并不精确

  • 创建分区使用:
    fdisk:创建MBR分区
    gdisk:创建GRT分区
    parted:高级分区操作,既可以创建MBR分区,又可以创建GRT分区

  • 重新设置内存中的内核分区表版本
    partprobe

fdisk

  • fdisk - 管理小于2T的硬盘,擅长管理MBR分区;超过2T必须采用GPT分区方式

  • 对GPT的兼容性不是特别好,目前不建议使用fdisk管理GPT分区

  • fdisk 交互式命令,其对硬盘分区时,只在内存中保存,在w之前,均可以撤销。

  • 注意: fdisk其后是对硬盘进行分区,不要fdisk /dev/sda1不要对分区再分区,这样fdisk不会报错,但操作无效。

  • fdisk 命令选项:
    fdisk -l[u]:查看磁盘分区信息(查看的磁盘分区信息,不是内存中分区信息)

  • fdisk DEVICE 管理分区
    子命令:
      p 分区列表
      t 更改分区类型
      n 创建新分区
      d 删除分区
      v 校验分区
      u 转换单位
      w 保持并退出
      q 不保存退出

fdisk进行分区操作:
磁盘存储

查看MBR信息:
磁盘存储
可见boot loader 中全部是0,表示为非活动,说明boot loader上没有系统引导的相关文件,做数据盘,和操作系统无关。其中白色高亮部分是分区表信息,4个主分区表信息。扩展分区信息在扩展分区自己里面存放的分区信息。

删除分区:
磁盘存储
注意: 在管理硬盘分区时,尽量不要写设备名,因为设备名在删除时会发生变化,尤其是在配置文件中,不要写设备名。当删除设备时设备发生改变,可能导致服务出现问题。

centos6和centos7使用fdisk
磁盘存储
centos7 分区以扇区为单位,centos7设计得更加完善和精确。
centos6 分区以柱面为单位,以柱面为单位分区就会存在柱面中间有剩余的空间未使用,若选择默认分区时,有时可能会掉坑中~~,分区大小很小并且不能选择。

centos6上以柱面为单位,柱面会出现跨分区情况:磁盘存储

gdisk

  • gdisk - 用于GPT分区表格磁盘的分区或查询

  • 用法与fdisk一致;此处不再累述

parted

  • parted - 管理分区,既能交互式方式,又能非交互式方式运行

  • 注意: parted的操作都是实时生效的,小心使用

  • 支持msdos和gpt,可以支持大硬盘,也可支持小硬盘

  • parted选项:
    parted /dev/sdb mklabel gpt|msdos
    parted /dev/sdb print
    parted /dev/sdb rm 1
    parted -l 列出分区信息
    parted mkpart part-type [fs-type] start end

  part-type:btrfs, ext2, ext3, ext4, fat16, fat32, hfs, hfs+, linux-swap, ntfs, reiserfs ,xfs.
  [fs-type] :在MBR中为primary 主分区
  start end :从开始到结束,默认是字节(MB)

  • parted 可以写在脚本中,批量创建分区

parted交互式操作:
磁盘存储
parted查看磁盘信息
磁盘存储
parted创建标签,即采取哪种分区方式:
磁盘存储
查看标签:
磁盘存储
可以看到/dev/sdb前512个字节的信息,最后两个字节存在:55AA
55AA表示分区已存在
当然采用GPT分区方式时,/dev/sdb在前512字节的最后两个字节:55AA

创建分区:
磁盘存储

在VMware中添加新磁盘后扫描:
    echo '- - -' > /sys/class/scsi_host/host0/scan
    echo '- - -' > /sys/class/scsi_host/host1/scan
    echo '- - -' > /sys/class/scsi_host/host2/scan

同步分区表

  • 查看内核是否已经标识新的分区:
    cat /proc/partations

  • centos 6 通知内核重新读取硬盘分区表
    1)新增分区:
    partx -a /dev/sd*
    kpartx -a /dev/sd* -f: force
    2)删除分区:
    partx -d --nr M_N /dev/sd*
    3)
    centos 6 使用partprobe 没有作用。

  • centos 5 和centos 7 使用partprobe
    partprobe [/dev/sd*]

上一篇:如何在ubuntu 8.10 server上使用usb大硬盘


下一篇:fdisk语法