zoukankan      html  css  js  c++  java
  • 磁盘分区知识

    1.1 磁盘为什么要分区?

    为了更好的管理数据,类似于家庭为什么要有卧室 卫生间 厨房 客厅。

    1.2 磁盘设备及分区命名

    /dev 设备目录

    /dev/hda[a-z] IDE硬盘

    /dev/sda[a-z] SATA接口硬盘/U盘

    /dev/cdrom 光驱

    clipboard.png

    [root@web01 ~]# blkid ##查磁盘分区相关信息

    1.3 磁盘分区类型和特点

    QQ图片20200326102409.jpg

    主分区特点小结:

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

    2)分区数字编号只能是1-4,例如:SCSCI分区名为sda1、sda2、sda3、sda4。

    3)主分区最多四个,最少一个。

    扩展分区(Extend)小结

    1.不能直接存放数据,必须要再分逻辑分区

    2.一块磁盘最多1个扩展分区

    3.主分区+扩展分区总的数量不能超过4个

    1.4 分区常用命令

    lsblk

    blkid

    fdisk /dev/sdb (gdisk > 2T)

    partprobe /dev/sdb (分区完成后操作)

    2.磁盘基本分区Fdisk

    fdisk命令原理

    ---> 修改mbr主引导信息中的64字节分区表

    ----> 使用fdisk分区,源数据还存在于磁盘

    为什么只能四个?

    分区表64字节, 一个分区表占用16字节---->> 主分区加扩展分区小于4个

    分区.png

    分区1.png

    2.1 添加一个20G的硬盘

    (虚拟机操作)

    clipboard.png

    2.2. 分区** **

    fdisk /dev/sdb

    n 新建一个分区 
    m for help
        p   主分区
        e   扩展分区
            p 打印分区信息
            d 删除分区
          w 保存分区信息
            q 退出不保存分区信息
    
    Command (m for help): p
    Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x00097e28
    
       Device Boot      Start         End      Blocks   Id  System
    
    Command (m for help): 
    Command (m for help): n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): 
    Using default response p
    Partition number (1-4, default 1): 
    First sector (2048-2097151, default 2048): 
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +100M
    Partition 1 of type Linux and of size 100 MiB is set
    
    
    #重复曹组创建3个分区.....
    
    Command (m for help): p
    Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x00097e28
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048      206847      102400   83  Linux
    /dev/sdb2          206848      616447      204800   83  Linux
    /dev/sdb3          616448     1230847      307200   83  Linux
    
    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 (1230848-2097151, default 1230848): 
    Using default value 1230848
    Last sector, +sectors or +size{K,M,G} (1230848-2097151, default 2097151): 
    Using default value 2097151
    Partition 4 of type Extended and of size 423 MiB is set
    
    Command (m for help): n                      # 添加逻辑分区logical
    All primary partitions are in use
    Adding logical partition 5
    First sector (1232896-2097151, default 1232896): 
    Using default value 1232896
    Last sector, +sectors or +size{K,M,G} (1232896-2097151, default 2097151): +500M
    Value out of range.
    Last sector, +sectors or +size{K,M,G} (1232896-2097151, default 2097151): +100M
    Partition 5 of type Linux and of size 100 MiB is set
    
    Command (m for help): p
    
    Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x00097e28
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048      206847      102400   83  Linux
    /dev/sdb2          206848      616447      204800   83  Linux
    /dev/sdb3          616448     1230847      307200   83  Linux
    /dev/sdb4         1230848     2097151      433152    5  Extended
    /dev/sdb5         1232896     1437695      102400   83  Linux
    

    w保存以后 ,分区表已经改了,内核还不知道

    通知内核分区表已经修改。

    [root@oldboy ~]# partprobe /dev/sdb

    2.3 .格式化

    mkfs.xfs /dev/sdb1
    mkfs.xfs /dev/sdb2
    mkfs.xfs /dev/sdb3
    mkfs.xfs /dev/sdb5
    

    2.4 挂载-使用

    mount /dev/sdb1  /data1/
    mount /dev/sdb2  /data2/
    mount /dev/sdb3  /data3/
    mount /dev/sdb4  /data5/
    

    前面我们已经提到过,如果需要使用磁盘的空间,需要准备一个空的目录作为挂载点,与该设备进行关联。

    mount主要是为文件系统指定一个访问入口。

    PS: 类似我的商场没有门,那么就无法进入购买商品,此时通过mount命令可以创建一个入口。给超市安装一个门。如图:

    1.通过mount进行挂载,但重启将会失效。我们称为临时生效。

    可以使用umount进行卸载。

    2.5 检查结果

    [root@container  ~]# df -h 
    文件系统                 容量  已用  可用 已用% 挂载点
    /dev/sdb1               1014M   33M  982M    4% /data1
    /dev/sdb2                2.0G   33M  2.0G    2% /data2
    /dev/sdb3                5.0G   33M  5.0G    1% /data3
    /dev/sdb5                 12G   33M   12G    1% /data5
    

    查看磁盘分区命令

    lsblk (-f 查看文件系统格式)

    df -h

    cat /proc/partitions

    2.6 总结

    image.png

    Snipaste_2020-10-09_12-35-39.png

    练习:创建  1个P(主分区) 1G   1个E-->L(逻辑分区) 2G
    [root@web01 ~]# fdisk   /dev/sdb
    ...
    sdb               8:16   0    5G  0 disk  
    ├─sdb1            8:17   0    1G  0 part    #主分区
    ├─sdb2            8:18   0    1K  0 part    #扩展分区占1K
    └─sdb5            8:21   0    2G  0 part    #逻辑分区
    sr0              11:0    1 1024M  0 rom
    

    PS: 生产分区建议,如无特殊需求直接使用整个磁盘即可,无需分区。

    创建个目录进行分别挂载!!

    3. 永久挂载配置详解

    3.1 永久挂载一个设备

    fdisk /dev/sdb #分区 P(1-4) + E-->L(5,6)

    mkdir /data1 #创建目录

    mkfs.ext4 /dev/sdb5 #格式化分区

    blkid #查看那uuid

    /dev/sdb5: UUID="628b308b-e742-4824-8e21-9060f6e80ee7" TYPE="ext4"

    **
    **

    [root@container ~]# **vim /etc/fstab** #挂载设备

    UUID=6eefe97b-7876-4632-9550-5dd8cd81eef4 /data1 xfs defaults 0 0

    [root@container ~]# mount -a #重载/etc/fstab中的 挂载信息,可提示错误

    [root@container ~]# df -h

    文件系统 容量 已用 可用 已用% 挂载点

    /dev/sdb1 20G 33M 20G 1% /data1 《--读取/etc/fstab 加载该设备

    或者:

    echo " mount /dev/adb1 /data1" >> /etc/rc.local

    3.2 /etc/fstab配置文件详解

    要挂载的设备 挂载点(入口) 文件系统类型 挂载参数 是否备份 是否检查

    /dev/sdb1 /db1 xfs defaults 0 0

    第一列:可以使用UUID
    [root@container ~]# blkid
    /dev/sda1: UUID="723eb45d-9a1b-4e8f-b06d-cf9024302147" TYPE="xfs"
    /dev/sda2: UUID="yVHSU3-Cmkf-qsg9-6DNg-P87L-mCDN-VOHvcO" TYPE="LVM2_member"
    /dev/sdb1: UUID="3b0143a3-39af-4991-afab-01227fbe767c" TYPE="xfs"
    
    
    第五列:是否进行备份。通常这个参数的值为0或者1
    选项  含义
    0   代表不做备份
    1   代表要每天进行备份操作
    2   代表不定日期的进行备份操作
    
    
    第六列:是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整
    选项  含义
    0   不要检验磁盘是否有坏道
    1   检验
    2   校验 (当1级别检验完成之后进行2级别检验)
    

    clipboard.png

    4. 磁盘基本分区 >2TB方法

    前面我们已经了解到fdisk分区

    但fdisk不支持给高于2TB的磁盘进行分区。

    如果有单块盘高于2TB,,用parted工具修改分区表格式就可以分区了,使用parted工具分区

    1、能够识别大于2TB的磁盘存储空间

    2、MBR <<---->> GPT分区表格式间互相转换、会造成数据丢失

    ​ parted命令中MBR分区被称作msdos,其它分区如下:

    aix, amiga, bsd, dvh, gpt, mac, msdos, pc98, sun, loop

    ​ parted 修改分区会直接生效

    4.1 磁盘的parted工具分区

    练习

    1)parted -l #查看磁盘信息。
    
    2)开始分区
    [root@oldboy /mnt]# parted /dev/sdb
    GNU Parted 3.1
    Using /dev/sdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted)   
    
    3)修改分区表格式
    在进行mbr转gpt时,硬盘的数据会被清除,需要提前备份。
    mbr的硬盘转换成gpt,使用如下命令
    mklabel gpt
    p
    
    删除:
    (parted) rm 1                                                             
    (parted) rm 2
    
    创建分区
    mkpart logical 1 10      #<==创建逻辑分区,大小10MB。
    mkpart primary 11 20     #<==创建主分区,大小10MB。
    mkpart primary 21 200    #
    退出
    

    格式化:

    mkfs -t ext4 /dev/sdc1

    mkfs -t xfs /dev/sdc2

    挂载:

    mount /dev/sdc1 /mnt

    mount /dev/sdc2 /opt

    4.2 Gdisk磁盘分区工具** **

    Gdisk

    1、能够识别大于2TB的磁盘存储空间

    2、gdisk可以支持分区的数量 高达 128个 主分区 没有扩展,逻辑分区的概念。

    ​ MBR <<---->> GPT 互相转换、会造成数据丢失

    yum install gdisk -y

    lsblk #查看磁盘详情

    gdisk /dev/sdc

    mkfs.xfs /dev/sdc

    安装parted,通知内核立即生效,无需重启

    partprobe /dev/sdc

    mkdir /data_c

    mount /dev/sdc1 /data_c/

    df -h

    mount -o ro /dev/sdc1 /data_c/

    卸载(卸载挂载点目录名称、卸载挂载的设备名称)

    [root@container ~]# umount /data_c/

    [root@container ~]# umount /data_c/

    强制卸载 (你进入了挂载点的目录,然后无法卸载。需要强制卸载)

    [root@container data-c]# umount -lf /dev/sdc1

    *4.3 dd命令

    具有复制文件、转换文件和格式化文本的功能。

    if=<输入文件> 从指定文件中读取,全称input file※
    of=<输出文件> 写入到指定文件,全称output file※
    bs=<字节数> 一次读写的字节数,全称block size※
    count=<块数> 指定复制block块的个数※

    范例1:读取MBR

    [root@oldboy ~]# dd if=/dev/sda of=mbr.bin bs=512 count=1   #<==读取0磁头0磁道1扇区内容。
    [root@oldboy ~]# od -xa mbr.bin   #<==以16进制解析1扇区内容。
    

    范例2:生成文件,模拟小磁盘。*****

    dd if=/dev/zero of=/dev/sdb  bs=1M count=10
    

    范例3:制作Linux系统的ISO镜像。

    dd if=/dev/cdrom  of=CentOS6_7.iso  
    #类似cp /dev/cdrom CentOS6_7.iso  
    复制、镜像功能
    

    5. swap分区

    Swap分区在系统的物理内存不够时,将硬盘空间中的一部分空间释放出来,以供当前运行的程序使用。

    PS: 当物理内存不够时会随机kill占用内存的进程,从而产生oom,临时使用swap可以解决。

    由于该进程非常的消耗内存,造成物理内存不够,系统会启用保护机制,干掉内存较高的程序

    sync:刷新文件系统缓冲区 -----> 将文件从缓存刷新到磁盘

    [root@container ~]# swapoff -a  关闭所有swap分区
    [root@container ~]# free -m        查看内存空闲
    total        used        free      shared  buff/cache   available
    Mem:            972         227         433           7         312         544
    Swap:             0           0           0
    
    [root@container ~]# dd if=/dev/zero of=/dev/null  bs=630M count=1000  
    /var/log/message  发现存在oom
    Mar 27 10:20:13 container kernel: Out of memory: Kill process 2123 (dd) score 629 or sacrifice child
    为了避免物理内存不够用(使用硬盘空间来临时充当内存)
    
    [root@container ~]# swapon -a
    [root@container ~]# free -m               #新开一个窗口,随时查看交换分区的状态
    total        used        free      shared  buff/cache   available
    Mem:            972         210         637           7         123         599
    Swap:          2047           0        2047
    [root@container ~]# dd if=/dev/zero of=/dev/null  bs=1000M count=1000  #模拟swap被占满情况
    [root@container ~]# free -m   #查看
    swap一但被使用,就会发现系统会越来越卡。 (分配内存,硬件空间模拟内存介质所以就很卡 )
    

    *5.1 企业面试案例模拟

    企业实战案例:java服务系统环境虚拟内存耗尽故障及解决实践

    a.让开发查找程序泄露问题,这是解决问题的根本。

    b.同时运维也可以临时增大一些swap大小(这个问题治标不治本,关键还是找到程序问题才行)。

    c.优化内核参数,让系统尽量使用内存而不是swap(使用swap的系统会很慢),这里通过此问题引出第二个方法的解决实践,即swap分区的实践。

    1.增加swap分区解决swap耗尽方案实践--->>>

    5.1.1 使用普通物理分区创建swap

    [root@oldboyedu ~]# fdisk /dev/sdb           #<==为sdb磁盘分区。
    ...省略若干行...
    Command (m for help): n                      #<==创建新分区。
    Partition type:
       p   primary (3 primary, 0 extended, 1 free)
       e   extended
    Select (default e): p                         #<==选择主分区。
    Selected partition 4                          #<==编号为4。
    First sector (718848-2097151, default 718848):   #<==默认。
    Using default value 718848
    Last sector, +sectors or +size{K,M,G} (718848-2097151, default 2097151): +150M   #<==给150M大小。
    Partition 4 of type Linux and of size 150 MiB is set
    Command (m for help): p                     #<==查看分区结果。
    
    ...省略若干行...
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048      206847      102400   83  Linux
    /dev/sdb2          206848      411647      102400   83  Linux
    /dev/sdb3          411648      718847      153600   83  Linux
    /dev/sdb4          718848     1026047      153600   83  Linux
    Command (m for help): w                      #<==将分区结果写入分区表。
    The partition table has been altered!
    
    ...省略若干行...
    
    Syncing disks.
    [root@oldboyedu ~]# partprobe /dev/sdb          #<==将分区修改结果通知内核生效。
    [root@oldboyedu ~]# mkswap /dev/sdb4          #<==格式化分区为swap格式。
    [root@oldboyedu ~]# free -m                   #<==查看增加前虚拟分区大小。
                  total        used        free      shared  buff/cache   available
    Mem:           1980         144        1673          19         162        1658
    Swap:           917           0         767 #<==767m。
    [root@oldboyedu ~]# swapon -a /dev/sdb4         #<==加载格式化好的分区到swap。
    [root@oldboyedu ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:           1980         144        1673          19         162        1658
    Swap:           917           0         917 #<==增加了150m。
    [root@oldboyedu ~]# swapoff /dev/sdb4           #<==取消增加的swap分区。
    

    5.1.2 使用dd命令创建文件格式化swap

    [root@oldboy ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128  #<==使用dd创建虚拟的文件系统分区。
    128+0 records in
    128+0 records out
    134217728 bytes (134 MB) copied, 0.691843 s, 194 MB/s
    [root@oldboy ~]# mkswap /tmp/swap                               #<==格式化分区为swap格式。
    Setting up swapspace version 1, size = 131068 KiB
    no label, UUID=e7f3b240-6c98-4c47-93f4-623f157aa46a
    
    
    [root@oldboy ~]# free -m                   #<==查看增加前虚拟分区大小。
                  total        used        free      shared  buff/cache   available
    Mem:            972         114         574           7         284         680
    Swap:          1023           0        1023
    [root@oldboy ~]# chmod 0600 /tmp/swap      #<==为文件安全授权0600(C7会提示你执行此步)。
    [root@oldboy ~]# swapon /tmp/swap          #<==加载格式化好的分区到swap。
    [root@oldboy ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:            972         114         574           7         284         680
    Swap:          1151           0        1151
    [root@oldboy ~]# swapon -s                 #<==显示磁盘swap情况。
    Filename                Type        Size    Used    Priority
    /dev/sda2                               partition   1048572 0   -2
    /tmp/swap                               file         131068     0   -3
    [root@oldboy ~]# swapoff /tmp/swap          #<==测试完毕,卸载。
    

    5.4 让系统优先使用物理内存而不是swap

    [root@oldboy ~]# cat /proc/sys/vm/swappiness         #<==默认值。
    30
    编辑内核文件sysctl.conf,加入vm.swappiness = 5,配置过程如下。
    [root@oldboy ~]# tail -1 /etc/sysctl.conf         #<==查看编辑后的内容。
    vm.swappiness=5
    [root@oldboy ~]# sysctl -p                      #<==价值内核参数配置生效。
    vm.swappiness = 5
      #<== swappiness=0时,系统会最大限度使用物理内存,如果内存不足,扔会占用swap分区,swappiness=100时,系统会积极使用swap分区,并且把内存上数据及时加载到swap里。CentOS7默认设置为30。
    
    
    [root@oldboy ~]# cat /proc/sys/vm/swappiness   #<==通过proc来查看更改结果。
    10
    
    [root@oldboy ~]# echo 5 >/proc/sys/vm/swappiness     #<==也可以直接这样调整,然后将命令加载到rc.local文件里。
    3.直接清空swap分区数据和缓存数据
    [root@oldboy ~]# sync     #<==将缓冲区数据写入磁盘(强制将block数据写入磁盘,更新超级块)。
    [root@oldboy ~]# echo 1 > /proc/sys/vm/drop_caches    #<==清空cache缓存区。
    [root@oldboy ~]# cat /proc/sys/vm/drop_caches
    1
    [root@oldboy ~]# swapoff -a    #<==关闭swap分区。
    [root@oldboy ~]# swapon -a    #<==重启开启swap分区。
    

    6 分区方案:

    服务器角色 分区建议 优点 RAID方案
    单机服务器如8G内存,300G硬盘 /boot 1024Mswap 16G,内存大小8G*2/ 80G/var 20G(也可不分)/data 180G(存放web及db数据) 数据盘和系统盘分开,有利于出问题时维护。 视数据及性能要求,一般可采用raid5折中。
    负载均衡器(如LVS等) /boot 100-200Mswap 内存的1-2倍/ 简单方便,只做转发数据量很少。 数据量小,重要性高,可采用RAID1
    负载均衡下的RS server /boot 100-200Mswap 内存的1-2倍/ 简单方便,因为有多机,对数据要求低。 数据量大,重要性不高,有性能要求,数据要求低,可采用RAID0
    数据库服务器mysql及oracle如16/32G内存 /boot 100-200Mswap 16G,内存的1倍/ 100G/data 剩余(存放db数据) 数据盘和系统盘分开,有利于出问题时维护,及保持数据完整。 视数据及性能要求主库可采取raid10/raid5,从库可采用raid0提高性能(读写分离的情况下。)
    存储服务器 /boot 100-200Mswap 内存的1-2倍/ 100G/data(存放数据) 此服务器不要分区太多。只做备份,性能要求低。容量要大。 可采取sata盘,raid5
    共享存储服务器(如NFS) /boot 100-200Mswap 内存的1-2倍/ 100G/data(存放数据) 此服务器不要分区太多。NFS共享比存储多的要求就是性能要求。 视性能及访问要求可以raid5,raid10,甚至raid0(要有高可用或双写方案)
    监控服务器cacti,nagios /boot 100-200Mswap 内存的1-2倍/ 重要性一般,数据要求也一般。 单盘或双盘raid1即可。三盘就RAID5,看容量要求加盘即可。

    7.非交互创建分区命令

    [root@oldboy ~]# parted /dev/sdb mklabel gpt Yes   #<==非交互创建分区的实质就是将在交互窗口执行的命令作为参数。
    Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want
    to continue?
    Information: You may need to update /etc/fstab.   
    
    [root@oldboy ~]# parted /dev/sdb mkpart primary 0 500 Ignore  #<==将交互执行的命令直接放在parted /dev/sdb后面就实现非交互分区了。
    Warning: The resulting partition is not properly aligned for best performance.
    Information: You may need to update /etc/fstab. 
    
    [root@oldboy ~]# parted /dev/sdb mkpart primary 500 1000
    Information: You may need to update /etc/fstab. 
    
    [root@oldboy ~]# parted /dev/sdb p                             #<==查看分区结果。
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 1074MB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Number  Start    End      Size   File system  Name     Flags
     1      17.4kB   500MB   500MB              primary      #<==分好的第一个500MB的分区。
     2      501MB   1000MB  499MB              primary      #<==分好的第二个500MB的分区。
    

    特别提示:parted分区工具分区实时生效

    8. 文件系统

    image.png

    简单地说,文件系统就是一种存储和组织计算机中数据文件的机制或方法,

    它使得对计算机内的数据的存储、访问和查找变得更容易、简单。

    如ext3(CentOS5.x)、ext4(CentOS6.x)、xfs(CentOS7.x)、zfs

    和Reiserfs或FAT、NTFS等都是常见文件系统。

    mkfs -t 指定文件系统类型(mkfs.ext4,mkfs.xfs) ----或mkfs. 指定

    fsck:检查并修复Linux文件系统

    三要素:

    1.处于非挂载状态。

    2.没有问题的磁盘不要执行。

    3.执行fsck前尽量备份。

    Snipaste_2020-10-10_09-11-15.png

    Snipaste_2020-10-10_09-11-06.png

  • 相关阅读:
    Cufon css3@font-face
    HTML5 Canvas
    HTML5 Canvas 的宽高
    :nth-child()
    new Image()
    ios有些机型input和fixed导致的页面错位问题
    使用performance进行前端性能监控
    throttle(节流)和debounce(防抖)
    object-fit/object-position
    flex布局与ellipsis冲突问题
  • 原文地址:https://www.cnblogs.com/hypj/p/14436545.html
Copyright © 2011-2022 走看看