我想在运行 Fedora 的机器上添加交换空间。搜索此内容时出现了以下问题:
我发现这篇 2016 年的文章展示了一种方法,但评论说更改交换可能会导致启动问题。按照该方法安全吗?
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
我测试过它并且它可以读取大文件。有帮助的资源: