LVM 快照 + cron + 脚本 = “冻结”状态

LVM 快照 + cron + 脚本 = “冻结”状态

我想知道是否有任何仍在开发中的适用于 Linux 的 Deep Freeze 的替代品,因为我在互联网上读过一些内容,看起来开发 Deep Freeze 的同一家公司有一个 Linux 版本,但该项目已停止。

答案1

OFRIS 是一个可以冻结您的 Linux 的开源应用程序,它就像 Microsoft Windows 操作系统中的 Deep Freeze。

适用于 Ubuntu 版本 9.10、10.04 和 10.10。要安装 OFRIS,只需按键盘上的Ctrl+ Alt+T打开终端。打开后,运行以下命令:

sudo add-apt-repository ppa:tldm217/tahutek.net -y
sudo apt-get update && sudo apt-get install ofris-en -y

适用于 Ubuntu 版本 11.04、11.10、12.04 和 13.04。要安装 OFRIS,只需按键盘上的Ctrl+ Alt+T打开终端。打开后,运行以下命令:

[COPY-文件格式]

if [ $(uname -m) == "x86_64" ]; then deb="http://goo.gl/DleLl"; else deb="http://goo.gl/V94Qs"; fi && wget -q $deb -O ofris.deb && sudo dpkg -i ofris.deb && rm ofris.deb

下图显示了 OFRIS 在 13.04 版上的运行情况

在此处输入图片描述

来源:极客

答案2

警告:我已经实施了这个解决方案,它确实有效,但如果在系统上次启动期间对系统进行了较大的更改,则返回快照的合并时间可能会导致启动过程花费很长时间。在此等待期间,用户可能会觉得系统挂起了!

还要注意,任何有足够知识来安装快照的人都可以更改“冻结”状态。我利用这种可能性来更新“冻结”系统,但同样,这也会增加合并(恢复)快照所需的时间!


LVM 快照 + cron + 脚本 = “冻结”状态

我最近开始研究 LVM,我发现可以使用 LVM 及其快照功能在机器上创建“冻结”状态。当然,此方法需要使用 LVM 配置的系统(或至少要冻结的分区上的 LVM)。

概括:

  1. 在 LVM 分区上安装系统,在 PV 上保留足够的空间用于快照
  2. 按您想要的方式配置系统。
  3. 创建一个在启动时以 root 身份运行的 cron 作业来合并快照并创建一个新的快照来替换合并的快照
  4. 所有后续重启都会恢复到快照。所有创建的快照都是以您创建系统时的状态拍摄的。
  5. 作为额外的好处,可以安装和修改快照(前提是您具有 root 权限),并且可以根据需要更新“冻结”状态。

概念证明:冻结全新安装中除一个分区之外的所有内容

