在 2 台 Debian 机器上同步文件夹、配置、程序、本地服务器和数据库

在 2 台 Debian 机器上同步文件夹、配置、程序、本地服务器和数据库

我在笔记本电脑上和另一台计算机的虚拟机中使用 debian。

我希望能够以两种方式同步这两个系统,以便我可以

  • 在虚拟机上做一些工作,然后转到笔记本电脑上,进行同步,然后从那里继续工作,
  • 返回 VM,同步并进一步工作......

经过一番谷歌搜索,我似乎需要的工具是 Unison,因为它具有双向同步功能。

我现在想知道的是什么/不是什么以及如何在两台机器之间进行同步。

我发现,就我的情况而言,基本上有 3 个主要考虑点(但我可能忘记了一些事情):

  • 同步主文件夹的大部分(全部?)内容,因为从那里我需要我处理的文件、bash 别名、大多数程序的配置设置(我希望两台机器之间的配置设置相同)、我自制的脚本等。
  • 同步我在那里运行的本地 apache 服务器和 mysql 数据库的内容,以便在本地测试我构建的一些网站(以便能够在每台机器上分别/独立地进行本地测试)
  • 在这些系统之间同步已安装的程序。

首先,关于主文件夹,我认为简单地同步整个主文件夹是个好主意。但仔细观察后发现,虚拟机上的一些隐藏文件/目录似乎不存在,因此笔记本电脑上需要这些文件/目录(例如 .vboxclient-clipboard.pid、.vboxclient-display.pid...),反之亦然。

我还想知道一些似乎是每台机器独有的隐藏文件(.cache、.dbus、.gconf)

因此,我想知道是否存在一些通用规则(排除一些特定的文件扩展名或已知文件/文件夹),我可以应用这些规则来确保我不会复制单个系统特定的文件,并且真正坚持我需要的内容和两台机器的共同点(我的数据和配置文件,例如 filezilla 的自定义服务器列表)。

然后,关于本地服务器和mysql数据库的同步,我认为

  • 我也可以使用 Unison 在机器之间同步 /var/www/ 文件夹(尽管这不是一个好主意)
  • 我需要编写一个脚本来每次转储、比较并根据需要替换 mysql 数据库(听起来效率真的很低)

最后,关于程序,看起来我必须手动安装那些在一个机器上安装但在另一个机器上没有安装的程序(但这应该不是问题,因为我只需要在设置机器时这样做,之后我很少安装新程序)。

除此之外,我还考虑在这两台机器上重新安装 Debian,因此我想知道在安装 Debian 期间,在每台机器上选择不同的设置是否重要:

  • 磁盘加密:基本上我想在笔记本电脑上使用 LVM 加密磁盘,但在虚拟机上不需要这样做,
  • 主机名:这并不重要,因为我可以在两台机器上使用相同的主机名,但我想知道是否可以有两个不同的主机名(例如 debianlaptop 和 debianvm)
  • 用户密码:我会在两台机器上使用相同的用户名,但使用不同的密码(对于 root 也是如此)会更好
  • 软件选择:我肯定会在两台机器上安装这些:“Debian 桌面环境”(在安装开始时设置 xfce 作为桌面管理器)、“Web 服务器”、“标准系统实用程序”,但我想知道是否真的需要在虚拟机上安装“笔记本电脑”,以及这是否会影响同步。

对于以上所有情况,我主要关心的是能够做出最好的选择,以便

  • 我可以以最自动化的方式在两者之间进行同步,尽可能减少人工干预(基本上只是在我开始工作的机器上运行 unison,最终负责一些程序安装和数据库同步)
  • 我只同步需要的内容,避免同步系统特定的或可能覆盖系统特定设置的文件/文件夹/选项,从而导致不必要的后果......

答案1

关于将您的主目录与 Unison 同步并排除某些系统目录,有两个选项。第一种是明确列出您要同步的所有内容,并忽略任何系统特定的目录:

# unison-profile.prf
root = /home/user
root = ssh://user@VM//home/user
path = Documents
path = .bashrc
.
.
.

另一种选择是同步所有内容,然后明确列出要忽略的路径:

# unison-profile.prf
root = /home/user
root = ssh://user@VM//home/user
path = Name {.*,*}
ignore = Path .cache
ignore = Path .dbus
.
.
.

请注意,我们需要的path = Name {.*,*}不仅仅是path = Name *同步所有以点开头的文件和目录。

相关内容