我通常使用机器 A,并将 A 的备份备份到文件服务器 B 上。迟早,我会因为某种原因失去机器 A。它的硬盘磨损了,或者被闪电击中,或者一些销售人员让我相信这是一个令人尴尬的过时垃圾,或者超频实验出了严重的错误,或者它遭受了“与闪光相关的事件”,等等。
假设计算机 C 与计算机 A 完全不同——不同的大容量存储接口、不同公司的处理器、不同的屏幕分辨率等。
有没有一种简单的方法可以在灾难发生之前列出 A 上当前安装的所有软件,以便可以轻松地在计算机 C 的空白硬盘上安装相同的软件?或者更好的是,可以轻松安装每个软件的最新版本,以及针对该特定机器 C 优化的特定子版本?
如果 B 上有足够的空间,这似乎是最简单的副本一切如果我这样做,有什么好方法可以将我想要从 B 复制到 C 的文件与我不想复制的文件分开?我不想复制二进制文件,我可以根据需要轻松地重新下载(并且可能重新编译),并且可能无论如何都无法在机器 C 上工作。或者从长远来看,首先尝试避免将这种容易获得的特定于机器的二进制文件备份到 B 上是否更好?有没有更好的方法来减少病毒和木马传递到C并重新激活的机会?
当我定制软件或编写全新软件时,有什么好方法可以确保我所做的调整得到备份并传输到新计算机并安装?比如 cron 和 anacron 任务?
我该怎么做才能安全顺利地过渡到新计算机 C?
(这个问题扩展了一个子问题 “带有 rsync 或 rdiff 备份问题的增量系统备份和恢复”我认为这一点特别重要)。
答案1
版本控制中的 $HOME
- 定期将 /home 目录中的所有内容提交到版本控制存储库。 (除非总是在提交程序员的 $HOME 目录之前执行“make superclean”,所以他永远不会提交二进制可执行文件或其他易于机器生成的文件)。
- 对于在我的工作计算机上“拥有”唯一数据的每个用户,请确保我的文件服务器上有某种版本控制存储库,其中包含该用户的整个 $HOME 目录(“subversion 中的 $HOME”)。尽管我实际上是唯一接触此键盘的人,但我有一个单独的用户: 不受信任的网络浏览器,喜欢安装大量可能受恶意软件感染的游戏; C 程序员经常编写带有可怕错误的软件,因此我们希望将他隔离在沙堆中,这样他就不会意外删除我最喜欢的网络书签;运行维基的机器人用户;根用户; ETC。
- 将所有“我的”文件保存在我的 $HOME 目录中,该目录是版本控制工作目录。
- 文本文件、照片、网络浏览器书签文件等——全部位于主目录中。
- 如果我编写一个“需要”进入其他子目录的批处理脚本,请将主副本保留在我的 $HOME 目录中的某个位置,并建立从该其他子目录到主副本的软链接。
- 如果我编写“需要”进入其他子目录的编译软件,请将主源代码和 Makefile 保存在 $HOME 目录的某个子目录中,并设置 Makefile,以便“make install”自动将二进制可执行文件安装在该其他子目录中目录。
- 如果我修复了某些软件中的错误,请将错误修复传递到上游。
- 在我的 $HOME 目录中的某个文本文件中保留“我喜欢但默认情况下未安装的应用程序”和“通常默认情况下安装但我不喜欢的应用程序”的列表。看如何跟踪 Ubuntu (Linux) 上安装了哪些软件包?或者如何跟踪 Fedora (Linux) 上安装了哪些软件包?
- 如果我购买 CD 或 DVD 形式的软件,请在我的文件服务器上备份 ISO 映像,然后从该映像安装到我的工作计算机上。 (因为我的工作电脑没有有光驱)。
后来,当机器A丢失时,
- 在机器 C 上安装我本周最喜欢的发行版的最新版本,包括所有默认软件。
- 对于每个用户,对最新版本(HEAD)进行版本控制检查,除了以某种方式(?)跳过所有二进制可执行文件。这可以阻止某些类型的病毒和木马传播到 C.
- 在我的主目录之外设置其他内容:
- 检查我的应用程序列表,卸载我不需要的东西。
- 检查我的应用程序列表,安装我想要的最新版本。希望最新版本包含我传回的错误修复。 (有关自动化此过程的方法,请参阅上面的链接)
- 对我编写的每个编译程序执行“make superclean”和“make install”。
- 以某种方式(?)记住批处理脚本“需要”去哪里,并创建从该位置到我的 /home/ 目录中的主源的软链接。 (有没有办法自动执行此操作?)
- 以某种方式(?)记住我作为 cron 和 anacron 作业运行的所有内容,然后再次输入它们。
- 从文件服务器上的 ISO 映像安装通过 CD 购买的软件。
- ...还有什么我想念的吗?
答案2
首先去阅读有关该主题的先前主题:将 Linux 安装移动到新计算机(关于相同架构的情况),以及如何在具有不同硬件的计算机之间迁移配置?。在这里,我将讨论一些之前没有涉及到的小问题。
如果您要移至具有相同体系结构的计算机,并且您的磁盘尚未失效,只需将磁盘移至新计算机即可。这可以完全独立于将数据移动到更大的磁盘来完成。注意,这里的“相同架构”是指处理器架构类型,目前的PC中只有两种:x86-32(又名 i386、ix86、IA-32,...)和x86-64(又名 amd64、Intel 64,...)。特定芯片组或处理器变体、视频设备、存储接口等在这里并不重要。 (如果存储接口不兼容,或者其中一台计算机是笔记本电脑,则您必须找到适配器或通过网络进行复制。)
为了在驱动器发生故障时进行备份(它是最脆弱的组件之一),您有两种选择:
- 制作整个磁盘或分区的逐位副本。然后您可以直接恢复,甚至在紧急情况下从备份运行。如果这是您的策略,您仍然需要一个用于增量更新的文件级工具。
- 备份您的文件。要恢复,请重新安装,然后恢复文件。
您的默认设置应该是复制所有内容,当您移动到新计算机时,需要更改的文件很少。如果您从 32 位 PC 迁移到 64 位 PC,并且想要使用具有 64 位操作系统的新 PC,则必须重新安装操作系统(使用最新的 unice),否则可能会出现任何不良体验Windows 中的内容不会转移到 Linux 或其他其他操作系统。
为了更轻松地确保您的数据位于您使用的每台计算机上(旧计算机和新计算机、家庭台式电脑和个人笔记本电脑等),请确保在您自己的主目录中而不是在系统级别。在 Ubuntu 或其他“用户友好”术语中,这意味着一种无需输入密码的自定义方法。但如果定制强烈依赖于硬件(例如屏幕分辨率),请在系统级别执行定制。
1 这很大程度上是假设的。目前大多数台式电脑仍然具有 IDE 接口,并且与 20 世纪 80 年代末以来所有通用的内置硬盘兼容。当然,您已经升级了所有早期的电脑。
答案3
假设您使用的是类似 Debian 的 Linux
定期在机器 A 上运行:
dpkg --get-selections > /mnt/bakup/backup.pkg.lst
并将 backup.pkg.lst 文件保存在安全的地方
当灾难发生时,在 C 机器(或 A)上进行最小安装(即使没有 GUI)并以 root 身份运行:
dpkg --set-selections < /mnt/floppy/backup.pkg.lst apt-get update apt-get dselect-upgrade apt-get dist-upgrade apt-get upgrade
并从备份中恢复您的 /home 目录
答案4
虚拟机中的生活
- 在我的工作计算机上设置虚拟机。在该虚拟机中完成我所有的实际工作。
- 定期暂停虚拟机,并将虚拟化磁盘和虚拟系统状态备份到文件服务器。 (当我使用计算机时,是否有某种方法可以在后台完成所有或大部分操作,因此我只需要暂停足够长的时间来备份最后几件事?)。
后来,当机器A丢失时,
- 在新工作机器上安装一些方便的主机操作系统 C.
- 在工作机C上安装虚拟机播放器。
- 将虚拟化磁盘文件和虚拟系统状态文件从文件服务器复制到机器C。
- 运行虚拟机播放器以取消暂停该虚拟机。
唉,现在 C 正在运行 A 收集的所有病毒和木马——有没有办法阻止至少其中一些呢?