Linux 烹饪指南 - 镜像,镜像,无处不在

作者:Marcel Gagné

弗朗索瓦,你在做什么?当我让你镜像我们的网站时,我不是要你举起镜子对着屏幕。你真是太傻了,mon ami。我的意思是,你应该把我们的网站复制到另一台机器上。弗朗索瓦,你在看什么?啊,我们的客人到了!你为什么不告诉我?欢迎,mes amis,来到 Chez Marcel,这里有美味的 Linux 菜肴和上等的葡萄酒。

说到葡萄酒,弗朗索瓦!去酒窖,immédiatement。请把 1999 年加州鹿跃区赤霞珠拿来。这款浓郁顺滑的葡萄酒与今天的菜单堪称绝配。正如你们所知,mes amis,本期杂志的主题是系统管理。在今天的菜单上,我们将品尝一些数据镜像的替代方案。数据镜像的原因有很多。最明显也是首要原因是备份,这是一个不那么性感但极其重要的主题。其他原因包括创建 FTP 站点的镜像,用于本地网络更新,例如您自己的 RPM 更新存储库,或者镜像网站以进行快速离线阅读。

许多定期备份的人都是将数据备份到他们其他机器上的磁盘。还有一些人仍然备份到同一台机器上的第二个磁盘。鉴于如今添加到系统中的额外硬盘驱动器非常便宜,而高容量磁带驱动器的成本可能要高得多,因此发现使用这种解决方案并不罕见。

从一个磁盘备份到另一个磁盘,或者创建数据镜像,可以像使用 cp 进行递归复制一样简单。例如,如果我想将我的主目录中的所有内容复制到具有大量空间的第二个磁盘,我可能会执行以下操作

cp -rfupv /home/mgagne /disk2/

正如您可能预期的那样,-r 选项表示递归复制(所有子目录),而 -v 告诉命令显示详细信息。因为我不希望收到关于每个文件被覆盖的警告,所以我添加了 -f 来强制复制;-p 确保权限也得到正确保存。最后,-u 选项告诉 cp 命令仅复制已更新的文件。这加快了后续复制过程。

这一切都运行良好,但是从一台机器复制到另一台机器需要一些额外的步骤。使用您的 Linux 系统,您实际上拥有许多超出简单的 cp 的工具可供您使用。首先,如果您想复制或备份整个网站,请尝试 wget 命令,该命令最初由 Hrvoje Niksic 编写

wget -m http://www.websitename.dom

从您选择的网站顶部开始,wget 会遍历整个站点,保存所有适当的 HTML 文件和图像。在这种情况下,-m 表示镜像,但它也包含其他几个选项,特别是 -r、-N、-l inf 和 -nr。这些选项告诉 wget 执行递归获取、打开时间戳、允许无限级别以及不删除 FTP 目录 .listing 文件。

网站上的所有文件都保存在与网站同名的本地目录中。在上面的示例中,这将是 www.websitename.dom。在您的 Web 服务器上添加一个新文件,再次运行该命令,并且仅传输该新文件,从而使保持事物更新的工作变得更快。

对于其预期用途来说,这是一个很棒的工具,但其主要功能是处理网站。但是,也可以使用 wget 从 FTP 服务器下载。如果您从匿名站点传输,则格式与用于镜像网站的格式几乎相同

wget -m ftp://ftp.ftpsitename.dom

另一方面,如果您想备份需要用户名和密码的用户目录,则需要稍微复杂一点

wget -m ftp://username:password@ftp.sitename.dom

这种方法有一些缺点。首先,您的密码以明文形式在网络上传输,这可能没什么大不了的,具体取决于您对网络的信任程度。在紧要关头,您可以使用 scp 命令执行递归安全复制。由于 scp 是 OpenSSH 的一部分,因此您具有知道您正在使用安全、加密文件传输的优势。假设您要复制整个网站,从 Apache 服务器根目录开始。它看起来像这样

scp -rpv /var/www root@remote_host:/mnt/backupdir

-r 表示递归复制,-p 告诉 scp 保留原始文件和目录的修改时间、所有权和权限。如果您要传输大量数据,您可以考虑使用 -C 选项,该选项可以动态压缩。它可以显着提高吞吐量。

