DC's blog DC's blog
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)

DC

愿我一生欢喜,不为世俗所及.
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)
  • 计算机基础

  • linux基础

    • 准备工作
    • 初识shell与基础常用命令
    • 文件管理之基础命令
    • 文件管理之四大模式
    • 文件管理之命令补充
    • 文件管理之文件系统
    • 权限管理之用户与组
    • 权限管理之文件权限
    • 权限管理之ACL
    • 权限管理之su与sudo
    • 软件包管理之rpm
    • 软件包管理之yum
    • 查看进程
    • 管理进程
    • 存储管理之传统磁盘管理
      • 存储管理之LVM
      • 网络管理
      • shell基础
      • crond计划任务
      • 系统优化
    • mysql

    • git

    • 数据结构与算法

    • axure

    • english

    • docker

    • IT_Need
    • linux基础
    DC
    2022-10-08
    目录

    存储管理之传统磁盘管理

    """ -- 对磁盘进行分区并查看磁盘有哪些分区 -- """
    fdisk /dev/sdb              # -- 以MBR格式对某个磁盘进行分区
    gdisk /dev/sdd              # -- 以GPT格式对某个磁盘进行分区
    partprobe                   # -- 及时更新磁盘分区后的分区表信息!!
    lsblk                       # -- 查看所有磁盘分区情况
    ls /dev/sdb 连续按两下Tab键!! # -- 查看某一磁盘下有哪些分区 
    # -- 查看某个磁盘分区情况
         lsblk /dev/sda		
         fdisk /dev/sdb 进去后 输入p
         fdisk -l /dev/sdb
         gdisk -l /dev/sdd
    
    """ -- 格式化分区并挂载(临时、永久) -- """
    mkfs.xfs /dev/sdb1          # -- 格式化某个分区
    mount /dev/sdb1 /a          # -- 将某个分区进行临时挂载
    blkid                       # -- 查看每个分区的UUID
    vim /etc/fstab              # -- 设置开机自动挂载
    sed -i '$a /dev/sdb3 /opt xfs defaults 0 0' /etc/fstab 	
    mount -a                    # -- 不reboot重启机器,使配置文件/etc/fstab生效
                                # 前提: 分区对应的挂载参数设置为defaults或者多个挂载参数中包含auto
    df                          # -- 查看已经挂载磁盘的使用情况
    mount | grep sdb            # -- 最准确的显示是否挂载成功
    
    
    """ -- 制作swap分区并激活 -- """
    mkswap /dev/sdd3
    swapon /dev/sdd3            # -- 激活/临时挂载swap分区
    swapon -s                   # -- 查看有哪些挂载的swap分区
    swapoff -a                  # -- 关闭所有swap分区
    swapoff /dev/sdd3           # -- 关闭某个swap分区
    free -m                     # -- 查看虚拟内存情况
    vim /etc/fstab              # -- 开机自动挂载新增的swap分区 	临时 + 开机挂载 = 永久
    sed -i '$a /dev/sdd3 swap swap defaults 0 0' /etc/fstab 
    
    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

    # 磁盘分区

    回顾详见: 0_计算机基础/1_计算机硬件组成.md 中 存储器详解 这一部分的内容...

    lsblk /dev/sda

    ## -- 在vm虚拟机里可以直接添加多个硬盘 
    ## -- 这里我添加了 sdb sdc sdd三块硬盘(都是SCSI接口 容量分别为20G、20G、2500G/2.5TB) 
    [root@localhost ~]# ls /dev | grep sd
    sda     ## -- 第一块物理磁盘
    sda1    ## -- 第一块物理磁盘第一分区
    sda2    ## -- 第一块物理磁盘第二分区
    sdb     ## -- 第二块物理磁盘
    sdc     ## -- 第三块物理磁盘
    sdd     ## -- 第四块物理磁盘
    ## Ps:  vde4 第五块虚拟磁盘的第四分区
    
    ## -- 查看磁盘设备详情,以及分区情况
    """
    TYPE
    	disk 磁盘
    	part 分区
    	rom  只读
    """
    [root@localhost ~]# lsblk /dev/sda
    NAME            MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sda               8:0    0  20G  0 disk 
    ├─sda1            8:1    0   1G  0 part /boot
    └─sda2            8:2    0  19G  0 part 
      ├─centos-root 253:0    0  17G  0 lvm  /
      └─centos-swap 253:1    0   2G  0 lvm  [SWAP]
    [root@localhost ~]# lsblk /dev/sdb
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sdb    8:16   0  20G  0 disk 
    [root@localhost ~]# lsblk /dev/sdc
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sdc    8:32   0  20G  0 disk 
    [root@localhost ~]# lsblk /dev/sdd
    NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdd    8:48   0  2.5T  0 disk 
    
    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

    某个磁盘划分的分区主要分为三类: 
    主分区/引导分区 、 扩展分区 -- 包含-- 逻辑分区

    主分区/引导分区: 包含主引导记录MBR的分区,意味着可以安装系统(MBR里有OS的启动程序grub)
    Ps: 相关知识点翻阅  0_计算机基础/1_计算机硬件组成.md 中 计算机启动过程 以及 1_linux基础/0_准备工作.md Linux启动流程 这两部分内容...

    常见的磁盘分区方案有两种: MBR分区表和GUID分区表(简称GPT)
         MBR -- 最多能识别 2TB 的容量 ; 最多只能支持4个主分区 or 3个主分区+1个扩展分区(逻辑分区不限制)
         GPT -- 支持的磁盘容量比 MBR 大得多,最多支持128个主分区

    我们拿到一块没有分区的新硬盘, 首先将硬盘划分出n个主分区(MBR方案通常是3个), 再将硬盘剩余空间给扩展分区, 然后将扩展分区划分为若干个逻辑分区,具体的细节操作后文会详细阐述..

    磁盘分区的工具 
    fdisk 工具 -- MBR
    gdisk 工具 -- GPT

    磁盘容量小于2TB的通常用MBR, GPT当然也可以,但存着效率的问题...


    # MBR进行分区

    fdisk /dev/sdb

    m        查看帮助
    q         退出, 未w保存的分区信息不会写入磁盘,不会生效
    n         新建分区(p 主分区;e 扩展分区)
    d         删除分区
    p         查看磁盘已划分分区的信息
    w         保存

    ★ 创建3个大小为1G的主分区,剩余容量给扩展分区,扩展分区里划分出了两个逻辑分区,一个为2G,另一个为3G.. 

    中途还验证了,MBR的方案新建四个主分区后,不能再新建任何分区..

    [root@localhost ~]# fdisk /dev/sdb
    欢迎使用 fdisk (util-linux 2.23.2)。
    ... ... ...
    
    """ -- 新建第一个主分区分区(1G) -- """
    命令(输入 m 获取帮助): n	## -- 新建分区
    Partition type:
       p   primary (0 primary, 0 extended, 4 free) ## -- 主分区
       e   extended    ## -- 扩展分区
    Select (default p): p   ## -- 选择新建主分区
    分区号 (1-4,默认 1):     ## -- 回车,使用默认的
    ## -- 上一个分区的结束应该作为下一个分区的启始 
    起始 扇区 (2048-41943039,默认为 2048):		## -- 回车,启始位置不指定使用默认的
    将使用默认值 2048
    Last 扇区, +扇区 or +size{K,M,G} (2048-41943039, 默认为 41943039):+1G  ## -- 1GB大小
    分区 1 已设置为 Linux 类型,大小设为 1 GiB
    
    """ -- 重复上述步骤,新建第二个第三个第四个大小都为1G的主分区 -- """
    命令(输入 m 获取帮助): n
    Select (default p): p	
    分区号 (2-4,默认 2):
    起始 扇区 (2099200-41943039,默认为 2099200):
    Last 扇区, +扇区 or +size{K,M,G} (2099200-41943039, 默认为 41943039):+1G
    
    命令(输入 m 获取帮助): n
    Select (default p): p	
    分区号 (3,4,默认 3):
    起始 扇区 (4196352-41943039,默认为 4196352):
    Last 扇区, +扇区 or +size{K,M,G} (4196352-41943039, 默认为 41943039):+1G
    
    命令(输入 m 获取帮助): n
    Select (default e): p ## -- 建第4个分区的时候,fdisk工具已经开始提示,"default e,该建扩展分区啦"
                          ## -- 当然,可以不听,执意创建主分区
    已选择分区 4	 ## -- 可以发现,因为只剩一个分区了,就不让你选择分区号啦
    起始 扇区 (6293504-41943039, 默认为 6293504):
    Last 扇区, +扇区 or +size{K,M,G} (6293504-41943039, 默认为 41943039):+1G
    
    """ -- 我们已经创建了4个主分区(大小都为1G),哪怕还剩16G,空间够用也不能继续新建分区啦 -- """
    命令(输入 m 获取帮助): n
    ## -- 如果要创建四个以上的分区,必须替换一个主分区优先使用扩展分区!!
    If you want to create more than four partitions, you must replace a
    primary partition with an extended partition first.
    
    """ -- 删除第4个分区 -- """
    命令(输入 m 获取帮助): d
    分区号 (1-4,默认 4): 4
    分区 4 已删除
    
    """ -- 创建第4个分区为扩展分区,磁盘剩余的空间都给它 -- """
    命令(输入 m 获取帮助):n
    Partition type:
       p   primary (3 primary, 0 extended, 1 free)
       e   extended
    Select (default e): e
    已选择分区 4
    起始 扇区 (6293504-41943039,默认为 6293504):
    将使用默认值 6293504
    Last 扇区, +扇区 or +size{K,M,G} (6293504-41943039, 默认为 41943039): ## -- 空格,默认剩下的都给
    将使用默认值 41943039
    分区 4 已设置为 Extended 类型, 大小设为 17 GiB
    
    """ -- 查看磁盘已划分分区的信息 -- """
    命令(输入 m 获取帮助): p
    
    磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理): 512 字节 / 512 字节
    I/O 大小(最小/最佳): 512 字节 / 512 字节
    磁盘标签类型: dos
    磁盘标识符: 0x651efb78
    ## -- 可以观察到,每个分区都是紧挨着的 2099199-2099200 4196351-4196352 6293503-6293504
       设备 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    41943039    17824768    5  Extended
    
    """ -- 已经划分了四个主分区,接着新建的分区是在扩展分区里划分的逻辑分区 新建两个逻辑分区(2G和3G) -- """
    命令(输入 m 获取帮助): n
    All primary partitions are in use
    添加逻辑分区 5
    ## -- 可以观察到逻辑分区默认的启始 6295552 接近于/dev/sdb4这一扩展分区的启始 6293504
    ## -- 没有紧贴,空出来的那部分空间记录的就是扩展分区里逻辑分区的信息
    起始 扇区 (6295552-41943039,默认为 6295552): ## -- 同样的不指定启始位置
    将使用默认值 6295552
    Last 扇区, +扇区 or +size{K,M,G} (6295552-41943039,默认为 41943039): +2G
    分区 5 已设置为 Linux 类型,大小设为 2 GiB
    
    命令(输入 m 获取帮助): n
    All primary partitions are in use
    添加逻辑分区 6
    起始 扇区 (10491904-41943039,默认为 10491904):
    将使用默认值 10491904
    Last 扇区, +扇区 or +size{K,M,G} (10491904-41943039,默认为 41943039): +3G
    分区 6 已设置为 Linux 类型,大小设为 3 GiB
    
    """ -- 保存退出 -- """
    命令(输入 m 获取帮助): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    正在同步磁盘.
    
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102

    可以查看下/dev/sdb的分区结果

    partprobe lsblk /dev/sdb

    ## -- 执行partprobe命令刷新一下分区表 更新分区表信息
    [root@localhost ~]# partprobe
    
    ## -- 我们主要使用 sdb1、sdb2、sdb3、sdb5、sdb6
    [root@localhost ~]# ls /dev/sdb          ## -- 连续按两下Tab键!!
    sdb   sdb1  sdb2  sdb3  sdb4  sdb5  sdb6  
    [root@localhost ~]# lsblk /dev/sdb
    NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sdb      8:16   0  20G  0 disk 
    ├─sdb1   8:17   0   1G  0 part 
    ├─sdb2   8:18   0   1G  0 part 
    ├─sdb3   8:19   0   1G  0 part 
    ├─sdb4   8:20   0   1K  0 part 
    ├─sdb5   8:21   0   2G  0 part 
    └─sdb6   8:22   0   3G  0 part 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    # GPT进行分区

    /dev/sdd 磁盘的空间大小为2.5T

    [root@localhost ~]# lsblk /dev/sdd
    NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdd    8:48   0  2.5T  0 disk 
    
    1
    2
    3

    n         新建分区(建的每个分区都是主分区) p         查看已建分区的信息 d         删除 w        保存 q        退出

    [root@localhost ~]# gdisk /dev/sdd
    Command (? for help): n   
    Partition number (1-128, default 1): 
    First sector (34-5242879966, default = 2048) or {+-}size{KMGTP}: 
    Last sector (2048-5242879966, default = 5242879966) or {+-}size{KMGTP}: +1G
    Current type is 'Linux filesystem' 	## - 当前类型是“Linux 文件系统” 
    Hex code or GUID (L to show codes, Enter = 8300):  ## - 通过L查看8300指的就是“Linux 文件系统” 
    																		## - Linux文件系统包含xfs,也就是该分区可以选择xfs格式化
    Changed type of partition to 'Linux filesystem'
    
    Partition number (2-128, default 2): 
    Last sector (2099200-5242879966, default = 5242879966) or {+-}size{KMGTP}: +1G
    
    Command (? for help): p
    Disk /dev/sdd: 5242880000 sectors, 2.4 TiB
    ... ... ...
    
    Number  Start (sector)    End (sector)  Size       Code  Name
       1            2048         2099199   1024.0 MiB  8300  Linux filesystem
       2         2099200         4196351   1024.0 MiB  8300  Linux filesystem
      
    Command (? for help): w
    Do you want to proceed? (Y/N): y
    OK; writing new GUID partition table (GPT) to /dev/sdd.
    The operation has completed successfully.
    
    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

    查看sdd分区的情况

    [root@localhost ~]# lsblk /dev/sdd
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdd      8:48   0  2.5T  0 disk 
    ├─sdd1   8:49   0    1G  0 part 
    └─sdd2   8:50   0    1G  0 part 
    
    1
    2
    3
    4
    5

    # 制作文件系统与挂载

    磁盘容量小于2T的用MBR进行分区,容量大于2T的用GPT进行分区..
    往后的操作就一样啦, 分完区后选择xfs对分区进行格式化...然后进行挂载..

    # 格式化/制作文件系统
    ## -- 注意: 格式化后,分区里面的数据都没了
    mkfs.xfs /dev/sdb1   # -- 格式化sdb1分区
    mkfs.xfs /dev/sdb2   # -- 格式化sdb2分区
    mkfs.xfs /dev/sdb3   # -- 格式化sdb3分区
    mkfs.xfs /dev/sdb5	 # -- 格式化sdb5分区
    mkfs.xfs /dev/sdb6   # -- 格式化sdb6分区
    mkfs.xfs /dev/sdd1	 # -- sdd1分区
    ## -- 试着对/dev/sdb4这一扩展分区进行格式化,提示sdb4里包含分区表(指的就是sdb5、sdb6两个逻辑分区)
    ## -- 可以加上-f选项,强制格式化,但通常不会这么做
    [root@localhost ~]# mkfs.xfs /dev/sdb4
    mkfs.xfs: /dev/sdb4 appears to contain a partition table (dos).
    mkfs.xfs: Use the -f option to force overwrite.
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    磁盘可以不分区,直接格式化制作文件系统,相当于整个盘是一个分区!!不建议这样做..

    # 临时挂载

    mount -t 源 挂载点

    mount -a 可以不重启服务器, 让/etc/fstab中的永久挂载配置生效!

    mkdir /a
    mkdir /b
    mkdir /c
    mkdir /d
    mkdir /e
    mount /dev/sdb1 /a
    mount /dev/sdb2 /b
    mount /dev/sdb3 /c
    mount /dev/sdb5 /d
    mount /dev/sdb6 /e
    [root@localhost ~]# df | grep sdb
    ## 文件系统                 1K-块    已用     可用 		已用% 挂载点
    /dev/sdb1                1038336   32992  1005344    4% 	/a
    /dev/sdb2                1038336   32992  1005344    4% 	/b
    /dev/sdb3                1038336   32992  1005344    4% 	/c
    /dev/sdb5                2086912   32992  2053920    2% 	/d
    /dev/sdb6                3135488   32992  3102496    2% 	/e
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 卸载
    ## -- umount /dev/sdb1 卸载文件系统或挂载点都能达到预期的效果
    umount /a /b /c /d /e  # -- 卸载多个
    """
    若正处于某个分区下,umount卸载该分区,会提示目标忙
    解决方案一: cd 到其他分区下
    解决方案二: umount -l /a # -- 加上l选项,强制卸载
    """
    
    1
    2
    3
    4
    5
    6
    7
    # 从右往左最近原则

    从右往左最近原则 同一个分区可以有多个挂载点

    判断文件属于哪一个分区,需要从右到左进行分析..
    从右往左最近原则: 文件离哪个挂载点最近, 就会存储到最近的挂载点所在的分区里..

    打个比方, 在挂载点是个水龙头, 水从哪里来?挂载点从所对应的某个分区中取水!!!

    mkdir /opt/a                    ## -- opt目录在根分区/里;根分区下创建的a目录也在根分区里
    mount /dev/sdb1 /opt/a          ## -- /opt/a成为了sdb1分区的挂载点
    mkdir /opt/a/b                  ## -- 在/opt/a挂载点下创建的b目录存储在sdb1分区里
    mount /dev/sdb2 /opt/a/b        ## -- /opt/a/b成为了sdb2分区的挂载点
    touch /opt/a/b/1.txt            ## -- 在/opt/a/b挂载点下创建的1.txt文件存储在sdb2分区里
    """到此为止,问这几个分区下分别存储了什么? 可以反向验证**从右往左最近原则**!!!
    根分区				opt、a
    sdb1分区		 b
    sdb2分区		 1.txt 
    
    ★ /opt/a/b/1.txt 反向验证分析: 1.txt离/opt/a/b挂载点最近; b离/opt/a挂载点最近
    
    简单粗暴,卸载了哪个分区,那个分区里的内容就不会显示..
    但首先你要能卸载的了,比如这里直接umount /opt/a卸载sdb1分区是失败的!!要先卸载sdb2分区..
    """
    [root@localhost opt]# tree /opt
    /opt
    └── a
        └── b
            └── 1.txt
    
    2 directories, 1 file
    [root@localhost opt]# echo 111 > /opt/a/b/1.txt
    [root@localhost opt]# cat /opt/a/b/1.txt 
    111
    [root@localhost opt]# df | grep sdb | grep -v grep
    /dev/sdb1                1038336   32992  1005344    4% /opt/a
    /dev/sdb2                1038336   32996  1005340    4% /opt/a/b
    
    """sdb2分区隐居山林,为何1.txt文件神秘消失?
    因为1.txt文件是存储在sdb2分区里的!!sdb2分区未挂载就读取不了里面的内容.
    """
    [root@localhost opt]# umount /opt/a/b
    [root@localhost opt]# tree /opt
    /opt
    └── a
        └── b
    
    2 directories, 0 files
    
    """趁乱在/opt/a/b下创建的2.txt文件,根据从右到左最近原则,是存储在挂载点/opt/a所对应的sdb1分区里!!
    """
    [root@localhost opt]# echo 222 > /opt/a/b/2.txt
    [root@localhost opt]# cat /opt/a/b/2.txt 
    222
    [root@localhost opt]# tree /opt
    /opt
    └── a
        └── b
            └── 2.txt
    
    2 directories, 1 file
    
    """重新让/opt/a/b成为sdb2分区的挂载点,2.txt文件消失,1.txt文件重见江湖!
    因为/opt/a/b挂载点会从sdb2分区里取水,sdb2分区里只有1.txt,可没有2.txt
    """
    [root@localhost opt]# mount /dev/sdb2 /opt/a/b
    [root@localhost opt]# tree /opt
    /opt
    └── a
        └── b
            └── 1.txt
    
    2 directories, 1 file
    
    """开始作妖,/test和/opt/a/b都作为sdb2分区的挂载点!!
    所以神奇的发现,新建的test目录下也出现了1.txt文件!!
    进一步验证了,挂载点会从所对应的分区里取水!!
    需要注意的是:不管是改变/test还是/opt/a/b下的1.txt文件,实则上都是更改sdb2分区里存储的1.txt!!!
    					 /test/1.txt和/opt/a/b/1.txt会同时改变!!!
    """
    [root@localhost opt]# cd
    [root@localhost ~]# mkdir /test
    [root@localhost ~]# mount /dev/sdb2 /test
    [root@localhost ~]# tree /test
    /test
    └── 1.txt
    
    0 directories, 1 file
    [root@localhost ~]# mount | grep /dev/sdb2  ## -- df可能不会显示全,但mount命令显示的肯定是全的!!!
    /dev/sdb2 on /opt/a/b type xfs (rw,relatime,attr2,inode64,noquota)
    /dev/sdb2 on /test type xfs (rw,relatime,attr2,inode64,noquota)
    
    """小小验证下,b目录和2.txt都是存储在/opt/a对应的sdb1分区里
    sdb1分区退隐江湖,b目录和2.txt都会消失!!!
    """
    [root@localhost ~]# tree /opt
    /opt
    └── a
        └── b
            └── 1.txt
    
    2 directories, 1 file
    ## -- 特别注意这里,直接umount /opt/a是失败的!!
    [root@localhost ~]# umount /opt/a
    umount: /opt/a:目标忙。
            (有些情况下通过 lsof(8) 或 fuser(1) 可以
             找到有关使用该设备的进程的有用信息)
    [root@localhost ~]# umount /opt/a/b
    [root@localhost ~]# tree /opt
    /opt
    └── a
        └── b
            └── 2.txt
    
    2 directories, 1 file
    [root@localhost ~]# umount /opt/a
    [root@localhost ~]# tree /opt
    /opt
    └── a
    
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    # 永久挂载

    上面操作的挂载都是临时挂载, reboot命令重启服务器后, 挂载会失效!!!
    而linux中有些挂载就是永久的,如何做到的呢?

    /etc/fstab文件

    要挂载的设备 挂载点(入口) 文件系统类型 挂载参数 是否备份 是否检查
    UUID 挂载点路径 eg: xfs defaults 0 0

    Ps: 通常是defaults 0 0, 具体的选项配置详见 https://zhuanlan.zhihu.com/p/337009754

    ## -- 查看linux中永久挂载的信息
    [root@localhost ~]# cat /etc/fstab
    /dev/mapper/centos-root 									/          xfs     defaults        0 0
    UUID=7edef40b-555b-485b-a94c-4b345143b5d5 /boot      xfs     defaults        0 0
    /dev/mapper/centos-swap 									swap       swap    defaults        0 0
    
    ## -- 查看每个磁盘的UUID
    [root@localhost ~]# blkid
    /dev/sdb1: UUID="057edccc-4db0-4688-bb18-5e2d5e681c5e" TYPE="xfs" 
    /dev/sdb2: UUID="41a7d6a4-b8b6-489a-892a-2e2c1e7d295e" TYPE="xfs" 
    /dev/sdb3: UUID="db12f68f-9ea0-4b7a-a927-47d8345dedd3" TYPE="xfs" 
    /dev/sdb5: UUID="29301422-0035-417c-bfd0-8d244ce59e0c" TYPE="xfs" 
    /dev/sdb6: UUID="73122250-bd11-4ca2-8c84-0a2e412ef708" TYPE="xfs" 
    /dev/sda1: UUID="7edef40b-555b-485b-a94c-4b345143b5d5" TYPE="xfs" 
    /dev/sda2: UUID="jG51ec-dKTo-gsGv-o7wf-2wXp-Irc8-FYrzXT" TYPE="LVM2_member" 
    /dev/mapper/centos-root: UUID="dc8ff591-4043-4c29-82bd-cdc39a0d48fb" TYPE="xfs" 
    /dev/mapper/centos-swap: UUID="9a6222cd-5632-4215-acbc-94a9b22ddd6e" TYPE="swap" 
    
    ## -- 编辑/etc/fstab 将sdb1和sdb2进行挂载 通常使用UUID,使用分区名称(不建议)也可以
    [root@localhost ~]# mkdir /root/test1
    [root@localhost ~]# mkdir /root/test2
    [root@localhost ~]# tail -2 /etc/fstab 
    UUID=057edccc-4db0-4688-bb18-5e2d5e681c5e /root/test1 xfs defaults 0 0
    /dev/sdb2 /root/test2 xfs defaults 0 0 
    
    ## -- reboot重启服务器后永久挂载生效
    [root@localhost ~]# reboot
    
    ## -- 检查是否永久挂载成功
    [root@localhost ~]# mount | grep sdb
    /dev/sdb1 on /root/test1 type xfs (rw,relatime,attr2,inode64,noquota)
    /dev/sdb2 on /root/test2 type xfs (rw,relatime,attr2,inode64,noquota)
    
    ## -- 不重启服务器,使用mount -a重新加载配置文件实现自动挂载
    [root@localhost ~]# sed -i '$a /dev/sdb3 /opt xfs defaults 0 0' /etc/fstab 
    [root@localhost ~]# mount -a
    [root@localhost ~]# mount | grep sdb
    /dev/sdb1 on /root/test1 type xfs (rw,relatime,attr2,inode64,noquota)
    /dev/sdb2 on /root/test2 type xfs (rw,relatime,attr2,inode64,noquota)
    /dev/sdb3 on /opt type xfs (rw,relatime,attr2,inode64,noquota)
    
    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

    # 制作swap交换分区

    查看swap分区的大小,当前是2个G,准备给它加1个G..
    步骤: 新增分区 -- mkswap制作swap文件系统 -- 激活分区 -- 开机自动挂载新增的swap分区

    swapon      /dev/sdd3 swapon      -s swapoff      /dev/sdd3 swapoff      -a

    [root@localhost ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:            972         621          61           9         289         190
    Swap:          2047           4        2043
    
    """ -- 从磁盘中划个1G空间的分区 sdb的逻辑分区 sdd的主分区都可以 -- """
    gdisk /dev/sdd
    partprobe 
    
    [root@localhost ~]# lsblk /dev/sdd
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdd      8:48   0  2.5T  0 disk 
    ├─sdd1   8:49   0    1G  0 part 
    ├─sdd2   8:50   0    1G  0 part 
    └─sdd3   8:51   0    1G  0 part 
    
    """ -- 制作swap分区 -- """
    [root@localhost ~]# mkswap /dev/sdd3
    正在设置交换空间版本 1,大小 = 1048572 KiB
    无标签,UUID=37fcc4d0-a581-404a-b13c-45311d09c7fc
    
    """ -- 激活/临时挂载 刚制作好的swap分区 -- """
    [root@localhost ~]# swapon /dev/sdd3
    [root@localhost ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:            972         622          70           9         279         189
    Swap:          3071           4        3067
    
    [root@localhost ~]# swapon -s
    文件名				类型		大小	已用	权限
    /dev/sdd3                              	partition	1048572	4872	-2
    /dev/dm-1                              	partition	2097148	0	-3
    
    ## -- 开机自动挂载新增的swap分区
    ## -- 最好使用UUID
    [root@localhost ~]# sed -i '$a /dev/sdd3 swap swap defaults 0 0' /etc/fstab 
    """
    实验了下 swapoff /dev/sdd3 关闭sdd3这个swap分区,
    尽管写进了配置文件, 但使用mount -a命令不会重新挂载上去
    可以使用swapon /dev/sdd3 重新激活/临时挂载
    开机的时候会自动挂载文件里的swap配置
    不就相当于永久挂载了嘛!!!!
    """
    
    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

    # Dell R740服务器制作RAID

    RAID的基础理论详见: 0_计算机基础/1_计算机硬件组成.md 中 ◎ RAID技术 部分的内容...

    Ps: 提一嘴,实体服务器需要做RAID,但大多数中小型公司用的阿里云(提供的是虚拟机),云环境不需要做RAID!!

    简单回顾下:
         在生产环境中,通常会将多个盘合到一起做一个RAID...
         RAID0: 两块盘同时提供读写的功能,坏其中一块就不能用了;
         RAID1: 称作备份盘/镜像盘, 一块读写,另一块备份, 通常系统盘做RAID1;
         RAID5: 既考虑了读写速度也考虑了冗余..
         RAID10: 土豪玩法.. 结合raid0和1的优点..

    制作RAID需要raid卡这个设备,硬盘是插在raid卡上的.. raid卡将这些硬盘做成磁盘阵列..

    具体过程参考: https://www.cnblogs.com/linhaifeng/articles/13921161.html

    注意几个地方:
    4.在BIOS界面ctrl+R进入阵列卡,不同厂商快捷键不一样,需要查一下;
    6.多少个盘根据自己的需求选择;(这里选择的是要操作哪些盘)
    7.create New VD # -- VD虚拟磁盘,即多个硬盘组成一个虚拟层面的硬盘
    8.这里是选择哪些盘做RAID  按ok完成
    9.可以将在步骤6中已经选中而没有做raid的硬盘 继续做其他raid
    11.做的RAID5的话,还可以有一块热备盘(当RAID5中任一盘坏了,其余2块可以做奇偶校验将数据恢复到格外的热备盘中) 
    
    1
    2
    3
    4
    5
    6
    7

    # 修复服务器文件系统

    将一块硬盘分区,格式化制作文件系统,再挂载使用.. linux针对写操作会先将数据在内存的buffer缓冲区中攒一波, 若在将buffer中的数据往硬盘中写的过程中,突然断电重启后会提示文件错误: “emergency mode”...

    # 模拟文件系统损坏
    """ 1、准备一个1G的文件系统与数据 """
    fdisk /dev/sdc            # -- 创建容量大小为1G的分区/dev/sdc1
    mkfs.xfs /dev/sdc1        # -- 格式化/dev/sdc1分区
    mount /dev/sdc1 /mnt/     # -- 挂载使用
    echo 111 > /mnt/1.txt     # -- 1.txt在sdc1分区中
    
    [root@localhost ~]# lsblk /dev/sdc
    NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sdc      8:32   0  20G  0 disk 
    └─sdc1   8:33   0   1G  0 part 
    [root@localhost ~]# mount | grep sdc1
    /dev/sdc1 on /mnt type xfs (rw,relatime,attr2,inode64,noquota)
    
    """ 2、模拟文件系统损坏 """
    ## -- 数据往硬盘中的文件写入的过程中,突然断电.. 文件就不完整啦
    ## -- 这里通过dd命令用冒0机往sdc硬盘中输入500M的数据,会覆盖掉硬盘中分区表的信息,整个结构就乱了..
    ## -- 注意哦,不是sdc1 是sdc
    [root@localhost ~]# dd if=/dev/zero of=/dev/sdc bs=500M count=1
    记录了1+0 的读入
    记录了1+0 的写出
    524288000字节(524 MB)已复制,1.14939 秒,456 MB/秒
    
    """ 3、卸载后重新挂载,发现无法挂载 模拟断电后重启 """
    [root@localhost ~]# umount /mnt 
    [root@localhost ~]# mount /dev/sdc1 /mnt/
    mount: /dev/sdc1 写保护,将以只读方式挂载
    mount: 文件系统类型错误、选项错误、/dev/sdc1 上有坏超级块、
           缺少代码页或助手程序,或其他错误
    
           有些情况下在 syslog 中可以找到一些有用信息- 请尝试
           dmesg | tail  这样的命令看看..
     
    ## -- 吐槽一下: vm虚拟机上进行模拟,直接把/dev/sdc1分区给我干没了..无法开展修复的实验了..
    ## -- 修复部分就听理论吧!!
    [root@localhost ~]# lsblk /dev/sdc
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sdc    8:32   0  20G  0 disk 
    
    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

    文件系统损坏后,若不能成功重启,可以用单用户模式(进去无挂载)、光盘修复模式来管理操作本地硬盘中的东西...

    # 文件系统修复

    使用xfs_repair 命令强制修复后, 数据丢失, 所以此时修复的意义在于可用, 所以数据要有备份意识...

    xfs_repair /dev/sdc1 			# -- 修复时先尝试这条命令
    xfs_repair -L /dev/sdb1 	# -- 若上一条命令失败,进行强制修复
    mount /dev/sdc1 /mnt/			# -- 重新挂载
    
    若是ext文件系统,修复需要用fsck命令
    # -y 对所有问题都回答 "yes"
    # -f 即使文件系统标记为 clean 也强制进行检查
    fsck -f -y /dev/sda1 
    
    1
    2
    3
    4
    5
    6
    7
    8

    # xfs文件系统备份与恢复

    # 备份 xfsdump

    全量备份 + 增量备份
    第一次备份是全量备份,增量备份是和上一次的备份进行比较, 仅备份有差异的文件...

    [root@localhost ~]# rpm -qf `which xfsdump`
    xfsdump-3.1.7-1.el7.x86_64
    [root@localhost ~]# rpm -qf `which xfsrestore`
    xfsdump-3.1.7-1.el7.x86_64
    
    1
    2
    3
    4

    选项

    选项 含义
    -l 是L的小写, 指定level, 有0~9共10个等级.默认值为0, 即完全备份 ; 数字1至9都是增量备份!!
    -L 指定该次备份的标签名.
    -M 简易描述信息, 关于什么什么的备份
    -f 备份的文件存放的路径 + 空格 + 需要备份文件的路径(备份源路径)

    切记: 备份源路径后面千万不要加/斜杠

    """ -- 数据准备 -- """
    [root@localhost ~]# mount | grep -E "sdb3|sda1"
    /dev/sdb3 on /opt type xfs (rw,relatime,attr2,inode64,noquota)
    /dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)
    [root@localhost ~]# cp -r /etc /opt/
    [root@localhost ~]# du -sh /opt
    43M	/opt
    [root@localhost ~]# echo 111 > /opt/1.txt
    [root@localhost ~]# ls /opt
    1.txt  etc
    [root@localhost ~]# cat /opt/1.txt 
    111
    
    """ -- 1.先做全量备份 -- """
    ## -- 将sdb3分区的内容 备份到 sda1分区下 (备份源与备份文件要分别属于两个不同的硬盘)
    [root@localhost ~]# xfsdump -l 0 -L sdb3_bak -M sdb3_bak -f /boot/sdb3_bak_all /opt
    ... ... ...
    xfsdump: Dump Status: SUCCESS
    
    
    """ -- 2.做增量备份 做了两次增量备份-- """
    ## -- 增删改都属于增量的部分
    echo 222 >> /opt/1.txt
    echo 333 > /opt/2.txt
    # 通常会在增量备份文件名上加上时间
    xfsdump -l 1 -L sdb3_bak -M sdb3_bak -f /boot/sdb3_bak_add1 /opt
    
    echo 333333 > /opt/3.txt
    xfsdump -l 1 -L sdb3_bak -M sdb3_bak -f /boot/sdb3_bak_add2 /opt
    
    """ -- 查看 -- """
    # -- 备份源的大小
    [root@localhost ~]# du -sh /opt/
    43M	/opt/
    # -- 备份文件(全量、增量)的大小
    # 可以发现增量备份sdb3_bak_add1、sdb3_bak_add2的大小是小于全量备份的,全量备份的大小是小于备份源的
    [root@localhost ~]# ll -h /boot | grep sdb3_bak
    -rw-r--r--  1 root root  23K 8月  26 17:41 sdb3_bak_add1
    -rw-r--r--  1 root root  24K 8月  26 17:41 sdb3_bak_add2
    -rw-r--r--  1 root root  37M 8月  26 17:41 sdb3_bak_all
    
    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

    使用限制

    1.必须用root权限
    2.只能备份已挂载的文件系统
    3.只能备份XFS文件系统
    4.只能用xfsrestore进行恢复
    5.通过文件系统的UUID来分辨备份档,因此不能备份相同UUID的文件系统
    
    1
    2
    3
    4
    5
    # 恢复 xfsrestore
    """ -- 删除/opt里所有的内容 --"""
    [root@localhost ~]# ls /opt
    1.txt  2.txt  3.txt  etc
    
    0 directories, 3 files
    [root@localhost ~]# rm -rf /opt/*
    
    """ -- 依次恢复全量、增量1、增量2 -- """
    # 全量
    xfsrestore -f /boot/sdb3_bak_all /opt/
    [root@localhost ~]# ls /opt
    1.txt  etc
    [root@localhost ~]# cat /opt/1.txt
    111
    
    # 增量1
    xfsrestore -f /boot/sdb3_bak_add1 /opt/
    [root@localhost ~]# ls /opt
    1.txt  2.txt  etc
    [root@localhost ~]# cat /opt/1.txt
    111
    222
    [root@localhost ~]# cat /opt/2.txt
    333
    
    # 增量2
    xfsrestore -f /boot/sdb3_bak_add2 /opt/
    [root@localhost ~]# ls /opt
    1.txt  2.txt  3.txt  etc
    [root@localhost ~]# cat /opt/3.txt
    333333
    
    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

    管理进程
    存储管理之LVM

    ← 管理进程 存储管理之LVM→

    最近更新
    01
    deepseek本地部署+知识库
    02-17
    02
    实操-微信小程序
    02-14
    03
    教学-cursor深度探讨
    02-13
    更多文章>
    Theme by Vdoing | Copyright © 2023-2025 DC | One Piece
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式