• 正式班D24


    2020.11.06星期五  正式班D24

    13 磁盘管理

    13.1 两种分区格式

    13.1.1 磁盘命名

    • 磁盘在系统中的命名

      设备名称 分区信息 设备类型
      /dev/sda /dev/sda1 第一块物理磁盘第一分区
      /dev/sdb /dev/sdb2 第二块磁盘第二个分区
      /dev/vdd /dev/vdd4 第四块虚拟磁盘第四个分区
    • 三类分区:主分区<----扩展分区<----逻辑分区

      逻辑分区属于扩展分区,扩展分区属于主分区

      主分区又叫引导分区,是可以安装系统的分区

    • 两种分区格式

      mbr分区格式----->分区工具fdisk(最多四个主分区,通常用于<2T的硬盘空间)

      gpt分区格式------>分区工具gdisk(最多128个主分区,通常用于>2T的硬盘空间)

    13.1.2 mbr

    • 查看设备详情及分区情况

      [root@ccc ~]# lsblk
      NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      sda      8:0    0   10G  0 disk 
      ├─sda1   8:1    0  476M  0 part /boot
      ├─sda2   8:2    0  1.9G  0 part [SWAP]
      └─sda3   8:3    0  7.7G  0 part /
      sdb      8:16   0   20G  0 disk 
      ├─sdb1   8:17   0    1G  0 part /qq
      ├─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    1G  0 part 
      └─sdb6   8:22   0    1G  0 part 
      sr0     11:0    1  4.5G  0 rom  
      
      [root@ccc ~]# fdisk -l
      
      磁盘 /dev/sda:10.7 GB, 10737418240 字节,20971520 个扇区
      Units = 扇区 of 1 * 512 = 512 bytes
      扇区大小(逻辑/物理):512 字节 / 512 字节
      I/O 大小(最小/最佳):512 字节 / 512 字节
      磁盘标签类型:dos
      磁盘标识符:0x000c10cc
      
         设备 Boot      Start         End      Blocks   Id  System
      /dev/sda1   *        2048      976895      487424   83  Linux
      /dev/sda2          976896     4882431     1952768   82  Linux swap / Solaris
      /dev/sda3         4882432    20971519     8044544   83  Linux
      
      磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
      Units = 扇区 of 1 * 512 = 512 bytes
      扇区大小(逻辑/物理):512 字节 / 512 字节
      I/O 大小(最小/最佳):512 字节 / 512 字节
      磁盘标签类型:dos
      磁盘标识符:0x8d447f7c
      
         设备 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
      /dev/sdb5         6295552     8392703     1048576   83  Linux
      /dev/sdb6         8394752    10491903     1048576   83  Linux
      
    • 命令

      m  # 查看帮助
      q  # 退出
      n  # 新建分区(p主分区,e扩展分区)
      d  # 删除分区
      w  # 保存
      p  # 查看分区情况
      
    • fdisk工具

      [root@ccc ~]# fdisk /dev/sdb
      欢迎使用 fdisk (util-linux 2.23.2)。
      
      更改将停留在内存中,直到您决定将更改写入磁盘。
      使用写入命令前请三思。
      
      
      命令(输入 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
      分区 1 已设置为 Linux 类型,大小设为 1 GiB
      
      命令(输入 m 获取帮助):n
      Partition type:
         p   primary (1 primary, 0 extended, 3 free)
         e   extended
      Select (default p): p
      分区号 (2-4,默认 2):
      起始 扇区 (2099200-41943039,默认为 2099200):
      将使用默认值 2099200
      Last 扇区, +扇区 or +size{K,M,G} (2099200-41943039,默认为 41943039):+1G
      分区 2 已设置为 Linux 类型,大小设为 1 GiB
      
      命令(输入 m 获取帮助):n
      Partition type:
         p   primary (2 primary, 0 extended, 2 free)
         e   extended
      Select (default p): p
      分区号 (3,4,默认 3):
      起始 扇区 (4196352-41943039,默认为 4196352):
      将使用默认值 4196352
      Last 扇区, +扇区 or +size{K,M,G} (4196352-41943039,默认为 41943039):+1G
      分区 3 已设置为 Linux 类型,大小设为 1 GiB
      
      命令(输入 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 获取帮助):n
      All primary partitions are in use
      添加逻辑分区 5
      起始 扇区 (6295552-41943039,默认为 6295552):
      将使用默认值 6295552
      Last 扇区, +扇区 or +size{K,M,G} (6295552-41943039,默认为 41943039):+1G
      分区 5 已设置为 Linux 类型,大小设为 1 GiB
      
      命令(输入 m 获取帮助):p
      
      磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
      Units = 扇区 of 1 * 512 = 512 bytes
      扇区大小(逻辑/物理):512 字节 / 512 字节
      I/O 大小(最小/最佳):512 字节 / 512 字节
      磁盘标签类型:dos
      磁盘标识符:0x8d447f7c
      
         设备 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
      /dev/sdb5         6295552     8392703     1048576   83  Linux
      
      命令(输入 m 获取帮助):w
      The partition table has been altered!
      
      Calling ioctl() to re-read partition table.
      
      WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
      The kernel still uses the old table. The new table will be used at
      the next reboot or after you run partprobe(8) or kpartx(8)
      正在同步磁盘。
      
    • lsblk /dev/sdb查看一下

      [root@ccc ~]# 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 /qq
      ├─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   1G  0 part 
      └─sdb6   8:22   0   1G  0 part 
      

    13.1.3 gpt

    • 步骤与mbr相似

       # 需要先安装命令
      [root@ccc ~]# yum install gdisk -y
      

    13.2 制作文件系统并且挂载

    13.2.1 制作文件系统

    • 磁盘必须格式化制作文件系统,然后挂载才能使用

    • 一块磁盘可以不分区直接格式化制作文件系统

      [root@ccc ~]# mkfs.xfs /dev/sdb
      
    • 也可以基于mbr或gpt分区方式分区完毕后,针对某一个分区比如/dev/sdb1制作文件系统

      [root@ccc ~]# mkfs.xfs /dev/sdb1
      meta-data=/dev/sdb1              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
      [root@ccc ~]# 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
      [root@ccc ~]# mkfs.xfs /dev/sdb3
      meta-data=/dev/sdb3              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
      [root@ccc ~]# mkfs.xfs /dev/sdb4
      mkfs.xfs: /dev/sdb4 appears to contain a partition table (dos).
      mkfs.xfs: Use the -f option to force overwrite.
      [root@ccc ~]# mkfs.xfs /dev/sdb5
      meta-data=/dev/sdb5              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
      [root@ccc ~]# mkfs.xfs /dev/sdb6
      meta-data=/dev/sdb6              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
      

    13.2.2 挂载

    • 挂载

      [root@ccc ~]# mount /dev/sdb1 /opt
      [root@ccc ~]# df
      文件系统         1K-块    已用    可用 已用% 挂载点
      devtmpfs        487140       0  487140    0% /dev
      tmpfs           497840       0  497840    0% /dev/shm
      tmpfs           497840    7780  490060    2% /run
      tmpfs           497840       0  497840    0% /sys/fs/cgroup
      /dev/sda3      8034304 6531028 1503276   82% /
      /dev/sda1       484004  125552  358452   26% /boot
      tmpfs            99572       0   99572    0% /run/user/0
      /dev/sdb1      1038336   32992 1005344    4% /opt
      
    • 卸载

      [root@ccc ~]# umount /opt
      [root@ccc ~]# df
      文件系统         1K-块    已用    可用 已用% 挂载点
      devtmpfs        487140       0  487140    0% /dev
      tmpfs           497840       0  497840    0% /dev/shm
      tmpfs           497840    7780  490060    2% /run
      tmpfs           497840       0  497840    0% /sys/fs/cgroup
      /dev/sda3      8034304 6531028 1503276   82% /
      /dev/sda1       484004  125552  358452   26% /boot
      tmpfs            99572       0   99572    0% /run/user/0
      
    • 强制卸载

      [root@ccc ~]# umount -l /opt
      [root@ccc ~]# df
      文件系统         1K-块    已用    可用 已用% 挂载点
      devtmpfs        487140       0  487140    0% /dev
      tmpfs           497840       0  497840    0% /dev/shm
      tmpfs           497840    7780  490060    2% /run
      tmpfs           497840       0  497840    0% /sys/fs/cgroup
      /dev/sda3      8034304 6531028 1503276   82% /
      /dev/sda1       484004  125552  358452   26% /boot
      tmpfs            99572       0   99572    0% /run/user/0
      
    • 强制重新格式化

      [root@ccc ~]# mkfs.xfs /dev/sdb1 -f
      
    • 将/dev/sdb1挂载到/opt下,往/opt下新建文件,文件存到的是/dev/sdb1下,卸载/opt后,数据依然存在

    • 同一个分区/文件系统挂载到不同的文件夹下,数据的来源一致

    • 开机自动挂载

      # 查看UUID
      [root@ccc ~]# blkid
      /dev/sda1: UUID="b89e54ee-6c11-44da-b17d-25a1fb8e5bb5" TYPE="xfs" 
      /dev/sda2: UUID="762c7f34-e11a-49dd-8697-b7fa2546fef0" TYPE="swap" 
      /dev/sda3: UUID="b43c52c4-89a7-48d2-83e4-6e8d35553e64" TYPE="xfs" 
      /dev/sdb1: UUID="b0cde59c-5d48-4a53-87ec-85e428c07d82" TYPE="xfs" 
      /dev/sdb2: UUID="6ff6e47c-98b7-4bb1-ab9b-56a96fff7374" TYPE="xfs" 
      /dev/sdb3: UUID="7e7ee698-6a23-4786-9034-f3f7a23865eb" TYPE="xfs" 
      /dev/sdb5: UUID="92903935-1bee-4c35-87ce-317bff95bd2e" TYPE="xfs" 
      /dev/sdb6: UUID="85b1c2ed-bb44-4c3f-b576-4f72025895a6" TYPE="xfs" 
      /dev/sr0: UUID="2020-04-22-00-54-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
      
      # 编辑配置文件
      [root@ccc ~]# vim /etc/fstab
      [root@ccc ~]# tail -1 /etc/fstab 
      UUID=b0cde59c-5d48-4a53-87ec-85e428c07d82 /boot                   xfs     defaults        0 0
      方法二
      /dev/sdb1 /boot                   xfs     defaults        0 0
      
    • 磁盘挂载mount补充

      -t  # 指定文件系统
      -a  # 挂载/etc/fstab中配置的所有
      
      [root@ccc ~]# mkdir /db2
      [root@ccc ~]# mount -t xfs /dev/sdb2 /db2
      [root@ccc ~]# df
      文件系统         1K-块    已用    可用 已用% 挂载点
      devtmpfs        487140       0  487140    0% /dev
      tmpfs           497840       0  497840    0% /dev/shm
      tmpfs           497840    7788  490052    2% /run
      tmpfs           497840       0  497840    0% /sys/fs/cgroup
      /dev/sda3      8034304 6556084 1478220   82% /
      /dev/sdb1      1038336   32992 1005344    4% /opt
      /dev/sda1       484004  125552  358452   26% /boot
      tmpfs            99572       0   99572    0% /run/user/0
      /dev/sdb2      1038336   32992 1005344    4% /db2
      
      查看文件系统的UUID并挂载
      [root@ccc ~]# blkid | grep sdb1
      /dev/sdb1: UUID="b0cde59c-5d48-4a53-87ec-85e428c07d82" TYPE="xfs" 
      [root@ccc ~]# mount UUID="b0cde59c-5d48-4a53-87ec-85e428c07d82" /db2
      
      修改配置文件建议用UUID
      [root@ccc ~]# tail -1 /etc/fstab 
      UUID=b0cde59c-5d48-4a53-87ec-85e428c07d82 /boot                   xfs     defaults        0 0
      [root@ccc ~]# mount -a
      [root@ccc ~]# df
      ...
      
    • /etc/fstab配置文件编写格式

      需挂载的设备 挂载点 文件系统类型 挂载参数 是否备份 是否检查
      /dev/sdb1 /data xfs defaults 0 0

      第一列device:指定要挂载的文件系统的设备名称或块信息,除指定设备文件外,也可使用UUID、LABEL来指定分区。

      第二列dir:指定挂载点的路径。

      第三列type:指定文件系统类型,如ext3、ext4、xfs等。

      第四列options:指定挂载参数,默认为defaults。

      第五列dump:表示该挂载后的文件系统是否能被dump备份命令作用。

      第六列pass:指定如何使用fsck来检查硬盘。

      options指定挂在参数的类型

      参数 含义
      async/sync 是否同步方式运行,默认async(异步)
      user/nouser 是否允许普通用户使用mount命令挂载,默认nouser
      exec/noexec 是否允许可执行文件执行,默认exec
      suid/nisuid 是否允许存在suid属性的文件,默认suid
      auto/noauto 执行mount -a时,此文件是否被主动挂载,默认auto
      rw/ro 是否只读或者读写模式进行挂载,默认rw
      defaults 具有rw、suid、exec、auto、nouser、async等默认参数的设定

      dump选项的作用

      选项 含义
      0 不做备份
      1 每天进行备份操作
      2 不定日期的进行备份操作

      pass选项的含义

      选项 含义
      0 不检查
      1 检查,挂载点为/的时候(即根分区),必须写1,其他都不能写1
      2 检查,当1级别检验完成后进行2级别检验

    13.3 制作swap分区

    13.3.1 查看

    • free -m

      [root@ccc ~]# free -m
                    total        used        free      shared  buff/cache   available
      Mem:            972         115         762           7          94         736
      Swap:          1906           0        1906
      

    13.3.2 制作swap分区

    • mkswap

      # 首先磁盘进行分区
      [root@ccc ~]# mkswap /dev/sdb3  # 将/dev/sdb3格式化为swap
      

    13.3.3 激活swap分区

    • swapon

      [root@ccc ~]# free -m
                    total        used        free      shared  buff/cache   available
      Mem:            972         115         762           7          94         736
      Swap:          1906           0        1906
      [root@ccc ~]# swapon /dev/sdb3
      [root@ccc ~]# free -m
                    total        used        free      shared  buff/cache   available
      Mem:            972         116         761           7          94         735
      Swap:          2930           0        2930
      

    13.3.4 关闭swap分区

    • swapoff

      [root@ccc ~]# free -m
                    total        used        free      shared  buff/cache   available
      Mem:            972         116         761           7          94         735
      Swap:          2930           0        2930
      [root@ccc ~]# swapon -s
      文件名				类型		大小	已用	权限
      /dev/sda2                              	partition	1952764	0	-2
      /dev/sdb3                              	partition	1048572	0	-3
      [root@ccc ~]# swapoff /dev/sdb3
      [root@ccc ~]# swapon -s
      文件名				类型		大小	已用	权限
      /dev/sda2                              	partition	1952764	0	-2
      [root@ccc ~]# free -m
                    total        used        free      shared  buff/cache   available
      Mem:            972         115         762           7          94         735
      Swap:          1906           0        1906
      

    13.3.5 开机自动挂载

    • 修改配置文件/etc/fstab

      [root@ccc ~]# blkid | grep /dev/sdb3
      /dev/sdb3: UUID="268ac984-c7e4-48ad-8511-0c29897453b4" TYPE="swap" 
      [root@ccc ~]# vim /etc/fstab 
      [root@ccc ~]# tail -1 /etc/fstab
      UUID=268ac984-c7e4-48ad-8511-0c29897453b4 swap                    swap    defaults        0 0
      

    13.3.6 文件系统制作swap

    • 如果磁盘没有过多的分区可以使用,可以通过文件增加SWAP空间,本质上还是磁盘

      [root@ccc ~]# touch /db2/swap_file
      [root@ccc ~]# dd if=/dev/zero of=/db2/swap_file bs=1M count=200
      记录了200+0 的读入
      记录了200+0 的写出
      209715200字节(210 MB)已复制,3.59794 秒,58.3 MB/秒
      [root@ccc ~]# chmod 0600 /db2/swap_file 
      [root@ccc ~]# ll /db2/swap_file 
      -rw------- 1 root root 209715200 11月  8 18:37 /db2/swap_file
      [root@ccc ~]# free -m
                    total        used        free      shared  buff/cache   available
      Mem:            972         116         547           7         308         712
      Swap:          1906           0        1906
      [root@ccc ~]# mkswap -f /db2/swap_file 
      正在设置交换空间版本 1,大小 = 204796 KiB
      无标签,UUID=a5af3188-8e4a-435e-ab05-7314edb2a8ce
      [root@ccc ~]# swapon /db2/swap_file 
      [root@ccc ~]# free -m
                    total        used        free      shared  buff/cache   available
      Mem:            972         116         547           7         308         712
      Swap:          2106           0        2106
      

    13.4 RAID

    https://www.cnblogs.com/linhaifeng/articles/13921161.html

    13.5 修复服务器文件系统

    13.5.1 修复方式

    • 如果进不了操作系统,可以进入单用户模式操作

    • 首先尝试mount和umount文件系统,以便重放日志,修复文件系统。若不行,再进行以下操作

    • 执行xfs_repair -n 只检查不修复:检查文件系统是否损坏,如果损坏会列出要执行的操作

      [root@ccc ~]# xfs_repair -n /dev/sdb

      如果是日志和数据不一致,xfs会默认在挂载的时候修复这一不一致,操作系统给出的建议是以读写的方式挂载并自动修复,可以尝试以只读不修复方式挂载文件系统

      [root@ccc ~]# mount -o ro,norecovery /dev/sdb1 /opt

    • 如果上述挂载不成功,可以执行xfs_repair修复文件系统

      [root@ccc ~]# xfs_repair /dev/sdb1

    • 如果还不行,只能采用"损失部分数据的修复方法"

      根据打印消息,修复失败时:

      先执行xfs_repair -L /dev/sdb1(清空日志,会丢失文件)

      再执行xfs_repair /dev/sdb1

      -L是修复xfs文件系统的最后手段,会清空日志,丢失用户的数据和文件

      在执行xfs_repair操作前,最好先xfs_metadump工具保存元数据,一旦修复失败,可以修复到恢复之前状态

    • 修复完成以后,尝试能不能正常挂载,如能,取消挂载,再启动就正常了

    13.5.2 模拟环境

    • 准备一个1G的文件系统与数据

      [root@ccc ~]# mount /dev/sdb1 /opt
      [root@ccc ~]# echo "ccc" > /opt/1.txt
      
    • 模拟文件系统损坏

      [root@ccc ~]# dd if=/dev/zero of=/dev/sdb bs=500M count=1
      记录了1+0 的读入
      记录了1+0 的写出
      524288000字节(524 MB)已复制,10.3369 秒,50.7 MB/秒
      [root@ccc ~]# cat /opt/1.txt 
      ccc
      [root@ccc ~]# umount /opt  # 模拟断电后系统重启,重新挂载不成功
      [root@ccc ~]# mount /dev/sdb1 /opt
      mount: 将 /dev/sdb1 挂载到 /opt 失败: 结构需要清理
      
    • 修复

      [root@ccc ~]# xfs_repair /dev/sdb1   # 修复失败
      Phase 1 - find and verify superblock...
      Phase 2 - using internal log
              - zero log...
              - scan filesystem freespace and inode maps...
      bad magic number
      Metadata CRC error detected at xfs_agi block 0x2/0x200
      bad magic # 0x0 for agi 0
      bad version # 0 for agi 0
      ...
      [root@ccc ~]# xfs_repair -L /dev/sdb1  # 强制修复
      [root@ccc ~]# mount /dev/sdb1 /opt
      [root@ccc ~]# ls /opt  # 数据丢失
      
    • 如果是ext文件系统,修复用fsck命令

      fsck -f -y /dev/sdb1
      
      -y  # 对所有问题都回答yes
      -f  # 即使文件系统标记为clean,也强制进行检查
      

    13.6 xfs文件系统备份与恢复

    13.6.1 两种备份级别

    • 完全备份 0
    • 增量备份 1~9
    • 增量备份是和第一次的备份(level 0)进行比较,仅备份有差异的文件(level 1)

    13.6.2 数据备份xfsdump

    • 安装命令

      [root@ccc ~]# yum install -y xfsdump
      
    • 常用参数

      -L  # xfsdump会记录每次备份的session Label,这里可以填写针对此文件系统的简易说明
      -M  # xfsdump可以记录存储Media Label,这里可以填写此媒体的简易说明
      -l  # L的小写,指定level,有0~9共10个等级,默认为0,即完整备份
      -f  # 后面接产生的文件和destination file。如/dev/st0设备文件名或其他一般文件文件名
      -I  # 大写的i,从/var/lib/xfsdump/inventory列出目前备份的信息状态
      
    • 使用限制

      必须用root权限
      只能备份已挂载的文件系统
      只能备份xfs文件系统
      只能用xfsrestore解释
      透过文件系统的UUID来分辨备份档,因此不能备份相同UUID的文件系统
      

    13.6.3 数据恢复xfsrestore

    • 安装命令

      [root@ccc ~]# yum install -y xfsrestore
      

    13.6.4 xfsdump备份与xfsrestore恢复

    • 数据备份

      # 1、先做全量备份,切记[备份的原路径]末尾不要加做斜杠/
      xfsdump -l 0 -L sdb1_bak -M sdb1_bak -f 全量备份的成果路径1 备份的源路径
      
      # 2、再做增量备份
      xfsdump -l 1 -L sdb1_bak -M sdb1_bak -f 增量备份的成果路径2 备份的源路径
      xfsdump -l 1 -L sdb1_bak -M sdb1_bak -f 增量备份的成果路径3 备份的源路径
      xfsdump -l 1 -L sdb1_bak -M sdb1_bak -f 增量备份的成果路径4 备份的源路径
      
    • 数据恢复

      # 1、先恢复全量备份
      xfsrestore -f 全量备份的成果路径1 数据恢复的路径
      
      # 2、再依次恢复增量
      xfsrestore -f 增量备份的成果路径2 数据恢复的路径
      xfsrestore -f 增量备份的成果路径3 数据恢复的路径
      xfsrestore -f 增量备份的成果路径4 数据恢复的路径
      

    13.6.5 示例

    • 数据备份

      # 1、准备一个分区并制作好xfs文件系统,挂载好后给他加一点初始数据
      [root@ccc ~]# df
      文件系统         1K-块    已用    可用 已用% 挂载点
      ...
      /dev/sdb1      1038336   32996 1005340    4% /opt
      [root@ccc ~]# cp -r /etc/ /opt/
      [root@ccc ~]# echo "111" > /opt/1.txt
      [root@ccc ~]# ls /opt/
      1.txt  etc
      
      # 2、制作全量备份
      [root@ccc ~]# xfsdump -l 0 -L sdb1_bak -M sdb1_bak -f /all.bak /opt
      
      # 3、在/opt下新增文件2.txt,然后做增量备份
      [root@ccc ~]# echo "222" > /opt/2.txt
      [root@ccc ~]# xfsdump -l 1 -L sdb1_bak -M sdb1_bak -f /add1.bak /opt
      
      # 4、在/opt下新增文件3.txt,然后做增量备份
      [root@ccc ~]# echo "222" > /opt/2.txt
      [root@ccc ~]# xfsdump -l 1 -L sdb1_bak -M sdb1_bak -f /add2.bak /opt
      
      # 5、查看备份文件大小
      [root@ccc ~]# du -sh /opt/
      32M	/opt/
      [root@ccc ~]# ll -h /all.bak 
      -rw-r--r-- 1 root root 29M 11月  8 20:09 /all.bak
      [root@ccc ~]# ll -h /add1.bak 
      -rw-r--r-- 1 root root 22K 11月  8 20:18 /add1.bak
      [root@ccc ~]# ll -h /add2.bak 
      -rw-r--r-- 1 root root 23K 11月  8 20:19 /add2.bak
      
    • 数据恢复

      [root@ccc ~]# rm -rf /opt/*
      [root@ccc ~]# ll /opt/
      总用量 0
      [root@ccc ~]# xfsrestore -f /all.bak /opt/
      ...
      [root@ccc ~]# ls /opt/
      1.txt  etc
      [root@ccc ~]# xfsrestore -f /add1.bak /opt/
      ...
      [root@ccc ~]# ls /opt/
      1.txt  2.txt  etc
      [root@ccc ~]# xfsrestore -f /add2.bak /opt/
      ...
      [root@ccc ~]# ls /opt
      1.txt  2.txt  3.txt  etc
      

    13.7 LVM

    13.7.1 lvm简介

    • lvm介绍

      逻辑管理卷LVM是硬盘的一个系统工具。

      通过LVM技术可以屏蔽磁盘分区的底层差异,在逻辑上给文件系统提供一个卷的概念,在卷上建议相应文件系统。

      物理卷(PV):physical volume把常规的磁盘设备通过pvcreate命令对其进行初始化,形成物理卷,也就是硬盘或分区。(比作面粉)

      卷组(VG):volume group把多个物理卷组成一个逻辑的整体,卷组的大小是多个硬盘之和,是由一个或多个PV组成的整体。(比作面团)

      逻辑卷(LV):logical volume从卷组中划分需要的空间大小出来,用户仅需对其格式化即可挂载使用,从VG中切割出的空间用于创建文件系统。(比作馒头)

      基本单元(PE):physical extend分配的逻辑大小的最小单元,默认4MB的基本块,即100MB逻辑空间需要创建25个PE。

    • 使用lvm的原因

      fdisk、gdisk工具对磁盘分区是把分区大小固定死的

      如果分区设置的过大,白白浪费磁盘空间

      如果分区设置的过小,会导致空间不够用的情况出现

    • lvm优缺点

      优点:

      1、可以在系统运行的状态下动态扩展文件系统的大小

      2、文件系统可以跨多个磁盘,因此文件系统大小不会受到物理磁盘的限制

      3、可以增加新的磁盘到LVM存储池中

      4、可以以镜像的方式冗余重要的数据到多个物理磁盘

      5、可以方便的导出整个卷组到另一台机器

      缺点:

      1、因为有额外的操作,存储性能受到影响

      2、当卷组的一个磁盘损坏时,整个卷组都会受到影响

      ​ LVM有一个磁盘损坏,整个LVM都坏了,LVM只有动态扩展作用

      ​ 解决措施:底层用RAID+上层LVM=既有冗余又有动态扩展

      3、从卷组中移除一个磁盘时必须使用reducevg命令(要求root权限,且不允许在快照卷组中使用)

    13.7.2 lvm基本使用

    • 下载安装软件包

      [root@ccc ~]# yum install -y lvm2
      
    • 制作pv:可以对分区做,也可以对整块盘做

      # 1、制作
      [root@ccc ~]# pvcreate /dev/sdb1
      WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y/n]: y
        Wiping xfs signature on /dev/sdb1.
        Physical volume "/dev/sdb1" successfully created.
      [root@ccc ~]# pvcreate /dev/sdb2 -y
        Wiping xfs signature on /dev/sdb2.
        Physical volume "/dev/sdb2" successfully created.
      [root@ccc ~]# pvcreate /dev/sdb3 -y
        Wiping swap signature on /dev/sdb3.
        Physical volume "/dev/sdb3" successfully created.
      
      # 2、查看
      [root@ccc ~]# pvs
        PV         VG Fmt  Attr PSize PFree
        /dev/sdb1     lvm2 ---  1.00g 1.00g
        /dev/sdb2     lvm2 ---  1.00g 1.00g
        /dev/sdb3     lvm2 ---  1.00g 1.00g
      [root@ccc ~]# pvscan
        PV /dev/sdb2                      lvm2 [1.00 GiB]
        PV /dev/sdb3                      lvm2 [1.00 GiB]
        PV /dev/sdb1                      lvm2 [1.00 GiB]
        Total: 3 [3.00 GiB] / in use: 0 [0   ] / in no VG: 3 [3.00 GiB]
      
    • 制作vg:将pv划入vg中

      # 制作一个vg1(包含/dev/sdb1和/dev/sdb2两个pv)
      [root@ccc ~]# vgcreate vg1 /dev/sdb1 /dev/sdb2
        Volume group "vg1" successfully created
      [root@ccc ~]# vgs
        VG  #PV #LV #SN Attr   VSize VFree
        vg1   2   0   0 wz--n- 1.99g 1.99g
      
      # 制作vg2(包含/dev/sdb3一个pv)
      [root@ccc ~]# vgcreate vg2 /dev/sdb3
        Volume group "vg2" successfully created
      [root@ccc ~]# vgs
        VG  #PV #LV #SN Attr   VSize    VFree   
        vg1   2   0   0 wz--n-    1.99g    1.99g
        vg2   1   0   0 wz--n- 1020.00m 1020.00m
      
    • 创建逻辑卷lvm

      选项

      -L # 逻辑卷大小

      -n # 逻辑卷名字

      # 从vg1中分出来逻辑卷lv1_from_vg1、lv2_from_vg1
      [root@ccc ~]# lvcreate -L 100M -n lv1_from_vg1 vg1
        Logical volume "lv1_from_vg1" created.
      [root@ccc ~]# lvcreate -L 200M -n lv2_from_vg1 vg1
        Logical volume "lv2_from_vg1" created.
      
      # 从vg2中分出来逻辑卷lv1_from_vg2、lv2_from_vg2
      [root@ccc ~]# lvcreate -L 300M -n lv1_from_vg2 vg2
        Logical volume "lv1_from_vg2" created.
      [root@ccc ~]# lvcreate -L 400M -n lv2_from_vg2 vg2
        Logical volume "lv2_from_vg2" created.
      
      # 查看
      [root@ccc ~]# lvs
        LV           VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
        lv1_from_vg1 vg1 -wi-a----- 100.00m 
        lv2_from_vg1 vg1 -wi-a----- 200.00m 
        lv1_from_vg2 vg2 -wi-a----- 300.00m 
        lv2_from_vg2 vg2 -wi-a----- 400.00m 
      
    • 格式与挂载

      [root@ccc ~]# mkfs.xfs /dev/vg1/lv1_from_vg1 
      [root@ccc ~]# mkfs.xfs /dev/vg1/lv2_from_vg1 
      [root@ccc ~]# mkfs.xfs /dev/vg2/lv1_from_vg2
      [root@ccc ~]# mkfs.xfs /dev/vg2/lv2_from_vg2 
      
      [root@ccc ~]# mount /dev/vg1/lv1_from_vg1 /test1/
      [root@ccc ~]# mount /dev/vg1/lv2_from_vg1 /test2/
      [root@ccc ~]# mount /dev/vg2/lv1_from_vg2 /test3/
      [root@ccc ~]# mount /dev/vg2/lv2_from_vg2 /test4/
      
      # 查看
      [root@ccc ~]# df
      文件系统                       1K-块    已用    可用 已用% 挂载点
      ...
      /dev/mapper/vg1-lv1_from_vg1   98980    5344   93636    6% /test1
      /dev/mapper/vg1-lv2_from_vg1  201380   10464  190916    6% /test2
      /dev/mapper/vg2-lv1_from_vg2  303780   15584  288196    6% /test3
      /dev/mapper/vg2-lv2_from_vg2  406180   20704  385476    6% /test4
      

    13.7.3 在线动态扩容

    • 命令

      lvextend -L [+]MGT /dev/VG_NAME/VL_NAME
      # -L 100M与-L +100M不是一个意思,+100M代表在原有基础上扩容
      
    • 示例

      [root@ccc ~]# lvextend -L +100M /dev/vg1/lv2_from_vg1 
        Size of logical volume vg1/lv2_from_vg1 changed from 200.00 MiB (50 extents) to 300.00 MiB (75 extents).
        Logical volume vg1/lv2_from_vg1 successfully resized.
      [root@ccc ~]# lvs
        LV           VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
        lv1_from_vg1 vg1 -wi-ao---- 100.00m
        lv2_from_vg1 vg1 -wi-ao---- 300.00m                                   
        lv1_from_vg2 vg2 -wi-ao---- 300.00m                                   
        lv2_from_vg2 vg2 -wi-ao---- 400.00m    
      [root@ccc ~]# xfs_growfs /dev/vg1/lv1_from_vg1   # 扩展逻辑卷后需更新xfs文件系统
      

    13.7.4 在线动态缩容与删除

    • !!!!!!!!!!!!!!!不要缩容!!!!!!!!!!!!!

    • xfs不支持缩容

      lvreduce -L [-]MGT /dev/VG_NAME/LV_NAME  # 缩减逻辑卷
      
    • 删除

      # 删除lv之前需先卸载挂载点
      [root@ccc ~]# umount /test1
      [root@ccc ~]# lvremove /dev/vg1/lv1_from_vg1 
      Do you really want to remove active logical volume vg1/lv1_from_vg1? [y/n]: y
        Logical volume "lv1_from_vg1" successfully removed
      [root@ccc ~]# umount /test2
      [root@ccc ~]# lvremove /dev/vg1/lv2_from_vg1 -y
        Logical volume "lv2_from_vg1" successfully removed
      
      # 删除vg
      [root@ccc ~]# vgremove vg1
        Volume group "vg1" successfully removed
      
      # 删pv:只能删掉不属于任何vg的pv
      [root@ccc ~]# pvremove /dev/sdb1
        Labels on physical volume "/dev/sdb1" successfully wiped.
      

    13.7.5 快照

    • lvm的快照功能采用写时复制技术(Copy-On-Write,COW)
    • 创建快照时不用停止服务即可对数据进行备份
  • 相关阅读:
    数据导入
    数据库导入导出命令
    题库
    struts2的配置文件简洁
    修改oralce11g 字符集为ZHS16GBK
    Linux上安装JDK+Tomcat
    Android中adb的使用
    【转】Android获取IP的方法,并可以判断手机是否联网
    Android中R.java没有自动生成问题
    Android中SQLiteOpenHelper的理解
  • 原文地址:https://www.cnblogs.com/caojiaxin/p/13946046.html
Copyright © 2020-2023  润新知