帮助自己养成记录的习惯
大家好,我是Dog_Z,这应该算是第一次想要认认真真写一篇文章吧,技术文也好,水文也好,就是想试试看。然后也就正好,手上给甲方部署的项目由于对磁盘的选择不够妥当,导致磁盘分分钟满载,系统崩溃,于是,正好就有了东西可以来做记录了~
今天还是和往常一样提前了十分钟左右到公司,到工位坐下之后,悠闲的享受着从楼下便利店用2元重金买下的馒头,心里悠悠的想着,划水的一天又开始了。
正当我啃着黄金馒头,手中熟练的敲下甲方项目访问地址,想着再膜拜一下自己创造的劳动成果。随着浏览器小圈圈的读取完毕,两大行的服务错误瞬间弹出在我眼前。
(emmmmmmm由于这里没截图,大家自行脑补一下orz)
我内心两个大字**!完了完了,验收时间又要拖了,我的奖金呐T T。(瑟瑟发抖)
赶紧掏出SSH神器MobaXterm!连通甲方服务器查找原因,结果发现。
emmmm,磁盘炸了,我的小心脏呀。(本来是99%,这是稍微删了点东西之后的)
害,原来就这小问题,小意思小意思。于是我就进入我的docker容器,找到一些数据已经落地的旧文件,rm -rf ./* !boom~ 好的,磁盘空间释放一些出来了,系统又完好如初了~
然而,转念一想,不行呀,这落地的文件每天都会有,这问题迟早又要出来的,我总不能时不时的上来rm一下吧?I`m a coder!Why so foolish?
于是乎我便想出了第一个解决方案:
我分分钟就敲下了这么两行命令,由于项目部署用的是docker容器,因此我就直接rm该文件夹,然后再创建它
然后再敲下我们的创建定时任务命令
crontab -e让它每天12点的时候走一遍脚本
保存之后,让我们看一下定时任务是否创建成功
crontab -lOK!就很NICE!这样就保证它每天都会清理磁盘空间了,又可以快乐的玩耍了~
正当我要拿起船桨的瞬间,一个念头闪过,桥豆麻袋!万一它在一天内的数据就超过磁盘容量呢?那不是还是要炸吗?哦吼!于是乎,我便去探寻磁盘占用大的真正原因。
我沉重的敲下下面这行命令
df -h结果让我感到震精…惊!介洗个嘛?overlay2?啥玩意就占这么大空间?
翻来覆去找到它之后。。。。这。。。。。我也不敢删呀
怎么办呢,怎么办呢,喔对!有度娘啊!妈妈说的好,有问题找度娘啊!与度娘翻云覆雨了一番之后,总算了解了一二了,让我抽根烟缓缓…
原来,这玩意是docker运行时的存储驱动位置,要想彻底解决磁盘满载的问题,就得想办法给它挪个位置,我心想,这不简单吗,不就是CP一下吗,于是乎,紧接着的方案二就孕育而生了,度娘生育的效率还真是惊人呢。
想要把存储位置做个迁移,那么首先肯定是需要有容量足够大的磁盘,所以,我就先看了看这服务器具体的磁盘分配。
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 dockerdocker重启之后,我遍迫不及待的去运行我之前写好的重启所有docker容器的脚本。
结果…
WTF!!居然启动不起来?仔细研究了一遍才知道,原来是权限问题。哼,权限问题能难倒我帅Dog?我立马stop了docker,去给我创建的data文件夹附了权限。
chmod 777 -R ./data/然后再一次的启动docker,restart!
完美一次过,NICE!!!!!!!!此时此刻,我得看看我所有的容器是不是都乖乖的在自己的窝里躺着。
docker ps -a我内心一紧,我系统后台居然没跑起来,查了下日志
mysql数据库没连上?嗯?紧接着我进入我的mysql容器,去看看数据库是不是正常运行着。这不看倒还好,一看…
库表全没了(系统用的库名是data_share)。
此时的我在不断思考一个很严谨的问题:
下一步,我是不是该跑路了?
未完待续…