安装:

  1. 从实时 Ubuntu 光盘/USB 启动并选择“无需安装即可试用 Ubuntu”。这对于使用 LVM 手动配置分区非常重要

  2. 当 Ubuntu 加载时,使用您选择的工具对您的磁盘进行分区,以便它有一个占用整个驱动器空间的分区。以下是我正在使用的内容:

    • /dev/sda(尺寸 1T)
      • /dev/sda1(尺寸 1T)
  3. 接下来在终端上设置 LVM /dev/sda1。我将把大部分系统放在一个分区上,但你不必这么做。

    sudo pvcreate /dev/sda1
    sudo vgcreate ubuntu-vg /dev/sda1
    sudo lvcreate -n swap -L 1G ubuntu-vg
    sudo lvcreate -n unfrozen -L 10G ubuntu-vg
    sudo lvcreate -n root -l +50%free ubuntu-vg
    
  4. 现在,如果您运行sudo vgs以下命令,sudo lvs您应该能够看到卷组“ubuntu-vg”中剩余的可用空间量(vgs 输出下的 VFree)等于逻辑卷“root”占用的空间量(lvs 输出下的 LSize)。就我而言,ubuntu-vg 中有 506.44g 的可用空间,而我的根分区有 506.44g 大。如果卷组中剩余的可用空间等于我想要冻结的分区的大小,我应该能够清除整个分区,并且仍然能够通过重新启动进行恢复。暂时不要使用 ubuntu-vg 中剩余的可用空间。我们稍后会使用它。

  5. 现在使用手动分区安装 Ubuntu

    截屏

  6. 安装完成后,继续并重新启动进入新安装的系统。

  7. 一旦启动到新系统,请对其进行配置,以便它每次启动计算机时都完全符合您的要求。

    • 如果您没有意外更改快照,并且不希望快照分区出现在菜单栏中...
      • mkdir /steady
      • 编辑/etc/fstab并添加(这是全部一行)/dev/ubuntu-vg/steadystate /steady ext4 defaults,ro,nofail 0 1作为文件的最后一行
    • 由于每次重启时更新之类的内容都会被删除,因此您可能需要将其关闭。
    • 如果你有一个像我的 /unfrozen 一样的未冻结分区,不要忘记让需要访问它的用户可以访问它
  8. 一旦您按照自己想要的方式配置了系统,请创建以下脚本(您需要 root 权限)并使用/root/steadystate.sh您最喜欢的编辑器保存。请注意,如果您在设置 LVM 时更改了卷组名称,则也需要在下面的脚本中更新该名称。

    #!/bin/bash
    LOG=/dev/kmsg
    
    # wait for merge in progress
    echo -n "Reverting to snapshot if present... " | tee -a $LOG
    merging=1
    while [ "$merging" == "1" ];
    do
        /usr/sbin/service lightdm stop #prevent the auto-login/login screen from loading
        [ "$(sudo lvs -a | grep steadystate)" == "" ] && merging=0
        sleep 1
    done
    
    # create snapshot
    echo -n "Creating new snapshot... " | tee -a $LOG
    /sbin/lvcreate -s -n steadystate -l +100%free /dev/ubuntu-vg/root
    
    # make sure root comes online before trying to merge
    while [ ! -e /dev/mapper/ubuntu--vg-root];
    do
        sleep .5;
    done
    echo -n "Scheduling reset to snapshot... " | tee -a $LOG
    /sbin/lvconvert --merge /dev/ubuntu-vg/steadystate
    
    echo -n "Starting lightdm... " | tee -a $LOG
    /usr/sbin/service lightdm start
    
  9. 最后运行sudo crontab -e,选择一个编辑器并将其放在@reboot /bin/bash /root/steadystate.sh文件末尾。保存并关闭(Ctrl+ X;回答Y保存)

  10. 重新启动,你应该有一个冻结的系统,除了挂载在 /unfrozen 的分区

这是可行的,因为快照是在启动时创建的,即使我们在启动后立即传递命令来合并快照,当 root 的逻辑卷处于活动状态时,快照也无法合并。因此,它会将合并操作推迟到下次 /dev/ubuntu-vg/root 被激活时,也就是下次重新启动时。如果系统是从实时 USB 启动的,也会触发此操作。

只是为了好玩,我在重新启动后进入并运行,sudo apt remove --purge firefox* libreoffice-* unity*通常我不会建议这样做,因为它会删除一些有用的程序并使系统处于不太理想的状态!

屏幕截图损坏

系统甚至无法从 GUI 正常关闭。那么如何解决这个问题?重启!

屏幕截图重新启动

重启后,一切恢复正常。Firefox、LibreOffice 和 Unity 都回到了原来的位置。

我还尝试删除 Linux*。这导致机器无法启动,但是,只需从实时 Ubuntu 磁盘启动似乎就可以进行合并。再次重新启动后,系统仍处于“冻结”状态。

如果您希望能够进行更改,您可以(重新)安装具有 rw 权限的快照,然后chroot对其进行任何您希望永久保留的更改。这并非完美无缺,但它是一个概念证明。

答案3

默认情况下,Ubuntu 和大多数其他 Unix 系统都拒绝普通用户(学生、访客)对系统文件的写入权限。只有拥有适当授权(用户名和密钥)的管理员才能安装软件、更改系统设置或删除分区。

普通用户默认只能在主目录和系统临时目录中写入内容。处理一次性访客会话的常用方法是将其主目录放在临时目录中,将临时目录放在主内存中。

如果你想更加确定,请以只读方式安装系统分区并放置奥夫斯它上面的一个分区用于存储主内存中的更改。

答案4

为 Ubuntu 22.04 添加访客用户 +

访客用户需要 Lightdm。Lightdm 在 Ubuntu 16.10 中被 GDM 取代。重新安装并激活访客帐户很容易。

  • 安装光调制

      sudo apt-get install lightdm
    
  • 在弹出窗口中选择 lightdm 作为显示管理器。

  • 对于 23.04 安装编辑

       sudo apt install gedit
    
  • 安装后运行:

      sudo gedit /usr/share/lightdm/lightdm.conf.d/50-disable-guest.conf
    
  • 改变:allow-guest=true

  • 下次启动时将会有一位来宾用户,在来宾用户会话期间不会保存任何更改。

  • 管理员可以更改设置并添加程序。

自定义访客会话

  • 我还设法让 Guest User 使用 Ubuntu 22.04 及更早版本的 USB 闪存驱动器进行工作:

将访客用户添加到持久闪存驱动器

相关内容