CentOS怎么做快照_CentOS系统快照创建与恢复教程

centos怎么做快照_centos系统快照创建与恢复教程

CentOS系统做快照,说白了就是给你的系统或数据盘在某个时间点“拍张照片”,以便将来需要时能快速回滚到那个状态。这事儿主要有两种玩法:一种是基于虚拟化平台的虚拟机快照,简单粗暴,适合整个虚拟机的状态保存;另一种是基于LVM(逻辑卷管理)的快照,更精细,针对的是数据盘或系统分区,尤其在物理机或对性能有要求时显得更为专业。在我看来,理解这两种机制,并根据实际场景灵活运用,才是真正掌握快照的关键。

解决方案

对于CentOS的快照操作,我们得区分两种最常见的场景:虚拟机环境和LVM环境。

1. 虚拟机快照(以VMware ESXi或VirtualBox为例,概念通用)

这是最直观、操作最简单的快照方式。它会捕获虚拟机在某一时刻的完整状态,包括磁盘文件、内存状态(可选)、以及配置信息。

创建快照:

VMware vSphere/ESXi: 选中虚拟机,右键选择“快照” -> “拍摄快照”。输入快照名称和描述,选择是否包含内存状态(包含内存会暂停VM一小段时间)。VirtualBox: 选中虚拟机,点击“管理” -> “快照”,然后点击“拍摄”按钮。同样输入名称和描述。关键点: 虚拟机快照在后台会创建一个差异磁盘文件(如

.vmdk

.vdi

的delta文件),后续所有对虚拟机磁盘的写入都会记录在这个差异文件中。原始磁盘文件保持不变。

恢复快照:

VMware vSphere/ESXi: 选中虚拟机,右键选择“快照” -> “还原到快照”,然后选择你想要恢复的快照点。VirtualBox: 选中虚拟机,点击“管理” -> “快照”,选择目标快照,点击“还原”按钮。效果: 虚拟机的所有状态(包括文件系统、内存、运行中的程序等)都会回到拍摄快照那一刻。快照之后的所有更改都会被丢弃。

删除快照:

VMware vSphere/ESXi: 选中虚拟机,右键选择“快照” -> “删除快照”或“删除所有快照”。删除快照会将差异磁盘文件合并回原始磁盘文件,这个过程可能需要一些时间,并且会占用I/O资源。VirtualBox: 选中虚拟机,点击“管理” -> “快照”,选择要删除的快照,点击“删除”按钮。

2. LVM快照(逻辑卷管理快照)

LVM快照是针对逻辑卷(可以理解为分区)的“写时复制”(Copy-on-Write, CoW)机制。它只记录快照创建后,原始逻辑卷上发生的数据块变化。这对于物理机或者对虚拟机内部特定分区做快照非常有用。

创建LVM快照:

前提: 你的CentOS系统需要使用LVM来管理磁盘分区。命令:

lvcreate -L [快照大小] -s -n [快照逻辑卷名称] [原始逻辑卷路径]

示例: 假设你的数据盘是

/dev/vg_data/lv_mydata

,你想给它创建一个大小为10GB的快照,命名为

lv_mydata_snap

lvcreate -L 10G -s -n lv_mydata_snap /dev/vg_data/lv_mydata

说明:

-L

指定快照卷的大小,这个大小不是原始卷的大小,而是预留给原始卷在快照创建后发生变化的块的空间。如果原始卷变化量超过这个大小,快照会失效。

-s

表示创建快照,

-n

指定快照卷的名称。使用快照: 创建后,这个快照逻辑卷

/dev/vg_data/lv_mydata_snap

就可以像普通逻辑卷一样挂载和访问,它展示的是快照创建那一刻原始卷的数据状态。

恢复LVM快照:

警告: 恢复LVM快照是一个不可逆的过程,它会将原始逻辑卷的内容替换为快照逻辑卷的内容。请务必谨慎操作!步骤:卸载原始逻辑卷(如果已挂载):

umount /mnt/mydata

