磁盘知识体系结构

第1章           磁盘知识体系结构

1.1  磁盘知识体系结构

        1) 磁盘的外部结构和内部结构

        2) 磁盘阵列 RAID   LVM 逻辑卷管理

        3) 磁盘分区 主分区 扩展分区 逻辑分区

              fdisk

              parted

       4) 磁盘格式化

       5) 磁盘的使用 挂载

1.1.1  磁盘结构

1.1.1.1    外部结构

              机械磁盘

           固态磁盘

1.1.1.2    内部结构

1.1.1.2.1     磁盘的主轴

1.1.1.2.2     磁盘的转速

       家用: 5.4K  7.2K

      企业: 10K   15K

1.1.1.2.3     磁盘盘片

                     作用:存储数据

                  磁头:

                    作用:

                     a)读写数据

                     b)盘面的数量等于磁盘磁头的数量

                     c)磁盘接口

                       连接主板

                      接口类型

                      IDC      淘汰

                      SCSI    淘汰

                      SATA

                      SAS

                      SSD

                      PCI-E

1.1.1.2.4     磁盘(Disk)
1.1.1.2.5     磁头(Head)

               作用说明:用来写入和读取数据的

               特点说明:盘面数量等于磁头数量

              工作原理:采用径向运动读写数据

1.1.1.2.6     磁道(Track)

               作用说明:用来存储用户数据

               特点说明:由多个同心圆组成

               存储计数:最外面同心圆为0磁道

              工作原理:磁盘默认按照磁道寻找数据

              重点原理:磁头径向运动为机械运动(寻道)  性能小于固态硬盘(芯片)

              原理特点:磁头机械运动较慢

1.1.1.2.7     扇区(Sector)

              作用说明:用来存储用户数据

              特点说明:磁盘存储最小单位

              存储计数:默认磁盘扇区从1扇区开始,扇区大小为512字节

              系统存储最小单位是block

1.1.1.2.8      柱面(Cylinder)

            作用说明:用来存储用户数据

            特点说明:不同盘面上相同的磁道组成(圆柱体)

            工作原理:磁盘默认按照柱面进行读写

            重点原理:磁头之间的切换为电子切换

             原理特点:磁头电子切换较快

1.1.1.2.9     单元块(Units)

             作用说明:用来存储用户数据

             特点说明:表示单个柱面大小

1.2  磁盘阵列

              磁盘阵列如何配置

              配置LVM  L 逻辑  v 卷组  M 管理  逻辑卷管理 --> 实现可以随意调整磁盘分区大小

              获得更大的容量

              获得更高的性能

              获得更好的安全性

1.2.1   raid 0

             具有最高的存储性能(磁盘容量不浪费,读写很快),这些磁盘的总和

            10*1TB raid 0

             要制作RAID 0至少要1块物理磁盘,不做raid不能安装系统

             安全:任何一块硬盘损坏,所有的数据无法使用,安全性最低

             可用容量:所有硬盘容量的和

             性能:读写速度最快

             使用场景:不要求安全,只要求速度

             举例:数据库从库/存储从库

1.2.2    raid 1

        镜像:损失50%的数据容量。例如2块1T的盘,做完RAID 1后容量为1T

         raid只能2块硬盘

         Mirror不能提高存储性能。理论上写性能和单盘相差不大

         安全冗余:100% 

         可用容量:一半(两块硬盘容量之和)

         性能:写入速度慢,读取速度OK

         使用场景:只追求安全性对于速度没要求

         举例:系统盘,监控服务器

1.2.3   raid 5

             需要至少3块,损失一块硬盘

            6*600G

           安全:最多可以损坏一块硬盘

           可用容量:损失一块盘的容量

           性能:写入速度不快,读取Ok

          使用场景:对于数据安全,对于速度要求不高

          举例:普遍数据库 ,存储访问量不高

1.2.4    raid 10 成本最高

           最少4块硬盘,增加硬盘必须是2的倍数;所有硬盘容量的一半

           安全:最多损坏一半硬盘

           可用容量:损失所有硬盘一半的容量      

           性能:写入和读取 都很快

            使用场景:对于安全和性能都要

            举例:高并发或高访问量     数据库主库   存储

 

 

