磁盘管理

磁盘管理

懒惰的文字搬运工。

一、磁盘基础概念

  对文件操作指令

    open() read() write() close()

 

  设备号码:

    主设备号:major     标识设备类型

    次设备号:minor     在同一设备类型设备下区分不同设备

    如果主设备号和次设备号一致,说明两者就是同一个设备。即使文件的INODE不一样也是同一个设备

  硬盘接口及速率

    IDE        133MB/S          并口

    SCSI      640MB/S          并口

    STAT     6Gbps等同于768MB/S    串口

    SAS       6Gbps等同于768MB/S    串口

    USB       480MB/S

    M.2     450MB/s

      NVME  3200 MB/s

    注意,速度不单单是由接口决定了。

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

    串口接口:同一线缆只能接一个设备

 

  服务器硬盘大小:

    LFF 3.5寸,早期都是这种。和普通家用电脑一样

    SFF 2.5寸,不同与2.5英寸的笔记本硬盘

 

  机械硬盘:

    生产中一般都是用机械硬盘。容量大,性价比高。由磁头、机械臂、盘片组成

        磁头: header     磁头数=盘面数

        磁道: cylinder      磁道数=柱面数  

        扇区: secotr 512字节

    在centos7及以后版本就不在按照柱面划分分区了,而以扇区作为划分分区的单位,更加精细化。

    centos5\6还是以柱面为单位进行划分分区

    机械硬盘转速 5400 7200 10000 15000 RPM 每分钟转多少圈

 

  寻址方式:

    CHS: 早先方式,已经淘汰

      CHS的意思就是先确认柱面(Cylinder),再确认磁头(Header),最后确认扇区(Sector)。先柱面再磁头再扇区

      CHS采用24位寻址

        其中前10位表示磁道,中间8位表示磁头,后6位表示扇区

             2^10*2^8*2^6=1024*256*64=16,777,216

      磁盘最大容量:

            16,777,216*512=8,589,934,592‬=8,388,608‬K=8,192M=8G

 

    LBA:

      LBA是一个整数,通过转换成CHS格式继续完成磁盘具体寻址

        ATA-1规范采用28位LBA,同样每个扇区512字节。最大128GB

        ATA-6规范采用48位LBA,同样每个扇区512字节。最大128PB

      最大寻址个数:2^48

      磁盘最大容量:2^48*512=131,072‬T=128P

 

    磁道号越小,速度越快。磁道号越大,速度越快。

    访问数据的时间=寻道的时间 + 盘片转圈的时间 + 起头读数据的时间

          也可以把盘片转圈的时间算到寻道的时间内

 

  硬盘的命名

    centos5中: IDE 称为 hd## hda1 hda2 hdb1 hdc1...

          STAT称为 sd## sda1 sda2 sdb1 sdb2...

          USB 称为 sd## sda1 sda2 sdb1 sdb2...

          SAS 称为 sd## sda1 sda2 sdb1 sdb2...

          SCSI称为 sd## sda1 sda2 sdb1 sdb2...

    centos6\7\8中: 无论IDE还是STAT SCSI SAS都称为sd##

 

二、磁盘分区:

(一)、添加硬盘

  查看硬盘的方式:

    cat  /proc/partitions     查看内存中的分区表信息

    ll  /dev/sd*          查看内存中的设备信息

    lsblk             查看内存中的设备分区信息

    fdisk  -l           查看硬盘中的分区信息

 

  在不关机重启的下识别硬盘

    echo '---' > /sys/class/scsi_host/host0/scan

        其中host0可以改成host1 host2 host3 host4

        其中scsi_host标识是scsi接口类型的磁盘

    小技巧:可以定义成别名

        alias scandisk='echo '\''- - -'\'' > /sys/class/scsi_host/host2/scan;echo '\''- - -'\'' > /sys/class/scsi_host/host0/scan' #表示数字0-n

 

  判断硬盘类型:

    lsblk -d -o name,rota 1  表示机械硬盘 0表示固态硬盘

        -f   可以显示对应的文件系统

    cat /sys/block 1  表示机械硬盘 0表示固态硬盘

 