(假设

/dev/vg_data/lv_mydata

挂载在

/mnt/mydata

)停用原始逻辑卷:

lvchange -an /dev/vg_data/lv_mydata

合并快照:

lvconvert --merge /dev/vg_data/lv_mydata_snap

这个命令会将快照卷的内容合并回原始逻辑卷。合并完成后,快照逻辑卷会自动被删除。激活并重新挂载:

lvchange -ay /dev/vg_data/lv_mydata

然后

mount /dev/vg_data/lv_mydata /mnt/mydata

删除LVM快照:

如果只是想删除快照而不恢复原始卷,直接删除快照逻辑卷即可。命令:

lvremove /dev/vg_data/lv_mydata_snap

注意: 确保快照卷没有被挂载或正在使用。

虚拟机快照和LVM快照,我该选哪种?它们有何不同?

这真是一个好问题,也是我个人在实际工作中经常思考的。说实话,这两种快照机制虽然都能达到“回滚”的目的,但它们的哲学和适用场景大相径庭。

虚拟机快照:

文心快码 文心快码

文心快码(Comate)是百度推出的一款AI辅助编程工具

文心快码 35 查看详情 文心快码 特性: 针对整个虚拟机,包括虚拟磁盘、内存状态、CPU状态、设备配置等。它是一个“全景图”。优点:操作简单: 通过图形界面点几下鼠标就能完成,对系统内部无感知。回滚彻底: 能将整个VM恢复到某个时间点,包括操作系统、所有应用和数据。包含内存: 可以捕获VM运行时状态,恢复后应用程序可以从中断处继续运行(如果选择包含内存)。缺点:性能影响: 随着快照链的增长,VM的I/O性能会下降。存储开销: 每个快照都会占用额外的存储空间,尤其是包含内存的快照。非长期备份: 快照不是备份!它不是设计来长期保存的,快照链过长或时间过久,管理复杂且风险高。不适合高I/O应用: 例如数据库服务器,快照可能会导致性能急剧下降,甚至数据不一致。适用场景:在进行操作系统升级、软件安装、配置更改等高风险操作前,做一个临时回滚点。开发测试环境,需要频繁测试不同状态。短期的状态保存。

LVM快照:

特性: 针对逻辑卷(即磁盘分区),采用“写时复制”技术。它只记录原始卷在快照创建后发生的数据块变化。优点:性能影响小: 相较于虚拟机快照,对I/O性能的影响要小得多,因为它只在数据块首次被修改时才进行复制。存储效率高: 只存储变化的数据块,通常比虚拟机快照更节省空间(如果原始卷变化不大)。精细控制: 可以针对特定的数据卷(如数据库数据盘)做快照,不影响其他卷。可用于一致性备份: 在快照卷上执行备份操作,可以获得一个时间点一致性的数据副本,尤其对数据库等应用非常有用。缺点:操作复杂: 需要通过命令行执行,对LVM概念有一定了解。不包含内存状态: 无法捕获系统运行时的内存状态。快照大小限制: 需要预估原始卷的变更量来设置快照卷的大小,如果不足,快照会失效。恢复不可逆: 合并快照会彻底覆盖原始卷数据。适用场景:物理服务器或对性能敏感的虚拟机内部数据卷。需要对特定数据分区进行回滚或创建一致性备份。在进行重要的文件系统操作、数据库升级前。作为一种轻量级、临时的文件系统保护机制。

我的选择建议:如果你在虚拟机里,且需要一个快速、全方位的系统状态回滚,那么虚拟机快照无疑是最便捷的选择。但记住,用完即删,不要让快照链变得臃肿。如果你在物理机上,或者需要对虚拟机内部某个关键数据盘做更精细、性能影响更小的保护,LVM快照才是你的利器。它虽然操作繁琐些,但提供了更深层次的控制和更好的性能表现。

创建LVM快照时有哪些坑?如何避免数据丢失

LVM快照这玩意儿,用好了是神器,用不好就是个“坑”。我个人就踩过不少雷,总结下来,最核心的几个点就是空间、性能和操作的严谨性。

1. 快照卷空间不足的坑

