我使用了 dphys-swapfile,默认路径为/var/swap
2048M 交换文件。
但是,由于/var/swap
位于 SD 卡上,我想将交换文件移动到磁盘上。所以我跑了sudo dphys-swapfile swapoff
,编辑路径,然后跑:
sudo dphys-swapfile setup
sudo dphys-swapfile swapon
后者失败了:
swapon: /srv/file/swap: swapon failed: Invalid argument
sudo journalctl -xe
给我:
kernel: swapon: swapfile has holes
为了确定,我尝试了以下方法,但均无济于事:
- 删除新的交换文件并重新创建它
sudo dphys-swapfile setup
- 将旧的交换文件复制到新位置
sudo dd if=/dev/zero of=/srv/file/swap bs=1024 count=2097152 status=progress
(将整个交换文件清零,bs * count
等于交换文件的大小 - 这次我得到的错误是交换文件有一个无效的标头dd
旧的交换文件覆盖清零的文件 - 再次导致对文件中的漏洞的投诉
交换文件的新旧路径之间的唯一区别是旧路径位于 ext4 文件系统上,而新路径位于 btrfs 上。(除了旧路径位于 SD 卡上和新路径位于磁盘上之外,尽管我怀疑这会产生任何影响。)
由于某种原因,ext4 上的交换文件要么看起来是在没有漏洞的情况下创建的,要么dphys-swapfile
接受 ext4 上的漏洞。如何在 btrfs 上获得相同的结果?(或者我遇到的问题与我想象的不同?)
操作系统是 Raspbian Linux 9(我知道,它很旧),dphys-swapfile 是版本 20100506-3。