• 16-Linux磁盘管理


    1.磁盘的基本概念

    1.1 什么是磁盘?
    磁盘(disk): 是指利用磁记录技术存储数据的存储器.
    磁盘是计算机主要的存储介质, 可以存储大量的二进制数据, 并且断电后也能保持数据不丢失. 
    
    • 1
    • 2

    img

    1.2 磁盘如何存储数据?
    磁盘存储的最基本原理是电生磁。
    磁盘的磁道里边有很多的磁颗粒, 每个金属颗粒都有自己的磁化程度, 用于储存数据01. (s1bit)
    
    • 1
    • 2

    img

    当记录数据时, 硬盘的磁头开始通电形成强磁场, 数据转变成高低电平, 改变电流的流向, 形成不同的磁场,
    在电流磁场的作用下, 使颗粒磁化, 从而将信息记录在圆盘上.
    
    写数据时磁头移到到磁盘要写入的位置,输入电流产生感应磁场。
    受磁场的影响,磁头下磁性粒子的磁极方向变为与磁场同向。
    如此通过给磁头不同的电流方向,使得磁盘局部产生不同的磁极,
    产生的磁极在未受到外部磁场干扰下是不会改变的。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    img

    由海量颗粒组成的信息, 就是我们存在硬盘里的数据.  
    
    • 1

    img

    2. 磁盘的基本结构

    部件名作用:
    盘片硬盘一般有一个或多个盘片, 每个盘片可以有两面, 即第一个盘片的正面为0面, 反面为1面然后依次类推.
    磁道每个盘片的盘面在出厂的时候被划分出了多个同心圆环, 数据就存储在这样的同心圆环上面,
    我们将这样的圆环称为磁道(Track), 每个盘面可以划分多个磁道.但肉业不可见.
    扇区在硬盘出厂时会对磁盘进行一次低格, 其实就是再每个磁道划分为若干个弧段, 每个弧段就是一个扇区.
    扇区是硬盘上存储的物理单位, 现在每个扇区可存储512字节数据已经成了业界的约定.
    柱面柱面实际上就是我们抽象出来的一个逻辑概念, 简单来说就是处于同一个垂直区域的磁道称为 柱面,
    即各盘面上面相同位置磁道的集合.这样数据如果存储到相同半径磁道上的同一扇区, 这样可以实现并行读取, 主要是减少磁头寻道时间.
    磁头读取磁盘磁道上面金属块, 主要负责读或写入数据.

    img
    img

    3. 磁盘的预备知识

    我们需要简单了解下磁盘的接口类型、磁盘涉及的相关术语、磁盘在Linux下的命名方式.
    
    • 1
    3.1 接口类型

    img

    1. 淘汰的接口
    IDE, Scsi(已经被淘汰)  
    
    • 1

    2022-09-06_00880

    image-20220906185026163

    2. 目前企业使用
    SATA III 与SAS(企业使用较多)  
    
    • 1

    img

    3. 笔记本使用
    ssd固态硬盘的Msata(SATA接口的mini版)接口为超极本设计. (几乎被m.2接口替代, M.2都远胜于mSATA.)
    
    • 1
    M.2接口是为超极本量身定做的新一代接口标准,拥有更小巧的规格尺寸, 还是更高的传输性能.
    
    • 1

    111

    SSD 尺寸与规格: 2280(常用), 2242, 2230.
    
    • 1

    image-20220906181213565

    SSD接口:
    按照接口类型分,可以把m.2接口分为Socket 2和Socket 3
    Socket 2也可以叫做B key,支持sata,pcie x2
    Socket 3也可以叫做M key,支持sata,pcie x4
    
    一开始,B key的只能插在b key(Socket 2)的接口中,m key的只能插在m key(Socket 3)的接口中,
    但是随着m key接口的普及,越来越多电脑主板只有m key 接口,b key的ssd根本插不上去,
    于是厂商们又设计了一个b&m key接口的ssd。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20220906182838387

    image-20220906182820992

    2022-09-06_00876

    总线分为:SATA3 PCI-E
    协议分为: AHCI  NVME
    
    • 1
    • 2

    1662460346494

    3.2 磁盘的基本术语
    尺寸: 2.5英寸 3.5英寸 
    容量:KB MB GB TB PB EB  
    转速:7500 15000  
    IOPS:每秒能够发生IO的次数
    
    • 1
    • 2
    • 3
    • 4
    3.3 磁盘在系统上的命名方式
    设备名称分区信息设备类型
    /dev/sda/dev/sda1第一块物理磁盘第一分区
    /dev/sdb/dev/sdb2第二块物理磁盘第二个分区
    /dev/vdd/dev/vdd4第四块虚拟磁盘的第四个分区
    MBR分区表只能分配4个主分区, 系统中分区由数字编号表示, 1~4留给主分区使用和扩展分区, 逻辑分区从5开始.
    GPT支持分配128个主分区.
    * 注意MBR与GPT之间不能互转, 会导致数据丢失.  
    
    • 1
    • 2
    • 3

    4. Fdisk磁盘分区

    添加一块小于2TB的磁盘进行使用, 步骤如下:  
    1. 给虚拟机添加一块新的硬盘  
    2. 使用fdisk进行分区  
    3. 使用mkfs进行格式化  
    4. 使用mount进行挂载  
    PS: 生产分区建议, 如无特殊需求直接使用整个磁盘即可, 无需分区. (装系统才分区)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    4.1 添加硬盘
    虚拟机关机, 为虚拟机添加一个硬盘, 设置都为默认即可.
    
    • 1

    image-20220906200343416

    4.2 查看分区
    # 查看所有分区情况
    [root@kid ~]# fdisk -l  
    # 磁盘/dev/sda:10.7 GB,10737418240字节,20971520个扇区
    Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors
    # 单位=1*512=512字节的扇区
    Units = sectors of 1 * 512 = 512 bytes
    # 扇区大小(逻辑/物理):512字节/512字节
    Sector size (logical/physical): 512 bytes / 512 bytes
    # I/O大小(最小/最佳):512字节/512字节
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    # 磁盘标签类型:dos
     Disk label type: dos
    # 磁盘标识符:0x000c160a
    Disk identifier: 0x000c160a
    # 设备    引导 开始    结束        块  Id    系统
    /dev/sda1  *   2048     2099199 1048576 83 Linux
    /dev/sda2       2099200 20971519 9436160 8e Linux LVM
    
    # sdb新添加的硬盘
    Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
    
    # 磁盘/dev/mapper/centos_kid-root:858585MB,8585740288字节,16769024个扇区
    Disk /dev/mapper/centos_kid-root: 8585 MB, 8585740288 bytes, 16769024 sectors
    
    
    # 磁盘/dev/mapper/centos_kid-swap:1073 MB,1073741824字节,2097152个扇区
    Disk /dev/mapper/centos_kid-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    4.3 操作分区的硬盘
    # 对/dev/sdb进行分析操作
    [root@kid ~]# fdisk  /dev/sdb
    Command (m for help): m                     # 输入m列出常用的命令  
    Command action  
       a   toggle a bootable flag               # 切换分区启动标记  
       b   edit bsd disklabel                   # 编辑sda磁盘标签  
       c   toggle the dos compatibility flag    # 切换dos兼容模式  
       d   delete a partition                   # 删除分区  
       l   list known partition types           # 显示分区类型  
       m   print this menu                      # 显示帮助菜单  
       n   add a new partition                  # 新建分区  
       o   create a new empty DOS partition table   # 创建新的空白分区表  
       p   print the partition table            # 显示分区表的信息  
       q   quit without saving changes          # 不保存退出  
       s   create a new empty Sun disklabel     # 创建新的Sun磁盘标签  
       t   change a partitions system id        # 修改分区ID,可以通过l查看id  
       u   change display/entry units           # 修改容量单位,磁柱或扇区  
       v   verify the partition table           # 检验分区表  
       w   write table to disk and exit         # 保存退出  
       x   extra functionality (experts only)   # 拓展功能  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    4.4 创建主分区
    # 新建分区
    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-41943039, default 2048): 
    Using default value 2048  
    # # 分配主分区50MB 
    Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +50M
    Partition 1 of type Linux and of size 50 MiB is set
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    4.5 创建扩展分区
    # 新建分区
    Command (m for help): n    
    Partition type:  
    p   primary (1 primary, 0 extended, 3 free)  
    e   extended  
    # 创建扩展分区  
    Select (default p): e   
    # 序号默认为2, 回车即可
    Partition number (2-4, default 2):  
    # 默认即可
    First sector (104448-41943039, default 104448): 
    Using default value 104448
    # 什么都不输入,直接回车, 空间都给到扩展分区  
    Last sector, +sectors or +size{K,M,G} (104448-41943039, default 41943039): 
    Using default value 41943039
    Partition 2 of type Extended and of size 20 GiB is set
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    4.6 创建逻辑分区
    # 新建分区 
    Command (m for help): n   
    Partition type:  
    p   primary (1 primary, 1 extended, 2 free)  
    l   logical (numbered from 5)  
    # 创建逻辑分区  (建立拓展分区之后, 原本的e选择变成了l选项)
    Select (default p): l   
    Adding logical partition 5  
    # 默认回车即可
    First sector (106496-2097151, default 106496):  
    Using default value 106496  
    # 分配100MB空间  
    Last sector, +sectors or +size{K,M,G} (106496-41943039, default 41943039): +100M   
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    4.7 fdisk查看分区情况
    # 查看分区创建 
    Command (m for help): p 
    Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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: 0xdd515427
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048      104447       51200   83  Linux
    /dev/sdb2          104448    41943039    20919296    5  Extended
    /dev/sdb5          106496      311295      102400   83  Linux
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    4.8 保存分区设置
    # 保存分区  
    Command (m for help): w  
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
      
    # 检查磁盘是否是MBR分区方式  
    [root@kid ~]# fdisk /dev/sdb -l|grep type  
    Disk label type: dos
    
      
    # 安装parted, 刷新内核立即生效,无需重启  
    [root@kid ~]# yum -y install parted  
    [root@kid ~]# partprobe /dev/sdb  
    
    # 看出创建的分区(sdb是硬盘设备, 1, 2, 5是分区)
    [root@kid ~]# ll /dev/sdb*
    brw-rw----. 1 root disk 8, 16 Sep  6 21:00 /dev/sdb
    brw-rw----. 1 root disk 8, 17 Sep  6 21:00 /dev/sdb1
    brw-rw----. 1 root disk 8, 18 Sep  6 21:00 /dev/sdb2
    brw-rw----. 1 root disk 8, 21 Sep  6 21:00 /dev/sdb5
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    4.9 格式化磁盘
    mkfs格式化磁盘, 实质创建文件系统.
    
    • 1
    格式化硬盘命令: mkfs [选项] 参数
    选项:   
        -b  设定数据区块占用空间大小, 目前支持102420484096 bytes每个块.  
        -t  用来指定什么类型的文件系统, 可以是ext4, xfs  
        -i  设定inode的大小  
        -N  设定inode数量, 防止Inode数量不够导致磁盘不足  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 以xfs格式格式化磁盘的sdb1
    [root@kid ~]# mkfs.xfs  /dev/sdb1  
    size=6400 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=12800, 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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    # (不要操作) 格式化整个磁盘  格式化成ext4文件系统
    # 执行之后创建的sdb1, sdb2, sdb5都没了, 变成sdb
    [root@kid ~]# mkfs.ext4  /dev/sdb  
    mke2fs 1.42.9 (28-Dec-2013)
    /dev/sdb is entire device, not just one partition!
    # 确认
    Proceed anyway? (y,n) y
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    1310720 inodes, 5242880 blocks
    262144 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=2153775104
    160 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks: 
    	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    	4096000
    
    Allocating group tables: done                            
    Writing inode tables: done                            
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    4.10 挂载硬盘
    挂载硬盘命令: mount  挂载的设备 挂载目录
    如果需要使用该磁盘的空间, 需要准备一个空的目录作为挂载点, 与该设备进行关联.
    
    • 1
    • 2
    # 创建目录
    [root@kid ~]# mkdir /data  
    # 挂载硬盘
    [root@kid ~]# mount /dev/sdb1 /data  
    # df命令查看设备硬盘的使用情况
    [root@kid ~]# df
    Filesystem                  1K-blocks    Used Available Use% Mounted on
    devtmpfs                       485824       0    485824   0% /dev
    tmpfs                          497836       0    497836   0% /dev/shm
    tmpfs                          497836    7724    490112   2% /run
    tmpfs                          497836       0    497836   0% /sys/fs/cgroup
    /dev/mapper/centos_kid-root   8374272 1528888   6845384  19% /
    /dev/sda1                     1038336  140320    898016  14% /boot
    tmpfs                           99568       0     99568   0% /run/user/0
    /dev/sdb1                       47780    2688     45092   6% /data
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    5. Gdisk分区

    fdisk不支持给高于2TB的磁盘进行分区.
    如果有单块盘高于2TB, 使用Gdisk进行分区.
    
    • 1
    • 2
    # 安装gdisk分区工具  
    [root@kid ~]# yum install gdisk -y  
    
    • 1
    • 2
    5.1 新建分区
    # 创建一个新分区, 500MB大小  
    [root@kid ~]# gdisk /dev/sdb  
    # 之前硬盘格式是MBR, 现在使用gdisk分区, 硬盘分区由MBR转为GPT.
    # GPT fdisk(gdisk)版本0.8.10
    GPT fdisk (gdisk) version 0.8.10
    
    # 分区表扫描:
    Partition table scan:
      MBR: MBR only      # MBR:仅MBR 
      BSD: not present   # BSD:不存在
      APM: not present   # APM:不存在
      GPT: not present   # GPT:不存在
    
    
    ***************************************************************
    # 发现无效的GPT和有效的MBR;将MBR转换为GPT格式
    Found invalid GPT and valid MBR; converting MBR to GPT format
    # 在记忆中。此操作具有潜在的破坏性!退出
    in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
    # 如果不想转换MBR分区,请键入“q”
    typing 'q' if you don't want to convert your MBR partitions
    # 到GPT格式!n
    to GPT format!
    **************************************************************
    
    # m查看帮助
    Command (? for help): ?
    b	back up GPT data to a file
    c	change a partition's name
    d	delete a partition
    i	show detailed information on a partition
    l	list known partition types
    n	add a new partition
    o	create a new empty GUID partition table (GPT)
    p	print the partition table
    q	quit without saving changes
    r	recovery and transformation options (experts only)
    s	sort partitions
    t	change a partition's type code
    v	verify disk
    w	write table to disk and exit
    x	extra functionality (experts only)
    ?	print this menu
    
    # 先对之前的分区进行删除(输入d)
    Command (? for help): d
    # 输入分区编号1, 删除分区1 (现在提示只有1到5)
    Partition number (1-5): 1
    
    Command (? for help): d
    输入分区编号1, 删除分区2
    Partition number (2-5): 2
    
    Command (? for help): d
    # 仅剩下5(现在不需要输入编号直接回车即可)
    Using 5
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    # 创建新分区
    Command (? for help): n       
    # 默认即可(回车)
    Partition number (1-128, default 1):  
    # 默认即可(回车)
    First sector (34-2097118, default = 2048) or {+-}size{KMGTP}:  
    # 分配500M大小  
    Last sector (2048-2097118, default = 2097118) or {+-}size{KMGTP}: +500M 
    Current type is 'Linux filesystem'
    # 回车即可
    Hex code or GUID (L to show codes, Enter = 8300): 
    Changed type of partition to 'Linux filesystem'
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    5.2 查看分区
    # 打印查看 
    Command (? for help): p  
    Number  Start (sector)    End (sector)  Size       Code  Name  
       1            2048         1026047   500.0 MiB   8300  Linux filesystem  
    
    • 1
    • 2
    • 3
    • 4
    5.3 保存分区
    # 保存分区
    Command (? for help): w
    # 确认 
    Do you want to proceed? (Y/N): y    
    OK; writing new GUID partition table (GPT) to /dev/sdb.  
    The operation has completed successfully.  
    
    
    # 创建完成后, 可以尝试检查磁盘是否为gpt格式  
    [root@kid-node1 /]# fdisk /dev/sdb -l|grep type  
    Disk label type: gpt  
      
    # 安装parted, 刷新内核立即生效, 无需重启  
    [root@kid ~]# yum -y install parted  
    [root@kid ~]# partprobe /dev/sdb  
    
    # 查看分区
    [root@kid ~]# ll /dev/sdb*
    brw-rw----. 1 root disk 8, 16 Sep  6 21:24 /dev/sdb
    brw-rw----. 1 root disk 8, 17 Sep  6 21:24 /dev/sdb1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    5.4 格式化硬盘
    # 直接格式化sdb(sdb1分区不要了)
    [root@kid ~]# mkfs.xfs  /dev/sdb  
    # 设备被占用(重启)
    mkfs.xfs: cannot open /dev/sdb: Device or resource busy
    
    # 提示有一个分区建议使用 -f 强制格式
    [root@kid ~]# mkfs.xfs  /dev/sdb 
    mkfs.xfs: /dev/sdb appears to contain a partition table (gpt).
    mkfs.xfs: Use the -f option to force overwrite.
    
    # 格式化成功
    [root@kid ~]# mkfs.xfs  -f /dev/sdb 
    meta-data=/dev/sdb               isize=512    agcount=4, agsize=1310720 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=5242880, 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
    
    # 格式化硬盘 sdb1分区也被删除了
    [root@kid ~]# ll /dev/sdb*
    brw-rw----. 1 root disk 8, 16 Sep  6 21:39 /dev/sdb
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    5.5 挂载硬盘
    # 创建挂载点
    [root@kid ~]# mkdir /data_gdisk  
    # 挂载硬盘
    [root@kid ~]# mount /dev/sdb /data_gdisk  
    
    [root@kid ~]# df
    Filesystem                  1K-blocks    Used Available Use% Mounted on
    /dev/sdb                     20961280   32992  20928288   1% /data_gdisk
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    如果提示↓, 那么就是格式化硬盘出错了...
    mount: /dev/sdb is write-protected, mounting read-only
    mount: wrong fs type, bad option, bad superblock on /dev/sdb,
           missing codepage or helper program, or other error
    
           In some cases useful info is found in syslog - try
           dmesg | tail or so.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    6. 磁盘的挂载与卸载

    6.1 临时挂载
    前面我们已经提到过, 如果需要使用磁盘的空间, 需要准备一个空的目录作为挂载点, 与该设备进行关联.
    mount主要是为文件系统指定一个访问入口.
    
    通过mount进行挂载临时生效. (重启将会失效)
    选项:
        -t 指定文件系统挂载分区 
        -a 挂载/etc/fstab中的配置文件
        -o 指定挂载参数  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    # 创建挂载目录
    [root@kid ~]# mkdir /sdb
    # 挂载/dev/sdb至db目录  
    [root@kid ~]# mount -t xfs /dev/sdb  /sdb/  
    # 查询系统分区
    [root@kid ~]# df | grep 'db'
    ...
    /dev/sdb                     20961280   32992  20928288   1% /db
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    6.2 卸载磁盘
    使用umount进行卸载掉挂载的磁盘.
    选项:
    	-l 强制卸载  
    
    • 1
    • 2
    • 3
    # 卸载目录方式  
    [root@kid ~]# umount /sdb
    
    # 查询系统分区(没了)
    [root@kid ~]# df | grep 'sdb'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 另一种卸载设备方式  
    [root@kid ~]# umount /dev/sdb
    
    • 1
    • 2
    # umount不能卸载的情况  
    [root@kid ~]# umount /db1   
    umount: /db1: device is busy.  
            (In some cases useful info about processes that use  
             the device is found by lsof(8) or fuser(1)  
      
    # PS: 如上情况解决办法有两种, 1.切换至其他目录 2.使用'-l'选项强制卸载      
    [root@student db1]# umount -l /db1  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    6.3 永久挂载
    如果需要实现永久挂载则需要将挂载信息写入/etc/fstab配置文件中实现.  
    
    • 1
    #  使用blkid命令获取各设备的UUID  
    [root@kid ~]# blkid |grep "sdb"  
    /dev/sdb: UUID="d58900d6-4e56-4adf-b05f-d7ab46bdf791" TYPE="xfs" 
    
    • 1
    • 2
    • 3
    # 使用UUID挂载磁盘sdb分区至于sdb,  测试挂载  
    # 创建挂载目录
    [root@kid ~]# mkdir /sdb
    [root@kid ~]# mount UUID="d58900d6-4e56-4adf-b05f-d7ab46bdf791" /sdb
    
    • 1
    • 2
    • 3
    • 4
    # 开机自动挂载  写入/etc/fstab中,
    [root@kid ~]# vi /etc/fstab  
    ...
    /dev/sdb        /sdb                                xfs     defaults        0 0
    
    # 加载fstab配置文件, 同时检测语法是否有错误(不会有提示)
    [root@kid ~]# mount -a
    [root@kid ~]# df
    /dev/sdb                     20961280   32992  20928288   1% /sdb
    ...
    # 重启linux查看
    [root@kid ~]# reboot
    [root@kid ~]# df
    /dev/sdb                     20961280   32992  20928288   1% /sdb
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    6.5 自动挂载硬盘配置文件介绍
    /etc/fstab配置文件编写格式
    
    • 1
    要挂载的设备挂载点(入口)文件系统类型挂载参数是否备份是否检查
    /dev/sdb/sdbxfsdefaults00
    第四列:挂载参数.挂载参数有很多, 在这块我们了解即可, 不必深究.
    
    • 1
    参数含义
    async/sync是否为同步方式运行.默认async
    user/nouser是否允许普通用户使用mount命令挂载.默认nouser
    exec/noexe是否允许可执行文件执行.默认exec
    suid/nosuid是否允许存在suid属性的文件.默认suid
    auto/noauto执行mount -a 命令时, 此文件系统是否被主动挂载.默认auto
    rw/ro是否以只读或者读写模式进行挂载.默认rw
    default具有rw,suid,dev,exec,auto,nouser,async等默认参数的设定
    第五列:是否进行备份.通常这个参数的值为0或者1
    
    • 1
    选项含义
    0代表不做备份
    1代表要每天进行备份操作
    2代表不定日期的进行备份操作
    第六列:是否检验扇区:开机的过程中, 系统默认会以fsck检验我们系统是否为完整
    
    • 1
    选项含义
    0不要检验磁盘是否有坏道
    1检验
    2校验 (当1级别检验完成之后进行2级别检验)

    7. 虚拟磁盘介绍SWAP

    Swap分区在系统的物理内存不够时, 将硬盘空间中的一部分空间释放出来, 以供当前运行的程序使用.  
    PS: 当物理内存不够时会随机kill占用内存的进程, 从而产生oom, 临时使用swap可以解决.
    
    • 1
    • 2
    7.1 创建swap分区
    创建swap分区, 并格式化为swap分区.
    
    • 1
    # 接着上面的案例需要先卸载硬盘...(等下还要拿sdb做实验)
    [root@kid ~]# umount /sdb
    
    [root@kid ~]# fdisk  /dev/sdb       # 分1个G大小  
    # 硬盘分区
    Command (m for help): n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    # 选择主分区(拓展分区e, 后面执行格式化一直说 mkswap: error: swap area needs to be at least 40 KiB
    # 都设置1g还是小于40kb
    Select (default p): p
    # 默认即可, 回车
    Partition number (1-4, default 1): 
    # 默认即可, 回车
    First sector (2048-41943039, default 2048): 
    Using default value 2048
    # 分配1G
    Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G
    Partition 1 of type Extended and of size 1 GiB is set
    # 查
    Command (m for help): P
    
    Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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: 0xe62e2cb7
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048     2099199     1048576    5  Extended
    # 保存
    Command (m for help): W
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
    # 安装parted, 刷新内核立即生效, 无需重启  
    [root@kid ~]# yum -y install parted  
    [root@kid ~]# partprobe /dev/sdb  
    
    # 以swap格式 格式化分区
    [root@kid ~]# mkswap /dev/sdb1
    # 提示使用-f 强制执行
    mkswap: /dev/sdb1: warning: don't erase bootbits sectors
            (dos partition table detected). Use -f to force.
    Setting up swapspace version 1, size = 1048572 KiB
    no label, UUID=5c6e79f7-15ec-4559-917f-e79771bc74e5
    
    [root@kid ~]# mkswap -f /dev/sdb1
    mkswap: /dev/sdb1: warning: wiping old swap signature.
    Setting up swapspace version 1, size = 1048572 KiB
    no label, UUID=942ea77c-f6ac-4cc2-987e-e7b1a166b9e4
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    7.2 查看当前swap分区大小
    查看当前swap分区大小, free -m  
    
    • 1
    [root@kid ~]# free -m  
                 总数            可用     免费        共享缓    冲区/缓存     总数
                  total        used        free      shared  buff/cache   available
    Mem:            972         184         678           7         109         659
    Swap:          1023           0        1023  # 看这一行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    7.3 拓展缩小swap分区
    # 扩展swap分区大小, 将sdb1添加进去
    [root@kid ~]# swapon /dev/sdb1
    [root@kid ~]# free -m  
                  total        used        free      shared  buff/cache   available
    Mem:            972         184         677           7         109         659
    Swap:          2047           0        2047  # 看这一行, 增加了一个G
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    ps: swapon -a  代表激活所有的swap.  
    
    • 1
    # 缩小swap分区大小  
    [root@kid ~]# swapoff /dev/sdb1  
    [root@kid ~]# free -m  
                  total        used        free      shared  buff/cache   available
    Mem:            972         185         676           7         109         658
    Swap:          1023           0        1023  # 看这一行, 减少了一个G
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    7.4 检查当前swap分区设备
    [root@kid ~]# swapon -s  
    文件名                  类型           大小      已用     权限  
    Filename				Type		Size	Used	Priority
    /dev/dm-1                partition	   1048572	0	    -2
    
    # 扩展swap分区大小, 将sdb1添加进去
    [root@kid ~]# swapon /dev/sdb1
    # 再次查看
      Filename				Type		Size	Used	Priority
    /dev/dm-1                              	partition	1048572	0	-2
    /dev/sdb1                              	partition	1048572	0	-3
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    7.5 以文件形式创建swap虚拟内存
    如果磁盘没有过多的分区可用, 也可以通过文件增加SWAP空间, 本质上还是磁盘
    
    • 1
    # 从黑洞中获取数据, 创建一个500m的文件
    [root@kid ~]# dd if=/dev/zero of=/opt/swap_file bs=1M count=500  
    500+0 records in
    500+0 records out
    524288000 bytes (524 MB) copied, 3.93591 s, 133 MB/s
    
    # 设置文件权限
    [root@kid ~]# chmod 0600 /opt/swap_file  
    # 格式化文件
    [root@kid ~]# mkswap -f /opt/swap_file   
    Setting up swapspace version 1, size = 511996 KiB
    no label, UUID=a57eaa62-836b-4716-b39a-d34d79e15c5f
    
    # 拓展swap内存
    [root@kid ~]# swapon /opt/swap_file  
    # 查看swap内存
    [root@kid ~]# free -m  
    [root@kid ~]# free -m  
                  total        used        free      shared  buff/cache   available
    Mem:            972         186         160           7         625         636
    Swap:          2547           0        2547
    
    # 查看swap的设置
    [root@kid ~]# swapon -s  
    Filename				Type		Size	Used	Priority
    /dev/dm-1                              	partition	1048572	0	-2
    /dev/sdb1                              	partition	1048572	0	-3
    /opt/swap_file                         	file	511996	0	-4
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    PS: 如果希望swap开机自动挂载, 将swap信息追加至/etc/fstab即可.
    
    • 1

    ————————————————
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    ————————————————

  • 相关阅读:
    Ajax--Ajax加强--XMLHttpRequest的基本使用
    C++菜鸟日记1
    学习和巩固mysql的经典练习题目
    【C+】C++11 —— 线程库
    k8s集群中集群方式安装nacos
    Ubuntu 安装 docker
    MacOS Pro笔记本硬盘升级纪实
    Stable Diffusion中的embedding
    CTF训练 web安全SQl注入(X-Forwarded-For报文头)
    Greenplum分布键查询
  • 原文地址:https://blog.csdn.net/qq_46137324/article/details/126756872