13Linux之磁盘管理
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