(二)、分区介绍

  磁盘分区格式化分为低级格式化和高级格式化。

    低级格式化主要是磁盘生产厂商再磁盘出厂时进行的,主要时划分磁道,生成簇。

    高级格式化主要是用来创建文件系统。

 

  分区的优势:

      优化I/O性能

      实现磁盘空间配额限制

      提高修复速度

      隔离系统和程序

      安装多个OS

      采用不同文件系统

 

  查看分区信息

      cat /proc/partitions     查看内存中的分区表信息

      ll /dev/sd*          查看内存中的设备信息

      lsblk            查看内存中的设备分区信息

      fdisk -l           查看硬盘中的分区信息

 

  现在磁盘分区格式有两种类型,一种是早期的MBR类型,一种是现在较为流行的GPT类型。

  MBR类型:

    MBR,又称为主引导记录(Master Boot Record),位于0柱面,0磁头,0扇区当中。使用了32位二进制来表示扇区数。也就是最大只能支持2TB大小的磁盘。

    该扇区共计512字节,分成三个部分。

    第一部分:前446字节,用来存放操作系统引导程序(bootloader),这是引导某个分区上的操作系统起来的第一段程序。

    第二部分:后64字节,用来存放分区表。每16个字节标识一个主分区,一共可以标识4个主分区。

      其中每个分区16个字节介绍:

          第1个字节:引导标志,十六进制80表示活动分区,00表示非活动分区。在一个硬盘上只能由一个活动分区,标识此分区上存在操作系统。

            第2~4个字节:描述了分区起始位置的磁头号,柱面号,扇区号。其中第2个字节的8位标识起始磁头号,第3个字节低6位标识起始扇区号,第3个字节高2位和第4个字节的8位标识起始柱面号。这3个字节也就是分区起始位置的CHS描述方法

          第5个字节:分区类型,0标识分区未使用。83表示linux类型分区,82表示swap分区,8e表示LVM逻辑卷,05表示扩展分区

          第6~8个字节:描述了分区结束位置的磁头好,柱面号,扇区号。其中第6个字节的8位标识结束磁头号,第7个字节低6位标识结束扇区号,低7个字节高2位和第8个字节的8位标识结束柱面号。这3个字节也就是分区结束位置的CHS描述方法

          第9~12个字节:使用LBA方式描述了分区的起始位置。

          第13~16个字节,使用LBA方式描述了分区的结束位置。

     

    第三部分:最后2个字节,有效标识位,55AA表示分区表有效。

 

    如果4个分区不够使用,可以拿出一个主分区来扩展使用,变成扩展分区。扩展分区的16个字节里面记录了另外一段磁盘空间,利用另外一段磁盘空间的EBR(前512字节)记录分区信息,

    其中EBR的前446字节未使用,中间64字节,最后2字节的结束表示。

    而中间64字节中,

        第一个16个字节记录了当前逻辑分区的起始位置、结束位置、磁盘类型等等,同MBR类型;

        第二个16个字节记录了下一个逻辑分区的起始位置、结束位置、磁盘类型等,同MBR

        第三个16个字节,未使用

        第四个16个字节,未使用

    这样就可以突破只能记录4个分区的限制了。同时也就解释了逻辑分区不允许中间有间隔,如果删了sda5后,后面的sda6就会自动变成sda5的原因,因为逻辑分区是靠前一个逻辑分区中的EBR记录下一个逻辑分区的起始位置的。

    MBR分区中一块硬盘最多有4个主分区或者也可以有最多3个主分区+1个扩展分区(N个逻辑分区)

 

    例如,  我们想划分出6个分区,就有下面几种可行方案

        一个主分区和五个扩展分区:1P + 5L

            sda1 + sda5 + sda6 + sda7 + sda8 + sda9

        两个主分区和四个扩展分区:2P + 4L

            sda1 + sda2 + sda5 + sda6 + sda7 + sda8

        三个主分区和三个扩展分区:3P + 3L

            sda1 + sda2 + sda3 + sda5 + sda6 + sda7

    备注:所有的逻辑分区一定是从5号开始的,前1~4可以是主分区和扩展分区。

 

 

 

  GPT类型 :

    GPT类型出来的所有类型都是主分区。GPT突破了MBR只能分4个主分区的限制,最大允许128个主分区。

    分为4个区域:EFI信息区(GPT头),分区表,GPT分区区域、备份区域。

      GPT头:前512字节为保护的MBR分区,其作用是定位分区表的位置和大小,GPT头还包括GPT头和分区表的校验和

      分区表:这个区域由GPT头定义,一般占用磁盘LBA2~LBA33号扇区,每个扇区可储存4个主分区的分区信息,所以一共可以分128个主分区。

          每个分区由起始地址、结束地址、类型值、名字、属性标志、GUID值组成。

      GPT分区区域:数据区,这个区域的起始地址和结束地址由GPT头定义。

      备份区:备份区域我i与磁盘的尾部,包含GPT头和分区表的备份。一共使用了最后的33个扇区,最后一个扇区备份GPT头,倒数第二个扇区备份LBA2的扇区内容,等等倒叙备份。

 

   老式的BIOS不支持GTP,需要使用UEFI。所以就由了两种组合

        BIOS  +  MBR

        UEFI  +  GPT

 

  BIOS和UEFI区别

    BIOS采用了16位汇编语言编写,只能运行在实模式(内存寻址方式由16位段寄存器的内容乘以16(10H)当做段基地址,加上16位偏移地址形成20位的物理地址)下,可访问的内存空间为1MB,只支持字符操作界面

    UEFI采用32位或者64位的C语言编写,突破了实模式的限制,可以达到最大的寻址空间,支持图形操作界面,使用文件方式保存信息,支持GPT分区启动,适合和较新的系统和硬件的配合使用

 

