镜像把家目录塞满的时候
一句话总结
rootless podman的图像是~/.local/share/containers/storage堆积起来。如果主分区很小,移动graph root成为第一个操作任务。
为什么需要这个?
服务器分区设计这种情况很常见。
/ 50G
/home 20G <- rootless podman 의 이미지가 여기 쌓인다
/data 2T <- 정작 큰 디스크는 여기
一个CUDA映像就用完了8GB。即使只收到两个,主页也会被占用。而且主页被占用的话,不仅podman,而且那个用户的所有工作都会停止。
怎么行动
搬什么东西
| 项目 | 基本路径(rootless) | 需要移动吗 |
|---|---|---|
graphroot |
~/.local/share/containers/storage |
**是的。**图像·容器图层 |
runroot |
/run/user/<uid>/containers |
不是。tmpfs是正确的。 |
| 音量 | <graphroot>/volumes |
移动graphroot的话会跟着移动 |
| 设置 | ~/.config/containers |
不是。小。 |
程序
# 1. 현재 상태 확인
podman info --format '{{.Store.GraphRoot}}'
du -sh ~/.local/share/containers/storage
# 2. 새 경로 준비 (소유자가 그 사용자여야 한다)
sudo mkdir -p /srv/podman/podster
sudo chown podster:podster /srv/podman/podster
sudo chmod 700 /srv/podman/podster
# 3. 설정 변경
# ~/.config/containers/storage.conf
# [storage]
# graphroot = "/srv/podman/podster"
# 4. 검증
podman info --format '{{.Store.GraphRoot}}'
podman images
重要的是,从第3次开始,新商店就空了。 现有图像仍然保留在旧路径上,podman 不再看到它。只有两种选择。
- 再次接收——有网络的话是最简单的。
- 翻译 —
podman save制作tar,在新商店podman load. 或者把目录全部复制(cp -a或者rsync -aHAX). 整个磁盘的复制必须保留SELinux标签和硬链接,所以必须准确地给出选项。
如果是封闭网络的话,只有后者。而且在删除旧路径之前,一定要在新路径上podman images确认是否会显示期待的列表。
设定为系统全局
要向多个用户适用相同的政策的话/etc/containers/storage.conf写在。但是,由于rootless用户的个人设置会覆盖此内容,如果目的是标准化,则需要发布个人设置文件或主骨架(/etc/skel)放入。
确认命令
podman info --format '{{.Store.GraphRoot}}'
podman info --format '{{.Store.RunRoot}}'
podman info --format '{{.Store.GraphDriverName}}'
podman system df
podman system df显示映像、容器、卷的各自使用量。选择整理对象时是第一个命令。
在Rootless中,存储器出问题的理由
ROOTLESS FORD独有的存储问题大部分在用户名空间和文件所有权中 出来。知道原理的话,症状就会马上读懂。
容器内的UID是主机上的其他数字。/etc/subuid只要写在上的范围
被挤压了。容器内的root(0)在主机上是我的UID,容器内的1000是
在主机上subuid 시작 + 999所以,如果在主机上看到那个文件,那么所有者就会
看起来是很大的数字。
grep "^$USER:" /etc/subuid /etc/subgid
podman unshare cat /proc/self/uid_map
**如果挂载主机目录,权限就不对了。**我创建的文件在主机上
这是我的,在集装箱里nobody看起来是这样。要转移所有权的话,那个
在名字空间里chown应该做。
podman unshare chown -R 1000:1000 ./data
podman unshare没有sudo chown这样做的话,只有以主机为基准才正确,在容器中
还是不对。
**移动graph root时所花费的时间。**如果新位置是不同的文件系统的话
overlay首先看是否支持。在NFS上不能overlay,这时
vfs随着下降,磁盘使用量增加了几倍,并变得缓慢。
podman info --format '{{.Store.GraphRoot}} {{.Store.GraphDriverName}}'
**附有SELinux的发行版需要贴上标签。**在卷挂载上:Z不
粘在一起的话,容器就读不出来了。:z是共享,:Z是专用标签。
**定期清理剩余的东西。**因为Routes会堆积在用户主页下方,所以主页 分割槽很容易删除。一起查看临时映像、停止的容器和未使用的卷。
podman system df
podman system prune --volumes --filter until=168h
在现场相遇的样子
特别经常在GPU节点上遇到。 CUDA基础映像即使只接收几个数GB的映像也会占用大量空间。所以GPU服务器标准设置中,经常会完全包含将graphroot发送到数据磁盘的项目。
不能在NFS主页上放置graphroot。 overlay系列驱动程序无法正常运行,由于文件锁定问题出现奇怪的失败。必须是本地磁盘。
如果没有删除旧路径,将磁盘使用两倍的情况。搬迁后完成验证后,需要整理旧路径。但是podman system reset因为将当前设置的商店删除,所以不能用于整理旧路径。
下次实习要做的事情
podster将图的graph root移动到新路径,确认新商店为空后,加载图像存档并填充,podman info最终验证为。