问题描述: 这是最常见的坑!创建LVM快照时,你需要为快照卷预留一定大小的空间。这个空间不是用来存储原始卷的完整副本,而是用来存储快照创建后,原始卷上被修改的“旧”数据块。如果原始卷的数据变更量超出了快照卷预留的空间,快照就会被标记为“invalid”或“inactive”,甚至可能导致原始卷的I/O操作失败。想象一下,你给一个水杯留了个小碟子接溢出的水,结果水杯里的水哗哗往外倒,碟子满了,水就流了一地。避免方法:合理估算: 根据你预计的原始卷数据变化量来设置快照卷的大小。如果你只是做个小测试,可能10%-20%的原始卷大小就够了;如果要做大版本升级,可能需要30%-50%甚至更多。监控快照使用率: 经常使用

lvs -o +snap_percent

命令来查看快照卷的使用百分比。一旦接近100%,就得赶紧处理,要么扩大快照卷(

lvextend

),要么删除快照。示例:

lvextend -L +5G /dev/vg_data/lv_mydata_snap

(给快照卷增加5GB空间)

2. 性能影响的坑

问题描述: 虽然LVM快照是“写时复制”,性能影响比全量复制小,但在高I/O负载的场景下,它仍然会引入额外的开销。每次原始卷上的写操作,都可能触发一次旧数据块到快照卷的复制,这会增加磁盘的I/O负载和延迟。避免方法:避开高峰期: 尽量在系统负载较低的时候创建和操作LVM快照。短期使用: LVM快照最好也是作为短期操作的保护,一旦任务完成,尽快合并或删除。硬件优化: 如果你的系统对I/O性能要求极高,考虑使用SSD作为LVM的物理卷,或者使用更高级的存储解决方案。

3. 误操作导致数据丢失的坑

问题描述: LVM命令行的强大在于其灵活性,但这也意味着一旦命令敲错,后果可能非常严重。比如,在恢复快照时选错了卷,或者在快照还在使用时就强制删除了。避免方法:三思而后行: 在执行

lvconvert --merge

lvremove

等破坏性命令前,务必再三确认目标逻辑卷的名称和路径。先备份: 对于极其重要的数据,即使有LVM快照,在进行重大操作前,也应该先做一次传统的文件系统备份。快照是回滚机制,不是万能的备份方案。熟悉命令: 熟练掌握

lvs

lvdisplay

vgdisplay

等命令,它们能帮你清晰地了解当前LVM的布局和状态。分步操作: 不要急于一步到位,比如恢复快照,先

umount

,再

lvchange -an

,然后

lvconvert --merge

,每一步都确认无误。

CentOS系统崩溃后,如何利用快照快速恢复?

系统崩溃,这真是每个运维人员的噩梦。但如果之前做了快照,那简直是救命稻草。恢复过程因快照类型而异,我来详细说说。

1. 虚拟机快照恢复:最直接的“时光倒流”

如果你的CentOS是跑在VMware、VirtualBox或KVM等虚拟机平台上的,并且你定期有做虚拟机快照,那么恢复起来是最省心的。

步骤:关闭虚拟机: 如果虚拟机还在运行,先强制关机。进入虚拟化管理界面: 登录到你的vSphere客户端、VirtualBox管理器或KVM的virt-manager。选择虚拟机和快照: 找到对应的CentOS虚拟机,然后进入其快照管理界面。执行恢复: 选择你想要回滚到的那个健康的快照点,点击“还原”或“恢复”按钮。启动虚拟机: 恢复完成后,启动虚拟机。效果: 你的CentOS系统会完全回到拍摄快照那一刻的状态,包括文件、配置、甚至内存中的数据(如果快照包含了内存)。快照之后的所有系统崩溃、数据损坏等变更都会被抹去。注意事项: 恢复操作会丢失快照之后的所有数据。所以,如果崩溃后有任何你还想抢救出来的数据,请在恢复前尝试通过Live CD或挂载到其他系统的方式进行数据抢救。

2. LVM快照恢复:针对特定分区的“外科手术”