(三)、分区的相关命令

    fdisk 管理MBR分区

    gdisk 管理GPT分区

    parted 高级分区操作,可以是交互或非交互式 ,慎重使用,没有保存这一说法,直接就生效

 

  parted命令

      备注,此命令是立即生效,小心谨慎。centos6上不能使用parted命令

     pirnt           打印分区表

     mklabel [gpt|msdos]    指定卷标

    mkpart [primary] # ##     创建primary分区,大小是从第#个扇区到第##个扇区

    rm #            删除第几个分区

 

  fdisk命令

      fdisk [option] DEVICE

    查看分区信息

      fdisk -l DEVICE 查看DEVICE设备上的分区信息,DEVICE可以省略,标识列出系统所有硬盘的分区信息

    管理分区信息

      注意:管理分区时,DEVICE不能省,必须指定。

      m   帮助

      w   保存

      q   不保存退出

      p   显示分区表

      n   新增分区

      d   删除分区

      t   更改分区类型,也就是更改system ID

      l   可以显示分区类型

 

  gdisk命令

    查看分区信息

      gdisk -l DEVICE 查看DEVICE设备上的分区信息,DEVICE可以省略,标识列出系统所有硬盘的分区信息

    管理分区信息

      m   帮助

      w   保存

      q   不保存退出

      p   显示分区表

      n   新增分区

      d   删除分区

      t   更改分区类型,也就是更改system ID

      l   可以显示分区类型

 

三、文件系统创建

  mkfs命令

    -f       强制创建文件系统

    -L "LABEL"   创建卷标,最好加上引号

    -t TYPE     指定创建的文件系统类型

    -b ##     指定块大小,[1024|2048|4096]也就是指定文件系统分配的最小单位

    

    mkfs.xfs DEVICE   创建xfs文件文件系统

    mkfs.ext4 DEVICE  创建ext4文件系统

    mkfs -t xfs     创建xfs文件系统

    mkfs -t ext4     创建ext4文件系统

  uuidgen命令

    用于随机生成UUID

  tune2fs命令  

    -l DEVICE      查看DEVICE设备的信息

    -U DEVICE     更改设备的UUID

  dumpe2fs命令

    dumpe2fs  DEVICE 查看DEVICE设备的分组信息

  xfs_info命令

    xfs_info DEVICE 查看DEVICE设备的信息

  blkid命令

    可以查看块设备的UUID和设备类型,没有创建文件系统的分区,这个命令是查不出的

  findfs命令

    可以查找设备

 

 

四、文件系统检测和修复

    注意:一定不要在挂载状态下执行修复命令

  fsck命令

    fsc.FS_TYPE或 fsck -t FS_TYPE

    选项:

      -a     自动修复错误

      -r     交互式修复错误

  e2fsck命令

    选项:

      -f     强制修复

      -y     自动回答yes

      -p     自动进行安全的修复文件系统问题

  xfs_repair命令

    xfs文件系统专用检测修复工具

    选项:

      -f     修复文件

      -n     只检查

      -d     允许修复只读的挂载设备,在单用户下修复 / 时shiyong ,然后立即重启

 

 

