Loading... ~~# **1.创建1G的交换文件**~~ ``` dd if=/dev/zero of=/mnt/local/swapfile bs=1024 count=1024000 ``` >这里的`/mnt/local/swapfile`是你创建的交换文件的路径,如果你创建的交换文件不是在`/mnt/local`目录下,那么这里的路径也要相应修改。 解释一下 * `dd` 为用于复制和转换文件的命令 * `if=/dev/zero` 指定输入文件为 `/dev/zero`,表示从零值设备中读取数据。 * `of=/mnt/local/swapfile` 指定输出文件为 `/mnt/local/swapfile`,即尝试在 `/mnt/local` 目录下创建名为 `swapfile` 的文件以存储数据。 * `bs=1024` 指定块大小为 1024 字节,即每次写入 `1024 字节`的数据。(`dd` 命令中的 `bs` 选项默认的单位是字节(bytes)。如果没有指定后缀,例如 `M` 或 `K` 等,那么 `bs` 的值就会被解释为字节数。如果不指定单位的话,`bs`的默认单位为`Byte`。指定`bs`单位,如`bs=1M` 指定块大小为` 1 MB`,即每次写入 `1MB` 的数据。) * `count=1024000` 指定要复制的块数为 `1024000`,因此将在指定的输出文件中创建大小为 `1024 MB` 的交换文件。 --- P.S. 仔细分析下:`dd if=/dev/zero of=/mnt/local/swapfile bs=1024 count=1024000` $每个分块的大小(bs)*分块总数量(count)=swap总大小$ $$ 1024Byte*1024000块\newline=1048576000B\newline=\frac {1048576000B}{2^{20}}MB\newline=1000MB\newline=\frac{1048576000B}{2^{30}}GB\newline≈0.9765625GB $$ 所以准确的说,`dd if=/dev/zero of=/mnt/local/swapfile bs=1024 count=1024000`创建的不是`1GB`的`swap`内存,而是大约`0.9765GB`的`swap`内存,也即是`1000MB`的`swap`。 --- # 1.所以说,如果想准确的创建`1GB`的`swap`也即是`1024MB`的`swap`,应该这样 ``` dd if=/dev/zero of=/mnt/local/swapfile bs=1M count=1024 ``` ~~如果极端一点,也可以这样也是1GB swap`dd if=/dev/zero of=/mnt/local/swapfile bs=1 count=1073741824`,但还是不要这么极端吧~~ --- # 2.将指定文件转换为交换空间 ``` mkswap -f /mnt/local/swapfile ``` * `mkswap` 是用于创建交换空间的命令。 * `-f` 选项指定强制格式化,并忽略文件系统类型检查。 * `/mnt/local/swapfile` 是要格式化为交换空间的文件路径。 --- 可能会报错 ``` # root @ OpenWrt in /mnt/local [15:18:11] $ mkswap -f /mnt/local/swapfile mkswap: unrecognized option: f BusyBox v1.36.0 multi-call binary. Usage: mkswap [-L LBL] BLOCKDEV [KBYTES] Prepare BLOCKDEV to be used as swap partition -L LBL Label # root @ OpenWrt in /mnt/local [15:19:43] C:1 ``` 不要使用参数`-f`就行了: ``` mkswap /mnt/local/swapfile ``` --- # 3. `swapfile` 文件作为交换分区的`开启`与`关闭` ## 开启: ``` swapon /mnt/local/swapfile ``` >此时可以通过运行 `swapon -s` 命令检查已启用的交换空间列表。 --- ## 关闭: 可使用如下命令停止使用 `swapfile` 文件作为交换分区,并删除其中存储的虚拟内存页面。 ``` swapoff /mnt/local/swapfile ``` >此时可以通过运行 `swapon -s` 命令检查已启用的交换空间列表。 --- # 4.开机自动启用`swap` ``` vim /etc/rc.local ``` 在exit 0 上方任意位置添加 ``` swapon /mnt/local/swapfile ``` >注意:`/mnt/local/swapfile` 是你创建的交换文件的路径,如果你创建的交换文件不是在 `/mnt/local` 目录下,那么这里的路径也要相应修改。 --- # 后记 `dd if=/dev/zero of=/home/swapfile-1M bs=1M count=1024` 创建的是1024MB的swap `dd if=/dev/zero of=/home/swapfile-1MB bs=1MB count=1024` 创建的是1024000000B≈977MB的swap `dd if=/dev/zero of=/home/swapfile-1Mb bs=1Mb count=1024` 创建失败,报错`dd: invalid number: ‘1Mb’` 总结,还是不要在后面加乱七八糟的单位比特或者字节了, 就啥也不加,用默认的`字节`吧: `M` 或 `K`。 补充: `bs=N`,其中`bs`是`block storge`的简写。 N may be suffixed by c (1), w (2), b (512), kB (1000), k (1024), MB, M, GB, G c:字节(byte) w:字(word),通常为 2 字节(16位cpu中) b:块(block),通常为 512 字节 kB/K:千字节(kilobyte),即 1000 字节 k:千字节(kibibyte),即 1024 字节 MB/M:兆字节(megabyte),即 1000^2 字节或 10^6 字节 M:兆字节(mebibyte),即 1024^2 字节或 2^20 字节 GB/G:吉字节(gigabyte),即 1000^3 字节或 10^9 字节 G:吉字节(gibibyte),即 1024^3 字节或 2^30 字节 Last modification:April 21, 2023 © Reprint prohibited Support Appreciate the author AliPayWeChat Like V50%看看实力