使用dd命令创建swap文件

1
dd if=/dev/zero of=/swapfile

本文主要介绍Unix-Like系统中如何使用dd命令来创建swap

dd命令简介

在dd命令的manpage中我们可以看到

1
2
3
4
DD(1)                                           User Commands                                               DD(1)

NAME
dd - convert and copy a file

dd命令主要是用于转换并且复制文件的,这样看起来好像和普通的cp、mv命令没有什么区别,那么为什么又要有一个dd命令呢?

这主要因为在Unix-Like的操作系统中,所有的磁盘、外部设备以及一些特殊的文件如/dev/zero/dev/random这些都是直接以文件形式存在的,而dd命令则可以执行读取这些设备并对其进行操作。dd命令可以做到按照指定的块大小读取这些文件,并且在经过转换之后再进行输出。

这些dd命令的特性意味着我们可以用dd命令来执行很多底层的操作,例如

  1. 备份整个磁盘

    1
    dd if = /dev/sda of = /dev/sdb

    其中if代表inputfile也就是输入文件,of代表outputfile输出文件,这样磁盘sdb中的内容与sda中的内容就完全一致了,并且是扇区到扇区的一致。

  2. 备份分区

    1
    dd if=/dev/hda1 of=~/path/to/backup/file.img

    这样分区hda1中的内容就备份到后缀名为.img的文件当中了。


使用dd命令创建swap

在现代操作系统内存管理中,当内存不足的时候,会把一部分硬盘空间虚拟成内存使用。这一部分的设置大多数时候都是在安装操作系统的时候完成的,但如果由于各种原因,安装操作系统的时候没有设置swap分区,便需要我们手动来创建了。

  1. 创建一个用于swap的文件

    1
    sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

    其中bs指的是blocksize,也就是块大小,单位是bytes,count是指要复制多少个输入文件中的block。这里我们创建的就是1G的swapfile。

  2. 设置权限

    swapfile的权限应该被设置为只有root才能够读写的权限

    1
    sudo chmod 600 /swapfile
  3. 设置linux swap

    我们可以用mkswap命令将一个文件设置为swap

    1
    sudo mkswap /swapfile
  4. 启用swap

    1
    sudo swapon /swapfile

    如果我们想要永久地设置这个swap,需要在/etc/fstab中添加swap的信息,在/etc/fstab文件的末尾添加一行

    1
    /swapfile swap swap defaults 0 0