Nix 自定义映像构建在 Ubuntu 18.04.4 LTS 上不断失败并显示消息No space left on device
,并且能够 watch -n -1 "df -h"
在运行构建时使用它来跟踪它。罪魁祸首最终是 /run
挂载点(更具体地说是/run/user/1000
),以及间接的交换空间。
这是以前的样子:
Filesystem Size Used Avail Use% Mounted on
...
tmpfs 785M 28K 785M 1% /run/user/1000
...
答案1
1.调整/run
挂载点大小
根据
tmpfs
文档
,”tmpfs
具有三种尺寸安装选项”在哪里
尺寸是
为此 tmpfs 实例分配的字节数限制。默认情况下是物理 RAM 的一半,没有交换。如果您的 tmpfs 实例过大,机器将死锁,因为 OOM 处理程序将无法释放该内存。
也就是说,它可以设置为任意大的大小,但**请确保有足够的RAM或交换空间(或其组合),因此如果需要,请调整后者(参见下面的4.)。
就我而言,我将其设置为 15 GB 作为初学者,这已经足够了。
sudo mount -o remount,size=15G,noatime /run/user/1000
2.调整交换空间
2.1 暂时
用过的这个 Askubuntu 答案通过以下方式:
检查当前交换:
$ free -th
total used free shared buff/cache available
Mem: 7.7G 4.6G 253M 985M 2.8G 1.8G
Swap: 975M 0B 975M
Total: 8.6G 4.6G 1.2G
$ sudo swapon -s
Filename Type Size Used Priority
/dev/dm-2 partition 999420 3840 -2
设置交换文件并将其打开:
$ sudo touch /temp_swap_15G.img
$ sudo fallocate -l 15G /temp_swap_15G.img
$ sudo mkswap /temp_swap_15G.img
# `-p` is the priority; the default is -2 and anything
# higher will be used first
$ sudo swapon -p 27 /temp_swap_15G.img
检查结果:
$ sudo swapon -s
Filename Type Size Used Priority
/dev/dm-2 partition 999420 4352 -2
/temp_swap_15G.img file 15728636 0 27
2.2 永久
StackExchange 答案(快照可在archive.org上找到):
- https://askubuntu.com/questions/178712/how-to-increase-swap-space
- https://askubuntu.com/questions/226520/how-can-i-modify-the-size-of-swap-with-lvm-partitions
这是针对 LVM 的故障排除:
笔记:在 NixOS 上,该过程将非常简单,而不是上述步骤
- 编辑
services.logind.extraConfig
属性/etc/nixos/configuration.nix
:
services.logind.extraConfig = ''
RuntimeDirectorySize=12G
HandleLidSwitchDocked=ignore
'';
- 重建配置(例如,使用
sudo nixos-rebuild switch
)。
更多信息:
什么是/run
?
这 是权威答案,但是 这个 Quora 答案 总结:
/run
是相当于 的“早起鸟”/var/run
,因为它意味着很早启动的系统守护进程(例如systemd
和udev
)来存储临时运行时文件,如 PID 文件和通信套接字端点,而/var/run
将由较晚启动的守护进程使用(例如sshd
和阿帕奇)。传统的
/var/run
是磁盘上的实际目录,这意味着底层文件系统可能尚未安装,systemd
而其他人需要将内容写入其中。制作/run
tmpfs(即基于 RAM)文件系统巧妙地解决了这个问题,并且无需在下次启动时清理它。当然,拥有两个运行时临时目录对很多人来说有点太多了,所以在许多现代 Linux 发行版中,
/var/run
只是一个到/run
.
什么是 tmpfs
?
kernel.org/doc/Documentation/filesystems/tmpfs.txt:
tmpfs 中的所有内容都是临时的,因为不会在硬盘上创建任何文件。如果卸载 tmpfs 实例,其中存储的所有内容都会丢失。
tmpfs 将所有内容放入内核内部缓存中,并进行增长和收缩以容纳其包含的文件,并且能够将不需要的页面交换到交换空间。它有最大尺寸限制,可以通过以下方式动态调整
mount -o remount ...
还, ”tmpfs 完全存在于页面缓存和交换中”。