我在跑博恩克在我的旧上网本上,它只有 2 GB 板载 RAM,这不足以运行某些任务。比如,他们拒绝这样做,因为他们看到设备的 RAM 有多低。
我的 zRAM 启用了 backing_dev 和 zstd 算法,所以实际上,内存不足从来都不是问题,在特别困难的情况下我总是可以使用systemd-run --scope -p
(我已经使用它成功运行了需要 +16 GB RAM 的程序)
如何让 BOINC 认为我的笔记本电脑安装了超过 2 GB 的 RAM,以便我可以运行那些要求较高的任务?
答案1
创建一个假的meminfo
并将其安装在原件上/proc/meminfo
:
$ mkdir fake-meminfo && cd fake-meminfo
$ cp /proc/meminfo .
$ chmod +w meminfo
$ sed -Ei 's,^MemTotal: [0-9]+ kB,MemTotal: 8839012 kB,' meminfo # replace 8839012 with an amount of RAM you want to pretend you have
$ free -m # check how much RAM you have now
total used free shared buff/cache available
Mem: 7655 1586 3770 200 2298 5373
$ sudo mount --bind meminfo /proc/meminfo
$ free -m # check how much RAM you pretend to have after replacing /proc/meminfo
total used free shared buff/cache available
Mem: 8631 2531 3800 201 2299 5403
$ sudo umount /proc/meminfo # restore an original /proc/meminfo
$ free -m
total used free shared buff/cache available
Mem: 7655 1549 3806 200 2299 5410
您还可以在与系统其他部分隔离的安装命名空间中运行上述命令。参考: 从伪造的 /proc/meminfo 中恢复
答案2
经过一番思考,我这样做了:
开始于nano /proc/meminfo
MemTotal
将、MemFree
、MemAvailable
和更改SwapTotal
为SwapFree
所需值并保存到 ~./meminfo
给用户 boinc 密码sudo passwd boinc
和 shell -- sudo nano /etc/passwd
,找到该行boinc:x:129:141:BOINC core client,,,:/var/lib/boinc-client:/usr/sbin/nologin
并将部分更改/usr/sbin/nologin
为/bin/bash
然后我使用这里的示例伪造了 RAM 信息从伪造的 /proc/meminfo 中恢复
unshare -m bash #unshares mount spaces, for specific program "bash" only (and for whatever you want to launch from it)
mount --bind ~./meminfo /proc/meminfo #substitutes real meminfo data with fake one
并确认free
它有效
total used free shared buff/cache available
Mem: 2321456 21456 2300000 0 0 2300000
Swap: 5000000 1000000 4000000
然后切换到用户su - boinc
并启动程序
boinc --check_all_logins --redirectio --dir /var/lib/boinc-client
然后可以照常启动 BOINC Manager
完全成功,之前拒绝运行的任务开始下载,然后运行,没有任何并发症