天天看點

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

幫助自己養成記錄的習慣

前言

大家好,我是Dog_Z,這應該算是第一次想要認認真真寫一篇文章吧,技術文也好,水文也好,就是想試試看。然後也就正好,手上給甲方部署的項目由于對磁盤的選擇不夠妥當,導緻磁盤分分鐘滿載,系統崩潰,于是,正好就有了東西可以來做記錄了~

正文

今天還是和往常一樣提前了十分鐘左右到公司,到工位坐下之後,悠閑的享受着從樓下便利店用2元重金買下的饅頭,心裡悠悠的想着,劃水的一天又開始了。

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

正當我啃着黃金饅頭,手中熟練的敲下甲方項目通路位址,想着再膜拜一下自己創造的勞動成果。随着浏覽器小圈圈的讀取完畢,兩大行的服務錯誤瞬間彈出在我眼前。

(emmmmmmm由于這裡沒截圖,大家自行腦補一下orz)

我内心兩個大字**!完了完了,驗收時間又要拖了,我的獎金呐T T。(瑟瑟發抖)

趕緊掏出SSH神器MobaXterm!連通甲方伺服器查找原因,結果發現。

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

emmmm,磁盤炸了,我的小心髒呀。(本來是99%,這是稍微删了點東西之後的)

害,原來就這小問題,小意思小意思。于是我就進入我的docker容器,找到一些資料已經落地的舊檔案,rm -rf ./* !boom~ 好的,磁盤空間釋放一些出來了,系統又完好如初了~

然而,轉念一想,不行呀,這落地的檔案每天都會有,這問題遲早又要出來的,我總不能時不時的上來rm一下吧?I`m a coder!Why so foolish?

于是乎我便想出了第一個解決方案:

方案一:linux定時任務

我分分鐘就敲下了這麼兩行指令,由于項目部署用的是docker容器,是以我就直接rm該檔案夾,然後再建立它

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

然後再敲下我們的建立定時任務指令

crontab -e
           
因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

讓它每天12點的時候走一遍腳本

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

儲存之後,讓我們看一下定時任務是否建立成功

crontab -l
           
因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

OK!就很NICE!這樣就保證它每天都會清理磁盤空間了,又可以快樂的玩耍了~

正當我要拿起船槳的瞬間,一個念頭閃過,橋豆麻袋!萬一它在一天内的資料就超過磁盤容量呢?那不是還是要炸嗎?哦吼!于是乎,我便去探尋磁盤占用大的真正原因。

我沉重的敲下下面這行指令

df -h
           
因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

結果讓我感到震精…驚!介洗個嘛?overlay2?啥玩意就占這麼大空間?

翻來覆去找到它之後。。。。這。。。。。我也不敢删呀

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

怎麼辦呢,怎麼辦呢,喔對!有度娘啊!媽媽說的好,有問題找度娘啊!與度娘翻雲覆雨了一番之後,總算了解了一二了,讓我抽根煙緩緩…

原來,這玩意是docker運作時的存儲驅動位置,要想徹底解決磁盤滿載的問題,就得想辦法給它挪個位置,我心想,這不簡單嗎,不就是CP一下嗎,于是乎,緊接着的方案二就孕育而生了,度娘生育的效率還真是驚人呢。

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

方案二:docker容器存放磁盤資料遷移

想要把存儲位置做個遷移,那麼首先肯定是需要有容量足夠大的磁盤,是以,我就先看了看這伺服器具體的磁盤配置設定。

fdisk -l
           
因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

哦吼,那是多少容量?一二三四…十十一…管它呢,反正大就對了,然後我找了個空檔案夾就挑了個磁盤做了下挂載。

mount /dev/vdb1 /data
           
因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

挂載成功後就是這個樣子了,這個容量,看着就好香呀~

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

是時候展示真正的技術了!

首先,讓我們先把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容器的腳本。

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

結果…

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

WTF!!居然啟動不起來?仔細研究了一遍才知道,原來是權限問題。哼,權限問題能難倒我帥Dog?我立馬stop了docker,去給我建立的data檔案夾附了權限。

chmod 777 -R ./data/
           

然後再一次的啟動docker,restart!

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

完美一次過,NICE!!!!!!!!此時此刻,我得看看我所有的容器是不是都乖乖的在自己的窩裡躺着。

docker ps -a
           
因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

我内心一緊,我系統背景居然沒跑起來,查了下日志

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

mysql資料庫沒連上?嗯?緊接着我進入我的mysql容器,去看看資料庫是不是正常運作着。這不看倒還好,一看…

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

庫表全沒了(系統用的庫名是data_share)。

此時的我在不斷思考一個很嚴謹的問題:

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

因overlay2檔案夾占用過大而引起的docker資料遷移之戰(上)前言正文

未完待續…