五、挂载

  关于挂载,在centos6当中每次挂载都会把信息写入到/etc/mtab文件中。

  

  cat /proc/mounts可以读取实时挂载信息

 

  mount命令

    一个挂载点,同一时间只能挂载一个设备,一个挂载点同时挂载多个设备,但只能看到最后一次挂载的设备内容

    如果一个未挂载的挂载点内有文件,挂载后,此挂载点内原来文件会暂时无法访问。作为挂载点的目录一般未空目录

    mount命令读取的也是/etc/mtab的信息。可以使用mount -n选项不更新写入到/etc/mtab文件

      mount   [OPTIONS]   挂在设备   挂载点

    mount 单命令可以查看已经挂载的设备信息

    选项:

      -t TYPE     指定挂载的设备类型

      -r        挂载成只读

      -w       挂在成读写

      -n       不更新/etc/mtab

      -a        自动挂载,只会挂载那些未挂载的设备。挂载上的设备不会重新挂载。

      -L  '卷标名'   使用卷标名挂载

      -U 'UUID'     使用UUID挂载

      -B 或 --bind    把一个文件夹挂载到另外一个文件夹

      -o OPTIONS

          remount       重新挂在

          rw            读写挂载

          ro           只读挂载

          async/sync      是否异步写入,建议asnyc

          atime/notime    是否更新文件或目录的访问时间,建议noaime

          diratime/nodiratime   是否更新目录的访问时间

          exec/noexec     里面的可执行文件直接运行,但是还可以通过脚本调用,间接运行

          suid/nosuid      是否支持suid

          user/nouiser     是否支持普通文件挂载设备

          loop 挂        载成回环设备文件

          defaults       默认

          nouuid       不检测UUID挂载

 

      挂载设备:

          DEVICE

          UUID=

          LABEL=

       有部分特殊的设备:tmpfs swap

  lsof命令

    lsof  /PATH/TO/SOMEFILE 可以查看谁在使用此文件

  fuser命令

    -V     显示谁在使用

    -k     结束

    -m      指定挂载点

  findmnt命令

    判断目录是不是挂载点,然后判断echo $?判断状态

      如果是挂载点,就会把挂载点的信息都显示出来

      如果不是挂载点,就不会又任何显示

    可以使用$?判断状态,0表示又是挂载点,1表示不是挂载点

    示例

[root@CentOS7 ~]# findmnt /media

[root@CentOS7 ~]# echo $?

1

[root@CentOS7 ~]# findmnt /boot

TARGET SOURCE    FSTYPE OPTIONS

/boot  /dev/sda1 xfs    rw,relatime,attr2,inode64,noquota

[root@CentOS7 ~]# echo $?

0

[root@CentOS7 ~]# echo $?

0

[root@CentOS7 ~]# findmnt /media

[root@CentOS7 ~]# echo $?

1

 

  umount命令

    取消挂载

   关于缓存和缓冲

    缓冲区buffer 缓冲写入到磁盘的数据,写入缓存

    缓存cache 缓存数据到内存当中,主要用来加速数据从硬盘中读取的速度,读入缓存。

    在centos6中还是区分buffer和cache了。centos7以后的版本就不区分了。复用相同文件内容。

      swap建议值:

        低于2GB 建议2倍内存大小

        2~4G 建议1倍内存大小

        4~ 4G或0.5倍内存大小

    swap是根据/proc/sys/vm/swappiness的值决定是否启用swap

    /proc/sys/vm/swapiness的值表示剩余内存达到此值的百分比就启用

  mkswap命令

    用来格式化swap分区

  swapon命令

    选项:

      -a      自动挂载swap分区

      -s    可以查看挂载的swap分区,实际上-s选项就是显示/proc/swaps文件的内容,而且可以显示多个设备的优先级(priority)

   swapoff命令

    swapoff DEVICE禁用某个swap设备

  mkisofs命令

    mkisofs -r -o /root/etc.iso /etc 把某个目录打包成iso镜像文件

  lsusb命令

    查看usb设备是否识别

  dmesg命令

    可以查看硬件设备

  df命令

    可以查看已挂载的各个分区使用信息,包括数据和元数据的占用

    选项:

      -h     人性化显示

      -i      显示inode节点信息

      -P     按POSIX规范显示

      -T     显示出文件系统类型

  du命令

    可以显示文件或目录的数据实际使用大小

    选项:

      -h     人性化显示,默认是以k为单位显示

      -s     求和,只显示总共大小

 

