添加交换量

Gau*_*rav 3 swap 12.04

我最近在 Windows 7 旁边安装了 ubuntu 12.04。但我没有为 ubuntu 创建交换卷。我的硬盘上已经有 4 个分区(一个 windows 7,一个系统工具(windows 7),一个用于 ubuntu,一个用于公共媒体存储(ntfs))。因此,Gparted 不允许我为交换卷创建任何其他分区。它说要创建扩展分区,但我不知道要这样做。我想从普通媒体存储中创建一个交换卷。我怎样才能做到这一点?

我是 Ubuntu 的新手,所以你能推荐一些好的入门教程吗?

Eli*_*gan 6

要创建第五个分区,您必须删除现有的四个主分区之一,创建一个扩展分区(它是逻辑分区的容器,因此您可以在具有 MS-DOS 类型的系统上有效地拥有四个以上的分区分区表),然后将您删除的分区重新创建为扩展分区内的逻辑分区。您必须在某个地方备份您删除的分区(或至少是其内容)。这是一个很大的麻烦,在某些情况下是令人望而却步的。

因此,除非您需要 Ubuntu 系统支持休眠(需要交换分区),否则您应该将其设置为使用交换文件。这也能正常运行(前提是您的交换文件存储在 ext2、ext3 或 ext4 分区上)。

以下说明取自Ubuntu 社区文档中的Swap FAQ。这不是一个确切的引用,因为我已经更改了内部一致性和与 AskUbuntu 兼容性的格式;为了清楚起见,我还做了一些微小的编辑。本文档根据CC-BY-SA获得许可,允许将(有修改或无修改)包含在这样的文章中(作为 AskUbuntu.com 的内容,也可根据该许可证获得)。为了清楚起见(或其他目的),进一步编辑它可能是有意义的,但如果进行了重大的进一步修改,最好明确提供它们以供“上游”考虑(以便也改进原始来源)。


添加交换文件的四步过程

  • 创建所需大小的文件。
  • 格式化该文件以创建交换设备。
  • 将交换添加到正在运行的系统。
  • 使更改永久化。

信息:目前这不适用于 btrfs 文件系统。见man swapon

添加 512 MiB 交换的说明

  1. 创建一个 512 MiB 大小的文件(或者用你想要的任何大小替换它):

    我们将创建一个/mnt/512MiB.swap交换文件并设置权限,以便用户无法直接读取它。

    sudo fallocate -l 512m /mnt/512MiB.swap
    sudo chmod 600 /mnt/512MiB.swap
    
    Run Code Online (Sandbox Code Playgroud)

    fallocate长度后缀为:k、m、g、t、p、e(参见man fallocate.)

    默认情况下,您的交换文件可能会被创建为世界可读的。我们设置了 600 模式权限,以防止用户从交换文件中读取潜在的敏感信息。

    如果 fallocatefallocate failed: Operation not supported像目前在我的 Maverick 机器上那样失败,你可以用旧的方式来做,同样是 512 MiB:

    sudo dd if=/dev/zero of=/mnt/512MiB.swap bs=1024 count=524288
    sudo chmod 600 /mnt/512MiB.swap
    
    Run Code Online (Sandbox Code Playgroud)
  2. 格式化该文件以创建交换设备:

    sudo mkswap /mnt/512MiB.swap
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将交换添加到正在运行的系统:

    sudo swapon /mnt/512MiB.swap
    
    Run Code Online (Sandbox Code Playgroud)

    额外的交换现在可用,可以通过 看到cat /proc/meminfo

  4. 使更改永久化:

    编辑/etc/fstab

    gksudo gedit /etc/fstab
    
    Run Code Online (Sandbox Code Playgroud)

    在文件末尾添加这一行:

    /mnt/512MiB.swap  none  swap  sw  0 0
    
    Run Code Online (Sandbox Code Playgroud)

    节省。下次重新启动后,将自动使用交换。

制作交换文件的例子

这是在没有交换分区的计算机上制作和使用交换文件的示例。

user@computer:~$ sudo fallocate -l 512m /mnt/512MiB.swap
Password:

user@computer:~$ sudo mkswap /mnt/512MiB.swap
Setting up swapspace version 1, size = 536866 kB
no label, UUID=dd6a01c8-93f0-41e0-9b7a-306956d8821b
user@computer:~$ sudo swapon /mnt/512MiB.swap
user@computer:~$ cat /proc/meminfo
MemTotal:       499496 kB
MemFree:          9156 kB
Buffers:          4748 kB
Cached:         233140 kB
SwapCached:        724 kB
Active:         254432 kB
Inactive:       157920 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       499496 kB
LowFree:          9156 kB
SwapTotal:      524280 kB
SwapFree:       523556 kB
Dirty:             128 kB
Writeback:           0 kB
Mapped:         243420 kB
Slab:            20672 kB
CommitLimit:    774028 kB
Committed_AS:   648680 kB
PageTables:       2224 kB
VmallocTotal:   524280 kB
VmallocUsed:      5708 kB
VmallocChunk:   518176 kB
user@computer:~$ gksudo gedit /etc/fstab
user@computer:~$ free
             total       used       free     shared    buffers     cached
Mem:        499496     479488      20008          0       8256     215892
-/+ buffers/cache:     255340     244156
Swap:       524280       3856     520424
#####Then, after running a few more programs...
user@computer:~$ free
             total       used       free     shared    buffers     cached
Mem:        499496     492768       6728          0       1240     142336
-/+ buffers/cache:     349192     150304
Swap:       524280      53384     470896

#####Next, reboot to make sure it will work consistently.
user@computer:~$ free
             total       used       free     shared    buffers     cached
Mem:        499496     493136       6360          0       7528     174700
-/+ buffers/cache:     310908     188588
Swap:       524280      17148     507132
Run Code Online (Sandbox Code Playgroud)

撤消您的更改

撤消基本上遵循相同的相反过程。

gksudo gedit /etc/fstab
Run Code Online (Sandbox Code Playgroud)

删除该行:

/mnt/512MiB.swap  none  swap  sw  0 0
Run Code Online (Sandbox Code Playgroud)

从正在运行的系统中删除交换并删除交换文件:

sudo swapoff /mnt/512MiB.swap && sudo rm /mnt/512MiB.swap
Run Code Online (Sandbox Code Playgroud)

无需重新启动。


来源:如上所述,这是Ubuntu社区创作文档中SwapFaq的衍生作品。该页面由Contributors to the Ubuntu documentation wiki. (AskUbuntu 答案的维护者应在编辑或删除此引文之前仔细阅读此法律信息,以确保继续满足对原作者给予荣誉的要求。)