在 ubuntu 中将 LVM 快照设置为备份/还原点

rub*_*rub 29 backup lvm mount snapshot

将 LVM 快照设置为 ubuntu 中的备份/还原点。

为什么?

好吧,正如我所见,Linux 的所有用处都非常大,但它最大的缺点是安装应用程序的方式很混乱。所有的 dll 都放在一个目录中。把所有的配置文件放到另一个。二进制文件也放在一堆。是的,Windows 或多或少以相同的方式工作,但是由于安装在 Linux 上的系统/服务器软件的性质,因为大多数安装的软件在任何给定时间都只有大约 95% 的成熟度,一个月两次搞乱你的系统是很有可能。。

当然,我们可以在每次安装前后备份系统,但这需要一百万年的时间。系统备份(与仅数据/文件备份相反)要求您关闭计算机并使用某种形式的可启动 Live CD 和备份媒体。而且,如果驱动器已满 15% 以上,即使使用现代硬件,也可能需要很长时间进行备份。

那么,如何做到这一点呢?

rub*_*rub 12

替代方案 - LVM 快照- 您可以在此处阅读有关 LVM 快照的信息:http : //www.tutonics.com/2012/12/lvm-guide-part-2-snapshots.html

简而言之 - 快照是一种冻结硬盘上已使用扇区的方法,告诉系统在硬盘的保留部分(称为快照卷)上写入任何更改/删除/添加,从而推迟保留/丢弃更改的决定在驱动器上的某个未来时间,只要快照卷空间提供。因此,一旦您决定回滚更改(或保留更改),您就可以用一行来完成。

一开始可能看起来很复杂,但我可以向您保证,在第一次努力之后,使用快照机制所需的只是 2 行脚本(提供下载!)

保修 - 不为以下说明提供任何保修。使用风险自负!

如何?

如果您没有预先配置的卷组,您可能需要安装一个全新的干净的 Ubuntu。然后,您将不得不在第一次正确配置系统方面付出一些努力,但从这一点开始,快照将变得毫不费力。我所说的轻松是指使用预先配置的脚本的一个线性命令。

  1. 启动到 ubuntu live cd(还没有安装……只是 live cd)
  2. 打开附件 -> 终端
  3. 我们将清理硬盘!在通过此阶段之前,请备份任何重要的内容。

    首先,让我们删除现有的分区:

    # fdisk /dev/sda
      Enter 'd' to delete - enter for as many partitions you have 
    > d   
    > <enter>
      ...
      Enter 'w' to write down changes
    > w
    
    Run Code Online (Sandbox Code Playgroud)
  4. 创建引导分区和驱动器的其余部分作为另一个分区

    # fdisk /dev/sda
    > n
      To create a new partition.
    > p
      For Boot Primary partition.
    > 1
      Press <enter> to accept the default start sector.
      Enter:
    > +512M
      To give the boot partition a size of 512MB
    > n
      To create (another) new partition.
    > p
      Should be Primary too.
    > <enter> 
      To accept the default value of 2 (the second partition)
    > <enter>
      To accept the default start sector
    > <enter>
      To accept the whole disk
    > t
      To change the type of the second partition to LVM
    > 2
      To choose the second partition
    > 8e
      To set the type to 'LVM Linux'
    > w
      To write changes and exit.
    
    Run Code Online (Sandbox Code Playgroud)

    要检查更改是否运行良好,请运行:

    # fdisk --list
    
    Run Code Online (Sandbox Code Playgroud)

    你应该得到这样的东西:

      Device     Boot   Start    End        Blocks     Id   System
      /dev/sda1         2048     524287     261120     83   Linux
      /dev/sda2         524288   488397167  243936440  8e   Linux LVM
    
    Run Code Online (Sandbox Code Playgroud)
  5. 删除任何以前的卷组/逻辑卷:

    # lvdisplay 
    
    Run Code Online (Sandbox Code Playgroud)

    将显示您在系统上可能拥有的逻辑卷

    # lvremove <existing_logical_volume_name>
    
    Run Code Online (Sandbox Code Playgroud)

    如果需要删除可能干扰此安装的任何卷安装。

    # vgdisplay 
    
    Run Code Online (Sandbox Code Playgroud)

    将显示系统上任何现有的卷组

    # vgremove <existing_volume_group>
    
    Run Code Online (Sandbox Code Playgroud)

    与卷组相同..

  6. 创建卷组“vgsnap”

    # vgcreate vgsnap /dev/sda2
    
    Run Code Online (Sandbox Code Playgroud)

    结果应该是:

      Volume group "vgsnap" successfully created
    
    Run Code Online (Sandbox Code Playgroud)
  7. 创建逻辑卷

    # lvcreate --extents 100%FREE --name lvroot vgsnap
    
    Run Code Online (Sandbox Code Playgroud)

    根逻辑卷,从设备的 100% 开始。

    # lvresize --size -30G /dev/mapper/vgsnap-lvroot
    
    Run Code Online (Sandbox Code Playgroud)

    这将为交换和快照卷腾出 30G。当然 - 您可以为交换/快照选择较小的尺寸。

    > 'y'
      for the warning shown.
    
    Run Code Online (Sandbox Code Playgroud)

    并创建交换卷:

    # lvcreate --size 15G --name lvswap vgsnap
    
    Run Code Online (Sandbox Code Playgroud)

    注意:我们现在留下 15G 未使用的驱动器空间,为将来的快照保留。

  8. 安装 Ubuntu

    关闭终端并启动安装程序。

    选择“使用 LVM...”(您也可以选择启用整个磁盘加密 - 但我没有测试它...)

    选择“其他”,然后按继续。在此阶段,您会发现已定义的 /dev/mapper/... 卷的分配。其中一些是自动生成的 (lvsnap-*) - 您现在可以忽略它们。

    选择:/dev/mapper/vgsnap-lvroot 卷。选择“ext4”作为格式,并挂载为“/”

    选择:/dev/mapper/vgsnap-lvswap volume,并选择“swap area”

    如果您要创建加密驱动器(我不知道这是否适用于快照?),您可能需要选择 /dev/sda2 并标记“加密卷”。不过没测试。。

    注意:未使用的 15G 可用于快照卷。

    选择:/dev/sda1 分区。将其格式化为“ext2”并将其安装为“/boot”

    下面 - 选择:/dev/sda1 分区作为引导

    安装!

