13Linux之磁盘管理

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
    Wiping xfs signature on /dev/sdb2.
    Physical volume "/dev/sdb2" successfully created.
    [root@ccc ~]# pvcreate /dev/sdb3
    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)

  • 创建快照时不用停止服务即可对数据进行备份

  • 快照本质是特殊的lv,创建快照后会将老数据赋给快照空间

    # 准备初始数据
    [root@ccc ~]# df
    文件系统 1K-块 已用 可用 已用% 挂载点
    ...
    /dev/mapper/vg1-lv1_from_vg1 98980 5344 93636 6% /test1
    [root@ccc ~]# echo 111 > /test1/1.txt # 查看vg1容量是否充足
    [root@ccc ~]# vgs
    VG #PV #LV #SN Attr VSize VFree
    vg1 1 1 0 wz--n- <10.00g <9.90g # 在vg1卷里创建一个lv1_from_vg1的快照
    [root@ccc ~]# lvcreate -L 1G -s -n lv1_from_vg1_snap /dev/vg1/lv1_from_vg1
    Reducing COW size 1.00 GiB down to maximum usable size 104.00 MiB.
    Logical volume "lv1_from_vg1_snap" created. # 查看
    [root@ccc ~]# lvs
    LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
    lv1_from_vg1 vg1 owi-aos--- 100.00m
    lv1_from_vg1_snap vg1 swi-a-s--- 104.00m lv1_from_vg1 0.01
    # 修改文件/test/1.txt
    [root@ccc ~]# echo 11111111 >> /test1/1.txt
    [root@ccc ~]# cat /test1/1.txt
    111
    11111111 # 恢复数据
    # 挂载快照,和原来lvm使用同一个UUID,不被xfs允许,需加选项-o nouuid
    [root@ccc ~]# mount -o nouuid /dev/vg1/lv1_from_vg1_snap /opt/
    [root@ccc ~]# cat /opt/1.txt
    111
    [root@ccc ~]# cp /opt/1.txt /test1/1.txt
    cp:是否覆盖"/test1/1.txt"? y
    [root@ccc ~]# cat /test1/1.txt
    111
  • 要恢复的文件个数过多,直接合并

    [root@ccc ~]# mount /dev/vg1/lv1_freom_vg1 /test1
    [root@ccc ~]# echo ccc > /test1/2.txt
    [root@ccc ~]# cat /test1/2.txt
    ccc
    [root@ccc ~]# lvcreate -L 1G -n lv1_from_vg1_snap /dev/vg1/lv1_freom_vg1
    Volume group name expected (no slash)
    Run `lvcreate --help' for more information.
    [root@ccc ~]# lvcreate -L 1G -s -n lv1_from_vg1_snap /dev/vg1/lv1_freom_vg1
    Reducing COW size 1.00 GiB down to maximum usable size 104.00 MiB.
    Logical volume "lv1_from_vg1_snap" created.
    [root@ccc ~]# echo 1111 >> /test1/2.txt
    [root@ccc ~]# echo 1111 >> /test1/2.txt
    [root@ccc ~]# echo 1111 >> /test1/2.txt
    [root@ccc ~]# echo 1111 >> /test1/2.txt
    [root@ccc ~]# cat /test1/2.txt
    ccc
    1111
    1111
    1111
    1111
    [root@ccc ~]# mount -o nouuid /dev/vg1/lv1_from_vg1_snap /opt/
    [root@ccc ~]# cat /opt/2.txt
    ccc # 先卸载数据源与快照,再进行合并,快照是一次性的会自动删除
    [root@ccc ~]# umount /opt/
    [root@ccc ~]# umount /test1/
    [root@ccc ~]# lvconvert --mergesnapshot /dev/vg1/lv1_from_vg1_snap
    Merging of volume vg1/lv1_from_vg1_snap started.
    vg1/lv1_freom_vg1: Merged: 100.00%
    [root@ccc ~]# mount /dev/vg1/lv1_freom_vg1 /test1
    [root@ccc ~]# cat /test1/2.txt
    ccc

13Linux之磁盘管理的更多相关文章

  1. liunx 磁盘管理命令记录

    Linux磁盘管理好坏管理直接关系到整个系统的性能问题. Linux磁盘管理常用三个命令为df.du和fdisk. df:列出文件系统的整体磁盘使用量 du:检查磁盘空间使用量 fdisk:用于磁盘分 ...

  2. Windows Server 2012 磁盘管理之 简单卷、跨区卷、带区卷、镜像卷和RAID-5卷

    今天给客户配置故障转移群集,在Windows Server 2012 R2的系统上,通过iSCSI连接上DELL的SAN存储后,在磁盘管理里面发现可以新建 简单卷.跨区卷.带区卷.镜像卷.RAID-5 ...

  3. Linux常用命令学习7---(磁盘管理df du、磁盘的分区和格式化fdisk parted)

    1.磁盘管理    在服务器的维护中,我们需要关心服务器的磁盘使用了多少.还有多少的剩余空间.某个文件有多大.某个文件夹内的所有文件在一起一共占用的多少空间……问题.以便我们在合适的时机为服务器添加硬 ...

  4. LINUX的磁盘管理du命令详解

    LINUX的磁盘管理du命令详解 du(disk usage)命令可以计算文件或目录所占的磁盘空间.没有指定任何选项时, 它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作 ...

  5. 用Win7自带的磁盘管理工具给硬盘分区

    最近新买了一台笔记本,要给硬盘分几个区,心想还是用个工具方便点,于是就上网准备下个“硬盘分区魔术师”,但是看到有一篇文章介绍Win7系统也自带了硬盘分区工具,这我以前倒没听说过,试了一下,还挺方便好用 ...

  6. Linux_磁盘管理

    一.linux磁盘管理 命令:fdisk -l brwx-rw--- 其中b(占位符)代表block,块设备文件 sda,sdb... --> 硬盘 其中sda1,sda2..sdb1,sdb2 ...

  7. Linux 磁盘管理

    Linux磁盘管理好坏管理直接关系到整个系统的性能问题. Linux磁盘管理常用三个命令为df.du和fdisk. df:列出文件系统的整体磁盘使用量 du:检查磁盘空间使用量 fdisk:用于磁盘分 ...

  8. Linux_06------Linux的磁盘管理

    进制编码 * 3.格式化交换分区 * 4.启用交换分区 * * 1.2. * fdisk /dev/sdb * p * t * 6(分区编号) * L(查看编码列表),找到SWAP交换分区标号 * 8 ...

  9. Linux 系统常用命令汇总(五) 磁盘管理

    磁盘管理 命令 选项 注解 示例 df [选项] 显示磁盘空间使用情况 显示磁盘空间是员工情况,以M显示:    df -m -i 使用inodes显示结果 -k(m) 使用KB(MB)显示结果 du ...

随机推荐

  1. Exists 和Not Exists使用

    描述:exists表示()内子查询语句返回结果不为空说明where条件成立就会执行主sql语句,如果为空就表示where条件不成立,sql语句就不会执行.not exists和exists相反,子查询 ...

  2. elasticsearch-安装-centos7- es7.5 搭建

        centos6 搭建 参考 https://www.cnblogs.com/php-linux/p/8758788.html   搭建linux虚拟机  https://www.cnblogs ...

  3. Postgres 10.11安装教程

    Postgres搭建 考虑到Drone和Sonarqube等都需要借助Postgres存储,为了保证CI服务的高效的工作,将考虑独立其中依赖的数据库,避免在繁忙时占用过多资源从而影响整体CI的速度. ...

  4. zabbix自定义脚本监控服务器端口状态

    zabbix可以通过客户端的[net.tcp.port[<ip>,port]]该item监控项来判断本地/远程服务器TCP端口是否正常,不过当时没有想起来,就用了自定义脚本去写的,很久没有 ...

  5. PS编辑工具

    3.1PS污点修复 (1)快捷键:J. (2)中括号可以改变笔触的大小,前中括号减小笔触,后中括号增加笔触. (3)可以用选区把需要修复的地方框选上,再进行修复,这样不会影响到未选区域. 3.2PS修 ...

  6. centos7下SVN服务器搭建

    1,安装 yum install subversion 2,输入rpm -ql subversion查看安装位置 3,创建svn版本库目录 mkdir -p /var/svn/svnrepos 4,创 ...

  7. 深信服edr 2020HW行动0day 漏洞细节

    漏洞1 一下4个漏洞触发都在其他文件,这里只进行漏洞点的分析. 漏洞点tool\log\c.php 启动c.php大约140行-148行 这里执行了两个方法 show_form 与main 这里追踪s ...

  8. vue 项目抛出警告

    There are multiple modules with names that only differ in casing. 此图为 博主(初雪日)的截图, 这个问题虽然不报错,但是会对项目有影 ...

  9. USB引脚属性

    1.各型号usb 2.type c接口 type c母头 type c公头 usb type c三种工作模式: usb 3.1有三种工作模式: 1:DRP.主HOST/DEVICE可自由转换,类似电脑 ...

  10. A. Peter and Snow Blower 解析(思維、幾何)

    Codeforce 613 A. Peter and Snow Blower 解析(思維.幾何) 今天我們來看看CF613A 題目連結 題目 給你一個點\(P\)和\(n\)個點形成的多邊形(照順或逆 ...