1.3  磁盘分区

          情况1:

           MBR格式

            4个主分区 sda1 sda2 sda3 sda4

           情况2:

            3个主分区 sda1 ada2 sda3 sda4(扩展分区) 无法直接使用 无法挂载

           sda4(200G)

           多个逻辑分区

            sda5 100G        可以直接使用      可以挂载

            sda6 100G        可以直接使用     可以挂载

            第1块sas硬盘的第一个主分区

           /dev/sda1

            第2块sata硬盘的第2个主分区

           /dev/sdb2

            第3块sata硬盘的第1个逻辑分区

          /dev/sdc5

          服务器的第一块磁盘使用 sda

          第二快磁盘使用 sdb

          第一块磁盘的第一个主分区 sda1

           第二个主分区 sda2

          第一个逻辑分区 sda5

         第二快磁盘的第一个主分区 sdb1

          第二个主分区 sdb2

          第一个逻辑分区 sdb5

1.4  磁盘格式化   fdisk

       fdisk  小于2T的磁盘进行分区 MBR

1.4.1  MBR格式 4个主分区

         Linux操作系统 RAID

         300G 600G 900G

         300*2快 RAID1 保护操作系统 600G--> MBR引导

1.4.2    parted 大于2T的磁盘进行分区 GPT

          GPT格式 128个主分区

1.5  磁盘分区: fdisk

        第一步: 准备一块新的磁盘 100M

            虚拟机添加

            工作: 物理机 购买新的磁盘

                  云服务 购买云存储

      第二步: 查看确认磁盘已在操作系统中显示 fdisk

            云服务新的磁盘 需要重启

            物理机新的磁盘  支持热插拔

            虚拟机vmware需要重启

      第三步: fdisk 分区

[root@oldboyedu-lnb ~]# fdisk /dev/sdb    # 对第二快磁盘进行分区
Command (m for help): m                       # help 帮助
Command action
d   delete a partition                                # 删除分区
g   create a new empty GPT partition table    # 创建GPT分区表
l   list known partition types                       # 显示分区表类型
m   print this menu                                   # 打印帮助菜单
n   add a new partition                              # 创建新的分区
p   print the partition table                         # 显示分区表
q   quit without saving changes                   # 退出不保存
t   change a partition's system id                # 改变分区类型
w   write table to disk and exit                    # 保存并退出                         
Command (m for help): n
Partition type:    # 分区类
p   primary (0 primary, 0 extended, 4 free)   #可用4个主分区
e   extended    # 扩展分区
Select (default p): # 选择分区表类型 默认 p 主分区
Partition number (1-4, default 1):  选择分区号码默认1
First sector (2048-208895, default 2048): # 开始的扇区 默认
Using default value 2048         
Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +20M  #结束的扇区 或者 K M G  +20M 第一个分区为20M
Partition 1 of type Linux and of size 20 MiB is set
查看当前的分区
Command (m for help): p
Disk /dev/sdb: 106 MB, 106954752 bytes, 208896 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: 0x5bcfea06
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1         2048       43007       20480   83  Linux

第四步: 格式化

       xfs cenetos7默认的分区表类型

