因overlay2文件夹占用过大而引起的docker数据迁移之战(上)

tech2024-01-11  78

帮助自己养成记录的习惯


前言

大家好,我是Dog_Z,这应该算是第一次想要认认真真写一篇文章吧,技术文也好,水文也好,就是想试试看。然后也就正好,手上给甲方部署的项目由于对磁盘的选择不够妥当,导致磁盘分分钟满载,系统崩溃,于是,正好就有了东西可以来做记录了~


正文

今天还是和往常一样提前了十分钟左右到公司,到工位坐下之后,悠闲的享受着从楼下便利店用2元重金买下的馒头,心里悠悠的想着,划水的一天又开始了。

正当我啃着黄金馒头,手中熟练的敲下甲方项目访问地址,想着再膜拜一下自己创造的劳动成果。随着浏览器小圈圈的读取完毕,两大行的服务错误瞬间弹出在我眼前。

(emmmmmmm由于这里没截图,大家自行脑补一下orz)

我内心两个大字**!完了完了,验收时间又要拖了,我的奖金呐T T。(瑟瑟发抖)

赶紧掏出SSH神器MobaXterm!连通甲方服务器查找原因,结果发现。

emmmm,磁盘炸了,我的小心脏呀。(本来是99%,这是稍微删了点东西之后的)

害,原来就这小问题,小意思小意思。于是我就进入我的docker容器,找到一些数据已经落地的旧文件,rm -rf ./* !boom~ 好的,磁盘空间释放一些出来了,系统又完好如初了~

然而,转念一想,不行呀,这落地的文件每天都会有,这问题迟早又要出来的,我总不能时不时的上来rm一下吧?I`m a coder!Why so foolish?

于是乎我便想出了第一个解决方案:

方案一:linux定时任务

我分分钟就敲下了这么两行命令,由于项目部署用的是docker容器,因此我就直接rm该文件夹,然后再创建它

然后再敲下我们的创建定时任务命令

crontab -e

让它每天12点的时候走一遍脚本

保存之后,让我们看一下定时任务是否创建成功

crontab -l

OK!就很NICE!这样就保证它每天都会清理磁盘空间了,又可以快乐的玩耍了~

正当我要拿起船桨的瞬间,一个念头闪过,桥豆麻袋!万一它在一天内的数据就超过磁盘容量呢?那不是还是要炸吗?哦吼!于是乎,我便去探寻磁盘占用大的真正原因。

我沉重的敲下下面这行命令

df -h

结果让我感到震精…惊!介洗个嘛?overlay2?啥玩意就占这么大空间?

翻来覆去找到它之后。。。。这。。。。。我也不敢删呀

怎么办呢,怎么办呢,喔对!有度娘啊!妈妈说的好,有问题找度娘啊!与度娘翻云覆雨了一番之后,总算了解了一二了,让我抽根烟缓缓…

原来,这玩意是docker运行时的存储驱动位置,要想彻底解决磁盘满载的问题,就得想办法给它挪个位置,我心想,这不简单吗,不就是CP一下吗,于是乎,紧接着的方案二就孕育而生了,度娘生育的效率还真是惊人呢。

方案二:docker容器存放磁盘数据迁移

想要把存储位置做个迁移,那么首先肯定是需要有容量足够大的磁盘,所以,我就先看了看这服务器具体的磁盘分配。

fdisk -l

哦吼,那是多少容量?一二三四…十十一…管它呢,反正大就对了,然后我找了个空文件夹就挑了个磁盘做了下挂载。

mount /dev/vdb1 /data

挂载成功后就是这个样子了,这个容量,看着就好香呀~

是时候展示真正的技术了! 首先,让我们先把docker给它停了。

systemctl stop docker

然后!CP大法!(注意此处挖了个坑,后面会讲到)

cp -R /var/* /data

下一步呢,我们需要给docker的配置文件做个修改

cd /etc/systemd/system/docker.service.d vim devicemapper.conf

如果没有这个文件,或者没有这个文件的话,就自己创建一下,此时需要在文件末尾添加我们创建的文件夹路径。–graph=/data/lib/docker 如果没有私域地址把 --insecure-registry=私服地址 直接删了就好。 文件内容如下:

[Service] ExecStart= ExecStart=/usr/bin/dockerd --insecure-registry=私服地址 --graph=/data/lib/docker

这个配置文件修改好之后就是咱们docker的三部曲了。

systemctl daemon-reload systemctl restart docker systemctl enable docker

docker重启之后,我遍迫不及待的去运行我之前写好的重启所有docker容器的脚本。

结果…

WTF!!居然启动不起来?仔细研究了一遍才知道,原来是权限问题。哼,权限问题能难倒我帅Dog?我立马stop了docker,去给我创建的data文件夹附了权限。

chmod 777 -R ./data/

然后再一次的启动docker,restart!

完美一次过,NICE!!!!!!!!此时此刻,我得看看我所有的容器是不是都乖乖的在自己的窝里躺着。

docker ps -a

我内心一紧,我系统后台居然没跑起来,查了下日志

mysql数据库没连上?嗯?紧接着我进入我的mysql容器,去看看数据库是不是正常运行着。这不看倒还好,一看…

库表全没了(系统用的库名是data_share)。

此时的我在不断思考一个很严谨的问题:

下一步,我是不是该跑路了?

未完待续…

最新回复(0)