Docker oba Kubernetes Production Volume Esaziddwamu: Okununula docker system prune --volumes, . overlay2 Inodes, era etcd Ebifaananyi eby’amangu¶
Ennamba z’embeera ez’amangu zaawukana okusinziira ku nsi. Omuko guno gukozesa 911, ennamba ya Amerika ne Canada. Ensi endala nnyingi zikozesa 112, 999, oba ennamba endala. Funa ennamba y'ensi yo.
Okudduka docker compose down -v, . docker system prune -a --volumes, . docker volume rm, oba kubectl delete pvc ku tabu ya terminal enkyamu mu kukola y'emu ku ngeri ezisinga okwangu okusangula obuzito bwa database obulamu PostgreSQL, MySQL, MariaDB, Redis, MongoDB, oba SQLite. Okwawukanako n’ebifaananyi by’ekyuma ekirabika mu kire ebigenda mu kifo eky’okuterekamu ebintu eby’ennaku 7, Docker’s local volume driver (/var/lib/docker/volumes/<name>/_data) ne Kubernetes local-path / . hostPath abagaba ebintu bafulumya mangu POSIX eya mutindo unlink() era rmdir() okuyita butereevu ku nkola ya fayiro y'omukozi wa Linux eyali wansi (ext4, . XFS, oba Btrfs). Buli kuwandiika okubaawo ku host eyo eya Linux oluvannyuma lw'ekiragiro okuggwa kuyinza okuwandiika ku bulooka za database ezisumuluddwa ku disiki. Singa disiki yo eya seva ejjula okutuuka ku bitundu 100 ku buli 100 (0 bytes free) nga tewali muntu adduse docker system prune --volumes mu kutya, weebuuze disiki ya seva 100% ejjudde, database WAL log bloat, n'okuzzaawo ekifo kya zero; ku bare-metal Linux fayiro okusazaamu ebweru wa konteyina, laba rm -rf mu butanwa oba Shift-Delete ku ext4, XFS, APFS, ne NTFS: okuddamu okuteekebwa mu kusoma kwokka n'okubumba inode era ekyuma ekirabika VMDK, VHDX, ne qcow2 snapshot olujegere okwonooneka n'okununula hypervisor. Singa okuvaako kuno okw’okufulumya kukosa okulabirira abalwadde mu ddwaaliro, okusindika mu bwangu, oba enkola z’obukuumi bw’ebikozesebwa bya gavumenti, kuba ku nnamba y’amangu mu kitundu kyo (911 mu Amerika ne Canada, . 112 okwetoloola omukago gwa Bulaaya, . 999 mu Bungereza) oba kebera ku dayirekita yaffe eya ennamba z’amangu.
Kino kikole kati¶
- TODDUKA
docker compose up -d, .systemctl restart docker, oba okuddamu okuteeka Kubernetes pod: Okuddamu okukola ekintu oba okuddamu okutandika Docker daemon kuwandiika megabytes empyaoverlay2metadata, ebiwandiiko bya JSON ebya konteyina, ne fayiro za database ekyerere ezitandise (initdb) butereevu ku kituufuext4obaXFSblocks voliyumu yo eyasazibwamu we yali etudde sekondi ntono emabega. - Kebera mu sikonda 5 singa enkola ya konteyina (
postgres, .mysqld, .redis-server, .node, .python) ekyatambula mu jjukira (ps auxerasudo lsof +L1): Singa omuntu asazaamu fayiro munda mu voliyumu essiddwa oba n'aggyako voliyumu etamanyiddwa mannya nga ekintu ekikyakola, Linux kernel ekuuma 100 ku buli 100 ebya fayiro za database ezitaliiko kakwate nga nnamu ku disiki kasita omukozi wa konteyina Process ID (PID) ekwata ennyonyola ya fayiro enzigule (FD). Osobola okukoppa fayiro ezo butereevu okuva mu/proc/<PID>/fd/oba/proc/<PID>/root/nga zero data loss nga container tennayimirira. - Singa ekintu ekitereka kyayimirizibwa dda era nga volume yasazibwamu (
docker compose down -vobadocker system prune --volumes), freeze host disk ewandiika amangu ddala: Yimirira Docker daemon (sudo systemctl stop docker.socket docker.service containerd) kale ebitereke eby’emabega n’okukebera obulamu bikomye okuwandiika ebiwandiiko mu/var/lib/docker, olwo oba remount/var/lib/docker(oba ekikolo/okugabanya) okusoma kwokka (sudo mount -o remount,ro /) oba kwata ekifaananyi eky’amangu eky’obuzito bw’ekire ku ddaala lya bulooka (AWS EBS Snapshot, .GCP Persistent Disk Snapshot, .DigitalOcean Volume Snapshot) nga tonnakwata ku kintu kyonna. - Bw'oba oli ku Kubernetes (
kubectl delete pvcobakubectl delete namespace), kebera ku PersistentVolume (PV) .ReclaimPolicy(kubectl get pv) amangu ddala: - Singa aba...
PVyalinapersistentVolumeReclaimPolicy: Retain, data yo tesazibwamu: thePVsimply yasenguka kuReleasedembeera ne disiki yo ey'ekire (EBS, .Azure Disk, .Ceph RBD, .NFS) kirimu ebitundu 100 ku 100 nga tekikyuse. - Ne bwe kiba nti
kubectl delete pvcasibidde mu ** .Terminating**, Kubernetes Abasembayo (kubernetes.io/pvc-protection) okuziyiza CSI driver okusazaamu storage eyali wansi kasita Pod yonna ekyajuliza PVC eyo. Tosazaamu Pod okutuusa nga okoppa data okuva mu Pod ekola. - Ekifaananyi ky'ekitundu kya bulooka ekiri wansi (
dd/ .ddrescueku SSH) ku disiki ey'ebweru oba voliyumu y'ekire ey'enjawulo nga tonnaddukaext4magic, .extundelete, obaPhotoRec: Toddukangako file carvers eziwandiika fayiro ezifuluma ku disk partition y'emu mw'odda/var/lib/docker/volumes. - Ku mbeera y'ekibinja kya Kubernetes eyonoonese oba eyasazibwamu mu butanwa (
kubectl delete crd/ .namespace), lekera awokube-apiserverera ozzeewo ebipya byoetcdekifaananyi ekitono (etcdctl snapshot restore): Singa embeera y'ekibinja muetcdyasangulwa nga obuzito bw'okutereka ebire obusirikitu bukyaliwo, nga buzzaawoetcdazzaawo byonnaPV, .PVC, .Secret, eraConfigMapebintu mu kiseera kye kimu.
Danger
Toggyawo... kubernetes.io/pvc-protection oba kubernetes.io/pv-protection finalizer nga alina kubectl patch ... -p '{"metadata":{"finalizers":null}}' nga PVC ekwatiddwa mu Terminating: Oyo finalizer kye kintu kyokka ekikuuma cloud CSI driver yo (aws-ebs-csi-driver, . pd.csi.storage.gke.io, . Longhorn, . Rook-Ceph) okuva mu kufulumya ekintu ekiyitibwa hardware DeleteVolume API okuyita okusaanyaawo disiki yo ey'okufulumya. Nga PVC ekwatiddwa mu Terminating, Pod ekyakola ate nga ne volume ekyassibwako: run kubectl exec oba kubectl cp (oba pg_dump / . mysqldump) amangu ddala okununula ebitundu 100 ku 100 ebya database yo nga Pod tennaggwaako.
Omuti gw'okusalawo: esaziddwamu Docker volume, . overlay2 layeri, oba okusunsulamu kwa Kubernetes PVC¶
Kozesa flowchart eno okulonda ekkubo erisinga amangu ery'okuzzaawo zero-loss okusinziira ku oba enkola ya konteyina ekyali nnamu, oba voliyumu yali ewagirwa disiki ey'omu kitundu oba okutereka kwa CSI okw'ekire, n'enkola ya fayiro ki gy'ekyaza /var/lib/docker:
flowchart TD
Start["Data y'okufulumya ebula oluvannyuma lw'ekiragiro kya Docker oba Kubernetes Delete"] --> WhichEnv{"Platform & Command ki eyavaako okufiirwa?"}
WhichEnv -->|"Docker: Container Ekyakola (Fayiro ezitaliiko kakwate Munda mu Volume/Container)"| ProcRescue["Okununula Ggulawo Ennyonnyola za Fayiro ezitaliiko kakwate ng’oyita mu sudo lsof +L1 ne /proc/PID/fd/N oba /proc/PID/root/ ."]
WhichEnv -->|"Docker: Konteyina Eyimiridde & Volume Esaziddwamu (okuwandiika wansi -v / prune --volumes)"| StopDocker["Amangu ago Duka: sudo systemctl yimirira docker.socket docker containerd"]
WhichEnv -->|"Kubernetes: kubectl okusazaamu pvc / pv / statefulset / ekifo ky'amannya"| K8sCheck{"Pod Ekyadduka OBA PVC Ekwatiddwa mu Terminating?"}
K8sCheck -->|"Yee: Pod Ekyakola (Finalizer Okuziyiza CSI Okusazaamu)"| K8sExec["TOSAZA Pod -> Duka kubectl exec / pg_dump / tar ku stdout ku Local Disk Amangu ago"]
K8sCheck -->|"Nedda: Pod Gone -> Kebera kubectl okufuna pv"| ReclaimCheck{"Enkola ya PV ReclaimPolicy Yali Ki?"}
ReclaimCheck -->|"Sigaza (Embeera ya PV = Efulumiziddwa) ."| ClearClaimRef["100% Data Intact -> Edit PV okuggyawo spec.claimRef.uid -> Ddamu okusiba ku PVC Empya"]
ReclaimCheck -->|"Okusazaamu (Ekire EBS / PD / Longhorn / Local-Ekkubo)"| CloudOrLocal{"Ekire CSI Volume oba Local Host Disk?"}
CloudOrLocal -->|"CSI y’ekire (AWS EBS / GCP / Azure / Ceph) ."| CloudSnap["Kebera Ekire Console Recycle Bin / Automated EBS Ebifaananyi / Ceph RBD Kasasiro (rbd kasasiro ls)"]
CloudOrLocal -->|"Disiki ya Node y’Ekitundu (ekkubo-ery’omu kitundu / ekkubo ly’omukozi) ."| StopDocker
StopDocker --> RemountRO["Remount Host Partition Read-Only (mount -o remount,ro) OBA Stream Ekifaananyi kya Block ku SSH"]
RemountRO --> HostFS{"Enkola ki eya Fayiro Ekyaza /var/lib/docker?"}
HostFS -->|"ext4"| Ext4Rec["Kozesa debugfs / ext4magic Journal Inode Enkolagana Rollback (-akabonero k'ekiseera)"]
HostFS -->|"XFS / Ebitongole bya Btrfs"| CarveRec["Kozesa Btrfs Roots / xfs_irecover / Okubumba Omukono ogw'enjawulo ku SQLite, Postgres Heap, oba InnoDB .ibd"]
Omutendera 1: Engeri Docker ne Kubernetes gye zisazaamu ddala voliyumu ku disiki¶
Nga tonnaba kukola kiragiro kyonna eky'okuzzaawo, tegeera data yo gye yali ebeera mu mubiri ku Linux host ne kiki ekiragiro ky'okusazaamu kye kyakwatako ddala:
| Ekika ky'okutereka & Ekiragiro ky'okusazaamu | Ekkubo lya Host Filesystem ku Linux Node | Ekiragiro Ky'okusazaamu Kye Kyakola Mu butuufu | Enkola y’okuwona amangu |
|---|---|---|---|
Erinnya lya Docker Volume (docker volume rm oba docker compose down -v) |
/var/lib/docker/volumes/<vol_name>/_data |
Unlinked fayiro eziri munda _data/ era n'aggyawo okuyingira kwa dayirekita okuva /var/lib/docker/volumes/metadata.db (boltdb). |
Yimirira Docker amangu ago, ddamu okussaako /var/lib/docker read-only, era okuzzaawo inodes ezitaliiko kakwate nga ziyita mu ext4magic / . debugfs oba okuyoola emikono. |
Omuzingo gwa Docker ogutamanyiddwa mannya (docker run -v /var/lib/mysql + docker rm -v oba docker system prune --volumes) |
/var/lib/docker/volumes/<64-char-hex-id>/_data |
docker system prune --volumes esazaamu buli voliyumu etamanyiddwa mannya era eriko erinnya eritajuliziddwa mu kiseera kino waakiri ekintu kimu ekiriwo. |
Yimirira Docker mu bwangu; singa walina endala eziyimiridde nga volume zazo *tezisaliddwa, kebera ebisigadde /var/lib/docker/volumes/*/_data folders okusooka nga tonnaba kuyoola bulooka ezitagabanyizibwa. |
Layer ewandiikibwa mu konteyina (docker rm <container> nga data ewandiikiddwa ebweru wa voliyumu) |
/var/lib/docker/overlay2/<layer-id>/diff/ |
Unlinked ekintu eky'okungulu diff/ dayirekita munda mu overlay2 ddereeva w’okutereka. |
Yimirira Docker amangu ago era zzaawo omuti gwa dayirekita ogutaliiko kakwate okuva ku ext4 journal oba XFS bulooka. |
Docker Desktop ku macOS oba Windows (docker system prune --volumes) |
Munda mu kifaananyi kya disiki y’ekyuma ekimu eky’omubiri: -/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw (macOS) oba %LocalAppData%\Docker\wsl\disk\docker_data.vhdx (Eddirisa WSL2). |
Yasindikiddwa unlink() munda mu Linux VM, era singa discard/TRIM akola ku Docker.raw / . docker_data.vhdx, yakuba ebituli ebitonotono mu fayiro y’omugenyi. |
Vva mu Docker Desktop mu sikonda 5, koppa Docker.raw oba docker_data.vhdx ku drive ey’ebweru, era odduke ext4magic / . PhotoRec ku kifaananyi kya disiki ey’omubiri (virtual disk image). |
Kubernetes PVC ne... Delete Enkola y'okuzzaawo ebintu ku Ceph RBD (Rook-Ceph) oba Longhorn . |
Ekidiba kya Ceph OSD (rbd) oba /var/lib/longhorn/replicas/. |
Singa csi-rbdplugin alina trash esobozeseddwa (rbd trash), ekifaananyi kya RBD kitwalibwa mu kasasiro wa Ceph; bwe kitaba ekyo bulooka tezikolebwako maapu. |
Dduka rbd trash ls --pool <pool> munda mu... rook-ceph-tools pod n'okuzzaawo ne rbd trash restore. |
Omutendera 2: Okununula fayiro za database eziggule okuva mu kibya ekikyakola (/proc/<pid>/fd/) .¶
Linda: konteyina ekyakola mu kiseera kino?
Emirundi mingi, yinginiya addukanya script y'okukyusa enkola, omulimu gwa cron ogw'okuyonja, oba ekitabo rm -rf /var/lib/postgresql/data/* oba rm /app/data/production.sqlite3 munda mu kibya ekidduka, oba okusazaamu ekitabo ekiri wansi w'ekifo eky'okusiba eky'okusimba /opt/app/data ate nga ekibya kyennyini (postgres, . mysqld, . mariadbd, . redis-server, . mongod, . gunicorn, . node) akyagenda mu maaso.
Mu Linux, fayiro tesazibwamu ku disiki nga rm oba unlink() kiyitibwa. Disiki blocks zaayo ne inode zisigala 100 ku buli 100 nga ziweereddwa era nga zisomebwa okutuusa ku nkola esembayo ekwata ennyonyola ya fayiro enzigule (FD) ku inode eyo eggalawo oba efuluma.
Omutendera 1: Funa host Process ID (PID) ey’enkola y’okutereka¶
Ku Linux host node (si munda mu container), funa host PID wa database yo oba enkola y’okusaba:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
mysqld 18492 999 14u REG 259,1 482344960 0 1849201 /var/lib/mysql/app_prod/users.ibd (deleted)
mysqld 18492 999 15u REG 259,1 125829120 0 1849202 /var/lib/mysql/app_prod/orders.ibd (deleted)
mysqld 18492 999 16u REG 259,1 79691776 0 1849190 /var/lib/mysql/ibdata1 (deleted)
python3 22104 1000 4u REG 259,1 89128960 0 3102944 /data/production.sqlite3 (deleted)
NLINK: kigamba nti ** .0, era erinnya lya fayiro likoma ne ** .(deleted). Fayiro eweddewo ddala okuva ls /var/lib/docker/volumes/..., naye buli byte emu (482 MB mu users.ibd, . 89 MB mu production.sqlite3) akyali mulamu munda /proc/<PID>/fd/<FD>.
Omutendera 2: Koppa fayiro za database ezitaliiko kakwate butereevu okuva mu /proc/<PID>/fd/¶
To to kuyimiriza oba okuddamu okutandika ekintu. Nga enkola ekyatambula, koppa ebinnyonnyola fayiro embisi butereevu mu folda etaliiko bulabe ku host yo:
sudo mkdir -p /root/proc_emergency_rescue
# Example 1: Rescuing an unlinked SQLite3 database (PID 22104, FD 4)
sudo cp /proc/22104/fd/4 /root/proc_emergency_rescue/production.sqlite3
# Check if PID 22104 also holds the -wal file open (e.g. FD 5) and copy it too:
sudo cp /proc/22104/fd/5 /root/proc_emergency_rescue/production.sqlite3-wal
# Example 2: Automatically rescuing ALL open (deleted) MySQL/Postgres files for PID 18492
for fd in /proc/18492/fd/*; do
target=$(sudo readlink "$fd" 2>/dev/null)
if echo "$target" | grep -q "(deleted)"; then
fd_num=$(basename "$fd")
clean_name=$(echo "$target" | sed 's/ (deleted)//; s/\//_/g')
echo "Rescuing FD $fd_num -> $clean_name"
sudo cp "$fd" "/root/proc_emergency_rescue/${fd_num}${clean_name}"
fi
done
Omutendera 3: N’okusingawo: Duka live logical dump (pg_dump / . mysqldump / . .backup) nga konteyina tennaggalawo FDs¶
Singa postgres oba mysqld ekyakola nga fayiro zaayo za data ziggule mu jjukira era /proc/<PID>/fd/, gezaako okuddukanya live logical dump ku unix socket oba TCP connection okusooka:
# If the database engine can still read its open file descriptors:
docker exec <container_name> pg_dumpall -U postgres > /root/proc_emergency_rescue/live_dump.sql
# Or for MySQL:
docker exec <container_name> mysqldump -u root -p --all-databases --single-transaction > /root/proc_emergency_rescue/live_mysql.sql
.1, . .2 segment files mu nkola z'omukozi mu ngeri ey'amaanyi, kale pg_dump ayinza okulemererwa ku mmeeza ezitaterekeddwa; okugatta okubuuza kwa SQL okulamu n'okukoppa buli kiggule /proc/<pid>/fd/* okubuna byonna postgres omwana backend PIDs etereka data y'entuumu y'emmeeza esinga obunene.)
Omutendera 3: Okuzzaawo voliyumu ya Docker eyasazibwamu ku ext4 oba XFS oluvannyuma lw’ekibya okuyimirira¶
Watya singa wadduka docker compose down -v oba docker system prune --volumes, kale ekibya kyayimiridde dda ne byonna /proc/<pid>/fd/ ebinyonyola biggaddwa? Kati oli mu mpaka za background disk writes ku Linux host.
Omutendera 1: Freeze enkola ya fayiro ya Linux host mu sikonda 10¶
- Komya Docker, containerd, kubelet, ne cron amangu ddala kale tewali container, healthcheck, oba log rotator ewandiika byte endala ku
/var/lib/docker: - Kebera ekyuma kya block ki ne filesystem ki ebikutte
/var/lib/docker: - Ddamu okussa ekitundu Read-Only (oba okuyisa ekifaananyi ky'ekitundu ekibisi ku SSH ku kyuma ekirala):
- Singa
/var/lib/dockereri ku kitundu kyayo ekyetongodde oba voliyumu ya LVM (okugeza/dev/nvme0n1p2oba/dev/mapper/vg0-docker), remount it read-only amangu ddala: - Singa
/var/lib/dockereri ku kikolo/okugabanya (/), gezaako okukaka ekitundu ky'ekikolo okusoma kwokka ng'okozesa kernel Magic SysRq trigger (echo u | sudo tee /proc/sysrq-trigger) obasudo mount -o remount,ro /. - Bw’oba oli ku cloud VPS (AWS EC2, GCP, DigitalOcean, Hetzner, Linode): Amangu ago genda ku cloud web console yo onyige Create Snapshot ku block volume ya server (oba stream the raw block device ku SSH ku server eyookubiri:
sudo dd if=/dev/nvme0n1p1 bs=4M status=progress | gzip -1 | ssh user@backup-server "cat > /mnt/storage/docker_host_raw.img.gz").
Omutendera 2: Kebera oba data yo ekyatudde mu volume ENDALA etasaliddwa oba overlay2 layeri¶
Nga tonnaba kuyoola bulooka za disiki ezitagabibwa, kakasa nti mu butuufu database yo teyali eterekeddwa mu bind mount oba voliyumu eriko erinnya ery'enjawulo eyasigalawo:
# Search the entire /var/lib/docker tree read-only for any surviving database files:
sudo find /var/lib/docker -name "PG_VERSION" -o -name "ibdata1" -o -name "*.sqlite*" -o -name "*.db" -o -name "dump.rdb" -o -name "WiredTiger" 2>/dev/null
docker volume rm app_db_data, kyokka okuzuula ne find /var/lib/docker nti docker-compose.yml mu butuufu yali yatonda projectname_app_db_data (ekikyali 100 ku 100 nga tekikyuse ku disiki) ate nga app_db_data yali voliyumu nkadde etaakozesebwa okuva emyezi mukaaga egiyise.
Omutendera 3: Okuzzaawo Docker volume directories ezitaliiko kakwate ku ext4 nga bakozesa enkola ya ext4 Journal (ext4magic era debugfs) .¶
Ddi lwe docker volume rm asazaamu /var/lib/docker/volumes/<vol_name>/_data ku an ext4 enkola ya fayiro, . ext4 ziro okuva mu bifo ebiraga obutereevu bbulooka (i_block / ekikolo ky'omuti ekinene) mu mmeeza ya inode obulamu. Kyokka, ext4 ekitabo ky’amawulire (inode <8>, mu ngeri entuufu 128 MB okutuuka ku 1024 MB circular ring buffer) ekyakutte kkopi ez'ebyafaayo ez'emmeeza za inode entuufu ne bulooka za dayirekita okuva ddala emabega docker compose down -v yattibwa.
+-------------------------------------------------------------------------+
| HOW ext4magic RECOVERS A DELETED DOCKER VOLUME FROM THE EXT4 JOURNAL |
| |
| Live Inode Table on Disk (After docker volume rm): |
| Inode #918402 (users.ibd): [Size = 0, Extent Pointers = ZEROED] |
| |
| Ext4 Journal Ring Buffer (Inode <8> on Disk): |
| Transaction #41902 (10 mins ago): |
| Inode #918402 (users.ibd): [Size = 482MB, Extents = Blocks 9000..9999]|
| |
| -> ext4magic reads the old Inode Copy from Journal Transaction #41902 |
| and extracts Blocks 9000..9999 directly to your rescue drive. |
+-------------------------------------------------------------------------+
Dduka ext4magic ku kitundu kyo eky'okusoma kwokka (oba the .img kkopi y’ekifaananyi ku seva eyookubiri), ng’olaga akabonero k’ekiseera (-a) okuva ku eddakiika 5 nga wabula odduse docker compose down -v oba docker system prune --volumes:
# Install ext4magic on your rescue machine (never on the affected partition)
sudo apt-get install -y ext4magic e2fsprogs
# Dump the ext4 journal from the frozen partition / image to a file in RAM (/dev/shm)
sudo debugfs -R "dump <8> /dev/shm/ext4_journal.copy" /dev/nvme0n1p1
# Recover all files deleted under var/lib/docker/volumes after (Current Time - 15 minutes)
sudo mkdir -p /mnt/external_rescue/docker_recovered
sudo ext4magic /dev/nvme0n1p1 \
-j /dev/shm/ext4_journal.copy \
-f var/lib/docker/volumes \
-a $(date -d "-15 minutes" +%s) \
-r -d /mnt/external_rescue/docker_recovered
-j /dev/shm/ext4_journal.copy: Esoma ekifaananyi kya journal kye watereka mu RAM amangu ddala nga omaze okuyimiriza Docker.
- -f var/lib/docker/volumes: Etunuulira omuti gwennyini ogwa Docker volumes directory (weetegereze: lekawo ekikulembera / mu ext4magic amakubo ag’enjawulo).
- -a $(date -d "-15 minutes" +%s): Agamba ext4magic okuddamu okuzimba omuti gwa dayirekita nga okozesa kkopi za inode ezituufu eddakiika 15 eziyise (nga tewannabaawo kusazaamu mu butanwa).
- -r: Ezzaawo dayirekita enzijuvu nga tewali bulooka zawandiikibwako; singa -r esubwa fayiro eziwandiikiddwako ekitundu, dduka okuyita okw'okubiri ng'okyusa -r nga balina -m (okubumba okw'amagezi + enkola y'omugatte mu jurnal).
Omutendera 4: Okuyoola fayiro za SQLite, PostgreSQL, oba MySQL InnoDB embisi nga journal ezingiddwa (XFS oba ext4) .¶
Warning
Lwaaki XFS tawagira ext4magic era kyetaagisa okusumulula amangu okusoma kwokka: Okwawukana ku ext4, ewandiika kkopi za inode ezijjuvu eza byte 256 mu jurnal yaayo, . XFS logs metadata intent deltas era mu ngeri ey’obukambwe eddamu okukozesa inode B-emiti egyasumuluddwa (agi). Singa /var/lib/docker atuula ku an XFS okugabanya (ekisookerwako ku RHEL, Rocky Linux, AlmaLinux, ne Amazon Linux), okuggyawo /var/lib/docker oba okuddamu okussaako / okusoma kwokka mu sikonda ntono gwe mutendera gumu ogusinga obukulu nga tonnaba kuyoola.
Singa omugenyi akozesa ** .XFS** oba singa... ext4 journal yazingibwa dda ku inode pointers, kozesa signature ne structure carving ku kifaananyi kya disiki embisi (docker_host_raw.img):
- Ku Databases za SQLite3 (
.sqlite, ..db- e.g., Vaultwarden, Nextcloud, Omuyambi w'awaka, Gitea, Grafana): Buli database ya SQLite3 etandika n'omutwe gwa ASCII ogwa byte 16 ogutaliimu kubuusabuusa ku byte 0 ku lupapula lwayo olusooka olwa kilobyte 4:53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00("SQLite format 3\0"), era etereka obunene bw’olupapula lwa database entuufu (Bytes 16..17, mu ngeri entuufu4096) n’obunene bwa database yonna mu mpapula (Bytes 28..31, big-endian 32-bit integer) munda ddala mu mutwe ogwo gwe gumu. - Dduka
PhotoRecnga balina[File Opt]->[x] sqliteesobozeseddwa, oba sikaani ekitundu butereevu negrep -ab "SQLite format 3"okuzuula byte offset entuufu eya fayiro yo eya SQLite eyasazibwamu n'okugiggyamu nayodd:Bw’omala okuggyibwamu, dduka# Find the exact byte offsets of every "SQLite format 3" header on the partition: sudo grep -ab "SQLite format 3" /dev/nvme0n1p1sqlite3 carved.db ".recover" | sqlite3 repaired.dbokuddamu okuzimba buli lupapula lw’amakoola g’omuti gwa B ogutaliiko kamogo.
Tip
Engeri y'okubalirira ekituufu dd sayizi ya byte ya fayiro ya SQLite3 etaliiko kakwate okuva ku mutwe gwayo: Omulundi gumu grep -ab "SQLite format 3" ekuweereza byte offset etandika OFFSET wa database yo eya SQLite eyasazibwamu, soma bytes 16..17 (uint16 big-endian Sayizi y’Olupapula, e.g., 0x1000 = 4096 bytes) ne bytes 28..31 (uint32 big-endian Okubala Omuko, e.g., 25000 empapula) nga bakozesa hexdump -C -s OFFSET -n 32. Okukubisaamu Page Size x Page Count ekuweereza obuwanvu bwa byte obutuufu bw'olina okuyitamu dd (iflag=skip_bytes,count_bytes) nga fayiro ekwatagana ku disiki.
- Ku lwa MySQL / MariaDB InnoDB (
.ibdfayiro z'emmeeza): Buli InnoDB.ibdemmeeza erimu ebiddiriŋŋana16 KB(16,384byte) empapula ezirimuFIL_PAGE_INDEX(0x45BF) omutwe n'emmeeza ey'enjawulospace_id. Kozesa Percona / TwinDB ** .undrop-for-innodb(stream_parser+c_parser)** ekitabo ky'ebikozesebwa okusika/dev/nvme0n1p1eri bonna16 KBInnoDB index pages era osuule buli lunyiriri butereevu mu fayiro za TSV/SQL okuddamu okuyingiza. - Ku Fayiro z'Entuumu za PostgreSQL (
$PGDATA/base/<db_oid>/<relfilenode>): PostgreSQL etereka buli mmeeza nga ekwatagana8 KB(8,192byte) entuumu empapula ezirimuPageHeaderData(pd_lower, .pd_upper, .pd_special). Kozesa ** .pg_filedump** oba ** .pglazarus/ .pdu** okusika ebitundu bya disiki ebitagabanyizibwa ku8 KBempapula ezikwatagana n'ensengeka ya tuple y'ennyiriri z'emmeeza yo (HeapTupleHeaderData) n’okuddamu okuzimba ennyiriri.
Omutendera 4: Kubernetes PVC, PV, ne etcd Snapshot Okudda engulu mu bwangu¶
Mu Kubernetes (EKS, . GKE, . AKS, . k3s, . RKE2, . kubeadm, . OpenShift), okusazaamu mu butanwa PersistentVolumeClaim (kubectl delete pvc), StatefulSet, oba ekifo kyonna eky'Erinnya (kubectl delete ns prod) egoberera enzimba ey’enjawulo ennyo okusinga Docker eyeetongodde.
Ensonga A: PVC eraga Terminating (Omuwonya Obulamu bw'Omumalirizo)¶
Emisinde:
Singa aba...STATUS omuko gugamba nti Terminating, ssa omukka ogw'obuweerero: data yo TENASAJJIBWA.
- Lwaaki? Buli Kubernetes PVC eyatondebwa Okuva Kubernetes 1.9 bweri mu automatically finalizers: [kubernetes.io/pvc-protection].
- Kasita Pod eba ekyassa PVC eyo, Kubernetes controller egaana okumaliriza okusazaamu PVC era teyitangako ya CSI driver's DeleteVolume RPC.
- Ekikolwa eky'amangu: Tokola TO sazaamu oba okuddamu okutandika Pod, era tokola SI patch out finalizer. Amangu ago koppa data yonna okuva mu Pod ekola ku kyuma kyo oba mu baketi ya S3:
# Stream a compressed tar backup or pg_dump out of the still-running pod immediately:
kubectl exec -n <namespace> <pod-name> -- pg_dumpall -U postgres > ./rescued_k8s_db.sql
# Or tar an entire mounted volume directory out over stdout:
kubectl exec -n <namespace> <pod-name> -- tar czf - /var/lib/postgresql/data > ./rescued_pvc_files.tar.gz
Ensonga B: PVC yasazibwamu, era kubectl get pv eraga PersistentVolume mu Released embeera (ReclaimPolicy: Retain) .¶
Emisinde:
Singa PersistentVolume yo (pv-prod-postgres) ekyawandiikibwa ne STATUS: Released (kubanga StorageClass yaayo ekozesebwa reclaimPolicy: Retain), 100 ku buli 100 ebya data yo bikyatudde nga tekwatibwako ku disiki eri wansi. Wabula Kubernetes egaana okuleka PVC empya okusiba ku a Released PV kubanga PV ekyalimu a spec.claimRef nga asonga ku PVC enkadde ezaasangulwa UID.
Engeri y’okukolamu a Released PV Available nate mu sikonda 10 nga tewali data efiiriddwa:
1. Edita ekintu PersistentVolume era osazeewo spec.claimRef block:
kubectl get pv nate: embeera ekyuka amangu ago okuva ku Released okutuuka ku Available.
3. Ddamu okutondawo PersistentVolumeClaim (nga alaga volumeName: <your-pv-name> n'obusobozi obukwatagana/storageClassName). Kijja kwesiba ku PV eriwo amangu ddala nga fayiro zonna tezifudde.
Ensonga C: Okuzzaawo embeera y'ekibinja kya Kubernetes eyasazibwamu okuva ku etcd ekifaananyi ekitono (etcdctl snapshot restore) .¶
Watya singa omuntu yadduka kubectl delete namespace prod oba helm uninstall era n’asangulawo 200 Kubernetes manifests, Secrets, ConfigMaps, ne PV ennyonyola ku self-managed kubeadm, . k3s, oba RKE2 ennyonyi efugira?
- Funa ebipya byo
etcdsnapshot (nga bwe kibadde mu/var/lib/rancher/k3s/server/db/snapshots/, ./var/lib/rancher/rke2/server/db/snapshots/, oba enteekateeka yo/var/backups/etcd/snapshot.db). - Kakasa obulungi bw'ekifaananyi nga tonnakwata ku kibinja ekiramu:
- Mukomye
kube-apiservereraetcdku nnyonyi efugira node(s): - Ku
kubeadm(ebikoola ebitali bikyuka): Tambula/etc/kubernetes/manifests/kube-apiserver.yamlera/etc/kubernetes/manifests/etcd.yamlokumala akaseera okutuuka/root/manifests_hold/kalekubeletayimiriza ebibya byombi bulungi, olwo n’adda waggulu/var/lib/etcdokutuuka ku/var/lib/etcd.bak. - Ku
k3s: Ddukasudo systemctl stop k3serasudo k3s server --cluster-reset --cluster-reset-restore-path=/path/to/snapshot. - Okuzzaawo...
etcddata directory kukubeadm: - Tambula
etcd.yamlerakube-apiserver.yamlokudda mu/etc/kubernetes/manifests/. Mu sikonda 30, .kube-apiserveraddamu okuyungibwa ku bikomezeddwawoetcdstore era buli kintu kya Namespace, Secret, ConfigMap, ne PersistentVolume ekisaziddwamu kiddamu okulabika.
Omutendera 5: Okukakanyaza voliyumu za Docker ne Kubernetes obutasazibwamu mu butanwa¶
Oluvannyuma lw'okuzzaawo database yo ey'okufulumya, teeka mu nkola ebikuumi bino ebina eby'ebizimbe kale ensobi emu ey'okuwandiika eya CLI tesobola kuddamu kusazaamu voliyumu butereevu:
- Kyusa buli kufulumya Kubernetes
StorageClassokuvareclaimPolicy: Deleteokutuuka kureclaimPolicy: Retain: Nga bwekiba, ekire ekizimbibwamu StorageClasses (gp2, .gp3, .standard-rwo) default kureclaimPolicy: Delete, ekitegeeza okusazaamu PVC kisaanyaawo disiki y'ekire. Tonda aStorageClassnga balinareclaimPolicy: Retain(oba patch PVs eziriwo ne...kubectl patch pv <pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}') kale okusazaamu PVC oba Namespace tekisazaamu voliyumu ya bulooka eri wansi. - Ssobozesa AWS EBS Recycle Bin / GCP Snapshot Schedules / Velero ne CSI Snapshots: Okusobozesa AWS EBS Recycle Bin ekuuma volume yonna eya EBS esaziddwamu okumala ennaku 7 okutuuka ku 30 ne bwe kiba nti ddereeva wa CSI akubira essimu
DeleteVolume. - Tokozesangako
docker system prune --volumesmu scripts ez'okuyonja ez'obwengula oba abaddusi ba CI/CD: Singa ekintu ekitereka database y'okufulumya kigwa mu bufunze (Exited (1)) mu kiseera kyennyini omulimu gwa cron we gutambuladocker system prune -a --volumes -f, Docker etwala voliyumu zaayo ezitamanyiddwa mannya "ezitakozesebwa" era n'ezisazaamu enkalakkalira. Strip--volumesokuva mu biwandiiko byonna eby’okuyonja. - Kozesa host bind mounts ezitegeerekeka (
/srv/prod_data/postgres:/var/lib/postgresql/data) oba database eziddukanyizibwa ebweru ez'emirimu gy'okufulumya egy'embeera: Okwawukana ku/var/lib/docker/volumes/, host bind-mount dayirekita ebweru/var/lib/docker/zi tezikwatibwakodocker compose down -v, .docker volume rm, obadocker system prune --volumes.
Ennamba z’embeera ez’amangu mu bitundu n’ebiragiro by’ebitongole¶
Okusazaamu konteyina oba okutereka kwa Kubernetes bwe kukosa emirimu gy’obujjanjabi bw’eddwaliro, okusindika obukuumi bw’abantu, oba ebikwata ku muntu ebifugibwa, yongera amangu ddala:
- Amerika ne Canada: Kuba
911singa okulemererwa kw’ekibinja kya konteyina kulemesa okulondoola abalwadde mu malwaliro, enkola za EHR, oba okusindika mu bwangu. Loopa okusangulwa kw’ebikozesebwa mu konteyina eby’obulabe oba ebibaddewo ku mikutu gya yintaneeti eri CISA (1-844-Say-CISA/ .cisa.gov/report) oba Ekitongole kya Canada ekikola ku by'okwerinda ku mikutu gya yintaneeti (1-833-CYBER-88). - Bungereza: Kuba
999olw’okutiisa obulamu oba ebikozesebwa ebikulu ebya NHS. Mu UK GDPR, okusaanyaawo enkalakkalira oba okufiirwa okubeerawo kw’ebikwata ku muntu awatali backup esobola okuddizibwa kyetaagisa okwekenneenya okutegeeza ICO (0303 123 1113). - Omukago gwa Bulaaya: Kuba
112mu mawanga gonna agali mu mukago gwa EU. Ebitongole ebiri wansi w’ekiragiro kya NIS2 birina okuleeta okulabula nga bukyali eri CSIRT y’eggwanga lyabyo mu ssaawa 24 oluvannyuma lw’okuvaako ennyo empeereza, era okufiirwa ebikwata ku muntu ow’olubeerera kivaako GDPR Article 33 okukola lipoota mu ssaawa 72. - Australia ne New Zealand: Kuba
000mu Australia oba111mu New Zealand; okuloopa ebizibu ebikulu ebibaddewo mu bikozesebwa eri ACSC (1300 CYBER1). - Buyindi ne Asia-Pacific: Kuba
112mu Buyindi olw’okukola ku mbeera ez’amangu; loopa ebibaddewo mu by’okwerinda mu kire oba mu konteyina eri CERT-In (incident@cert-in.org.in) mu ddirisa ery'essaawa 6 erikakatako.
Ebibuuzo ebitera okubuuzibwa¶
Akola docker compose down -v okusazaamu host bind mounts (./data:/var/lib/mysql) oba voliyumu za Docker eza Named ne Anonymous zokka?¶
`docker compose down -v` ONLY esazaamu voliyumu ezituumiddwa amannya ezirangiriddwa mu `volumes:` ekitundu kya `docker-compose.yml` ne Anonymous volumes ezigattibwa ku bidomola; it never esazaamu fayiro munda mu host bind mount (nga `- /opt/mysql_data:/var/lib/mysql` oba `- ./postgres_data:/var/lib/postgresql/data`). Singa fayiro yo eya compose yakozesa ekkubo lya host okutandika ne `/` oba `./`, kebera folda eyo ku host kati kati: fayiro zo zikyali 100 ku buli 100 nga tezifudde.
Lwaki yakola docker system prune --volumes delete my database volume nga nayimiriza container okumala eddakiika 2 zokka okulongoosa environment variable?¶
Linda n’obwegendereza enjawulo eriwo wakati wa `docker stop` era `docker rm`: singa ekibya kiba kyokka `Stopped / Exited` (ekirabika mu `docker ps -a`), . `docker system prune --volumes` akola si bwe kiri sazaamu voliyumu zaayo kubanga ekintu ekiyimiriziddwa ekyazijuliza. Kyokka singa wadduka `docker rm
Nsobola okuzzaawo voliyumu ya Docker eyasazibwamu munda mu Docker Desktop ku Mac (Apple Silicon / . Intel) oba Windows (WSL2)?¶
Yee, singa ova mu Docker Desktop amangu ddala kale ekyuma ekirabika ne kilekera awo okukola `fstrim` ku disiki ey’omubiri (virtual disk). Ku macOS, Docker etereka voliyumu zonna eza Linux munda `-/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw`; ku Windows WSL2, munda `%LocalAppData%\Docker\wsl\disk\docker_data.vhdx`. Ekyo kikoppa `.raw` oba `.vhdx` fayiro ku SSD ey'ebweru amangu ago, gigatteko okusoma kwokka mu Linux (nga okozesa `losetup -Pr` -a `.raw` oba `qemu-nbd -r` -a `.vhdx`), n’okudduka `ext4magic` oba `PhotoRec` ku bikolwa eby’omubiri (virtual). `ext4` okugabanya munda.
Watya singa nsazaamu Kubernetes StatefulSet ne kubectl delete statefulset postgres? Ekyo nazo kyasazaamu PVC zange?¶
Nedda. Nga bwekiba mu Kubernetes (okuggyako nga `persistentVolumeClaimRetentionPolicy.whenDeleted: Delete` yategekebwa mu bulambulukufu ku Kubernetes 1.27+), ng'ekola `kubectl delete statefulset` esazaamu omufuzi wa StatefulSet ne Pods zaayo, . okuleka byonna `PersistentVolumeClaims` (`data-postgres-0`, . `data-postgres-1`) ne data zaabwe ezisibukako ebitundu 100 ku 100 nga tezifudde. Simply okuddamu okusiiga ebibyo... `StatefulSet` YAML yeeyoleka n’erinnya lye limu era `volumeClaimTemplates`, era Pods empya zijja kuddamu okwegatta ku eziriwo mu ngeri ey’otoma `data-postgres-0` Ebintu ebiyitibwa PVCs.
Nkola ntya okuyingira mu fayiro munda mu Docker overlay2 dayirekita nga ekintu ekitereka kigaanye okutandika (CrashLoopBackOff / . Exited (1))?¶
Tosazaamu kibya ekigudde. Kasita ekintu ekiyimiridde kikyaliwo mu `docker ps -a`, layeri yaayo ewandiikibwa ne volume mounts tezifudde ddala ku disiki. Osobola okukoppa fayiro butereevu okuva mu kibya ekiyimiriziddwa ng'okozesa `docker cp
Watya singa omuntu asazaamu Kubernetes Namespace (kubectl delete ns prod) era nga PVC zonna zaali zirina reclaimPolicy: Delete ku AWS EBS oba GCP?¶
Singa ddereeva wa CSI ow’ekire (`ebs.csi.aws.com` oba `pd.csi.storage.gke.io`) yattibwa dda `DeleteVolume` kubanga `reclaimPolicy` yali `Delete`, kebera obutimba busatu obw’obukuumi obw’omutendera gw’ekire amangu ddala: (1) kebera **AWS Recycle Bin for EBS Volumes** mu AWS EC2 console (singa etteeka ly’okukuuma lyali likola ku akawunti/tags, volume ya EBS eyasaziddwamu etuula mu Recycle Bin era esobola okuzzibwa mu kunyiga 1); (2) kebera **AWS Backup / DLM / GCP Snapshot Schedules** ku kifaananyi ekisembyeyo eky'obuzito obw'obwengula; ne (3) okukebera oba database yo yali etambuza WAL/binlogs (`WAL-G`, . `pgBackRest`, . `Litestream`) okutuuka ku baketi ya S3/GCS.
Ebiragiro ebikwatagana nabyo¶
- Disiki ya seva 100% ejjudde (0 bytes free): database WAL log bloat, B-omuti ogwonooneddwa, n'okuzzaawo ekifo kya zero
rm -rfobaShift+Deletemu butanwa ku Linux, macOS, oba Windows: okuddamu okuteekebwa mu bwangu okusoma kwokka n'okubumba inode- Virtual machine VMDK, VHDX, ne qcow2 snapshot olujegere okwonooneka n'okununula hypervisor
- Okukola Git mu butanwa kw'ebisumuluzo bya AWS, fayiro
.env, oba ekisumuluzo kya SSH eky'obwannannyini ku repo ya GitHub ey'olukale - Ekizibu ky'okukyaza omukutu, okusenguka, n'okuzzaawo backup
- Okutereka kompyuta, enkola ya 3-2-1, n’okuddamu okukola mu mbeera y’akatyabaga
- Ennamba z’amangu okusinziira ku nsi
Ensonda n’obulagirizi obutongole¶
- Ebiwandiiko ebitongole bya Kubernetes (
kubernetes.io/ Cloud Native Computing Foundation): Ekintu ky'okutereka mu Kukuuma Okukozesa (kubernetes.io/pvc-protectionFinalizers), Okuzzaawo Volume ezitaggwaawo (Retainvs.Delete), n’Okuddukanya emirimuetcdEbibinja bya Kubernetes (etcdctl snapshot restore). - Kkampuni ya Docker Inc. (
docs.docker.com): Ddukanya Data mu Docker: Volumes, Bind Mounts, .overlay2Enzimba ya Ddereeva w’okutereka, ne Prune Reference. - Ekitongole kya Linux Kernel (
kernel.org): Aba.../procEnkola ya fayiro (procfsGgulawo Okuzzaawo Ennyonnyola Fayiro okuyita mu/proc/<pid>/fd/) ne Ext4 Ebikwata ku Journal. ext4magicEbiwandiiko bya Pulojekiti (ext4magic.sourceforge.net): Okuzzaawo Enkolagana ya Forensic Inode ne Journal ku Ext3/Ext4 Filesystems.- Ekitongole ky’eggwanga ekikola ku mutindo ne tekinologiya (
NIST) (United States): Ekiwandiiko eky’enjawulo 800-190: Ekitabo ky’obukuumi mu konteyina y’okukozesa & Okuzzaawo ebibaddewo.