[root@oldboyedu-lnb ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=1, agsize=5120 blks
               =                           sectsz=512        attr=2, projid32bit=1
               =                                crc=1        finobt=0,     sparse=0
      data   =                             bsize=4096   blocks=5120,  imaxpct=25
               =                              sunit=0      swidth=0 blks
 naming   =version 2               bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=855, version=2
              =sectsz=512            sunit=0 blks, lazy-count=1
  realtime =none                   extsz=4096   blocks=0, rtextents=0

       第五步: 挂载使用

[root@oldboyedu-lnb ~]# mount /dev/sdb1 /mnt
[root@oldboyedu-lnb ~]# df -h
tmpfs            98M     0   98M   0% /run/user/0
/dev/sdb1        17M  1.1M   16M   7% /mnt

       第六步: 卸载磁盘

[root@oldboyedu-lnb ~]# umount /mnt

            作业练习:

            分区 3个主分区+1个扩展分区+2个逻辑分区

磁盘案例

注意:分区的时候,如果分三个主分区,把剩下的所有(默认)给第三个主分区,如果分三个主分区,1个扩展分区,把剩下的所有分给扩展分区.
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-208895, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +16M
Partition 1 of type Linux and of size 16 MiB is set
Command (m for help): n 
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2):
First sector (34816-208895, default 34816):
Using default value 34816
Last sector, +sectors or +size{K,M,G} (34816-208895, default 208895): +16M
Partition 2 of type Linux and of size 16 MiB is set
Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
Partition number (3,4, default 3): 3
First sector (67584-208895, default 67584):
Using default value 67584
Last sector, +sectors or +size{K,M,G} (67584-208895, default 208895): +16M
Partition 3 of type Linux and of size 16 MiB is set
Command (m for help): n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): e
Selected partition 4
First sector (100352-208895, default 100352):
Using default value 100352
Last sector, +sectors or +size{K,M,G} (100352-208895, default 208895):
Using default value 208895
Partition 4 of type Extended and of size 53 MiB is set

 
Command (m for help): n
All primary partitions are in use
Adding logical partition 5
First sector (102400-208895, default 102400):
Using default value 102400
Last sector, +sectors or +size{K,M,G} (102400-208895, default 208895): +16M
Partition 5 of type Linux and of size 16 MiB is set
Command (m for help): n 
All primary partitions are in use
Adding logical partition 6
First sector (137216-208895, default 137216):
Using default value 137216
Last sector, +sectors or +size{K,M,G} (137216-208895, default 208895): +16M
Partition 6 of type Linux and of size 16 MiB is set

 

Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@oldboyedu-lnb~]# ll /dev/sdb
sdb   sdb1  sdb2  sdb3  sdb4  sdb5  sdb6 

第2章      磁盘分区方式

2.1 开机自动加载方案

2.1.1  写入rc.local

 2.1.2  写入/etc/fstab

UUID=d25e7543-.....   /          xfs                defaults     1               1
UUID或者设备名称  挂载点  文件系统          挂载参数  是否备份 开机磁盘检查

 2.1.3  查看UUID

  lsblk  查看

[root@oldboyedu-lnb~]# lsblk -f
NAME   FSTYPE  LABEL           UUID                                 MOUNTPOINT
sda                                                                
├─sda1 xfs                     1af0c500-80df-4926-88aa-8e4419a636c9 /boot
├─sda2 swap                    35a4f6da-d8f3-4449-83d2-bef70f83bda0 [SWAP]
└─sda3 xfs                     32c0b660-ac0a-4b5c-b1c9-4f5209eba66a /
sdb                                                                
sr0    iso9660 CentOS 7 x86_64 2018-11-25-23-54-16-00     

blkid查看

[root@oldboyedu-lnb~]#  

/dev/sda1: UUID="1af0c500-80df-4926-88aa-8e4419a636c9" TYPE="xfs"

/dev/sda2: UUID="35a4f6da-d8f3-4449-83d2-bef70f83bda0" TYPE="swap"

/dev/sda3: UUID="32c0b660-ac0a-4b5c-b1c9-4f5209eba66a" TYPE="xfs"

/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"

2.2   磁盘分区fdisk

           fdisk适用于小于2TB磁盘 fdisk只支持mbr分区表

           开机自动挂载 /etc/fstab   挂载设备的配置文件 /etc/rc.local

[root@oldboyedu-lnb ~]# tail -2 /etc/fstab
/dev/sdb1          /mnt          xfs     defaults      0 0
UUID=fc550328-186c-408f-aa4f-daf78bf04281 /data           xfs     defaults     0 0

       PS: 在使用df -h过程中发现无法正常显示磁盘信息

           使用umount -f /data 强制卸载后正常使用

2.3  磁盘分区parted

parted一般用于大于2TB磁盘 gpt支持更大的硬盘且支持更多的分区 不写入内存直接生效