如果你的CentOS系统崩溃,但根目录或某个关键数据分区是LVM管理的,并且你恰好在崩溃前做了LVM快照,那么恢复过程会稍微复杂一些,但同样有效。

场景一:非根分区(如

/home

,

/var

,

/opt

等)崩溃或数据损坏

进入救援模式或Live CD: 如果系统还能启动,但某个LVM分区有问题,你可以直接操作。如果系统启动不了,你需要通过CentOS安装盘进入“救援模式”(Rescue Mode)或者使用一个Live CD/USB启动,以便访问到你的LVM卷组。识别LVM卷: 在救援模式或Live CD下,运行

vgscan

lvscan

命令,确保能识别到你的卷组和逻辑卷。卸载并停用受损逻辑卷: 找到受损的原始逻辑卷(例如

/dev/vg_data/lv_mydata

),如果它被挂载了,先

umount

掉。然后

lvchange -an /dev/vg_data/lv_mydata

停用它。执行快照合并: 找到对应的快照逻辑卷(例如

/dev/vg_data/lv_mydata_snap

),执行合并命令:

lvconvert --merge /dev/vg_data/lv_mydata_snap

这个命令会将快照点的数据合并回原始逻辑卷,同时删除快照卷。

激活并挂载: 合并完成后,重新激活原始逻辑卷:

lvchange -ay /dev/vg_data/lv_mydata

。然后,你可以尝试

fsck

检查文件系统完整性(

fsck -y /dev/vg_data/lv_mydata

),最后将其挂载回原目录。重启系统: 如果是救援模式,重启回到正常系统。

场景二:根分区(

/

)是LVM,且系统无法启动

进入救援模式: 这是唯一靠谱的办法。用CentOS安装盘启动,选择“Troubleshooting” -> “Rescue a CentOS Linux system”。挂载根文件系统: 在救援模式下,通常会自动检测并提示你挂载现有Linux安装。如果提示你挂载到

/mnt/sysimage

,选择“1”或“Continue”。识别LVM卷: 确保你能看到你的LVM卷组和逻辑卷。卸载并停用根逻辑卷: 根分区通常是

/dev/vg_root/lv_root

之类的。在救援模式下,如果它已经被挂载到

/mnt/sysimage

,你需要

umount /mnt/sysimage

。然后

lvchange -an /dev/vg_root/lv_root

停用它。执行快照合并: 找到对应的根分区快照,执行合并:

lvconvert --merge /dev/vg_root/lv_root_snap

重新激活根逻辑卷:

lvchange -ay /dev/vg_root/lv_root

检查文件系统:

fsck -y /dev/vg_root/lv_root

重新挂载根分区:

mount /dev/vg_root/lv_root /mnt/sysimage

chroot到系统:

chroot /mnt/sysimage

更新GRUB(如果需要): 有时恢复根分区后,GRUB引导可能需要重新配置。

grub2-mkconfig -o /boot/grub2/grub.cfggrub2-install /dev/sda # 替换为你的启动盘

**退出chroot并重启

以上就是CentOS怎么做快照_CentOS系统快照创建与恢复教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/347878.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 21:04:03
下一篇 2025年11月5日 21:09:29

