"No space left on device" huwa haiji wakati unaofaa. Database inaacha kupokea maandishi, apt haiwezi kumaliza sasisho, na Docker inakataa kupakua image ile hasa unayoihitaji sasa hivi. Habari njema: kwenye VPS ndogo, mhusika karibu kila mara ni mojawapo ya mambo matano, na utampata ndani ya dakika mbili.
1. Hali ni mbaya kiasi gani?
df -h /
df -i /
Mstari wa kwanza unaonyesha nafasi iliyotumika. Wa pili unaonyesha inode — kama inode zimefika 100% huku nafasi ikionekana sawa, una mamilioni ya faili ndogo sana (faili za session, foleni ya barua, folda ya cache). Tatizo tofauti, dalili ileile.
2. Tafuta kilicho kikubwa
Pitia mti kuanzia juu na upange kwa ukubwa:
du -xh / --max-depth=1 2>/dev/null | sort -h | tail -15
-x inabaki kwenye mfumo mmoja wa faili, kwa hiyo haipotei ndani ya /proc. Kisha ingia ndani ya kilicho kikubwa zaidi. Kwa kuvinjari kwa mwingiliano, ncdu ni rahisi zaidi:
apt install -y ncdu
ncdu -x /
Vitufe vya mishale kusogea, d kufuta. Kuwa mwangalifu na hicho cha mwisho.
3. Ushindi wa haraka
Hizi ni salama kwenye seva yoyote ya Ubuntu au Debian:
apt clean
apt autoremove --purge -y
journalctl --disk-usage
journalctl --vacuum-size=200M
apt autoremove pia huondoa kernel za zamani. Journal ya systemd ndiyo huwashangaza watu — ukiiacha tu inaweza kukua hadi gigabytes kadhaa. Ili kuiwekea kikomo cha kudumu, weka SystemMaxUse=200M ndani ya /etc/systemd/journald.conf kisha endesha systemctl restart systemd-journald.
4. Mabaki ya Docker
Kama unatumia Docker, angalia hapa kwanza. Image za zamani na build cache hurundikana kila deploy:
docker system df
docker image prune -a
docker builder prune
docker image prune -a hufuta image ambazo hakuna container inayoendesha inayozitumia. Mara nyingi hicho ndicho unachotaka, lakini deploy inayofuata itazipakua tena.
Hatari ni docker system prune -a --volumes. Volume zina data yako, na volume iliyounganishwa na container iliyosimamishwa inahesabiwa kuwa haitumiki. Hivi ndivyo watu hupoteza database. Usiibandike kutoka kwenye jibu la jukwaa.
Mlaji mwingine wa nafasi aliyejificha ni logi za container. Ziwekee kikomo ndani ya /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
Baada ya hapo anzisha upya Docker. Kikomo kinatumika tu kwa container zinazoundwa baadaye, kwa hiyo unda upya zile zenye logi nyingi kwa docker compose up -d --force-recreate.
5. Logi na faili zilizosahaulika
Tafuta faili kubwa popote kwenye diski:
find / -xdev -type f -size +500M -exec ls -lh {} + 2>/dev/null
find /var/log -type f -size +100M -exec ls -lh {} + 2>/dev/null
Vitu vinavyopatikana mara kwa mara: backup.tar.gz ya miezi sita iliyopita ndani ya /root, dump ya database ambayo mtu alikusudia kuipakua, logi ya programu ambayo haizungushwi kamwe.
Logi ambayo huduma bado inaiandikia usiifute kwa rm — iache tupu:
truncate -s 0 /var/log/myapp/app.log
Kama tayari umefuta moja na nafasi haikurudi, kuna process ambayo bado imeishikilia wazi:
lsof +L1
Anzisha upya huduma iliyoorodheshwa hapo na nafasi itarudi.
Usafishaji usipotosha
Wakati mwingine data ni halisi tu — database inayokua, faili zilizopakiwa na watumiaji, faili la model. Hapo suluhisho la kweli ni diski zaidi. Kupandisha mpango kunapanua diski palepale na kuhifadhi kila kitu: Nano ina 15 GB, Micro 25 GB, Small 35 GB, Medium 45 GB. Seva inaanzishwa upya mara moja. Maelezo yako kwenye nyaraka za mipango.
Kitu kingine kinachokula nafasi kimyakimya: faili la swap. Kama ulifuata mwongozo wetu wa swap, hizo 1–2 GB zimetengwa makusudi. Na kama Docker ndiye mtumiaji mkuu, mwongozo wa kusakinisha Docker na mwongozo wa Compose stack vinaonyesha jinsi ya kudhibiti image.
Tabia inayozuia yote haya: weka kikomo kwenye journal na logi za Docker siku ya kwanza kabisa. Mistari miwili ya mipangilio, na "diski imejaa" karibu inaacha kutokea.
Maoni
Bado hakuna maoni. Kuwa wa kwanza.