常用参数 主分区可分128个
GPT 格式:parted 命令可以创建全局惟一的标识符分区表 GPT,而 fdisk 和 cfdisk 则仅限于 DOS 分区表。
mktable 创建磁盘分区表
mktable gpt 创建分区为GTP格式 设置分区表为GPT
p     print  显示磁盘分区信息
mkpart  make partition 创建分区
rm    删除分区
q   quit 退出
创建分区并查看分区p  提示没有找到分区 说明还没有进行分区
    [root@oldboyedu-lnb ~]# parted -l    # 查看gpt格式分区信息
    [root@oldboyedu-lnb ~]# parted /dev/sdb
    (parted) mktable gpt                                                     
    (parted) p                                                               
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 3221GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:
    Number  Start  End  Size  File system  Name  Flags
    (parted) mkpart primary
    File system type?  [ext2]? xfs    # 文件系统                                       
   Start? 0                            # 开始                                    
   End? 1000                           # 结束                                    
   Warning: The resulting partition is not properly aligned for best performance.
   Ignore/Cancel? I      
   [root@oldboyedu-lnb ~]# parted /dev/sdb
   GNU Parted 3.1
   Using /dev/sdb
   Welcome to GNU Parted! Type 'help' to view a list of commands.
   (parted) mkpart primary 1000 1500
    Warning: The resulting partition is not properly aligned for best performance.
   Ignore/Cancel? I                                                         
   (parted) print                                                            
    Model: VMware, VMware Virtual S (scsi)
   Disk /dev/sdb: 3221GB
    Sector size (logical/physical): 512B/512B
   Partition Table: gpt
    Disk Flags:
    Number  Start    End     Size       File system  Name     Flags
     1      17.4kB  1000MB   1000MB                primary
     2      1000MB  1500MB   500MB                  primary

2.4   删除主分区

Number  Start   End     Size    File system  Name     Flags
1      17.4kB  1000MB  1000MB               primary
2      1000MB  1500MB  500MB                primary
(parted) rm 2  

2.5  非交互式parted分区

[root@oldboyedu-lnb ~]# parted /dev/sdb mkpart primary 1000 2000
[root@oldboyedu-lnb ~]# parted /dev/sdb mkpart primary 2000 2500
Information: You may need to update /etc/fstab.
[root@oldboyedu-lnb ~]# parted /dev/sdb  print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number  Start      End        Size              File system    Name         Flags

  1      17.4kB    1000MB  1000MB                primary

  2      1000MB   2000MB   999MB                primary

 3      2000MB     2500MB  500MB                primary

2.6  非交互式删除

[root@oldboyedu-lnb ~]# parted /dev/sdb  rm 2

格式化分区

[root@oldboyedu-lnb ~]# mkfs.xfs /dev/sdb1

下一步挂载使用

[root@oldboyedu-lnb ~]# mount /dev/sdb1 /mnt

2.7   企业场景

            磁盘空间不够用

           云主机 购买磁盘-->云服务器后台挂载到对应的服务器(在光驱中放入镜像文件)

           物理机 直接插新的磁盘 支持热插拔

2.7.1      格式化磁盘

[root@oldboyedu-lnb ~]# mkfs.xfs -f /dev/sdb

2.7.2    挂载使用磁盘

[root@oldboyedu-lnb ~]# mount /dev/sdb /data

2.7.3   查看磁盘挂载

[root@oldboyedu-lnb ~]# df -h
/dev/sdb        3.0T   33M  3.0T   1% /data

2.7.4    开机自动挂载  /etc/fstab

/dev/sdb         /data       xfs     defaults     0    0

2.8  磁盘案例

        企业案例:java环境内存不够用,占用大量的swap分区

        内存满: 导致Linux系统的进程被杀 优先杀占用内存最高的那个服务

        两种情况:

        一种情况是流量达到了上线   内存8G 实际用到了7.xG 必须升级内存

        第二种情况流量没有达到上线 网络波动引起的 某个时间点达到8G左右

        程序代码导致内存溢出(用户量没有达到8G值)

        swap 磁盘的空间临时充当内存使用 速度较慢

        swap分区在安装系统可以划分

在进入操作系统后可以临时扩充   

2.9  扩展swap分区大小

/dev/zero 白洞 不断输出内容
/dev/null 黑洞
/dev/urandom 随机字符 

2.9.1  第一步: 生成一个200M的文件

