目录
rm -rf /var/lib/docker 出现设备资源正忙
ls / | grep -v home | xargs du -sh
前言
因docker创建新的容器时报错
报错如下
docker: Error response from daemon: write /var/lib/docker/overlay2/10ee9f451a95b1ff1234a621a90a08d8af5a2e47e6e0350017
See "docker run --help'.
通过运行df -Th
命令,可能会发现docker默认挂载到的位置在/var/lib/docker
下。
针对这个问题的解决方法之一是迁移Docker的数据目录。在这里,我将数据目录迁移至/home/
目录下,但实际迁移位置可能会因环境而异。
请注意,迁移docker数据目录是一个敏感操作,务必在操作前备份数据以防意外发生。
大概思路
1、停止docker
2、备份数据到/home
3、修改docker启动文件指定数据目录
4、清理数据
5、启动docker
一、停止docker
停止docker
systemctl stop docker
二、备份数据到/home
然后备份/var/lib/docker下的所有内容 到/home/docker
cp -pr /var/lib/docker /home/docker
三、修改docker启动文件指定数据目录
vi /etc/systemd/system/docker.service
原文件ExecStart=/usr/bin/dockerd
现需要对docker.service做出如下修改,修改内容如下
ExecStart=/usr/bin/dockerd -g /home/docker
重启docker发现报错
journalctl -xe查看日志发现是因为docker的版本不一样
再次修改配置文件
-g 换成 --data-root
然后重启 docker,重启之后无报错。docker info 查看docker的信息
四、清理数据
再次备份(确保在进行敏感操作之前有可靠的数据备份是非常重要的)
cp -pr /var/lib/docker /home/BAK_20240318_docker
备份完了,然后你就可以删掉 /var/lib/docker了
但是在删除/var/lib/docker
之前,请确保Docker服务已经停止运行,以避免删除正在使用的文件和目录,进而导致系统故障。
在删除之前,确保docker服务已停止:
sudo systemctl stop docker
sudo rm -rf /var/lib/docker
df -Th查看确认
遇到docker数据目录迁移的问题时,确保在执行删除操作前先停止Docker服务。如果遗忘此步骤导致问题,不必惊慌。停止Docker服务后再次执行sudo rm -rf /var/lib/docker
即可解决。上述内容即是迁移docker的全流程。
下面是我遇见的奇葩问题,有兴趣的读者可继续翻阅。
在后端开发中,确实会遇到各种各样的问题,有时候问题的根源并不总是显而易见的。因此,细心观察、诊断问题并采取适当的解决措施是至关重要的。例如我就遇到rm -rf /var/lib/docker 出现设备资源正忙,按理说不应该啊,迁移完成之后 /var/lib/docker 应该释放了。 排查了半个小时才得出结论“遇到docker数据目录迁移的问题时,确保在执行删除操作前先停止Docker服务”。
奇葩问题
rm -rf /var/lib/docker 出现设备资源正忙
停止docker服务后再次执行sudo rm -rf /var/lib/docker
即可解决
发现 “/” 满了
ls / | grep -v home | xargs du -sh
这个命令的含义是:
ls /
:列出根目录下的所有文件和文件夹。grep -v home
:通过grep
命令筛选出不包含(-v
选项表示反选)"home"关键词的行,即过滤掉包含"home"关键词的行。xargs du -sh
:将grep
命令的输出作为参数传递给du -sh
命令。
然后,du -sh
命令用于查看文件或目录的磁盘使用情况,其中:
du
:是Disk Usage的缩写,用于查看文件或目录的磁盘使用情况。-s
:表示只显示总大小,而不列出每个子目录的大小。-h
:表示以易读的格式(如KB、MB、GB等)显示大小。
综合起来,这个命令的作用是列出根目录下所有不包含"home"关键词的文件和文件夹,并显示它们的磁盘使用情况。
du -sh * | grep G
这个命令的含义是:
du -sh *
:计算当前目录下所有文件和文件夹的磁盘使用情况,并以易读的格式显示它们的大小。grep G
:通过grep
命令筛选出包含 "G"(表示GB)的行,即过滤出大小超过1GB的文件或文件夹。
因此,这个命令的目的是列出当前目录下大小超过1GB的文件或文件夹的磁盘使用情况。
确保在删除任何文件之前,特别是在生产环境中,进行充分的审查和确认是非常重要的。删除文件可能会导致数据丢失或系统不稳定,因此必须小心谨慎。