所有这些数据镜像方法可能存在的最大问题是,它可能需要大量时间。 wget 将从 FTP 服务器下载新文件,但没有选项可以通过删除文件来使目录完全同步。安全复制很好,但它没有任何机制来仅传输已更改的文件。这是第二个缺点。确保数据保持同步而无需传输每个文件和目录需要一个稍微更精细的程序。

我所知道的用于此目的的最佳程序可能是 Andrew Tridgell 的 rsync。Linux Journal 自己的 Mick Bauer 在本杂志 2003 年 3 月和 4 月刊中出色地介绍了这个软件包,因此除了说您可能需要查找关于该主题的两部分文章外,我不会再赘述。

ftpcopy

在许多情况下,这使我们想起了我们的老朋友 FTP——嗯,有点像。在一侧(您要镜像的机器),您将使用您的 FTP 服务器,无论是 ProFTPD 还是 wu-ftpd。在另一侧,您将使用 Uwe Ohse 的 ftpcopy 程序。 ftpcopy 是一款快速、易于设置且易于使用的程序,可以很好地复制整个目录层次结构。在复制时,它会维护权限和修改日期和时间,并且速度很快。此外,它还会跟踪已下载的文件。这很方便,因为下次您运行 ftpcopy 时,它只会传输那些已更改的文件,从而使您的备份更快。

某些发行版附带 ftpcopy,但对于最新版本的 ftpcopy,请访问 www.ohse.de/uwe/ftpcopy/ftpcopy.html 下载。构建软件包很容易,只需几个步骤

tar -xzvf ftpcopy-0.6.2.tar.gz
cd web/ftpcopy-0.6.2
make

在名为 command 的目录中,您会找到三个二进制文件:ftpcopy、ftpcp 和 ftpls。您可以从此处运行它,也可以将这三个文件复制到 /usr/local/bin 或 $PATH 中的其他位置。

以下是它的工作原理。假设我想镜像或备份远程系统上的主目录。基本的 ftpcopy 命令如下所示

ftpcopy -u marcel -p secr3t! \
remote.hostname /home/marcel /mirdir/

-u 和 -p 选项显然是用于远程系统上的用户名和(虚假)密码。接下来是您要复制的目录的路径,然后是将在其中重新创建此目录结构的本地目录。随着下载的进行,您将看到类似以下内容

/mirdir/scripts/backup.log: download successful
/mirdir/scripts/checkhosts.pl: download successful
/mirdir/scripts/ftplogin.msg: download successful
/mirdir/scripts/gettime.pl: download successful

如果您想要更多关于下载的信息,请添加 --bps 选项。然后,结果会报告每秒字节的数据传输速率。

您应该考虑至少运行一次带有 --help 选项的 ftpcopy,并且您应该了解某些选项。例如,-s 处理符号链接,-l 让您增加日志记录级别。如果您想通过 cron 作业设置镜像运行,您可能需要将日志记录设置为 0。另一个有用的选项是 -n。如果远程端的文件被删除,那么当您运行 ftpcopy 时,本地文件也会被删除。如果您真的想保持系统同步,这就是您想要的。要覆盖此行为,请添加 -n,并且不会发生删除。

好了,mes amis,时间到了,我们都必须回到各自的家。不过,现在喝最后一 Glass 酒还为时过早,non?弗朗索瓦,mon ami,如果你能代劳——事实上,倒两 Glass 酒,一杯镜像另一杯,non?下次再见,mes amis,让我们为彼此的健康干杯。A vôtre santé Bon appétit!

Marcel Gagné (mggagne@salmar.com) 住在安大略省密西沙加市。他是新出版的 Moving to Linux: Kiss the Blue Screen of Death Goodbye! (ISBN 0-321-15998-5) 的作者,该书由 Addison-Wesley 出版。他的第一本书是备受赞誉的 Linux 系统管理:用户指南 (ISBN 0-201-71934-7)。在现实生活中,他是 Salmar Consulting, Inc. 的总裁,这是一家系统集成和网络咨询公司。

加载 Disqus 评论