dd if=/dev/zero of=/tmp/200m bs=1M      count=200
inputfile    outfile      block size    复制次数
数据来源   输出文件 每次复制多大

2.9.2  第二步: 格式化swap分区

[root@oldboyedu-lnb ~]# mkswap /tmp/200m
Setting up swapspace version 1, size = 204796 KiB
no label, UUID=6ecfd552-d6f1-4769-b57b-39bb1a33d87d

2.9.3  第三步: 激活 挂载swap分区

[root@oldboyedu-lnb ~]# swapon /tmp/200m
swapon: /tmp/200m: insecure permissions 0644, 0600 suggested.
You have 5new mail in /var/spool/mail/root
[root@oldboyedu-lnb ~]# free -h
total        used          free      shared       buff/cache   available
Mem:      974M         97M        527M         13M           349M        698M
Swap:      1.2G          0B          1.2G

2.9.4  第四步: 卸载swap分区

[root@oldboyedu-lnb ~]# swapoff /tmp/200m
You have new mail in /var/spool/mail/root
[root@oldboyedu-lnb ~]# free -h
                          total         used        free      shared  buff/cache   available

       Mem:           974M         97M        527M         13M        349M        698M

       Swap:           1.0G          0B        1.0G

2.9.5  第五步:查看swap的组成

[root@oldboyedu-lnb ~]# swapon -s
Filename           Type        Size        Used   Priority
/dev/sda2        partition    1048572   0        -1
/tmp/200m         file         204796    0        -2

2.9.6  第六步: 开机自动挂载

  /tmp/200m          swap         swap    defaults      0    0

2.10  磁盘案例2:

1. du –sh 查看某个目录占用空间大小  确认后删除
2. 通过磁盘挂载的方式解决磁盘不够用的情况

2.10.1    第一步: 生成10G的文件

dd if=/dev/zero of=/var/log/10g bs=1M count=10000

2.10.2    第二步: 使用du命令查找该文件

du -h /*|grep G
du -h /var/log/*|grep G    

2.10.3    使用find查找大文件

[root@oldboyedu-lnb ~]# find / -type f -size +1G
/var/log/10g

2.11  通过磁盘挂载的方式解决磁盘不够用的情况

         查找到的大文件 有用 增加磁盘的方式解决 源文件的路径不能变

         /var/log/10g  持续不断的往文件中输出日志

2.11.1   第一步:  增加一块新的磁盘进行格式化挂载     

mkfs.xfs /dev/sdb
mount /dev/sdb /data 

2.11.2     第二步:  把/var/log/10g 文件移动到/data下 第二快磁盘          

2.11.3     第三步: 软链接

[root@oldboyedu-lnb ~]# ln -s /data/10g /var/log/10g

2.12   磁盘案例3: 如何查找小文件多的目录

              使用find命令查找目录的大小      

2.13    磁盘案例4

              文件是否被真的删除

              显示 no space left on device ,df –h查看磁盘有剩余

              inode和block的数量同时为0 文件没有被进程调用 重启服务生效

2.13.1    第一步: 模式文件被命令占用

2.13.2    第二步: 使用lsof查看被进程调用的文件

安装lsof命令 yum -y install lsof

[root@oldboyedu-lnb ~]# lsof|grep 10g
tail      2053         root    3r      REG     8,16 10485760000       67 /data/10g

2.13.3  第三步: 在文件被占用的情况下删除10g这个文件

[root@oldboyedu-lnb ~]# rm -f /data/10g
[root@oldboyedu-lnb ~]# ll /data/
total 0
[root@oldboyedu-lnb ~]# df -h
/dev/sdb        3.0T  9.8G  3.0T   1% /data

2.13.4  第四步: 重启服务生效

httpd 服务---> /var/log/httpd/access.log

删除access.log文件后重启(文件过大但是还是没有解决问题)

systemctl reload|restart httpd 重启生效

[root@oldboyedu-lnb ~]# lsof |grep 10g
tail      2053         root    3r      REG      8,16 10485760000   67 /data/10g (deleted)
[root@oldboyedu-lnb ~]# kill -9 2053

                                                    

原文地址:https://www.cnblogs.com/strugger-0316/p/13675043.html