Linux系统磁盘概念

磁盘的结构体系

1. 磁盘的物理结构(外部结构 内部结构) 工作原理

2. 磁盘阵列说明 (raid0 raid1 raid5 raid10 raid01)

   磁盘阵列如何配置

   配置LVM 

3. 磁盘分区概念

   给小容量磁盘分区:小于2T  fdisk

   给大容量磁盘分区:大于2T  parted

4. 磁盘格式化(创建文件系统)
5.磁盘维护管理(使用、挂载使用)

磁盘的外部结构

组成部分

a. 磁盘主轴 决定磁盘转速

家用 72000 rpm 5400 rpm

企业 15k rpm 10krpm

b. 磁盘盘片 用于存储数据

c. 磁盘的磁头 用于读取数据

d. 磁盘接口 用于连接主板 阵列卡

磁盘的内部结构

a.磁盘(Disk)

b.磁头(Head)

作用:用来写入和读取数据

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

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

c. 磁道(Track)

作用:用来存储用户数据

特点: 有多个同心圆组成

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

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

扇区(Sector)

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

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

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

系统存储最小单位是block

柱面(Cylinder)

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

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

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

单元块(Units)

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

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

磁盘层次结构--磁盘阵列raid

阵列的配置方法:

  • raid 0 存储数据效率高 存储安全性低
  • raid 1 存储数据效率低 存储安全性高
  • raid 5 存储数据效率较高 存储安全性较高
  • raid 01 效率+备份
  • raid 10 备份+效率

磁盘分区预备知识

​ a. 系统启动引导记录--

​ -MBR引导记录 用于引导磁盘空间小于2T

​ -GPT引导记录 用于引导磁盘空间大于2T

  • (1)磁盘分区方法
  • (2)实现挂载使用(实现开机自动挂载 /etc/fstab / etc/rc.local)
  • (3)swap分区如何调整大小

情况一: 磁盘分区实践--磁盘小于2T

fdisk

    第一个里程: 准备磁盘环境
    准备了一块新的10G硬盘
第二个里程: 在系统中检查是否识别到了新的硬盘
检查是否有新的磁盘存储文件
# ll /dev/sdb
brw-rw----. 1 root disk 8, 16 Apr 28 08:54 /dev/sdb	

第三个里程: 对磁盘进行分区处理(fdisk-- 进行分区处理 查看分区信息)
fdisk -l   --- 查看分区信息 
# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x6c918c6d.

Command (m for help):   可以对磁盘进行分区了
Command action
d   delete a partition  *****
    删除分区	
g   create a new empty GPT partition table
    创建一个新的空的GPT分区表(可以对大于2T磁盘进行分区)
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
    改变分区的系统id==改变分区类型(LVM 增加swap分区大小)
u   change display/entry units
    改变分区的方式  是否按照扇区进行划分
w   write table to disk and exit  *****
    将分区的信息写入分区表并退出==保存分区信息并退出
  
