没有必要将 /dev/winswap 添加到您的 /etc/fstab 文件中。实际上,可能明智的做法是不这样做(除非可能作为注释)。
如果您的 Linux 会话崩溃或在没有运行 /etc/rc.d/init.d/halt 的情况下退出,您将需要重启并退出 Linux,然后 Windows 交换才能工作。也可以格式化 X: 并重新创建 Windows 交换文件。解决此问题的唯一方法是将等效于 /.../halt 命令的内容放入 DOS AUTOEXEC.BAT 文件中。我曾尝试编写一些程序来做到这一点,但这变成了一件非常麻烦的事情!首先,仅仅恢复总特殊扇区并不能让 DOS 满意。除此之外,似乎您需要修改一些内部数据结构,以便 DOS 开始识别您的驱动器,否则 DOS 会出现错误消息
Invalid media type reading drive X:
Abort, Retry or Fail ?
由于我不了解 DOS 或 Windows 处理磁盘驱动器的许多细节,我认为在这一点上,您可以咨询一些 DOS 专家。当然,如果您不关心启动时间,那么您可以简单地添加命令来对 X: 执行无条件格式化,然后恢复 TSS。可能还有其他解决方案。如果您知道任何解决方案,请立即给我发送电子邮件!
恢复 Windows 交换分区的一种方法是启动 Linux,如上所述禁用交换,然后使用以下命令
# swapoff -a
# zcat /etc/winswap.gz > /dev/winswap
# reboot
为什么要删除 RECYCLED 文件夹? 根据上述步骤,您必须删除 RECYCLED
文件夹。这是必要的,因为我们将只保存和恢复到根目录的扇区,而不包括更深层的扇区。此外,我们希望将驱动器 X: 恢复到“干净”状态,没有错误。如果我们不删除 RECYCLED
文件夹,那么根目录条目会被恢复,但是此文件夹的“.”和“..”条目不会被恢复,并且 ScanDisk 会在磁盘上发现错误。为了防止这种情况发生,我们将删除 RECYCLED
文件夹,因此只会恢复 win386.swp 文件的条目。
如果 DOS 的 FDISK 报告分区为“逻辑 DOS 驱动器”,则它的编号为 5(如 /dev/hda5)或更高。它*不是*标记为“扩展”的分区,其编号为 4 或更小!!如果您的 Linux fdisk 不显示逻辑分区,则您的 Linux fdisk 已损坏(例如,Slackware 2.2 包含一个损坏的 fdisk)。如果您的发行版有“cfdisk”,您可以尝试使用它,否则您将不得不获取一个可用的 fdisk。
当您关闭交换时,Linux 必须在主内存本身中管理一切。如果您的系统内存很低,比如 16MB 左右,那么在初始化期间运行的一些大型应用程序可能无法正常运行。例如,您可能会在初始化期间收到以下消息
Finding module dependencies Out of memory
我认为这在稍后重新启用交换之前不会引起任何问题。但始终最好采取一些预防措施。正如您将在下一节中看到的那样,Linux 也可以配置为使用交换文件而不是交换分区。因此,如果您觉得 Linux 在您的正常系统内存下无法正常运行,请创建一个交换文件,供 Linux 临时使用,直到交换恢复。此交换文件最好位于根目录中。计算出所需的最小交换空间大小。它可能等于您的系统内存。通过给出以下命令创建该大小的交换文件(假设 16MB 交换空间)
# dd if=/dev/zero of=/swap bs=1024 count=16384
# mkswap /swap 16384
# sync
现在将命令 swapon /swap
放在 rc.sysinit 文件中原始的 swapon -a
命令之后。因此,现在您的系统已配置为使用交换文件,并且希望不会出现内存不足错误。在拥有可用的交换分区后(即在完全按照本 HOWTO 操作后),您可以删除您添加到 rc.sysinit 文件中的 swapon /swap
行。
请不要给我发邮件,除非您已检查并重新检查您是否正确复制了脚本。本 Mini-HOWTO 报告的问题中,超过一半是由于复制脚本时出现拼写错误造成的。(如果可以,请使用剪切粘贴!)。即使是空格错误也可能导致错误。例如,如果在启动时您收到以下消息
Verifying swap space...Linux signature found
swapon: /dev/winswap invalid argument
那么,您的脚本中肯定存在拼写错误。请检查您的脚本。
有时,交换分区被检测为既没有 Linux 信息也没有 Windows 信息,并且出现“No signature found”错误。我不太清楚为什么会发生这种情况,但对于这种情况,我在 swap????.sh 文件中编写了代码,尝试六次才报告错误。通常,DOS 签名应该在第一次尝试时找到,但在我的系统上,很多时候是在迭代 2、5 或 12 次迭代后根本找不到。您可以考虑将尝试次数增加到 12 或 24 之类的值,这样做没有坏处。有一次在我的系统上,即使经过 50 次迭代,脚本也无法检测到签名!如果出现这种情况,您可以考虑在您的根目录中创建一个指向 swapinit.sh 文件的符号链接,并在启动时执行它。
# ln -s /etc/rc.d/init.d/swapinit.sh swapinit.sh
# ./swapinit.sh
但是,我观察到的是,一旦设置在您的系统上运行一段时间后,总是在第一次迭代中找到适当的签名。
为了增加可靠性
您的 Linux Box 运行着非常重要的东西,或者您的系统内存较小,以至于在没有交换的情况下,您的应用程序只是开始崩溃?您已将交换分区设置为与 Windows 共享。但是很多时候,您的系统在详尽的探测后无法检测到正确的签名,因此禁用了任何交换分区。您需要自行承担风险,您可以考虑删除签名检查逻辑,但这里有一个更易于接受的解决方案。
首先参考前一点,在 Linux 根目录中创建一个名为 /swap 的交换文件。根据您的需要保持其大小。现在打开 swapinit.sh 文件并修改最后的 if
语句如下
if [ $activated -ne 1 ] ; then
echo "Swap signature not found after $loopcount tries"
echo "Activating swap file"
swapon /swap
exit 1
fi
因此,如果我们发现交换分区缺少适当的交换签名,那么我们启用交换文件。由于交换文件位于根分区上,并且 Linux 内核在挂载根文件系统之前拒绝继续,因此您可以安全地确保交换文件将始终成功激活。您可以修改代码以动态创建交换文件,而不是创建和保留交换文件并浪费磁盘空间。
节省更多磁盘空间 正如我们所见,Linux 和 Windows 可以共享它们的交换空间。但是 Windows 真的不需要像您的 Linux 交换分区那样大的交换文件吗?那么您可以在交换分区上保留一些可用空间(保持 Windows 交换文件大小小于交换分区大小)。基于 Windows 的应用程序的交换由 Windows 本身管理。但是许多 DOS 程序(如 Turbo C++ 编译器、Norton DOS 等)也管理它们自己的交换文件。在这种情况下,可以配置这些程序,以便它们在交换分区而不是其默认位置创建交换文件。这将增加您的可用磁盘空间。此外,这些程序中的大多数都忘记删除它们创建的交换文件,导致大量已用磁盘空间。但是通过这种设置,每次您关闭 Linux 时,您都会获得一个干净的交换分区,从而节省您查找和删除这些交换文件的时间。例如,您可以通过以下方式调用 Turbo C++ 来告诉它在驱动器 E: 上进行交换
C:\CLAN>TC /RE
对于 Norton DOS,在 NDOS.INI 文件中设置变量,如下所示:
Swapping = E:\
许多其他程序可能依赖于 TEMP
或 TMP
环境变量来决定它们将在哪里进行交换。在这种情况下,您可以在 AUTOEXEC.BAT 文件中适当地设置这些变量。
如果交换分区是 FAT32 怎么办? 不,您不能使用 FAT32 文件系统作为交换分区。首先,Linux 在单个交换分区上最多可以使用 128MB 的交换空间。因此,如果您的交换分区大于 128MB,您就是在浪费磁盘空间。并且 Windows 将拒绝将 128MB 的分区转换为 FAT32 文件系统。
新式交换空间 Linux 知道两种样式的交换区,旧式和新式。默认情况下,您将使用带有签名“SWAP-SPACE”的旧式交换空间。如果您想使用新式交换空间,那么首先将所有上述脚本中的“SWAP-SPACE”更改为“SWAPSPACE2”。还在 swapinit.sh 脚本中的 mkswap 命令中添加选项 -v1,如下所示
/sbin/mkswap -v1 /dev/winswap YYYYY
此外,从 shell 提示符运行以下命令
# swapoff /dev/winswap
# mkswap -v1 /dev/winswap YYYYY
# swapon /dev/winswap
似乎在新式交换空间下,您在 i386 平台上的可用交换分区可以高达 2GB。这意味着您现在可以拥有一个大于 512MB 的交换分区,Windows 可以将其格式化为 FAT32 分区。有人可以帮助我们了解如何在 FAT32 分区下保存“总特殊扇区”吗?
对于 WINE 用户 WINE 是一个允许在 Linux 上运行 Microsoft Windows 程序的程序。如果您在已设置为共享交换分区的系统上使用 WINE,那么在运行 Windows 程序时,会在您的 Windows 文件夹中创建一个大约 8kb 的 win386.swp
文件。这是因为 X: 上的交换文件在那时不可用。一旦您完成运行 Windows 程序,您可以安全地删除此文件。