无法增加交换大小:交换文件似乎有漏洞

无法增加交换大小:交换文件似乎有漏洞

编辑:我放弃了 19.10 的挣扎。根据我的研究,它有严重的错误,尤其是 5.3 内核。太多人遇到同样的问题,而且不止一种解决方案对我不起作用。我会尝试 18 lts 版本。

我使用的是 Ubuntu 19.10,内核为 5.3.26,内存为 4 GB,但交换大小为 2 GB。我的系统几乎一直处于冻结状态。因此,我决定增加交换大小,但出现了类似的错误。

我使用了这些命令:

sudo dd if=/dev/zero of=/swapfile bs=1G count=4
sudo chmod 600 /swapfile
sudo mkswap /swapfile

直到最后一部分都还好:

sudo swapon /swapfile

当我使用最后一个命令时,它显示:

swapon: /swapfile: skipping - it appears to have holes.

这是 lsblk 输出

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
├─sda1   8:1    0   512M  0 part /boot/efi
├─sda2   8:2    0    50M  0 part /boot/grub
├─sda3   8:3    0     2G  0 part [SWAP]
├─sda4   8:4    0     2G  0 part 
└─sda5   8:5    0 114,7G  0 part 

这是 df 输出

Filesystem     Type     1M-blocks  Used Available Use% Mounted on
/dev/sda1      vfat           511     8       504   2% /boot/efi
/dev/sda2      ext4            45     8        33  20% /boot/grub
udev           devtmpfs      1883     0      1883   0% /dev
udev           devtmpfs      1883     0      1883   0% /dev
udev           devtmpfs      1883     0      1883   0% /dev

答案1

Ubuntu 社区 掉期常见问题显示使用作为初始且更快捷的方法,只有失败时才fallocate依靠。ddfallocate

给出的示例(1GiB)

$ sudo swapoff -a
$ sudo fallocate -l 1g /mnt/1GiB.swap
$ sudo chmod 600 /mnt/1GiB.swap
$ sudo mkswap /mnt/1GiB.swap
Setting up swapspace version 1, size = 1048576 kB
$ sudo swapon /mnt/1GiB.swap
$ cat /proc/swaps 
Filename                                Type            Size    Used    Priority
/home/swapfile                          file            1048576 1048576 -1
$ echo '/mnt/4GiB.swap swap swap defaults 0 0' | sudo tee -a /etc/fstab
$ reboot
$ free -h
              total        used        free      shared  buff/cache   available
Mem:            15G        9.3G        454M        4.0G        5.8G        1.9G
Swap:          1.0G        0B          1.0G

您的案例 (4GiB)- 使用fallocate

$ sudo swapoff -a
$ sudo fallocate -l 4G /yourswapfile
$ sudo chmod 600 /yourswapfile
$ sudo mkswap /yourswapfile
$ sudo swapon /yourswapfile
$ echo '/yourswapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
$ free -h

您的案例 (4GiB)- 使用dd
笔记:与您使用的流程相同,只是bs值较小(一次读取/写入字节),以减少交换文件中出现漏洞的可能性。我还添加了status=progress显示定期传输统计信息的内容。

$ sudo swapoff -a
$ sudo dd if=/dev/zero of=/yourswapfile bs=1M count=4096 status=progress

笔记:如果bs=1M count=4096太慢,请尝试bs=4M count=1024

答案2

对于 Ubuntu 来说,使用文件作为交换空间还是比较新的。以前,当使用交换分区时,块当然是连续的,但文件没有这样的保证。显然,已经做了一些努力来允许间隙,但处理的内容可能存在限制。请参阅“man mkswap”手册页末尾的注释:

Note that a swap file must not contain any holes.  Using cp(1) to create the file is not acceptable.  Neither is  use  of
       fallocate(1)  on  file systems that support preallocated files, such as XFS or ext4, or on copy-on-write filesystems like
       btrfs.  It is recommended to use dd(1) and /dev/zero in these cases.  Please read notes from swapon(8)  before  adding  a
       swap file to copy-on-write filesystems.  

立即的解决方法是简单地重新分配一些分区,将 4G 专用于交换分区,然后在其上进行 mkswap。

答案3

使用 ZDF 默认安装后也遇到了同样的问题。2G 交换分区 - 仅此而已。我在此线程中找到了解决方案:ZFS 交换大小,甚至在不改变路径的情况下使用它,只是选择了另一个大小,32G:

zfs create -V 8G -b $(getconf PAGESIZE) -o logbias=throughput -o sync=always -o primarycache=metadata -o com.sun:auto-snapshot=false rpool/swap
mkswap -f /dev/zvol/rpool/swap
swapon /dev/zvol/rpool/swap

# IN FSTAB (before the line with current swap file or partition)
/dev/zvol/rpool/swap none swap discard 0 0

检查它是否对你有用:free -m

但是我的新 SSD 几乎是空闲的,因此分配大型连续文件没有问题。在多次创建/附加/收缩/删除文件操作之后在几乎已满的驱动器上执行此操作肯定会出现问题!!!

相关内容