六、RAID阵列

  RAID0 多个硬盘组合成大的虚拟硬盘,虚拟硬盘之和就是多个硬盘的大小总和。

    读性能提升,写性能提升,如果一个磁盘损坏,数据就彻底报废。没有任何容错性。所以生产中不会使用。

  RAID1 多个硬盘互为镜像。主要用来防止单点失败。这和备份不一样,仅是用来防止一个硬盘损坏。

    读性能提升,写性能略有下降。

  RAID4 其中一个硬盘固定只放了校验位。当其中一块硬盘坏了,可以通过异或计算出来。也就是允许坏一块硬盘。存放校验位的硬盘经常损坏

    读性能提升,写性能提升

  RAID5 多块硬盘轮流存放校验位。只允许坏一块硬盘。

    读性能提升,写性能提升

  RAID6     和RAID5差不多,只不多有两块硬盘用来存放校验位

  RAID10   先RAID1 再RAID0  先镜像 再组合  一般都用这个

  RAID01   先RAID0 再RAID1  先组合 再镜像 现在不用这个了

  RAID50   先RAID5 再RAID0

  JBOD 先用使用一个硬盘,再使用一个,依次。主要用来组合不同容量的硬盘

 

七、LVM逻辑卷

(一)逻辑卷创建  

  先创建PE,再创建卷组,再创建逻辑卷。格式化,挂载就能使用了。

  pvcreate命令

    pvcreate DEVICE1 DEVICE2 创建PE

  pvs命令

    可以显示简要pe信息

  pvdisplay命令

    可以显示详细的pe信息

 

  vgcreate命令

     创建逻辑卷组

  vgs命令

    可以显示简要pv信息

  vgdisplay命令

    可以显示详细pv信息

  vgextend命令

    vgextend  VG_NAME  DEVICE 把PE物理卷加入到vg卷组中

 

  lvcreate命令

    lvcreate -n LV_NAME -L 600M VG_NAME

      -n   指定逻辑卷的名称

      -l   指定PE的个数

      -L   指定容量大小,容量是PE的整数倍,不一定会刚刚好600M

      -s   创建快照

    lvcreate -n binlogo_snapshot -s -L 100M /dev/vg0/binlog

  lvs命令

    可以显示简要lv信息

  lvdispaly命令

    可以详细显示lv的信息

  lvextend命令

    lvextend -L +100%free  VG_NAME

    -l   指定PE的个数 +100%vg表示全部空间

    -L   指定容量大小,容量是PE的整数倍,不一定会刚刚好600M  +100%free表示全部空间

    -r   自动扩展文件系统,无论什么文件系统。

  同步文件系统边界命令

    resizee2fs LV_DEVICE        同步ext系列文件系统

    xfs_growfs 挂载点          同步xfs文件系统

 

(二)逻辑卷缩减 

    ext4文件系统才支持缩减,xfs文件系统不支持缩减

      缩减只支持离线缩减,先取消挂载

      缩减有风险,建议先备份

  缩减逻辑卷五大步

    第一步、取消挂载

    第二步、检查文件系统

        e2fsck DEVICE

    第三步、缩减文件系统

        resize2fs DEVICE ###

    第四步、缩减逻辑卷

        lvreduce -L ### DEVICE

    第五步、重新挂载

 

(三)逻辑卷创建快照 

    lvcreate -n binlogo_snapshot -s -L 100M /dev/vg0/binlog 创建快照

    lvcreate --merge /dev/vg0/binlog_snapshot 恢复快照,合并快照之前先要取消挂载

    再挂载xfs文件系统类型的快照的时候,需要使用-o -nouuid选项,一定要ro挂载  ext系列文件系统,不用加-o -nouuid直接就能挂载

  快照特点:

      备份速度块

      应用场景是测试环境,不能完全代替备份

      创建快照之后性能可能会略有下降

 (四)逻辑卷删除 

  从卷组总拆除硬盘

    pvmove DEVICE       意思就是把DEVICE上面的数据移动到别的设备上

    vgreduce vg0 DEVICE     意思就是把DEVICE设备从vg0中删除

    pvromove DEVICE        从PE中移除DEVICE设备

  逻辑卷删除

    先取消挂载

    再删除逻辑卷

    再删除卷组

    在删除物理

posted @ 2020-04-20 02:04  讽刺暧昧  阅读(763)  评论(0编辑  收藏  举报