如何在 Fedora 上添加交换空间?

如何在 Fedora 上添加交换空间?

我想在运行 Fedora 的机器上添加交换空间。搜索此内容时出现了以下问题:

  1. 我发现这篇 2016 年的文章展示了一种方法,但评论说更改交换可能会导致启动问题。按照该方法安全吗?

  2. Fedora 的文档据说它用“使用 RAM 作为存储的模拟驱动器”取代了交换。这让我很困惑,因为我认为交换的全部意义在于当 RAM 已满时使用磁盘内存。

无论如何,这是我的用例:我有一台相当新的笔记本电脑,配备 24GB RAM 和 1TB SSD,已满 5%。我想尝试运行一些新的基于 LLaMA 的 LLM,但它们很容易需要数十 GB 的 RAM 来加载模型。由于我的 SSD 中有足够的可用空间,我想将其中的约 200GB 转换为交换空间并能够加载模型。

运行结果如下lsblk(我删除了30行左右的快照):

loop0    7:0    0   104M  1 loop /var/lib/snapd/snap/authy/18
loop1    7:1    0     4K  1 loop /var/lib/snapd/snap/bare/5
...
loop34   7:34   0 320.4M  1 loop /var/lib/snapd/snap/vlc/3078
zram0  252:0    0     8G  0 disk [SWAP]
nvme0n1
       259:0    0 953.9G  0 disk 
├─nvme0n1p1
│      259:1    0   260M  0 part /boot/efi
├─nvme0n1p2
│      259:2    0    16M  0 part 
├─nvme0n1p3
│      259:3    0 269.1G  0 part 
├─nvme0n1p4
│      259:4    0   959M  0 part 
├─nvme0n1p5
│      259:5    0     1G  0 part /boot
└─nvme0n1p6
       259:6    0 634.8G  0 part /home
                                 /

答案1

有效的方法

根据 Kamil 的评论,我关注了此处的说明

第一次尝试

我部分解决了我的问题。(1) 中的方法不起作用,似乎是因为 btrfs 不允许交换文件。所以我按照我读到的这里/etc/systemd/zram-generator.conf,并创建了一个包含以下内容的文件:

[zram0]
zram-size = 100000

重启后我现在有大约 100 G 的 zram:

$ zramctl
NAME       ALGORITHM DISKSIZE  DATA  COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo-rle      97.7G  3.4G 931.5M  1.2G      12 [SWAP]

但是,当尝试运行 LLM 时,交换内存使用量仅达到 24GB,然后就稳定下来,程序因内存不足而终止。此时,我不确定问题出在 zram 本身还是我尝试运行的程序上……

答案2

这就是我所做的事情,并且对我有用。以下是输出lsblk

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0   7.3T  0 disk 
├─sda1        8:1    0    16M  0 part 
└─sda2        8:2    0   7.3T  0 part /run/media/ef/Storage
zram0       252:0    0     8G  0 disk [SWAP]
nvme0n1     259:0    0   1.8T  0 disk 
├─nvme0n1p1 259:1    0    16M  0 part 
├─nvme0n1p2 259:2    0 834.7G  0 part 
├─nvme0n1p3 259:3    0   614M  0 part 
├─nvme0n1p4 259:4    0   100M  0 part /boot/efi
├─nvme0n1p5 259:5    0     1G  0 part /boot
└─nvme0n1p6 259:6    0     1T  0 part /home

以下是 $ swapon -s 的输出

Filename                Type        Size        Used        Priority
/dev/zram0              partition   8388604     1935420     100

以下是我遵循的步骤:

$ sudo touch /swapfile
$ sudo chattr +C /swapfile 
$ sudo lsattr /swapfile
$ sudo fallocate -l 200G /swapfile
$ sudo lsattr /swapfile
$ sudo chmod 600 /swapfile
$ sudo lsattr /swapfile  # make sure you see the letter C in the results: ---------------C------ /swapfile
$ sudo mkswap /swapfile # output example: Setting up swapspace version 1, size = 200 GiB (214748360704 bytes)
$ sudo mkswap /swapfile # output example: Setting up swapspace version 1, size = 200 GiB (214748360704 bytes)
                                          no label, UUID=98a6c4a0-ec8d-4afb-90af-6162e83d30b3
$ sudo swapon /swapfile
$ vim /etc/fstab 

在这里我在末尾添加了一行/etc/fstab

/swapfile swap swap defaults 0 0

就是这样。现在你可以看到它出现了:

$ sudo swapon -s
NAME       TYPE      SIZE USED PRIO
/dev/zram0 partition   8G 1.8G  100
/swapfile  file      200G   0B   -2

我测试过它并且它可以读取大文件。有帮助的资源:

相关内容