开始分区: 
a 规划分4个主分区 每个分区1G
分区操作过程
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): 1
First sector (2048-20971519, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +1G
Partition 1 of type Linux and of size 1 GiB is set

分区操作检查:
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 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: 0x3069f1dd

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     4196351     1048576   83  Linux
/dev/sdb3         4196352     6293503     1048576   83  Linux
/dev/sdb4         6293504     8390655     1048576   83  Linux

Command (m for help): n
If you want to create more than four partitions, you must replace a
primary partition with an extended partition first.

b 规划分3个主分区 1个扩展分区 每个主分区1G  剩余都给扩展分区
删除分区 
Command (m for help): d   
Partition number (1-4, default 4): 1
Partition 1 is deleted	
创建逻辑分区
Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 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: 0x3069f1dd

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     4196351     1048576   83  Linux
/dev/sdb3         4196352     6293503     1048576   83  Linux
/dev/sdb4         6293504    20971519     7339008    5  Extended   有了扩展分区才能逻辑分区

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

Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 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: 0x3069f1dd

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     4196351     1048576   83  Linux
/dev/sdb3         4196352     6293503     1048576   83  Linux
/dev/sdb4         6293504    20971519     7339008    5  Extended
/dev/sdb5         6295552     8392703     1048576   83  Linux
  
需求: 划分2个主分区 划分2个逻辑分区
sdb1  2G
sdb2  2G
sdb5  3G
sdb6  1G	
  
第四个里程: 保存退出,让系统可以加载识别分区信息
让系统可以加载识别分区文件
partprobe /dev/sdb 

parted

情况二: 磁盘分区实践--磁盘大于2T
第一个里程: 准备磁盘环境 
虚拟主机中添加一块3T硬盘

第二个里程: 使用parted命令进行分区

mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
                                         创建一个分区表 (默认为mbr)
print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found
                                         partitions, or a particular partition
										 显示分区信息
mkpart PART-TYPE [FS-TYPE] START END     make a partition
                                         创建一个分区 
quit                                     exit program
                                         退出分区状态
rm NUMBER                                delete partition NUMBER
                                         删除分区 

修改磁盘分区类型: mklabel gpt
分区方法: mkpart primary 0  2100G

第三个里程: 加载磁盘分区
partprobe /dev/sdc
  1. 磁盘层次结构--格式化操作(创建文件系统)
    mkfs.xfs /dev/sdb1
    mkfs -t xfs /dev/sdb2

    创建文件系统: 磁盘分区存储数据的方式

    ext3/4 centos6
    xfs centos7 格式效率较高 数据存储效率提升(数据库服务器)

    \# mkfs.xfs /dev/sdb2
    meta-data=/dev/sdb2              isize=512    agcount=4, agsize=65536 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=262144, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    
  2. 磁盘层次结构--磁盘挂载应用

    mount /dev/sdb1 /mount01
    mount /dev/sdb2 /mount02	
    

    检查确认:

    # df -h
    /dev/sdb1      1014M   33M  982M   4% /mount01
    /dev/sdb2      1014M   33M  982M   4% /mount02
    

    如何实现开机自动挂载:
    方法一: 将挂载命令放入/etc/rc.local

    # tail -2 /etc/rc.local 
    mount /dev/sdb1 /mount01
    mount /dev/sdb2 /mount02
    

    系统开机加载rc.local流程:
    加载/etc/rc.local --> /etc/rc.d/rc.local --> 以绝对路径方式执行
    /etc/rc.d/rc.local
    chmod +x /etc/rc.d/rc.local

    方法二: 在/etc/fstab文件中进行设置
    UUID=e2fc8646-2b36-47cc-a35a-8c13208f4d0b / xfs defaults 0 0
    UUID=34fc45ba-c38c-42bc-a120-90f9d5dd2382 /boot xfs defaults 0 0
    UUID=62100743-6f8a-4f83-a37d-e2088c4830e2 swap swap defaults 0 0

    挂载磁盘文件(存储设备) 挂载点 指定文件系统类型 挂载的参数 是否备份磁盘 是否检查磁盘
    mount 挂载的磁盘文件 挂载点

  3. 企业磁盘常见问题:

    1. 磁盘满的情况 No space left on device
      a 存储的数据过多了
      模拟磁盘空间不足
      dd if=/dev/zero of=/tmp/kang.txt bs=10M count=100
      block存储空间不足了
      解决方式:
      a 删除没用的数据
      b 找出大的没用的数据

         find / -type f -size +xxx
         du -sh /etc/sysconfig/network-scripts/*|sort -h
      

      补充: 按照数值排序命令

      # cat num.txt |sort -n
      
      # 1
      
      # 10
      
      # 11
      
      # 12
      
      # 2
      
      # 3
      
      # 6
      
      # 9
      
      # cat num.txt |sort -n -k2
      
      # 1
      
      # 2
      
      # 3
      
      # 6
      
      # 9
      
      # 10
      
      # 11
      
      # 12
      

      b 存储的数据过多了
      inode存储空间不足了: 出现了大量小文件

  4. 如何调整swap分区大小
    第一个历程: 将磁盘分出一部分空间给swap分区使用

    dd if=/dev/zero  of=/tmp/1G  bs=100M count=10
    

    第二个历程: 将指定磁盘空间作为swap空间使用

    mkswap /tmp/1G 
    Setting up swapspace version 1, size = 1023996 KiB
    no label, UUID=6dd70684-dec2-48cf-8fd9-f311548bbb4f
    

    第三个历程: 加载使用swap空间

    swapon /tmp/1G 
    swapon: /tmp/1G: insecure permissions 0644, 0600 suggested.
    # free -h
                  total        used        free      shared  buff/cache   available
    Mem:           1.9G        225M        575M        9.6M        1.2G        1.5G
    Swap:          2.0G          0B        2.0G
    # swapoff /tmp/1G 
    # free -h
                  total        used        free      shared  buff/cache   available
    Mem:           1.9G        224M        576M        9.6M        1.2G        1.5G
    Swap:          1.0G          0B        1.0G
    # rm /tmp/1G -f
    
  5. 磁盘知识总结

    1. 掌握磁盘体系结果

    2. 磁盘的内部和外部结构(磁头 磁道 扇区 柱面) 运维---存储服务

    3. 磁盘分区的方法
      fdisk 划分小于2T的磁盘
      parted 划分大于2T的磁盘

    4. 如何实现格式化和自动挂载 存储服务nfs
      /etc/rc.local
      /etc/fstab

    5. 磁盘分区满的原因 No space left on device
      a block占用过多了
      df -h
      解决方式: 删除大的没用的数据
      如何找到大的文件
      find / -type f -size +500M|xargs rm
      du -sh /etc/sysconfig

      b inode占用过多了
      df -i
      解决方式: 删除大量的没用的小文件

    6. 如何调整swap空间大小 --- tomcat(java) 512M
      dd
      mkswap
      swapon/off