zoukankan      html  css  js  c++  java
  • 正式班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)
    • 创建快照时不用停止服务即可对数据进行备份
  • 相关阅读:
    年轻人的第一个 Spring Boot 应用,太爽了!
    面试问我 Java 逃逸分析,瞬间被秒杀了。。
    Spring Boot 配置文件 bootstrap vs application 到底有什么区别?
    坑爹的 Java 可变参数,把我整得够惨。。
    6月来了,Java还是第一!
    Eclipse 最常用的 10 组快捷键,个个牛逼!
    Spring Cloud Eureka 自我保护机制实战分析
    今天是 Java 诞生日,Java 24 岁了!
    厉害了,Dubbo 正式毕业!
    Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!
  • 原文地址:https://www.cnblogs.com/caojiaxin/p/13946046.html
Copyright © 2011-2022 走看看