我在我的旧上网本上运行BOINC,它只有 2 GB 的板载 RAM,这不足以运行某些任务。就像在,他们拒绝,看看设备的 RAM 有多低。
我有启用了 backing_dev 和 zstd 算法的 zRAM,所以实际上,内存不足从来都不是问题,在特别困难的情况下,我总是可以使用systemd-run --scope -p
(我已经成功地运行了需要 +16 GB RAM 的程序)
如何让 BOINC 认为我的笔记本电脑安装了超过 2 GB 的 RAM,以便我可以运行那些要求很高的任务?
Ark*_*zyk 54
创建一个假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
Run Code Online (Sandbox Code Playgroud)
您还可以在与系统其余部分隔离的挂载命名空间中运行上述命令。参考: 从伪造的 /proc/meminfo 中恢复
经过一番思考,我这样做了:
开始于 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
Run Code Online (Sandbox Code Playgroud)
并确认free
它有效
total used free shared buff/cache available
Mem: 2321456 21456 2300000 0 0 2300000
Swap: 5000000 1000000 4000000
Run Code Online (Sandbox Code Playgroud)
然后切换到用户su - boinc
并启动程序
boinc --check_all_logins --redirectio --dir /var/lib/boinc-client
Run Code Online (Sandbox Code Playgroud)
BOINC Manager 可以像往常一样启动
完全成功,以前拒绝运行的任务开始下载然后运行没有任何并发症