使用快照

以下步骤将展示如何在任何给定时间使用快照:

  1. 挂载快照:

    创建快照卷

    # lvcreate --size 15G --snapshot --name lvsnap /dev/mapper/vgsnap-lvroot
    
    Run Code Online (Sandbox Code Playgroud)

    创建挂载目录

    # mkdir /mnt/vgsnap-lvsnap
    
    Run Code Online (Sandbox Code Playgroud)

    将快照挂载为只读挂载

    # mount -o ro /dev/vgsnap/lvsnap  /mnt/vgsnap-lvsnap
    
    Run Code Online (Sandbox Code Playgroud)

    快照已开启!

    在这一点上,您可能会开始弄乱您的系统,安装测试版驱动程序,甚至(不!那是不合适的)。

    从现在开始,您可以随时(只要快照大小提供..)返回到以前的状态,或者,如果对新外观感到满意 - 保留它。

  2. 自动快照卷可用磁盘空间监控:使用此处提供的脚本的调整版本:http : //blog.rimuhosting.com/2012/02/20/cron-script-for-checking-disk-space/ 我创建了monitor_snapshot脚本.

    如何使用/安装它?- 与上面的链接非常相​​似:

    # cd /etc/cron.hourly
    # copy /home/<user>/Downloads/monitor_snapshot
    # chmod +x monitor_snapshot
    
    Run Code Online (Sandbox Code Playgroud)

    在第一次运行之前,您最好编辑其中的值,例如您的电子邮件地址(发送通知的位置等)。如果配置正确,cron 守护程序将每 X 小时/天运行一次脚本 -根据您的决定 - 并在快照即将满时通知您。

    要测试脚本运行:

    # sh /etc/cron.hourly/monitor_snapshot
    
    Run Code Online (Sandbox Code Playgroud)

    它将打印快照中可用空间的百分比(数量)。

    重要的!完成测试/安装后 - 回滚或保留更改 - 并卸载快照!

  3. 回滚更改:(请参阅rollback_snapshot脚本,其中包含以下说明,链接在文档末尾)

    # lvconvert --merge /dev/vgsnap/lvsnap
    
    Run Code Online (Sandbox Code Playgroud)

    这也将卸载快照,但会丢弃您的任何更改。此外 - 您将看到一条警告,提示仅在下次激活时才会进行还原,因此:

    # reboot
    
    Run Code Online (Sandbox Code Playgroud)

    注意:如果您跳过合并,一旦您卸载快照,您的更改将被提交。

  4. 提交更改 - 卸载快照:(请参阅commit_snapshot脚本,其中包含以下说明 - 文档末尾的链接)

    # umount /mnt/vgsnap-lvsnap
      Will unmount (commit0 the snapshot
    
    # lvremove /dev/mapper/vgsnap-lvsnap
    # rm -rf /mnt/vgsnap-lvsnap/
    
    # rm /etc/cron.hourly/monitor_snapshot
      Remove the cron daemon script (that is unused)
    
    Run Code Online (Sandbox Code Playgroud)
  5. 重新安装快照:(请参阅重新安装脚本,其中包含以下说明 - 文档末尾的链接)与以前几乎一样:

    # lvcreate --size 15G --snapshot --name lvsnap /dev/mapper/vgsnap-lvroot
    # mkdir /mnt/vgsnap-lvsnap
    # mount -o ro /dev/vgsnap/lvsnap /mnt/vgsnap-lvsnap
    
    Run Code Online (Sandbox Code Playgroud)

    如果您将monitor_snapshot保存在您的主目录中,您可以将其恢复:

    # cp /home/<user>/monitor_snapshot /etc/cron.hourly/
    # chmod +x /etc/cron.hourly/monitor_snapshot
    
    Run Code Online (Sandbox Code Playgroud)

这就是所有的人! 以下说明仅适用于戒烟者;)

  1. 丢弃快照卷(如果不再需要)

    # rmdir /mnt/vgsnap-lvsnap
    # lvremove /dev/vgsnap/lvsnap
    
    Run Code Online (Sandbox Code Playgroud)

    (您可能还想调整根分区或交换分区的大小以占用为交换保留的丢失的 15G)

  2. 丢弃卷组 - 只能通过删除卷组的卷来实现,这可能意味着删除操作系统安装。但是当然,没有真正需要删除卷组......

    要删除卷组:

    # vgremove vgsnap
    
    Run Code Online (Sandbox Code Playgroud)

重要的提示!- 格式化/运行 fdisk 并删除所有分区不会删除卷或组,因为它们是写在驱动器的不同部分...因此,只需使用上面给出的删除说明,并在需要时删除卷和组。