Docker ykn Kubernetes Production Volume Haqame: Baraaruu docker system prune --volumes, . overlay2 Inodes, fi etcd Suuraalee yeroo muraasa¶
Lakkoofsi balaa tasaa biyyaa adda adda. Fuulli kun lakkoofsa Ameerikaa fi Kanaadaa 911 fayyadama. Biyyoonni biroo hedduun 112, 999 ykn lakkoofsa kan biraa fayyadamu. Lakkoofsa biyya keessaniif ta'u barbaadi.
Fiigicha docker compose down -v, . docker system prune -a --volumes, . docker volume rm, ykn kubectl delete pvc caancala tarminaalii dogoggoraa irratti oomisha keessatti karaalee saffisaa jildii kuusdeetaa PostgreSQL, MySQL, MariaDB, Redis, MongoDB, ykn SQLite jiraataa haxaa'uuf gargaaran keessaa isa tokkodha. Faallaa suuraa maashinii duumessa dhugaa kan gara bakka deebi'ee fayyadamu guyyoota 7tti socho'u, Docker's local volume driver (/var/lib/docker/volumes/<name>/_data) fi Kubernetes jedhaman local-path / . hostPath dhiyeessitoonni battalumatti POSIX istaandaardii ni kennu unlink() fi rmdir() kallattiin sirna faayilii keessummeessituu Liinux jala jiru irratti waamicha (ext4, . XFS, ykn Btrfs). Barreeffamni erga ajajni xumuramee booda keessummeessituu Liinux sana irratti uumamu hundi uggura kuusdeetaa bilisa ta'e diskiin irratti barreessuu danda'a. Yoo diskiin sarvarii keessan hanga dhibbeentaa 100 (0 bytes free) osoo namni tokko hin fiigin dura docker system prune --volumes rifachuudhaan, mariisisaa diskiin sarvarii 100% guutuu, kuusdeetaa WAL log bloat, fi zeeroo-bakka deebisuu; haqiinsa faayilii Liinux bare-metal qabduu ala jiruuf, ilaali akka tasaa rm -rf ykn Shift-Delete ext4, XFS, APFS, fi NTFS irratti: dubbisa qofa irra deebi'anii fe'uu fi bocuu inode fi maashinii dhugaa VMDK, VHDX, fi qcow2 suuraa sansalataa suuraa fi baraarsa haaypervaayizarii. Yoo addaan citiinsi oomishaa kun kunuunsa dhukkubsataa hospitaalaa, ergaa hatattamaa, ykn sirna nageenya tajaajila uummataa irratti dhiibbaa uume, lakkoofsa hatattamaa naannoo keessanii bilbili (911 Ameerikaa fi Kaanaadaa keessatti, . 112 guutuu Gamtaa Awurooppaa keessatti, . 999 Yunaayitid Kingidam keessatti) ykn galmee keenya kan lakkoofsa balaa tasaa.
Amma kana godhi¶
- HIN fiigin
docker compose up -d, .systemctl restart docker, ykn pod Kubernetes irra deebi'ii bobbaasuu: Qabduu irra deebi'anii uumuun ykn deemoonii Docker deebisee jalqabuun meeggaabaayitii haaraa barreessaoverlay2meetadaataa, galmeewwan JSON qabduu, fi faayilii kuusdeetaa duwwaa haaraa jalqabame (initdb) kallattiin sirrii irrattiext4yknXFSbakka sagaleen kee haqame sekondii muraasa dura taa'ee ture uggura. - Adeemsi qabduu yoo (
postgres, .mysqld, .redis-server, .node, .python) ammallee memory (ps auxfisudo lsof +L1): Yoo namni tokko faayiloota jildii fe'ame keessa jiran haqee ykn jildii maqaa hin qabne osoo qabduun ammallee hojjechaa jiruu hiike, kernel Liinux faayilota kuusdeetaa hin hidhamne keessaa dhibbeentaa 100 diskiin hanga ID Adeemsa keessummeessituu qabduu (PID) ibsituu faayilii banaa qabata ( .FD). Faayilota sana kallattiin keessaa waraabuu dandeessa/proc/<PID>/fd/ykn/proc/<PID>/root/osoo qabduun hin dhaabbatin kasaaraa deetaa zeeroo wajjin. - Yoo qabduun duraan dhaabatee fi sagaleen haqame (
docker compose down -vykndocker system prune --volumes), barreessuu diskiin keessummeessituu battalumatti dhorki: Deemoonii Docker dhaabi (sudo systemctl stop docker.socket docker.service containerd) kanaaf qabduu duubaa fi sakatta'iinsi fayyaa galmee barreessuu dhiisu/var/lib/docker, sana booda yookaan remount/var/lib/docker(ykn hundee/qoqqoodinsa) dubbisa qofa ( .sudo mount -o remount,ro /) ykn suuraa jildii duumessa sadarkaa uggura battalaa fudhachuu (AWS EBS Snapshot, .GCP Persistent Disk Snapshot, .DigitalOcean Volume Snapshot) osoo waan tokko hin tuqin dura. - Yoo Kubernetes irratti jirtan (
kubectl delete pvcyknkubectl delete namespace), Jildii Itti fufiinsa qabu (PV) .ReclaimPolicy(kubectl get pv) battalumatti: - Yoo kan
PVqaba turepersistentVolumeReclaimPolicy: Retain, deetaan kee hin haqamu: kanPVsalphaatti garaReleasedhaalaa fi diskiin duumessaa kee (EBS, .Azure Disk, .Ceph RBD, .NFS) dhibbeentaa 100n hin tuqamne. - Yoo ta'ellee
kubectl delete pvckeessatti qabamee jira ** .Terminating**, Kubernetes Xumuraa (kubernetes.io/pvc-protection) hanga Pod kamiyyuu ammallee PVC sana wabeeffatutti konkolaachisaan CSI kuusaa jala jiru akka hin haqne uggu. Hanga deetaa Pod hojjechaa jiru keessaa waraabdutti Pod hin haqinaa. - Fakkii qoqqoodinsa ugguraa jala jiru (
dd/ .ddrescueSSH irratti) gara diskiin alaa ykn jildii duumessaa adda ta'etti osoo hin hojjetiin duraext4magic, .extundelete, yknPhotoRec: Gonkumaa faayilii boctoota faayilii firii barreessan kutaa diskii walfakkaataa irraa deebifachaa jirtu irratti hin hojjetiin/var/lib/docker/volumes. - Haala kilaastara Kubernetes manca'eef ykn akka tasaa haxaa'ameef (
kubectl delete crd/ .namespace), dhaabadhaakube-apiserverfi isa haaraa kee deebisietcdsuuraa (etcdctl snapshot restore): Yoo haala kilaastaraa keessaetcdkan haxaa'ame osoo jildii kuusaa duumessaa jala jiru ammallee jiruu, deebisuuetcdhunda fayyisaPV, .PVC, .Secret, fiConfigMapmeeshaalee yeroo tokkotti.
Danger
Gonkumaa kan... kubernetes.io/pvc-protection ykn kubernetes.io/pv-protection finalizer waliin kubectl patch ... -p '{"metadata":{"finalizers":null}}' yeroo PVCn tokko keessa maxxane Terminating: Finalizer sun qofatu cloud CSI driver kee eegudha (aws-ebs-csi-driver, . pd.csi.storage.gke.io, . Longhorn, . Rook-Ceph) haardwaara baasuu irraa DeleteVolume Waamicha API diskiin oomishaa kee balleessuuf. Osoo PVCn keessaa qabamee jiruu Terminating, Pod ammallee hojjechaa jira fi sagaleen ammallee fe'amee jira: fiigi kubectl exec ykn kubectl cp (ykn pg_dump / . mysqldump) battalumatti osoo Pod hin xumuramin dura kuusdeetaa kee dhibbeentaa 100 baraaruuf.
Muka murtii: jildii Docker haqame, . overlay2 laayibarii, ykn Kubernetes PVC triage¶
Adeemsi qabduu ammallee lubbuun jiraachuu isaa, jildii diskiin naannoo ykn kuusaa CSI duumessaatiin duubatti deebi'uu isaa, fi keessummeessitoota sirna faayilii kam irratti hundaa'uun daandii deebisanii dhaabuu kasaaraa zeeroo isa saffisaa filachuuf chaartii yaa'aa kana fayyadami /var/lib/docker: 1.1.
flowchart TD
Start["Deetaan Omishaa Ajaja Docker ykn Kubernetes Haquu Booda Bade"] --> WhichEnv{"Waltajjii & Ajajni Kamtu Kasaaraa Kaase?"}
WhichEnv -->|"Docker: Qabduu Ammallee Hojiirra Jira (Faayilota Jildii/Qabeessaa Keessaa Hin Hidhamne) ."| ProcRescue["Baraaruu Ibsitoota Faayilii Hin hidhamne karaa sudo lsof +L1 fi /proc/PID/fd/N ykn /proc/PID/root/ banaa."]
WhichEnv -->|"Docker: Qabduu Dhaabbate & Jildii Haqameera (gadi qindeessuu -v / prune --volumes) ."| StopDocker["Achumaan Fiigi: sudo systemctl dhaabbii docker.socket qabduu docker"]
WhichEnv -->|"Kubernetes: kubectl pvc / pv / haalatafulset / iddoo maqaa haquu"| K8sCheck{"Pod Ammallee Fiigaa Jiraa YKN PVC Terminating Keessatti Qabameera?"}
K8sCheck -->|"Eeyyee: Pod Ammallee Hojiirra Jira (Finalizer CSI Delete Ugguruu)"| K8sExec["Pod HIN Haquu -> kubectl exec / pg_dump / tar stdout irratti gara Disk Local Battalumatti fiigi"]
K8sCheck -->|"Lakki: Pod Gone -> Check kubectl argachuuf pv"| ReclaimCheck{"Imaammanni PV Deebisuu Maal Ture?"}
ReclaimCheck -->|"Tursi (Haala PV = Gadi lakkifame) ."| ClearClaimRef["100% Deetaan Hin Tuqamne -> PV Gulaali spec.claimRef.uid Haquuf -> Irra deebi'ii PVC Haaraatti hidhu"]
ReclaimCheck -->|"Haquu (Duumessa EBS / PD / Longhorn / Local-Path) ."| CloudOrLocal{"Jildii CSI Duumeessaa moo Diskii Keessummeessituu Naannoo?"}
CloudOrLocal -->|"CSI duumessaa (AWS EBS / GCP / Azure / Ceph) jedhamu kan jedhu."| CloudSnap["Konsoolii Duumessaa Irra Deebiin Fayyadamaa / Suuraalee EBS Ofumaan / Kosii Ceph RBD (rbd trash ls) ilaali."]
CloudOrLocal -->|"Diskii Noodii Naannoo (karaa-naannoo / karaa keessummeessituu) ."| StopDocker
StopDocker --> RemountRO["Qoodinsa Keessummeessituu Irra Deebi'ii fe'i Dubbisa Qofa (mount -o remount,ro) YKN Fakkii Ugguraa SSH irratti Dhangala'i"]
RemountRO --> HostFS{"Sirni Faayilii Maal /var/lib/docker Keessummeessa?"}
HostFS -->|"dheerina4"| Ext4Rec["Debugfs / ext4magic fayyadami Joornaalii Inoodii Dabarsa Gara duubatti deebi'uu (-chaappaa yeroo) ."]
HostFS -->|"XFS / Btrfs jedhamuun beekama"| CarveRec["Hundee Btrfs / xfs_irecover / Boca Mallattoo Dhuunfaa SQLite, Tuullaa Postgres, ykn InnoDB .ibd fayyadami"]
Marsaa 1ffaa: Akkaataa Docker fi Kubernetes qabatamaan jildii disk irratti haqan¶
Ajaja deebisuu kamiyyuu hojjechuu dura, deetaan kee qaamaan keessummeessituu Liinux irratti eessa akka jiraatee fi ajajni haquu qabatamaan maal akka tuqe hubadhu:
| Gosa Kuusaa & Ajaja Haquu | Daandii Sirna Faayilii Keessummeessituu Noodii Liinux irratti | Ajajni Haquu Dhugumatti Maal Hojjete | Mala Battala Fayyeessuu |
|---|---|---|---|
Jildii Docker moggaafame (docker volume rm ykn docker compose down -v) |
/var/lib/docker/volumes/<vol_name>/_data |
Faayilota keessa jiran unlink godhe _data/ fi galtee galmee irraa haqee /var/lib/docker/volumes/metadata.db (boltdb). |
Docker hatattamaan dhaabi, irra deebi'ii fe'i /var/lib/docker dubbisa qofaaf, fi inodes hin hidhamne karaa ext4magic / . debugfs ykn mallattoo bocuu. |
Jildii Docker Maqaa hin beekamne (docker run -v /var/lib/mysql + docker rm -v ykn docker system prune --volumes) |
/var/lib/docker/volumes/<64-char-hex-id>/_data |
docker system prune --volumes jildii maqaa hin qabnee fi maqaa hin qabne hunda yoo xiqqaate qabduu jiruun yeroo ammaa hin wabamne haqa. |
Docker hatattamaan dhaabaa; yoo qabduu kan biroo dhaabbate kan jildii isaanii hin ciramne qabaatte, hafe ilaali /var/lib/docker/volumes/*/_data galmeewwan dursa osoo bilookii hin ramadamne bocuu dura. |
Laayibarii Barreeffama Qabduu (docker rm <container> yeroo deetaan jildii tokkoon alatti barreeffame) |
/var/lib/docker/overlay2/<layer-id>/diff/ |
Gubbaa qabduu sanaa unlinked diff/ galmee keessaa overlay2 konkolaachisaa kuusaa. |
Docker hatattamaan dhaabiitii muka galmee hin hidhamne irraa deebifadhu ext4 joornaalii ykn XFS blocks ta’a. |
Docker Desktop macOS ykn Windows irratti (docker system prune --volumes) |
Fakkii diskiin maashinii dhugaa tokkoo keessaa: -/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw (macOS) ykn %LocalAppData%\Docker\wsl\disk\docker_data.vhdx (Windows WSL2) jedhu. |
Ergame unlink() VM Liinux keessaa, fi yoo discard/TRIM irratti socho'aa jira Docker.raw / . docker_data.vhdx, faayilii keessummeessituu keessatti qaawwa dhiphaa rukute. |
Sekondii 5 keessatti Docker Desktop keessaa ba'i, waraabi Docker.raw ykn docker_data.vhdx gara diraayivii alaatti, fi fiigi ext4magic / . PhotoRec fakkii diskiin dhugaa irratti. |
Kubernetes PVC waliin Delete Imaammata Deebisuu Ceph RBD irratti (Rook-Ceph) ykn Longhorn . |
Kuusaa OSD Ceph (rbd) yookaan /var/lib/longhorn/replicas/. |
Yoo csi-rbdplugin qaba trash dandeessifame (rbd trash), fakkiin RBD gara bakka kosii Ceph tti socho'a; yoo kana hin taane uggurri hin kaartaa ta'u. |
Fiigi rbd trash ls --pool <pool> keessaa rook-ceph-tools pod fi deebisuuf waliin rbd trash restore. |
Marsaa 2: Faayilota kuusdeetaa banaa qabduu ammallee hojjechaa jiru irraa baraaruu (/proc/<pid>/fd/) .¶
Eegaa: yeroo ammaa kana qabduun sun ammallee hojjechaa jiraa?
Yeroo baayyee, injinariin tokko iskiriiptii godaansa aplikeeshinii, hojii kroon qulqulleessuu, ykn maanuwaalii hojjeta rm -rf /var/lib/postgresql/data/* ykn rm /app/data/production.sqlite3 qabduu hojjechaa jiru keessa, ykn galmee keessummeessituu hidhuu-fee'aa jala jiru haqa /opt/app/data osoo qabduu ofii isaatii (postgres, . mysqld, . mariadbd, . redis-server, . mongod, . gunicorn, . node) ammallee ka'ee fiigaa jira.
Liinux keessatti, faayilii diskiin irraa hin haqamu yeroo rm ykn unlink() jedhama. Blookiiwwan diskiin isaa fi inoodii isaa hanga adeemsa dhumaa ibsituu faayilii banaa qabatutti dhibbeentaa 100 ramadamee fi dubbifamuu danda'u ta'ee hafu (FD) gara sana inode cufa ykn ba'a.
Tarkaanfii 1: ID Adeemsa keessummeessituu barbaadi (PID) kan adeemsa qabduu¶
Noodii keessummeessituu Liinux irratti (qabduu keessa miti), keessummeessituu barbaadi PID kan kuusdeetaa ykn adeemsa iyyannoo keessanii:
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: jedha ** .0, fi maqaan faayilii ** tiin xumurama.(deleted). Faayilli guutummaatti irraa badeera ls /var/lib/docker/volumes/..., ammas baayitii tokko tokko hunda (482 MB in. keessatti users.ibd, . 89 MB in. keessatti production.sqlite3) ammallee keessa lubbuun jira /proc/<PID>/fd/<FD>.
Tarkaanfii 2: Faayilota kuusdeetaa hin hidhamne kallattiin keessaa waraabuu /proc/<PID>/fd/¶
Qabduu hin dhaabin ykn irra deebi'ii hin jalqabiin. Adeemsi ammallee osoo hojjechaa jiruu, ibsitoota faayilii raw kallattiin gara galmee nageenya qabu keessummeessituu kee irratti waraabi:
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
Tarkaanfii 3ffaa: Kan caalu: Live logical dump (pg_dump / . mysqldump / . .backup) osoo konteenara FDs hin cufin dura¶
Yoo postgres ykn mysqld ammallee faayiloota daataa isaa memory keessatti banamee hojjechaa jira fi /proc/<PID>/fd/, dursa daampii loojikii jiraataa socket unix ykn walqabsiisa TCP jiru irratti hojjechuu yaali:
# 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 faayiloota adeemsa hojjetaa hunda keessatti daayinamiikiin kutaa, kanaaf pg_dump gabatee hin kuufamin irratti kufaa ta'uu danda'a; gaaffii SQL jiraataa banaa hunda waraabuu wajjin walitti makuu /proc/<pid>/fd/* qaxxaamuree hundaa postgres PIDwwan duubbee mucaa deetaa tuullaa gabatee guddaa ta'uu danda'u qusata.)
Marsaa 3: Volume Docker haqame deebisuu ext4 ykn XFS erga meeshaan sun dhaabatee booda¶
Osoo fiigdee hoo docker compose down -v ykn docker system prune --volumes, kanaaf meeshaan sun duraan dhaabbatee jira fi hunda /proc/<pid>/fd/ ibsitoonni cufamanii jiru? Amma fiigicha barreeffamoota diskiin duubaa keessummeessituu Liinux irratti hojjetamu irratti argamta.
Tarkaanfii 1: Sirna faayilii keessummeessituu Linux sekondii 10 keessatti freeze gochuu¶
- Docker, containerd, kubelet, fi cron hatattamaan dhaabi kanaaf qabduu, healthcheck, ykn log rotator kamiyyuu baayitii biraa itti hin barreessu
/var/lib/docker: 1.1. - Meeshaan ugguraa fi sirni faayilii kam akka qabate mirkaneessi
/var/lib/docker: - Qooda Dubbisa Qofa irra deebi'ii fe'i (ykn fakkii qoqqoodinsa raw SSH irratti gara maashinii biraatti yaa'i):
- Yoo
/var/lib/dockerqoqqoodinsa ofii isaatii ykn jildii LVM irratti argama (fakkeenyaaf/dev/nvme0n1p2ykn/dev/mapper/vg0-docker), battalumatti dubbisa qofaaf irra deebi'ii kaa'i: - Yoo
/var/lib/dockerhundee irra jira/qoqqoodinsa (/), qoqqoodinsa hundee dubbisa qofaaf dirqisiisuu yaali, kernel Magic SysRq trigger fayyadamuun (echo u | sudo tee /proc/sysrq-trigger) yookaansudo mount -o remount,ro /. - Yoo VPS duumessaa (AWS EC2, GCP, DigitalOcean, Hetzner, Linode) irra jirtan: Achumaan gara konsoolii weeb duumessaa keessanii deemuun Create Snapshot kan jildii ugguraa sarvarii irratti cuqaasaa (ykn meeshaa ugguraa raw SSH irratti gara sarvarii lammaffaatti dabarsuu:
sudo dd if=/dev/nvme0n1p1 bs=4M status=progress | gzip -1 | ssh user@backup-server "cat > /mnt/storage/docker_host_raw.img.gz").
Tarkaanfii 2: Daataan keessan ammallee volumii BIRAA unpruned keessa taa'ee jiraachuu isaa ykn overlay2 laayibarii¶
Uggura diskiin hin ramadamne bocuu dura, kuusdeetaan kee dhugumatti fe'iinsa hidhaa ykn jildii maqaa adda ta'e kan lubbuun hafe keessatti akka hin kuufamne mirkaneessi:
# 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, waliin argachuuf qofa find /var/lib/docker kan jedhu docker-compose.yml qabatamaan uume ture projectname_app_db_data (kan ammallee dhibbeentaa 100 diskiin irratti hin tuqamne) osoo app_db_data jildii durii ji’a jaha duraa kan hin fayyadamne ture.
Tarkaanfii 3: Galmeewwan jildii Docker hin hidhamne irra deebisuu ext4 fayyadamuun ext4 Joornaalii (ext4magic fi debugfs) .¶
Yoom docker volume rm ni haqa /var/lib/docker/volumes/<vol_name>/_data irratti an ext4 sirna faayilii, . ext4 agarsiistota ugguraa kallattii zeeroo baase (i_block / hundee muka bal'ina) gabatee inode jiraataa keessatti. Haa ta'u malee, ext4 joornaalii (inode <8>, akkaataa adda addaatiin 128 MB gara 1024 MB circular ring buffer) ammallee waraabbii seena qabeessa gabatee inode sirrii fi uggura galmee mirga duraa irraa qaba docker compose down -v ajjeefameera.
+-------------------------------------------------------------------------+
| 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. |
+-------------------------------------------------------------------------+
Fiigi ext4magic qoqqoodinsa dubbisa qofa kee irratti (ykn .img waraabbii suuraa sarvarii lammaffaa irratti), chaappaa yeroo ifteessuudhaan (-a) daqiiqaa 5 duraa fiigdee irraa docker compose down -v ykn docker system prune --volumes: 1.1.
# 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: Suuraa joornaalii battaluma Docker dhaabdee booda RAM keessatti qusatte dubbisa.
- -f var/lib/docker/volumes: Muka galmee jildii Docker sirrii irratti xiyyeeffata (hubachiisa: dursaa dhiisi / in. keessatti ext4magic daandii fira).
- -a $(date -d "-15 minutes" +%s): Hima ext4magic muka galmee irra deebi'ee ijaaruuf waraabbiiwwan inode fayyadamuun daqiiqaa 15 dura sirrii ta'e (haquu tasa dura).
- -r: Galmeewwan guutuu bakka uggurri hin barreeffamne deebisa; yoo -r faayilii gartokkoon irra barreeffame dhaba, dabarsoo lammaffaa bakka buusuun fiigi -r waliin -m (boca falfalaa + haala walmakaa joornaalii).
Tarkaanfii 4: Faayilota SQLite, PostgreSQL, ykn MySQL InnoDB raw bocuu yeroo joornaalichi marfame (XFS ykn ext4) .¶
Warning
Maaliif XFS hin deeggaru ext4magic fi battalumatti dubbisa qofaaf hiikuu barbaada: Faallaa ext4, kan kooppii inoodii baayitii 256 guutuu gara joornaalii isaatti barreessu, . XFS deelta yaada meetadaataa galmeessee fi aggaammiidhaan irra deebi'ee inode B-muka bilisa ta'e fayyadama (agi). Yoo /var/lib/docker irra taa'a XFS qoqqoodinsa (durtii RHEL, Rocky Linux, AlmaLinux, fi Amazon Linux irratti), hiikuu /var/lib/docker ykn irra deebi’anii kaa’uu / sekondii muraasa keessatti dubbisuun tarkaanfii tokkicha barbaachisaa ta’e bocuu durati.
Yoo keessummeessichi ** fayyadame.XFS** ykn yoo kan ext4 joornaalii duraan agarsiistota inode irratti marfame, mallattoo fi caasaa bocuu fakkii diskiin raw irratti fayyadami (docker_host_raw.img):
- Kuusaawwan Deetaa SQLite3 tiif (
.sqlite, ..db- fkn, Vaultwarden, Nextcloud, Gargaaraa Manaa, Gitea, Grafana): Kuusdeetaan SQLite3 hundi mataduree ASCII baayitii 16 kan hin dogoggorreen baayitii 0 fuula isaa isa jalqabaa kiiloo baayitii 4 irratti jalqaba:53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00("SQLite format 3\0"), fi hammangaa fuula kuusdeetaa sirrii (Bytes 16..17, akkaataa adda addaatiin4096) fi guddina kuusdeetaa waliigalaa fuula (Bytes 28..31, big-endian 32-bit integer) sirriitti mata duree walfakkaataa sana keessa. - Fiigi
PhotoRecwaliin[File Opt]->[x] sqlitedandeessifame, ykn kallattiin kutaa sana sakatta'igrep -ab "SQLite format 3"ofseeti baayitii sirrii faayilii SQLite kee haqame barbaaduu fi ittiin baasuufdd: 1.1.Erga baafamee booda fiigi# 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.dbfuula baala B-muka hin tuqamne hunda irra deebi’anii ijaaruuf.
Tip
Akkaataa sirriitti shallagnu dd guddina baayitii faayilii SQLite3 hin hidhamne mata duree isaa irraa: Al tokko grep -ab "SQLite format 3" ofseeti baayitii jalqabaa siif kenna OFFSET kuusdeetaa SQLite kee kan haqame, baayitii dubbisi 16..17 (uint16 big-endian Guddina Fuulaa, fkn, 0x1000 = 4096 baayitii) fi baayitii 28..31 (uint32 big-endian Lakkoofsa Fuulaa, fkn, . 25000 fuula) fayyadamuun hexdump -C -s OFFSET -n 32. Baay’isuu Page Size x Page Count dheerina baayitii sirrii itti darbuuf siif kenna dd (iflag=skip_bytes,count_bytes) yeroo faayilii diskiin irratti walitti aanee jiru.
- MySQL / MariaDB InnoDB tiif (
.ibdfaayiloota gabatee): InnoDB hunda.ibdgabatee tartiiba kan of keessaa qabudha16 KB(16,384baayitii) fuula kanneen of keessaa qabanFIL_PAGE_INDEX(0x45BF) mataduree fi adda ta'e gabateespace_id. Percona / TwinDB fayyadamuu ** .undrop-for-innodb(stream_parser+c_parser)** meeshaa scan gochuuf/dev/nvme0n1p1hundaaf16 KBFuulota indeksii InnoDB fi tarree hunda kallattiin gara faayilii TSV/SQL irra deebi'anii galchuuf gadi darbadhu. - Faayilota Tuullaa PostgreSQL tiif (
$PGDATA/base/<db_oid>/<relfilenode>): PostgreSQL tokkoon tokkoon gabatee akka walitti fufiinsaatti kuusa8 KB(8,192baayitii) tuullaa fuula of keessaa qabuPageHeaderData(pd_lower, .pd_upper, .pd_special). Fayyadamaa ** .pg_filedump** ykn ** .pglazarus/ .pdu** naannoowwan diskiin hin ramadamne sakatta'uuf8 KBfuulawwan haalata tuuppii tarjaa gabatee keetii wajjin walsimu (HeapTupleHeaderData) fi tarreewwan irra deebi’anii ijaaruu.
Marsaa 4ffaa: Kubernetes PVC, PV, fi etcd Suuraa Yeroo Hatattamaa Fayyisuu¶
Kubernetes keessatti (EKS, . GKE, . AKS, . k3s, . RKE2, . kubeadm, . OpenShift), akka tasaa PersistentVolumeClaim (kubectl delete pvc), Tuuta Haalata, ykn Iddoo Maqaa guutuu (kubectl delete ns prod) Arkiteekcharii baay'ee adda ta'e kan of danda'e Docker irraa hordofa.
Seenaa A: PVCn agarsiisa Terminating (Lubbuu Baraatuu Xumuraa)¶
Fiigi: 1.1.
Yoo kanSTATUS tarreen ** jedha.Terminating**, hafuura baafannaa: daataan keessan hanga ammaatti HIN haqamne.
- Maalif? Kubernetes PVC hunda uumame Erga Kubernetes 1.9 ofumaan hammata finalizers: [kubernetes.io/pvc-protection].
- Hanga Pod tokko ammallee PVC sana fe'aa jirutti, too'ataan Kubernetes haquu PVC xumuruu didee gonkumaa kan konkolaachisaa CSI hin waamu DeleteVolume RPC.
- Tarkaanfii Battalaa: Pod NOT haquu ykn deebi'ee jalqabuu, fi finalizer NOT patch out godhi. Achumaan deetaa hunda Pod hojjechaa jiru keessaa gara maashinii naannoo keetii ykn baaldi S3tti waraabi:
# 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
Haala B: PVCn haqame, fi kubectl get pv keessatti PersistentVolume agarsiisa Released mootummaa (ReclaimPolicy: Retain) .¶
Fiigi: 1.1.
Yoo Jildii Itti fufiinsa qabu (pv-prod-postgres) ammallee waliin tarreeffameera STATUS: Released (sababni isaas StorageClass isaa fayyadameera reclaimPolicy: Retain), Dataan keessan dhibbeentaa 100 ammallee diskiin jala jiru irratti osoo hin tuqamin taa'ee jira. Haa ta'u malee, Kubernetes PVC haaraan a Released PV sababni isaas PVn ammallee a spec.claimRef gara PVC'wwan durii haqamanitti akeekuudhaan UID.
Akkaataa itti a Released PV Available ammas sekondii 10 keessatti kasaaraa deetaa zeeroo ta'een:
1. Wanticha PersistentVolume gulaaliitii haqi spec.claimRef block: 1. .
kubectl get pv ammas: haalli battalumatti ** irraa jijjiirama.Released** hanga ** .Available**.
3. Kee irra deebi'ii uumi PersistentVolumeClaim (ibsuudhaan volumeName: <your-pv-name> fi dandeettii walsimsiisuu/maqaaGittaa kuusaa). Faayilota hunda osoo hin tuqamne battalumatti PV jirutti ni hidha.
Haala C: Haala kilaastara Kubernetes haxaa'ame an irraa deebisuun etcd suuraa (etcdctl snapshot restore) .¶
Osoo namni fiige hoo kubectl delete namespace prod ykn helm uninstall fi Kubernetes manifests, Secrets, ConfigMaps, fi hiika PV 200 ofumaan bulchu irratti haxaa'e kubeadm, . k3s, ykn RKE2 xiyyaara to'annoo?
- Kan isa haaraa barbaadi
etcdsuuraa (durtii keessatti/var/lib/rancher/k3s/server/db/snapshots/, ./var/lib/rancher/rke2/server/db/snapshots/, ykn sagantaa qabdan/var/backups/etcd/snapshot.db). - Tuuta jiraataa osoo hin tuqin dura qulqullina suuraa mirkaneessi:
- Dhaabadhaa
kube-apiserverfietcdnoodi(wwan) xiyyaara to'annoo irratti: - Gaafa
kubeadm(pods static): Socho'uu/etc/kubernetes/manifests/kube-apiserver.yamlfi/etc/kubernetes/manifests/etcd.yamlyeroodhaaf gara/root/manifests_hold/kanaafuukubeletmeeshaalee lamaan qulqullinaan dhaabsisa, sana booda ol deebi'a/var/lib/etcdgara/var/lib/etcd.bak. - Gaafa
k3s: Fiigisudo systemctl stop k3sfisudo k3s server --cluster-reset --cluster-reset-restore-path=/path/to/snapshot. - Deebisee kan...
etcdgalmee deetaa irrattikubeadm: - Socho'aa
etcd.yamlfikube-apiserver.yamldeebi'ee gara/etc/kubernetes/manifests/. Sekondii 30 keessatti, .kube-apiserverdeebi'ee kan deebi'e waliin wal qunnamsiisaetcdkuusaa fi wanti Iddoo Maqaa, Iccitii, ConfigMap, fi PersistentVolume haqame hundi deebi'ee mul'ata.
Marsaa 5: Jildii Docker fi Kubernetes akka tasaa akka hin haqamne jabeessuu¶
Kuusdeetaan oomishaa kee erga deebi'ee booda, dogongorri barreessuu CLI tokko lammata gonkumaa jildii kallattiin haquu akka hin dandeenyeef eegdota ijaarsaa afran kana hojiirra oolchi:
- Oomisha hunda jijjiiri Kubernetes
StorageClassirraareclaimPolicy: DeletegarareclaimPolicy: Retain: Akka durtiitti, Gitoota Kuusaa duumessa keessaa ijaarame (gp2, .gp3, .standard-rwo) durtii garareclaimPolicy: Delete, jechuun PVC haquun diskiin duumessaa balleessa jechuudha. Uumuu aStorageClasswaliinreclaimPolicy: Retain(ykn PVwwan jiran ittiin patch gochuukubectl patch pv <pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}') kanaaf PVC ykn Namespace haquun gonkumaa jildii ugguraa jala jiru hin haqu. - AWS EBS Recycle Bin / GCP Snapshot Schedules / Velero CSI Snapshots waliin dandeessisi: AWS EBS Recycle Bin dandeessisuun yoo konkolaachisaan CSI bilbilellee sagalee EBS haqame kamiyyuu guyyoota 7 hanga 30tti qabata
DeleteVolume. - Gonkumaa hin fayyadaminaa
docker system prune --volumesiskiriiptii qulqulleessuu ofumaan ykn fiigdota CI/CD keessatti: Yoo qabduun kuusdeetaa oomishaa yeroo gabaabaaf kufe (Exited (1)) yeroo sirrii hojiin cron tokko hojjetuttidocker system prune -a --volumes -f, Docker jildii isaa maqaa hin qabne "akka hin fayyadamne" jedhee fudhata, dhaabbataadhaan haqa. Strip--volumesiskiriiptii qulqulleessuu hunda irraa. - Faayidaa hidhaa keessummeessituu ifa ta'e fayyadami (
/srv/prod_data/postgres:/var/lib/postgresql/data) ykn kuusdeetaa alaa bulfamu fe'iinsa hojii oomisha haalaa: Faallaa/var/lib/docker/volumes/, galmeewwan hidhuu-fe'uu ala keessummeessi/var/lib/docker/kan gonkumaa hin tuqamnedocker compose down -v, .docker volume rm, ykndocker system prune --volumes.
Lakkoofsa balaa tasaa naannoo fi pirootokoolii ejensii¶
Yeroo haquun kuusaa konteenara ykn Kubernetes hojii kilinikaa hospitaalaa, ergaa nageenya hawaasaa, ykn daataa dhuunfaa qajeelfama qabu irratti dhiibbaa geessisu, battalumatti hammachuu:
- Ameerikaa fi Kanaadaa: Bilbila
911yoo kufaatiin kilaastara konteenaraa hordoffii dhukkubsataa kilinikaa, sirna EHR, ykn ergaa hatattamaa hojii dhabsiise. Bu’uuraalee konteenara hamaa haxaa’uu ykn taateewwan saayibarii CISA (1-844-Say-CISA/ .cisa.gov/report) ykn Giddugala Nageenya Saayibarii Kanaadaa (1-833-CYBER-88). - Yunaayitid Kingidam: Bilbila
999balaa lubbuu ykn bu’uuraalee NHS murteessoo ta’aniif. UK GDPR jalatti, dhaabbataadhaan balleessuun ykn dhabamuun daataa dhuunfaa bakka bu’aa deebi’ee argamu malee beeksisa cabsuu sa’aatii 72f ICO (0303 123 1113). - Gamtaa Awurooppaa: Bilbila
112biyyoota miseensa Gamtaa Awurooppaa hunda keessatti. Dhaabbileen Qajeelfama NIS2 jala jiran tajaajilli cimaan erga addaan citee booda sa’aatii 24 keessatti akeekkachiisa dursaa CSIRT biyyaalessaa isaaniif dhiyeessu qabu, akkasumas daataa dhuunfaa dhaabbataa dhabuun sa’aatii 72 keessatti gabaasa GDPR Keewwata 33 kakaasa. - Awustiraaliyaa fi Niwuu Ziilaand: Bilbila
000Awustiraaliyaa keessatti ykn111Niwuu Ziilaanditti; taateewwan bu’uuraalee misoomaa murteessoo ta’an ACSC (1300 CYBER1). - Hindii fi Eeshiyaa-Paasifiik: Bilbila
112Hinditti deebii hatattamaa argachuuf; taateewwan nageenya duumessaa ykn konteenaraa CERT-In (incident@cert-in.org.in) dirqama sa'aatii 6 keessatti.
Gaaffiiwwan yeroo baay’ee gaafataman¶
Ni godha docker compose down -v fe'iinsa hidhaa keessummeessituu haquu (./data:/var/lib/mysql) moo jildii Docker Maqaa fi Maqaa Hin Qabne qofa?¶
`docker compose down -v` QOFA jildiilee maqaa qaban kanneen keessatti labsaman haqa `volumes:` kutaa `docker-compose.yml` fi Jildii Maqaa hin beekamne kan qabduuwwan irratti maxxanan; it gonkumaa faayilii fe'iinsa hidhaa keessummeessituu keessaa haqa (kan akka `- /opt/mysql_data:/var/lib/mysql` ykn `- ./postgres_data:/var/lib/postgresql/data`). Yoo faayilii qindeessuu kee daandii keessummeessituu irraa eegalee fayyadame `/` ykn `./`, galmee sana ammuma keessummeessituu irratti ilaali: faayiloota kee ammallee dhibbeentaa 100 hin tuqamne.
Maaliif akkas godhe docker system prune --volumes yeroon jijjiiramaa naannoo haaromsuuf qabduu daqiiqaa 2 qofa dhaabe jildii kuusdeetaa koo haquu?¶
Garaagarummaa gidduu jiru of eeggannoodhaan eegaa `docker stop` fi `docker rm`: yoo meeshaan tokko qofa ta’e `Stopped / Exited` (keessatti mul'ata `docker ps -a`), . `docker system prune --volumes` ni godha miti qabduu dhaabate ammallee waan isaan wabeef jildii isaa haqi. Haa ta'u malee, yoo fiigde `docker rm
Mac irratti Docker Desktop keessaa Docker volume haqame deebifachuu nan danda'aa (Apple Silicon / . Intel) ykn Windows (WSL2)?¶
Eeyyee, yoo battalumatti Docker Desktop keessaa baate kanaaf maashiniin dhugaa hojjechuu dhaaba `fstrim` diskiin dhugaa (virtual disk) irratti. macOS irratti, Docker jildii Liinux hunda keessaa kuufata `-/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw`; Windows WSL2 irratti, keessaa `%LocalAppData%\Docker\wsl\disk\docker_data.vhdx`. Sana koppii godhaa `.raw` ykn `.vhdx` faayilii battalumatti gara SSD alaatti galchi, dubbisa qofaaf Liinux keessatti maxxansi (fayyadamaa `losetup -Pr` sababni isaas `.raw` ykn `qemu-nbd -r` sababni isaas `.vhdx`), fi fiigi `ext4magic` ykn `PhotoRec` faallaa kan dhugaa (virtual) irratti `ext4` keessaa qoqqoodinsa.
Maal yoo ani Kubernetes StatefulSet waliin haqe kubectl delete statefulset postgres? Sun PVC koos haqee?¶
Lakki. Akka durtii Kubernetes keessatti (yoo ta'e malee `persistentVolumeClaimRetentionPolicy.whenDeleted: Delete` ifatti Kubernetes 1.27+ irratti qindaa'e, hojjechaa jira `kubectl delete statefulset` too'ataa StatefulSet fi Pods isaa haqa, . hunda dhiisee `PersistentVolumeClaims` (`data-postgres-0`, . `data-postgres-1`) fi daataa isaanii bu’uuraa dhibbeentaa 100 hin tuqamne. Salphaatti irra deebi'ii iyyadhu `StatefulSet` YAML maqaa walfakkaatuun mul'ata fi `volumeClaimTemplates`, fi Pods haaraan ofumaan irra deebi'ee kan jirutti ni maxxansa `data-postgres-0` PVCs jedhaman.
Akkamitti faayiloota Docker keessa jiran argachuu danda'a overlay2 galmee yeroo qabduun jalqabuu didu (CrashLoopBackOff / . Exited (1))?¶
Qabduu kufe hin haqi. Hanga meeshaan dhaabate ammallee keessa jirutti `docker ps -a`, laayibariin barreeffamuu danda'uu fi olka'iinsa sagalee isaa guutummaatti diskiin irratti hin tuqamne. Yookaan faayilii kallattiin qabduu dhaabbataa keessaa fayyadamuun waraabuu dandeessa `docker cp
Yoo namni tokko Kubernetes tokko haqee hoo Namespace (kubectl delete ns prod) fi PVCn hundi qaban reclaimPolicy: Delete AWS EBS moo GCP irratti?¶
Yoo konkolaachisaan CSI duumessaa (`ebs.csi.aws.com` ykn `pd.csi.storage.gke.io`) duraan raawwatameera `DeleteVolume` sababni isaas `reclaimPolicy` ture `Delete`, hatattamaan toora nageenyaa sadarkaa duumessaa sadii sakatta'i: (1) **AWS Recycle Bin for EBS Volumes** konsoolii AWS EC2 keessatti sakatta'i (yoo seera tursiisaa herrega/tag irratti socho'aa ture, jildii EBS haqame Recycle Bin keessa taa'ee cuqaasuu 1 keessatti deebi'uu danda'a); (2) **AWS Backup / DLM / GCP Snapshot Schedules** suuraa jildii ofumaan hojjetame isa dhiyoo ta'eef sakatta'i; fi (3) kuusdeetaan kee WAL/binlogs (`WAL-G`, . `pgBackRest`, . `Litestream`) gara baaldi S3/GCS tti.
Qajeelfamoota walqabatan¶
- Diskiin sarvarii 100% guutuu (0 baayitii bilisa): kuusdeetaa WAL log bloat, B-tree manca'e, fi zeeroo-space deebisuu
- Akka tasaa
rm -rfyknShift+DeleteLinux, macOS, ykn Windows irratti: battalumatti dubbisa qofaaf irra deebi'anii fe'uu fi inode bocuu - Maashinii dhugaa VMDK, VHDX, fi qcow2 suuraa sansalataa suuraa fi baraarsa haaypervaayizarii
- Akka tasaa Git raawwachuu furtuuwwan AWS, faayilii
.env, ykn furtuu SSH dhuunfaa gara repo GitHub uummataatti - Rakkoo keessummeessituu weebii, godaansa, fi deebisanii dhaabuu duwwaa
- Duubdeebii kompiitaraa, tooftaa 3-2-1, fi balaa irraa dandamachuu
- Lakkoofsa yeroo muddamaa biyyaan
Maddootaa fi qajeelfama ofiisaa¶
- Kubernetes Dokumantarii Ofiisaa (
kubernetes.io/ Cloud Native Computing Foundation): Wanta Kuusaa Eegumsa Fayyadama Keessatti (kubernetes.io/pvc-protectionXumuraa), Jildii Itti Fufiinsa Qabu Deebifachuu (Retainvs.Delete), fi Hojiirra OolchuuetcdKilaastaroota Kubernetes (etcdctl snapshot restore). - Docker Inc. (
docs.docker.com): Docker keessatti Deetaa Bulchuu: Volumes, Bind Mounts, .overlay2Arkiteekcharii Konkolaachisaa Kuusaa, fi Wabii Crune. - Dhaabbata Keernii Liinux (
kernel.org): Kan.../procSirna Faayilii (procfsIbsituu Faayilii Bani Deebisuu karaa/proc/<pid>/fd/) fi Ext4 Joornaalii Ispeesifikeeshinii. ext4magicDokumantarii Pirojektii (ext4magic.sourceforge.net): Forensic Inode fi Joornaalii Dabarsa Deebisuu Sirna Faayilii Ext3/Ext4 irratti.- Inistiitiyuutii Istaandardii fi Teeknooloojii Biyyaalessaa (
NIST) (Ameerikaa): Maxxansa Addaa 800-190: Qajeelfama Nageenya Qabduu Appilikeeshinii & Taatee Deebisuu.