Mugga wax-soo-saarka Docker ama Kubernetes waa la tirtiray: samatabbixin docker system prune --volumes, overlay2 Inodes, iyo etcd Sawir qaade¶
Nambarada deg-degga ahi way ku kala duwan yihiin waddan ahaan. Boggani wuxuu isticmaalaa 911, lambarka Maraykanka iyo Kanada. Wadamo badan oo kale ayaa isticmaala 112, 999, ama nambar kale. U hel lambarka wadankaaga.
ordaya docker compose down -v, docker system prune -a --volumes, docker volume rm, ama kubectl delete pvc on tab terminal qaldan ee wax soo saarka waa mid ka mid ah siyaabaha ugu dhaqsiyaha badan si ay u tirtirto nool PostgreSQL, MySQL, MariaDB, Redis, MongoDB, ama mugga database SQLite. Si ka duwan sawirada mashiinka farsamada ee daruuriga ah ee u guura 7-maalmood qashinka dib u warshadaynta, darawalka mugga deegaanka ee Docker (/var/lib/docker/volumes/<name>/_data) iyo Kubernetes local-path / hostPath Bixiyeyaashu waxay isla markiiba soo saaraan POSIX caadiga ah unlink() iyo rmdir() wuxuu si toos ah uga soo horjeedaa nidaamka faylalka martida loo yahay ee Linux.ext4, XFS, ama Btrfs). Qoraal kasta oo ku dhaca martigeliyaha Linux ka dib marka amarku dhamaado waxay dib u qori kartaa kaydka xogta ee la sii daayay ee diskka. Haddii saxanka serverkaagu uu buuxsamay boqolkiiba 100 (0 bytes free) ka hor intaan cidina cararin docker system prune --volumes argagax, tasho diskka serverka 100% buuxa, xogta WAL log bloat, iyo soo kabashada eber; faylalka Linux ee biraha qaawan ee tirtirka ka baxsan weelasha, eeg shil-rm -rf ama Shift-Delete on ext4, XFS, APFS, iyo NTFS: dib-u-ururinta akhriska-kaliya iyo xardho-inode iyo mashiinka farsamada ee VMDK, VHDX, iyo qcow2 silsiladda sawir-qaadista musuqmaasuqa iyo samatabbixinta hypervisor. Haddii wax-soo-saar la'aantani ay saamayso daryeelka bukaanka isbitaalka, dirista degdegga ah, ama nidaamka badbaadada utility dadweynaha, wac lambarkaaga xaaladda degdegga ah (911 Maraykanka iyo Kanada, 112 guud ahaan Midowga Yurub, 999 gudaha Boqortooyada Midowday (UK) ama hubi hagahayaga nambarada degdega ah.
Hadda samee tan¶
- Ha ordi
docker compose up -d,systemctl restart docker, ama dib u habayn Kubernetes pod: Dib u samaynta weelka ama dib u bilaabida Docker daemon waxa ay qortaa megabyte cusuboverlay2Xogta badan, weelka JSON, iyo faylalka xog ururinta ee madhan ee dhowaan la bilaabay (initdb) si toos ah uga sarreeya saxda ahext4amaXFSblocks halka codkaaga la tirtiray uu fadhiyey ilbiriqsi ka hor. - ** Hubi 5 ilbiriqsi haddii habka weelka (
postgres,mysqld,redis-server,node,python) ayaa wali ku socota xusuusta (ps auxiyosudo lsof +L1***: Haddii qof uu tirtiro faylalka gudaha mugga korka ah ama uu ka gooyay mugga qarsoodiga ah iyada oo weelku weli socdo, Linux kernel wuxuu hayaa ** 100 boqolkiiba faylasha xogta aan la xidhin ee noolaanshaha saxanka *** ilaa inta uu ku jiro aqoonsiga habka martigeliyaha weelka (PID) waxa uu haystaa tilmaame fayl furan (FD). Waxaad nuqul ka samayn kartaa faylashaas si toos ah/proc/<PID>/fd/ama/proc/<PID>/root/iyadoo xogta eber ay lumineyso ka hor inta uusan weelka joogsan. - **Haddii weelka mar hore la joojiyay oo mugga la tirtiray (
docker compose down -vamadocker system prune --volumes), qaboojiye diskka martida ayaa isla markiiba qoraya ***: Jooji daemon-ka Docker (sudo systemctl stop docker.socket docker.service containerd) markaa weelasha asalka ah iyo jeegaga caafimaadku waxay joojiyaan qorista logyada/var/lib/docker, ka dibna ama dib u fuul/var/lib/docker(ama xididka/qayb) akhri-kaliya (sudo mount -o remount,ro /ama qaado sawir mug leh oo ah heerka xannibaadda isla markiiba (AWS EBS Snapshot,GCP Persistent Disk Snapshot,DigitalOcean Volume Snapshot) intaanay wax taaban. - ** Haddii aad ku sugan tahay Kubernetes (
kubectl delete pvcamakubectl delete namespace), hubi Volume Joogtada ah (PV)ReclaimPolicy(kubectl get pv) isla markiiba**: - Haddii ay
PVlahaapersistentVolumeReclaimPolicy: Retain, xogtaada lama tirtirin ***: thePVsi fudud loogu dhaqaaqayReleasedstatus iyo Cloud diskEBS,Azure Disk,Ceph RBD,NFS) 100% waa sax. - Xitaa haddii
kubectl delete pvcayaa ku dhegganTerminating, Kubernetes ** Dhammaystirayaasha (kubernetes.io/pvc-protection*** Ka ilaali darawalka CSI inuu tirtiro kaydinta hoose ilaa inta Pod kasta uu wali tixraacayo PVC. Ha tirtirin Pod-ka ilaa aad nuqul ka sameysato xogta Pod-ka socda. - Sawir qaybta qaybta hoose ee hoose (
dd/ddrescuein ka badan SSH) si disk dibadeed ah ama mugga daruur gaar ah ka hor inta aadan ordinext4magic,extundelete, amaPhotoRec: Waligaa ha ku shubin fayl-faleyaasha ku qoraya faylalka wax soo saarka isla qaybta diskka ee aad ka soo kabanayso/var/lib/docker/volumes. - ** Wixii la musuqmaasuqay ama si lama filaan ah loo tirtiray Kubernetes cluster state (
kubectl delete crd/namespace), joogsokube-apiserveroo soo celi kaagii u dambeeyayetcdsawir (etcdctl snapshot restore***: Haddii kooxdu ay sheegtoetcdwaa la tirtiray iyadoo mugga kaydinta daruuraha hoose ay weli jiraan, soo celintaetcdsoo kabsado dhammaanPV,PVC,SecretiyoConfigMapwalxaha isku mar.
Danger
Weligaa ha saarin kubernetes.io/pvc-protection ama kubernetes.io/pv-protection finaleeyaha leh kubectl patch ... -p '{"metadata":{"finalizers":null}}' marka PVC ay ku dhegto Terminating: Dhamaystirkaas ayaa ah waxa kaliya ee ilaalinaya darawalkaaga CSIaws-ebs-csi-driver, pd.csi.storage.gke.io, Longhorn, Rook-Ceph) laga bilaabo soo saarista qalab DeleteVolume API wac si loo burburiyo saxankaada wax soo saarka. Halka PVC ay ku dheggan tahay Terminating, Pod-gu wali wuu socdaa, muggana wali waa lagu rakibay: orod kubectl exec ama kubectl cp (ama pg_dump / mysqldump) isla markiiba si aad u badbaadiso 100 boqolkiiba xogtaada ka hor inta uusan Podku dhamaan.
Geedka go'aanka: mugga Docker ee la tirtiray, overlay2 lakabka, ama Kubernetes PVC kala soocidda¶
Isticmaal jaantuskan si aad u dooratid dariiqa soo kabashada eber ee ugu dhaqsaha badan iyadoo ku saleysan in habka weelku uu wali nool yahay, haddii mugga uu taageeray saxanka deegaanka ama kaydinta daruuraha CSI, iyo nidaamka faylalka martigeliyay /var/lib/docker:
flowchart TD
Start["Xogta Wax-soo-saarka ee maqan Kadib Docker ama Kubernetes Tirtir Taliska"] --> WhichEnv{"Waa kuwee Madal & Taliskii Khasaaraha dhaliyay?"}
WhichEnv -->|"Docker: Koonteenar Wali Soconaya"| ProcRescue["Samatabbixinta Sharaxayaasha Faylka aan Xidhiidhka Lahayn ee Furan iyada oo loo sii marayo sudo lsof +L1 iyo /proc/PID/fd/N ama /proc/PID/root/"]
WhichEnv -->|"Docker: weel la joojiyay & mugga la tirtiray (hoos u koob -v / prune --volumes)"| StopDocker["Isla markiiba Orod: sudo systemctl stop docker.socket docker weel ku jira"]
WhichEnv -->|"Kubernetes: kubectl tirtir pvc/pv/statefulset/namespace"| K8sCheck{"Boodhku wali ma shaqaynayaa mise PVC-ku ma ku dheggan yahay joojinta?"}
K8sCheck -->|"Haa: Pod wali wuu socdaa (Finalizer xannibay CSI tirtiridda)"| K8sExec["Ha tirtirin Pod -> Kubectl exec / pg_dump / tar dusha sare ee stdout isla markiiba ku dheji diskka maxalliga ah"]
K8sCheck -->|"Maya: Pod Gone -> Hubi kubectl heli pv"| ReclaimCheck{"Maxay ahayd Siyaasadda Dib-u-soo-celinta PV?"}
ReclaimCheck -->|"Haysashada (Xaalada PV = La sii daayay)"| ClearClaimRef["100%."]
ReclaimCheck -->|"Tirtir (Cloud EBS / PD / Longhorn / Waddada Maxalliga ah)"| CloudOrLocal{"Mugga CSI ee Cloud ama Disk-ga Martigelinta Maxaliga ah?"}
CloudOrLocal -->|"Cloud CSI (AWS EBS / GCP / Azure / Ceph)"| CloudSnap["Hubi Cloud Console Dib-u-warshadaynta Bin/Automated EBS Snapshots / Ceph RBD Trash (rbd qashinka ls)"]
CloudOrLocal -->|"Disk Node Local (dariiqa-maxali ah / Waddada martida loo yahay)"| StopDocker
StopDocker --> RemountRO["Remount Host Partition Read-Kaliya (Moun -o remount,ro) AMA Stream Block Sawirka SSH"]
RemountRO --> HostFS{"Waa maxay Nidaamka Faylasha Martigeliyay /var/lib/docker?"}
HostFS -->|"ext4"| Ext4Rec["Isticmaal debugfs / ext4magic Journal Inode Transaction Rollback (-timestamp)"]
HostFS -->|"XFS/Btrfs"| CarveRec["Adeegso Xididada Btrfs / xfs_irecover / Saxeexa Saxeexa Gaarka ah ee SQLite, Postgres Heap, ama InnoDB .ibd"]
Marxaladda 1: Sida Docker iyo Kubernetes ay dhab ahaantii u tirtiraan mugga diskka¶
Kahor intaadan socodsiin amar kasta oo soo kabasho ah, fahan meesha xogtaada jidh ahaan ugu noolayd Linux host-ga iyo waxa amarka tirtirku taabtay:
| Nooca Kaydinta & Tirtir Amarka | Dariiqa Nidaamka Faylka ee Martigelinta ee Linux Node | Waxa uu dhab ahaantii sameeyay amarka tirtirka | Habka Soo kabashada degdega ah |
|---|---|---|---|
** Magaca Docker Mugga (docker volume rm ama docker compose down -v)** |
/var/lib/docker/volumes/<vol_name>/_data |
Xidhiidhka ka jaray faylalka gudaha _data/ oo ka saaray galka buugga /var/lib/docker/volumes/metadata.db (boltdb). |
Jooji Docker isla markiiba, kor u qaad /var/lib/docker akhri-kaliya, oo soo kabso inodes-ka aan la xidhin iyada oo loo marayo ext4magic / debugfs ama xaradhka saxeexa. |
** Mugga Docker aan la garanayn (docker run -v /var/lib/mysql + docker rm -v ama docker system prune --volumes)** |
/var/lib/docker/volumes/<64-char-hex-id>/_data |
docker system prune --volumes waxay tirtirtaa mug kasta oo qarsoodi ah iyo magaca aan hadda lagu tixraacin ugu yaraan hal weel oo jira. |
Isla markiiba jooji Docker; Haddii aad lahayd kale weel la joojiyay oo aan muggoodu aan la jarin, hubi inta hadhay /var/lib/docker/volumes/*/_data faylalka marka hore ka hor inta aan la xardhin baloogyada aan la qoondayn. |
Lakabka Lakab Qoran Karodocker rm <container> markii xogta lagu qoray meel ka baxsan mugga) |
/var/lib/docker/overlay2/<layer-id>/diff/ |
Xidhiidhka ka jaray qaybta sare ee weelka diff/ hagaha gudaha overlay2 darawalka kaydinta. |
Jooji Docker isla markiiba oo ka soo kabso geedka hagaha ee aan la xidhin ext4 joornaal ama XFS blocks |
* Kombiyuutarka Docker ee macOS ama Windows (docker system prune --volumes)** |
Gudaha hal sawir disk mashiinka dalwaddii: -/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw (macOS) ama %LocalAppData%\Docker\wsl\disk\docker_data.vhdx (Daaqadaha WSL2). |
La diray unlink() gudaha Linux VM, iyo haddii discard/TRIM ku firfircoon yahay Docker.raw / docker_data.vhdx, feeray daloolo aan badnayn oo ku yaal faylka martida loo yahay. |
Jooji Desktop-ka Docker 5 ilbiriqsi gudahood, koobi Docker.raw ama docker_data.vhdx u wado dibadda, oo orod ext4magic / PhotoRec lid ku ah sawirka diskooga |
** Kubernetes PVC leh Delete Dib u soo celinta Siyaasada Ceph RBD (Rook-Ceph) ama Longhorn** |
barkadda Ceph OSD (rbd) ama /var/lib/longhorn/replicas/. |
Hadii csi-rbdplugin ayaa leh trash karti (rbd trash), sawirka RBD waxa loo raray qashinka Ceph; Haddii kale baloogyadu waa kuwo aan khariidad lahayn. |
Orod rbd trash ls --pool <pool> gudaha rook-ceph-tools pod iyo dib u soo celi rbd trash restore. |
Wajiga 2: Ka badbaadinta faylasha xogta furan ee weelka weli socda (/proc/<pid>/fd/)¶
Sug: ** weli weelku hadda ma socdaa?**
Inta badan, injineerku waxa uu wadaa qoraalka socdaalka codsiga, shaqada cron nadiifinta, ama buug-gacmeedka rm -rf /var/lib/postgresql/data/* ama rm /app/data/production.sqlite3 gudaha weel socda, ama tirtira galka bind-mount host ee hoose /opt/app/data halka weelka laftiisa (postgres, mysqld, mariadbd, redis-server, mongod, gunicorn, node) waa wali waa socdaa oo socda.
Linux, faylka lagama tirtiro saxanka marka rm ama unlink() ayaa lagu magacaabaa. Xirmooyinka saxanka iyo inodesku waxay sii jiraan ** 100 boqolkiiba waa la qoondeeyey waana la akhriyi karaa ** illaa habka ugu dambeeya ee haya sharraxaha faylka furan (FD) in inode uu xidho ama ka baxo.
Talaabada 1: Soo hel Aqoonsiga Habraaca martida loo yahayPID) habka weelka¶
On marinka martigeliyaha Linux (ma aha gudaha weelka), hel martigeliyaha PID ee xogtaada ama habka codsiga:
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: waxay tidhi 0, oo faylka magaciisu wuxuu ku dhamaanayaa (deleted). Faylka gabi ahaanba wuu ka baxay ls /var/lib/docker/volumes/..., weli ** hal byte kasta (482 MB gudaha users.ibd, 89 MB gudaha production.sqlite3) weli gudaha ayuu ku nool yahay /proc/<PID>/fd/<FD>**.
Talaabada 2: Si toos ah uga soo guuri faylasha xogta xogta ee aan la xidhin /proc/<PID>/fd/¶
**ha joojin ama dib ha u bilaabin weelka. Inta hawshu wali socoto, koobi ka bixi sharraxayaasha faylka cayriin si toos ah gal ammaan ah oo ku yaal martidaada:
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
Talaabada 3: Xitaa ka sii fiican: Samee qashin toosan oo macquul ah (pg_dump / mysqldump / .backup) ka hor intaan weelku xirin FD-yada¶
Hadii postgres ama mysqld ayaa wali socda iyada oo faylasha xogta ay u furan yihiin xusuusta iyo /proc/<PID>/fd/, isku day inaad ku shubto qashin toos ah oo toos ah godka unix ama xidhiidhka TCP ee jira marka hore:
# 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 faylalka qaybta ee habka shaqaalaha si firfircooni leh, sidaas darteed pg_dump waxaa laga yaabaa inay ku fashilmaan miisaska aan la kaydin; isku darka weydiinta SQL ee tooska ah iyo koobiyeynta mid kasta oo furan /proc/<pid>/fd/* dhammaan *** postgres PID-yada dhabarka dambe ee ilmaha ayaa kaydiya xogta ugu badan ee suurtogalka ah ee miiska miiska.)*
Marxaladda 3: Soo kabashada mugga Docker ee la tirtiray ext4 ama XFS ka dib markii weelku istaagay¶
Ka warran haddaad orod docker compose down -v ama docker system prune --volumes, sidaas darteed weelka waa horeyba u joogsaday iyo dhammaan /proc/<pid>/fd/ Sharaxayaashu ma xiran yihiin? Hadda waxaad ku jirtaa tartan ka dhan ah qoraalka asalka ah ee Linux martigeliyaha.
Tallaabada 1: Ku qabooji nidaamka faylka martida loo yahay Linux 10 ilbiriqsi gudahood¶
- Jooji Docker, weel, kubelet, iyo cron isla markiiba markaa weel, jeeg caafimaad, ama rotator log uma qorayo byte kale
/var/lib/docker: - ** Hubi qalabka xannibaya iyo nidaamka faylalka
/var/lib/docker**: - ** Dib ugu dheji qaybta Read-Kaliya (ama ku shub sawirka qaybinta cayriin ee SSH mashiin kale)**:
- Hadii
/var/lib/dockerwaxay ku jirtaa qaybteeda gaarka ah ama mugga LVM (tusaale ahaan/dev/nvme0n1p2ama/dev/mapper/vg0-docker), ku celi akhri-kaliya isla markiiba: - Hadii
/var/lib/dockerwaa xididka/qayb (/Isku day inaad ku qasbi qaybta xididka akhri-kaliya adoo isticmaalaya kernel Magic SysRq kicinta (echo u | sudo tee /proc/sysrq-trigger) amasudo mount -o remount,ro /. - **Haddii aad ku jirto daruur VPS ah (AWS EC2, GCP, DigitalOcean, Hetzner, Linode): Isla markiiba u tag konsole webka daruurta oo guji Create Snapshot mugga xannibaadda ee server-ka (ama ku shub qalabka xannibaadda cayriin ee SSH server labaad:
sudo dd if=/dev/nvme0n1p1 bs=4M status=progress | gzip -1 | ssh user@backup-server "cat > /mnt/storage/docker_host_raw.img.gz").
Tallaabada 2: Hubi in xogtaadu ay weli ku fadhido mug kale oo aan la jarin ama overlay2 lakabka¶
Kahor intaadan xardhamin baloogyada saxanka ee aan la qoondayn, xaqiiji in xogtaada aan lagu kaydin buurta xidha ama mug si kale loo magacaabay oo badbaaday:
# 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, kaliya in la ogaado find /var/lib/docker in docker-compose.yml run ahaantii abuuray projectname_app_db_data (taas oo weli boqolkiiba 100 ku xiran saxanka) halka app_db_data wuxuu ahaa mug duug ah oo aan la isticmaalin lix bilood ka hor.
Talaabada 3: Soo kabashada tusaha mugga Docker ee aan la xidhin ext4 isticmaalaya ext4 Joornaal (ext4magic iyo debugfs)¶
Goorma docker volume rm tirtirtaa /var/lib/docker/volumes/<vol_name>/_data ku ah ext4 nidaamka faylka, ext4 eber ka saarayso tilmaamayaasha tooska ah (i_block / xadka xidid geed) ee miiska inode live. Si kastaba ha ahaatee, **ext4 joornaal (inode <8>, sida caadiga ah 128 MB ku 1024 MB Wareegtada giraangiraha ah docker compose down -v ayaa lagu fuliyay.
+-------------------------------------------------------------------------+
| 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. |
+-------------------------------------------------------------------------+
Orod ext4magic lid ku ah qaybtaada akhris-kaliya (ama .img koobiga sawir-qaadista ee server-ka labaad), oo tilmaamaya waqti-shabad (timestamp)-a) laga bilaabo 5 daqiiqo ka hor inaad orodday docker compose down -v ama 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: Wuxuu akhriyaa sawirka joornaalka ee aad ku kaydisay RAM isla markiiba ka dib markaad joojiso Docker.
- -f var/lib/docker/volumes: Wuxuu bartilmaameedsadaa geedka tusaha mugga Docker ee saxda ah (xusuusin: ka tag hoggaanka / gudaha ext4magic waddooyinka qaraabo).
- -a $(date -d "-15 minutes" +%s): Sheego ext4magic in dib loo dhiso geedka hagaha iyadoo la isticmaalayo nuqullo inode ah oo shaqaynaya 15 daqiiqo kahor (wax ka hor intaan shilka la tirtirin).
- -r: Waxay soo ceshataa hagayaal dhammaystiran oo aan blocks la qorin; haddii -r lumiya faylalka qayb ahaan la dul-qoray, orda baas labaad oo beddelaya -r leh -m (qaab-samaynta sixirka + qaabka isku-dhafka joornaalka).
Tallaabada 4: Xarida SQLite cayriin, PostgreSQL, ama MySQL InnoDB faylasha marka joornaalku duubo (XFS ama ext4)¶
Warning
**Sababta XFS ma taageero ext4magic waxayna u baahan tahay akhrin-keliya degdega ah ***: Ka duwan ext4, kaas oo 256-byte inode koobi buuxa ku qoraya joornaalkiisa, XFS Wuxuu diiwaan geliyaa ulajeedka metadata deltas wuxuuna si daran dib ugu isticmaalaa geedaha B-geedka ee la sii daayay (agi). Hadii /var/lib/docker dul fadhiista XFS qayb (sida caadiga ah ee RHEL, Rocky Linux, AlmaLinux, iyo Amazon Linux), soo dejinta /var/lib/docker ama dib u fuulid / Wax-akhris-kaliya ilbidhiqsiyo gudahood ayaa ah tallaabada keliya ee ugu muhiimsan kahor xarrigga.
Haddii martigeliyaha isticmaalo XFS ama haddii ay ext4 joornaal hore ugu duudduubay tilmaamayaasha inode, isticmaal saxeexa iyo qaab-dhismeedka xardho ka soo horjeeda sawirka saxanka cayriin (docker_host_raw.img):
- ** Loogu talagalay SQLite3 Databases (
.sqlite,.db- tusaale, Vaultwarden, Nextcloud, Kaaliyaha Guriga, Gitea, Grafana)**: Xog kasta oo SQLite3 ah waxay ku bilaabataa madax 16-byte ASCII ah oo aan la garan karin oo ah byte 0 ee boggeeda ugu horreeya ee 4 kilobyte:53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00("SQLite format 3\0"), oo kaydisa cabbirka bogga xogta saxda ah (Bytes 16..17, sida caadiga ah4096) iyo guud ahaan cabbirka xogta ee boggaga (Bytes 28..31, big-endian 32-bit integer) isla gudaha madaxa isla. - Orod
PhotoRecleh[File Opt]->[x] sqlitekarti, ama si toos ah ugu sawir qaybtagrep -ab "SQLite format 3"si aad u heshid kaydka saxda ah ee kaydka saxda ah ee faylkaaga SQLite ee tirtiray oo aad ku soo saartodd:Marka la soo saaro, orod# 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.dbin dib loo dhiso bog kasta oo caleen B-geed ah.
Tip
**Sida loo xisaabiyo sax dd Cabbirka byte ee faylka SQLite3 ee aan la xidhin ee madaxiisa ***: Hal mar grep -ab "SQLite format 3" wuxuu ku siinayaa bilawga byte-ka OFFSET Xogtaada SQLite ee la tirtiray, akhri bytes 16..17 (uint16 big-endian cabbirka bogga, tusaale, 0x1000 = 4096 bytes) iyo bytes 28..31 (uint32 tirinta bogga weyn, tusaale, 25000 bogagga) isticmaalaya hexdump -C -s OFFSET -n 32. dhufashada Page Size x Page Count wuxuu ku siinayaa dhererka byte-ga saxda ah ee aad u gudubto dd (iflag=skip_bytes,count_bytes) marka faylku ku socdo saxanka.
- ** Loogu talagalay MySQL / MariaDB InnoDB (
.ibdfaylasha miiska)**: InnoDB kasta.ibdshaxdu waxay ka kooban tahay taxane16 KB(16,384byte) bogag ka koobanFIL_PAGE_INDEX(0x45BF) madaxa iyo miiska gaarka ahspace_id. Isticmaal Percona / TwinDBundrop-for-innodb(stream_parser+c_parser* Qalabka wax lagu sawiro/dev/nvme0n1p1dhammaan16 KBInnoDB index bogag oo saf kasta si toos ah ugu tuur faylasha TSV/SQL si dib loogu soo dejiyo. - ** Loogu talagalay Faylasha Heap PostgreSQL (
$PGDATA/base/<db_oid>/<relfilenode>***: PostgreSQL waxay u kaydisaa miis kasta si xidhiidhsan8 KB(8,192byte) bogag taallo oo ka koobanPageHeaderData(pd_lower,pd_upper,pd_special). Isticmaalpg_filedumpamapglazarus/pdusi loo sawiro gobollada diskooga aan la qoondayn8 KBbogag u dhigma qaabka tuple tiirka miiskaaga (HeapTupleHeaderData) oo dib u dhis safafka.
Wajiga 4: Kubernetes PVC, PV, iyo etcd Soo kabashada Degdegga ah ee Sawirka¶
Kubernetes (EKS, GKE, AKS, k3s, RKE2, kubeadm, OpenShift), si lama filaan ah u tirtiraya Dacwada Joogtada ah (PersistentVolumeClaim)kubectl delete pvc), StatefulSet, ama meel magac oo dhan ah (kubectl delete ns prod) waxa uu raacayaa qaab dhismeedka aad uga duwan kan Docker-ka taagan.
Muuqaalka A: PVC-ga ayaa muujinaya Terminating (The Finalizer Lifesaver)¶
Orod:
Haddii aySTATUS tiirka wuxuu leeyahay Terminating, Neef nasasho leh: Xogtaada wali lama tirtirin.
- Waa maxay sababtu? Kubernetes kasta oo PVC ah oo la sameeyay Tan iyo Kubernetes 1.9 si toos ah waxaa ku jira finalizers: [kubernetes.io/pvc-protection].
- Ilaa iyo inta uu Pod-ku wali kor u sii kacayo PVC-ga, kontoroolka Kubernetes wuxuu diidayaa inuu dhamaystiro tirtirka PVC-ga oo aan waligiis wicin darawalka CSI DeleteVolume RPC *.
- Tallaabada degdega ah: Ha tirtirin ama dib ha u bilaabin Pod-ka, oo ha dhigin ** HA balastar-dhameeyaha. Isla markiiba koobi ka bixi dhammaan xogta ku jirta Pod-ka socda mashiinka deegaankaaga ama baaldiga 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
Dhacdada B: PVC-ga waa la tirtiray, iyo kubectl get pv wuxuu muujinayaa Persistent Volume in Released gobolka (ReclaimPolicy: Retain)¶
Orod:
Haddii codkaaga Joogtada ah (pv-prod-postgres) ayaa weli ku qoran STATUS: Released (maxaa yeelay Class-ka Kaydinta waa la isticmaalay reclaimPolicy: Retain), ** 100 boqolkiiba xogtaadu waxay weli ku fadhiyaan iyada oo aan la taaban saxanka hoose**. Si kastaba ha ahaatee, Kubernetes wuu diiday inuu u ogolaado PVC cusub inuu ku xidho a Released PV sababtoo ah PV wali wuxuu ka kooban yahay a spec.claimRef isagoo tilmaamaya PVC-yadii hore ee la tirtiray UID.
Sida loo sameeyo a Released PV Available mar labaad 10 ilbiriqsi gudahood xogta eber
1. Wax ka beddel shayga joogtada ah oo tirtir spec.claimRef xannibid:
kubectl get pv mar labaad: xaaladdu isla markiiba way ka beddeshaa Released ku Available.
3. Dib u samee PersistentVolumeClaim (sheegid volumeName: <your-pv-name> iyo ku habboonaanta awoodda/kaydinta Magaca Class). Waxay isla markaaba ku xidhi doontaa PV-ga jira iyadoo dhammaan faylalka ay wada jiraan.
Dhacdada C: Soo celinta gobolka Kubernetes ee la tirtiray oo ka yimid a etcd sawir (etcdctl snapshot restore)¶
Ka warran hadduu qof ordo kubectl delete namespace prod ama helm uninstall oo tirtiray 200 oo muuqaal oo Kubernetes ah, siraha, ConfigMaps, iyo qeexitaannada PV ee is-maamul kubeadm, k3s, ama RKE2 diyaarada gacanta ku haysa?
- ** Hel kii ugu dambeeyay
etcdsawir-qaade *** (sida caadiga ah gudaha/var/lib/rancher/k3s/server/db/snapshots/,/var/lib/rancher/rke2/server/db/snapshots/, ama jadwalkaaga/var/backups/etcd/snapshot.db). - ** Xaqiiji daacadnimada sawirka ka hor intaadan taaban kooxda tooska ah ***:
- Jooji
kube-apiserveriyoetcdku dul duleelka dayaarada xakamaynta: - Daaran
kubeadm(boorayaasha taagan): dhaqaaq/etc/kubernetes/manifests/kube-apiserver.yamliyo/etc/kubernetes/manifests/etcd.yamlku meel gaar ah si/root/manifests_hold/sidaaskubeletu joojiya labada weel si nadiif ah, ka dibna dib u soo celi/var/lib/etcdku/var/lib/etcd.bak. - Daaran
k3s: Orodsudo systemctl stop k3siyosudo k3s server --cluster-reset --cluster-reset-restore-path=/path/to/snapshot. - ** Soo celi
etcdtusaha xogta daarankubeadm**: - Dhaqaaq
etcd.yamliyokube-apiserver.yamldib ugu noqo/etc/kubernetes/manifests/. 30 ilbiriqsi gudahood,kube-apiserverdib ugu xidhidhiyaha la soo celiyayetcddukaanka iyo meel kasta oo la tirtiro Magaca, Sirta, ConfigMap, iyo Shayga Joogtada ah ee Volume ayaa dib u soo baxaya.
Marxaladda 5: Adkeynta Docker iyo Kubernetes mugga lidka ku ah tirtiridda shilalka ah¶
Marka xogtaada wax-soo-saarka la soo celiyo, dhaqangeli afartan dhisme ee ilaalinta si hal qori oo CLI ah uusan waligiis mar dambe u tirtirin mugga nool:
- ** Beddel wax soo saar kasta Kubernetes
StorageClasskareclaimPolicy: DeletekureclaimPolicy: Retain**: Sida caadiga ah, fasalada Kaydinta daruuraha ee ku dhex dhisan (gp2,gp3,standard-rwo) ku haboonreclaimPolicy: Delete, taasoo la micno ah in PVC la tirtiro waxay burburisaa saxanka daruuriga ah. Samee aStorageClasslehreclaimPolicy: Retain(ama ku dheji PV-yada jirakubectl patch pv <pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}') sidaas darteed tirtirida PVC ama Namespace weligeed ma tirtirto mugga xannibaadda hoose. - Dari AWS EBS Recycle Bin/GCP Jadwalada Sawir-qaadista/Velero oo wata CSI Snapshots: Awood-siinta AWS EBS Recycle Bin waxay haynaysaa mugga EBS ee tirtiray 7 ilaa 30 maalmood xataa haddii darawalka CSI uu soo waco
DeleteVolume. - ** Waligaa ha isticmaalin
docker system prune --volumesqoraalada nadiifinta otomaatiga ah ama CI / CD runners ***: Haddii weelka xogta wax soo saarka si kooban u shil galo (Exited (1)) wakhtiga saxda ah shaqo cron ah ayaa socotadocker system prune -a --volumes -f, Docker waxay tixgalinaysaa muggiisa qarsoodiga ah "aan la isticmaalin" oo si joogto ah u tirtira. Xarig--volumeslaga bilaabo dhammaan qoraallada nadiifinta. - **Isticmaal xirmooyinka xidhidhiyaha cad
/srv/prod_data/postgres:/var/lib/postgresql/data) ama xog ururin dibadda ah oo la maareeyey oo loogu talagalay culaysyada shaqo ee wax-soo-saar dawladeed ***: Ka duwan/var/lib/docker/volumes/, marti geliso hagaha xidhxidhan ee dibadda/var/lib/docker/waa ** waligood lama taaban *** bydocker compose down -v,docker volume rm, amadocker system prune --volumes.
Lambarada degdega ah ee gobolka iyo borotokoolka wakaalada¶
Marka weel ama tirtiridda kaydinta Kubernetes ay saamayso hawlgallada caafimaad ee isbitaalka, diritaanka badbaadada dadweynaha, ama xogta shakhsiyeed ee nidaamsan, isla markiiba way kacdaa:
- Mareykanka iyo Kanada: garaac
911haddii kooxdu weel guuldarraysato ay curyaamiso la socodka bukaan-socodka, nidaamyada EHR, ama diritaanka degdegga ah. U soo sheeg kaabayaasha weelka xaasidnimada ah tirtirista ama shilalka internetka CISA (1-844-Say-CISA/cisa.gov/reportama Xarunta Amniga Internetka ee Kanada1-833-CYBER-88). - United Kingdom: Dial
999khataraha nolosha ama kaabayaasha NHS ee muhiimka ah. Sida hoos timaada UK GDPR, burburinta joogtada ah ama luminta helitaanka xogta shakhsiyeed iyada oo aan la helin kayd la soo kaban karo waxay u baahan tahay qiimaynta jebinta 72-saac ee ogeysiiska ICO (0303 123 1113). - Midowga Yurub: garaac
112dhammaan dalalka xubnaha ka ah Midowga Yurub. Hay'adaha hoos yimaada NIS2 Dardaaranka waa in ay digniin hore u gudbiyaan CSIRT-ga qaranka 24 saac gudahooda ka dib adeeg la'aan daran, iyo luminta xogta shakhsi ahaaneed ee joogtada ah ee kiciya ** GDPR Qodobka 33** warbixinta 72 saacadood gudahood. - ** Australia iyo New Zealand ***: garaac
000gudaha Australia ama111gudaha New Zealand; u soo sheeg dhacdooyinka kaabayaasha muhiimka ah ACSC (1300 CYBER1). - **India iyo Asia-Pacific ***: garaac
112gudaha Hindiya si wax looga qabto xaalad degdeg ah; u soo sheeg shilalka amniga daruuraha ama weelka CERT-In (incident@cert-in.org.in) gudaha daaqadda qasabka ah ee 6-saac ah.
Su'aalaha soo noqnoqda¶
sameeya docker compose down -v Tirtir xirmooyinka xirmooyinka martida loo yahay (./data:/var/lib/mysql) Mise Mugyada Docker ee la magacaabay iyo kuwa aan la garanayn?¶
`docker compose down -v` KALIYA tirtirtaa mugga la magacaabay ee lagu dhawaaqay `volumes:` qaybta `docker-compose.yml` iyo mugga qarsoon ee ku dheggan weelasha; waa marna tirtirtaa faylalka ku dhex jira fuudhka xidhidhiyaha (sida `- /opt/mysql_data:/var/lib/mysql` ama `- ./postgres_data:/var/lib/postgresql/data`). Haddii faylkaaga qoraalka ahi uu isticmaalo dariiqa martida loo yahay ee ka bilaabmaya `/` ama `./`, Ka hubi galkaas martigeliyaha hadda: feylashaadu weli boqolkiiba 100 waa ay saxsan yihiin.
Maxaa yeelay docker system prune --volumes tirtir mugga xog ururintayda markii aan joojiyay weelka 2 daqiiqo oo keliya si aan u cusbooneysiiyo doorsoomayaasha deegaanka?¶
Si taxadar leh u sug kala soocida `docker stop` iyo `docker rm`: haddii weel kaliya yahay `Stopped / Exited` (ka muuqda gudaha `docker ps -a`), `docker system prune --volumes` sameeyo maaha Tirtir muggiisa sababtoo ah weelka la joojiyay ayaa weli tixraacaya iyaga. Si kastaba ha ahaatee, haddii aad orday `docker rm
Ma soo ceshan karaa mugga Docker ee tirtiray gudaha Docker Desktop ee Mac (Apple Silicon / Intelama Windows (WSL2)¶
Haa, haddii aad isla markiiba ka baxdo Docker Desktop si mashiinka farsamada uu u joojiyo socodsiinta `fstrim` ka dhanka ah saxanka farsamada. On macOS, Docker wuxuu ku kaydiyaa dhammaan mugga Linux gudaha `-/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw`; on Windows WSL2, gudaha `%LocalAppData%\Docker\wsl\disk\docker_data.vhdx`. Nuqul ka samee `.raw` ama `.vhdx` isla markiiba u fayl geli SSD dibadeed, ku dheji akhri-kaliya Linux (adoo isticmaalaya `losetup -Pr` waayo `.raw` ama `qemu-nbd -r` waayo `.vhdx`), oo orod `ext4magic` ama `PhotoRec` lid ku ah farsamada casriga ah `ext4` qaybsanaan gudaha.
Maxaa dhacaya haddii aan ku tirtiro Kubernetes StatefulSet kubectl delete statefulset postgres? Taasi ma tirtirtay PVC-yadaydii sidoo kale?¶
Maya. Sida caadiga ah ee Kubernetes (haddii `persistentVolumeClaimRetentionPolicy.whenDeleted: Delete` waxaa si cad loogu habeeyey Kubernetes 1.27+), oo socda `kubectl delete statefulset` waxay tirtirtaa maamulaha StatefulSet iyo Pods-keeda, oo dhan ka tago `PersistentVolumeClaims` (`data-postgres-0`, `data-postgres-1`) iyo xogtooda hoose 100% waa sax. Kaliya dib u codso `StatefulSet` YAML oo leh magac isku mid ah iyo `volumeClaimTemplates`, iyo Pods-ka cusub ayaa si toos ah dib ugu dhejin doona kuwa jira `data-postgres-0` PVC-yada
Sideen u geli karaa faylasha gudaha Docker overlay2 hagaha marka weelku diido inuu bilaabo (CrashLoopBackOff / Exited (1))¶
Ha tirtirin weelka shil galay. Ilaa inta weelka la joojiyay uu weli ku jiro `docker ps -a`, lakabkeeda la qori karo iyo kor u qaadista mugga ayaa si buuxda ugu xidhan saxanka. Waxaad si toos ah uga koobi kartaa galalka weelka la joojiyay adiga oo isticmaalaya `docker cp
Ka warran haddii qof tirtiro Kubernetes Namespace (kubectl delete ns prod) iyo dhammaan PVC-yada waxay lahaayeen reclaimPolicy: Delete AWS EBS ama GCP?¶
Haddii darawalka CSI ee daruuraha (`ebs.csi.aws.com` ama `pd.csi.storage.gke.io`) horay loo fuliyay `DeleteVolume` sababtoo ah `reclaimPolicy` ahaa `Delete`, hubi sadexda shabaqyada badbaadada heerka daruuriga ah isla markiiba: (1) hubi ** AWS Dib-u-warshadeynta Bin ee EBS Volumes** ee AWS EC2 console (haddii xeerka sii hayntu uu firfircoonaa koontada/tagagga, mugga EBS ee la tirtiray wuxuu ku fadhiyaa Dib-u-warshadeynta Binka waxaana lagu soo celin karaa 1 guji); (2) ka eeg **AWS Backup/DLM/GCP Jadwalka Sawirka Sawirka** sawirka mugga ee ugu dambeeyay; iyo (3) hubi haddii xogtaadu ahayd mid sii daynaysay WAL/binlogs (`WAL-G`, `pgBackRest`, `Litestream`) baaldi S3/GCS.
Tilmaamaha la xidhiidha¶
- Saxanka server-ka 100% buuxa (0 bytes bilaash ah): xogta WAL log bloat, B-geed kharribmay, iyo soo kabashada eber
- Shift
rm-rfama `Shift+Delete' ee Linux, macOS, ama Windows: isla markiiba dib u soo kicida akhrinta kaliya iyo xardhitaanka - Mashiinka Virtual VMDK, VHDX, iyo qcow2 silsiladda sawir-qaadista musuqmaasuqa iyo samatabbixinta hypervisor
- Git shil ah ee furayaasha AWS, faylka
.env, ama furaha gaarka ah ee SSH ee dadweynaha GitHub repo - Xiisadda martigelinta shabakada, socdaalka, iyo soo celinta kaabta
- Kombiyuutarka kaydinta, 3-2-1 xeeladda, iyo soo kabashada musiibada
- Nambarada degdega ah wadan ahaan
Ilaha iyo hanuuninta rasmiga ah¶
- Dukumentiyada rasmiga ah ee Kubernetes
kubernetes.io/ Aasaaska Xisaabinta Dhaladka Cloud): Waxyaabaha Kaydinta ee Ilaalinta Isticmaalkakubernetes.io/pvc-protectionDhamaystirka), Soo Celinta Codad Joogta ah (Retainvs.Delete), iyo HawlgelintaetcdKooxaha Kubernetes (etcdctl snapshot restore) - Docker Inc.
docs.docker.com): * Ku maamul xogta gudaha Docker: Volumes, Bind Mounts,overlay2Dhismaha Darawalka Kaydinta, iyo Tixraaca Prune*. - Ururka Kernel Linux
kernel.org): * The/procNidaamka faylka (procfsFur Soo kabashada Faylka Sharaxaada iyada oo loo marayo/proc/<pid>/fd/) iyo Ext4 Journal Specification*. ext4magicDukumentiga Mashruuca (ext4magic.sourceforge.net): * Inode Forensic iyo Joornaalka Dib u soo kabashada Ganacsiga ee Ext3/Ext4 Filesystems*.- Machadka Heerarka iyo Tignoolajiyada Qaranka (
NIST(Mareykanka): Daabacaada Gaarka ah 800-190: Codsiga Hagaha Amniga Konteenarka & Soo Kabashada Dhacdada.