扩容内存和硬盘后,docker镜像和容器都没了,讲讲发现和解决过程。省流总结就是磁盘挂载位置发生了改变导致。 因为服务器当初是有挂载一个外接硬盘的,并且把docker文件都放在了上面,所以怀疑扩容后挂载在上面的docker文件不见了,找了一番之后,找到了当初执行的命令,知道了是挂载到了/mnt/data/dockerlib上。这里/etc/docker/daemon.json可以看到挂载docker的目录,docker info的Docker Root Dir也可以看到挂载目录,下方的第一行命令是当初把docker的文件/var/lib/docker复制到/mnt/data/dockerlib,也可以证实其为挂载目录。
rsync -avz /var/lib/docker /mnt/data/dockerlib
cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
nano /etc/docker/daemon.json
于是我进入/mnt/data/目录中,发现也是有dockerlib的,但是
root@ubuntu-OpenStack-Nova:/mnt/data/dockerlib/docker/overlay2# ls
下面没有任何文件,另一台正常运行的机器上这下面有很多的ID,鉴于overlay2 是 Docker 常用的一种存储驱动,用于管理容器和镜像的文件系统,所以这里的 ID 通常涉及镜像层 ID 和容器层 ID,所以局面变成了有目录但是下面没镜像和容器。
问了扩容方没有什么进展,就想到最坏的重新再生成容器和镜像,由于生成容器用到docker run -v <宿主机路径>:<容器内路径>,此处宿主机路径的前缀和上面的docker挂载目录是同一个前缀,是/mnt/data/docker_mapping,这时发现/mnt/data/这个磁盘挂载目录下的东西都没了,之前在这里存了配置文件,用户上传的文件,日志等,只剩一个dockerlib文件里面还没容器。
再用df -h时,发现/dev/vdb文件系统被挂在了/mnt/DEV_ST8000_01,从来没见过这个文件,再进入查看发现之前存的配置文件等静态文件都在这里面,但是/mnt/DEV_ST8000_01/dockerlib/docker/overlay2下面还是没文件,奇怪。于是去找扩容方询问我挂载磁盘目录怎么改了,东西还变到这个不知道哪来的目录下面。
重点来了,经过大佬观察,原来是之前我挂载磁盘时用的是mount命令,mount挂载操作是临时的,重启后就失效,需要再次执行mount /dev/vdb /mnt/data,扩容的时候重启过所以这里的挂载就失效了,一般是在需要的时候随时进行挂载和卸载操作,方便在不同场景下快速使用外部存储设备。但是用/etc/fstab文件修改挂载信息,就可以永久保存,打开fstab一看里面果然挂载的是/mnt/DEV_ST8000_01,于是把这里的<mount point>改为我原先设置的/mnt/data,然后取消挂载umount /dev/vdb /mnt/DEV_ST8000_01,再挂载mount /dev/vdb /mnt/data,重启docker服务,果然镜像都有了。
其实当时问豆包,解决方案已经藏在其中,在信息爆炸的时代,辨别能力显得更加重要。
修改了 /etc/fstab 文件并希望立即生效时,可以运行 mount -a。更多详细的关于挂载文件的介绍可以看这篇linux文件挂载相关命令-CSDN博客
问题解决了之后,继续看磁盘容量扩充的问题,由于本身已经有了一块挂载磁盘挂在了/mnt/data上,现在扩充又加了一块盘,结果就不能再加一块盘还mount在上面了,子目录也不行。于是就想直接扩大原来磁盘,用手工命令的话有抹除数据的风险。Vmware虚拟机Ubuntu下,命令完成磁盘的扩容_ubuntu shell 扩容-CSDN博客
但是用growpart软件安装,又可能源有问题,根本下载不了软件。扩容云硬盘分区和文件系统(Linux)_云硬盘 EVS_华为云
于是就僵在了,lsblk里看硬盘vdb有1000G,但是df -h挂载里看还是原来的大小500G。
评论前必须登录!
注册