相关推荐

  • 在JavaScript项目中以子进程方式运行TypeScript项目

    本文详细阐述了如何在JavaScript项目中(如Electron应用)以子进程形式启动一个TypeScript项目(如Express服务器),解决常见的`ERR_UNKNOWN_FILE_EXTENSION`错误。核心策略是利用`child_process.spawn` API,并结合`ts-no…

    2025年12月21日
    000
  • 解决 React Native 应用在真机上无报错闪退问题:深入排查与最佳实践

    本文旨在解决 react native 应用在真机上运行时出现闪退,但在模拟器或调试器中却无任何错误提示的常见问题。我们将深入探讨此类问题的潜在根源,特别是缺失导入语句这一易被忽视的关键因素,并提供一套系统的诊断与排查策略,包括检查代码导入、利用原生日志以及构建配置检查,以帮助开发者高效定位并解决应…

    2025年12月21日
    000
  • 解决Windows上@tensorflow/tfjs-node安装失败的常见问题

    在Windows环境下安装@tensorflow/tfjs-node时,用户常遇到预编译二进制文件404错误及node-gyp编译失败问题。本文旨在提供一份详尽的教程,指导用户正确配置开发环境,特别是强调Python和Visual Studio C++桌面开发工作负载的重要性,以确保tfjs-nod…

    2025年12月21日
    000
  • 在 JavaScript 项目中运行 TypeScript 子进程的实用指南

    本文详细介绍了在 javascript(如 electron)应用中以子进程方式运行 typescript 项目(如 express 服务器)时遇到的 `err_unknown_file_extension` 错误,并提供了通过 `node` 命令结合 `ts-node/esm` 加载器和 `exp…

    2025年12月21日
    000
  • TensorFlow.js Node.js 后端在 Windows 上的安装指南

    在 Windows 环境下安装 @tensorflow/tfjs-node 时,用户常遇到预编译二进制文件缺失(404错误)及 C++ 编译失败(MSBuild错误)的问题。本文旨在提供一个全面的教程,指导用户通过正确配置 Node.js、Python 和 Visual Studio 的 C++ 桌…

    2025年12月21日
    000
  • JavaScript生物特征认证API

    WebAuthn通过浏览器API实现生物特征认证,支持指纹、面部识别等方式。它基于公钥加密,用户注册时生成密钥对,私钥存于设备,公钥由服务器保存;登录时通过挑战-响应机制验证身份。主流浏览器和操作系统均支持,需在HTTPS环境下运行,适用于高安全场景如网银登录或无密码认证,且保护用户隐私。 目前Ja…

    2025年12月21日
    000
  • 使用 LocalStorage 持久化地图标记点:实现页面刷新后数据保留

    本文将介绍如何使用 LocalStorage API 在 Web 地图应用中持久化用户添加的标记点。通过将标记点坐标存储在 LocalStorage 中,即使页面刷新,也能恢复之前的标记点,从而提升用户体验。我们将提供示例代码,并详细讲解如何实现数据的存储和读取。 在 Web 地图应用中,用户往往需…

    2025年12月20日
    000
  • 通过链接启动 Gmail 应用:JavaScript 实现指南

    本文旨在提供一种通过 JavaScript 超链接启动 Gmail 应用的解决方案。我们将探讨如何在 Android 和 iOS 设备上分别使用 `intent://` 和 `googlegmail://` URI 方案,以及如何处理用户未安装 Gmail 应用的情况。此外,还会简要讨论默认邮件客户…

    2025年12月20日
    000
  • Vue.js应用中配置环境变量:灵活管理后端通信地址

    在%ignore_a_1%应用中,灵活配置后端api地址等参数是开发与部署的关键。本文将详细介绍两种主要的环境变量配置方法:推荐使用的`.env`文件,以及通过`cross-env`库在命令行中设置环境变量。通过这些方法,开发者可以轻松实现开发、测试、生产等不同环境下配置的动态切换,提高应用的可维护…

    2025年12月20日
    000
  • Vue.js 应用中环境变量与命令行参数的配置实践

    本文详细介绍了在 vue.js 应用中配置环境变量和命令行参数的两种主要方法,旨在解决后端 api 地址等动态配置需求。我们将探讨使用 .env 文件进行环境隔离的推荐实践,以及通过 cross-env 工具从命令行动态设置变量的替代方案,并提供具体代码示例和注意事项,帮助开发者构建更灵活、可维护的…

    2025年12月20日
    000
  • Vue.js 应用中灵活配置环境变量:.env 文件与命令行参数实践

    vue.js 应用的灵活配置对于不同环境至关重要,尤其是在管理后端 api 地址等参数时。本文将详细介绍两种在 vue 3 项目中配置环境变量的方法:推荐使用 `.env` 文件进行环境隔离,以及通过 `cross-env` 工具从命令行传递参数。我们将通过示例代码演示如何将这些配置应用于 axio…

    2025年12月20日
    000
  • Vue.js 应用中灵活配置环境变量:.env 文件与命令行参数详解

    本教程详细阐述了在 vue.js 应用中动态配置后端 api 地址等参数的两种主要方法。首先,推荐使用 `.env` 文件来管理不同环境下的环境变量,确保配置的清晰与隔离。其次,介绍了如何借助 `cross-env` 工具通过命令行参数动态设置环境变量,适用于特定部署场景或临时调试。文章提供了具体代…

    2025年12月20日
    000
  • Vue.js 3 应用中的环境变量管理:灵活配置后端通信地址

    在现代前端应用开发中,尤其当前端(如 vue.js)与后端(如 python flask)通过 api 进行通信时,后端服务的地址(baseurl)通常会因开发、测试、生产等不同环境而异。硬编码这些地址会导致应用缺乏灵活性和可维护性。本文将详细介绍如何在 vue.js 3 应用中有效地管理这些配置,…

    2025年12月20日
    000
  • JavaScript Electron桌面应用

    答案:使用JavaScript开发%ignore_a_1%桌面应用需结合Web技术与Node.js,通过主进程管理窗口、渲染进程展示界面,并利用IPC通信,调用系统功能如文件对话框,最后用electron-builder打包发布,注意安全与进程职责分离。 用JavaScript开发Electron桌…

    2025年12月20日
    000
  • Node.js应用部署与监控

    Node.js应用部署与监控需关注部署方式、工具及策略。可选直接部署(PM2管理)、容器化(Docker+K8s)或云平台(Vercel/Heroku);使用PM2实现进程守护、日志查看与开机自启;通过结构化日志(Winston/Bunyan)、APM监控(Prometheus/Grafana)、健…

    2025年12月20日
    000
  • 控制网页闪屏动画的会话级播放策略

    本文旨在解决网页闪屏动画(Splash Screen)在用户关闭页面后未能按预期重置的问题。通过对比`localStorage`和`sessionStorage`这两种浏览器存储机制的特性,我们将深入探讨如何利用`sessionStorage`实现闪屏动画在每个浏览器会话开始时播放一次,并在会话结束…

    2025年12月20日
    000
  • React Hook Form:解决表单提交时页面刷新与数据丢失问题

    本文旨在解决使用 react hook form 时,因 `handlesubmit` 用法不当导致的表单提交后页面刷新、数据暴露在 url 及验证失效等问题。核心在于明确 `handlesubmit` 的正确集成方式,即将其返回的事件处理函数直接传递给 ` errors.email?.messag…

    2025年12月20日
    000
  • 将欧洲日期格式转换为JavaScript时间戳的精确方法

    本文旨在解决javascript中将`dd/mm/yyyy hh:mm:ss`格式的欧洲时间字符串转换为unix时间戳时遇到的常见问题。由于`new date()`构造函数在解析此类格式时可能因区域设置差异而误将日月颠倒,导致结果不准确。本教程将详细介绍如何通过手动解析日期字符串的各个组成部分,并结…

    2025年12月20日
    000
  • 如何优雅地处理异步操作期间的用户输入:避免UI冲突的策略

    在Web应用中,当异步操作(如服务器请求)正在进行时,用户输入可能导致UI状态混乱或数据丢失。本文将探讨两种有效策略来解决这一问题:一是将异步结果与用户输入进行智能拼接而非简单替换;二是采用事件捕获与输入缓冲机制,确保异步操作完成后再处理用户输入,从而实现平滑且符合预期的用户体验。 引言:异步操作与…

    2025年12月20日
    000
  • JavaScript 窗口焦点与可见性事件的精准控制:实现单次函数调用

    本文旨在解决 javascript 中 `visibilitychange` 和 `focus` 事件在窗口激活时可能导致函数重复执行的问题。通过统一事件监听器、利用 `event.type` 区分事件类型,并引入去重逻辑(如时间戳判断),确保无论窗口是变为可见还是获得焦点,核心功能仅被精确触发一次…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信