如何在 Linux 中为特定程序伪造已安装的 RAM 量?

Ром*_*оян 37 linux ram

我在我的旧上网本上运行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 中恢复


Ром*_*оян 9

经过一番思考,我这样做了:

开始于 nano /proc/meminfo

改变MemTotalMemFreeMemAvailableSwapTotalSwapFree至所需的值,并保存到〜。/ 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 可以像往常一样启动

完全成功,以前拒绝运行的任务开始下载然后运行没有任何并发​​症