Mpịakọta Docker ma ọ bụ Kubernetes ehichapụrụ: na-azọpụta docker system prune --volumes, overlay2 Inodes, na etcd Ihe onyonyo¶
Nọmba mberede dị iche na mba. Ibe a na-eji 911, nọmba maka United States na Canada. Ọtụtụ mba ndị ọzọ na-eji 112, 999, ma ọ bụ nọmba ọzọ. Chọta nọmba maka obodo gị.
Na-agba ọsọ docker compose down -v, docker system prune -a --volumes, docker volume rm, ma ọ bụ kubectl delete pvc na taabụ ọnụ na-ezighi ezi na mmepụta bụ otu n'ime ụzọ kachasị ọsọ iji hichapụ ndụ PostgreSQL, MySQL, MariaDB, Redis, MongoDB, ma ọ bụ SQLite nchekwa data. N'adịghị ka igwe onyonyo igwe ojii nke na-akwaga na igwe eji emegharị ihe ụbọchị 7, onye ọkwọ ụgbọ ala mpaghara Docker (/var/lib/docker/volumes/<name>/_data) na Kubernetes local-path / hostPath Ndị na-enye onyinye na-ewepụta POSIX ọkọlọtọ ozugbo unlink() na rmdir() na-akpọ ozugbo megide sistemụ faịlụ ndị ọbịa Linux dị n'okpuru (ext4, XFS, ma ọ bụ Btrfs). Edemede ọ bụla na-eme na onye ọbịa Linux ahụ ka emechara iwu ahụ nwere ike idegharị ihe nchekwa nchekwa data ewepụtara na diski. Ọ bụrụ na diski ihe nkesa gị jupụtara na pasent 100 (0 bytes free) tupu mmadụ agbaa ọsọ docker system prune --volumes n'oké ụjọ, gbaa izu diski ihe nkesa 100% zuru, nchekwa data WAL log bloat, yana mgbake oghere efu; maka nhichapụ faịlụ Linux bare-metal na mpụga arịa, lee ihe mberede rm -rf ma ọ bụ Shift-Hichapụ na ext4, XFS, APFS, na NTFS: na-agụ naanị na-agụgharị na ihe osise inode na igwe mebere VMDK, VHDX, na qcow2 nrụrụ aka yinye nrụrụ aka na nnapụta hypervisor. Ọ bụrụ na ọpụpụ mmepụta a na-emetụta nlekọta onye ọrịa ụlọ ọgwụ, izipu ihe mberede, ma ọ bụ sistemu nchekwa nchekwa ọha, kpọọ nọmba mberede mpaghara gị (911 na United States na Canada, 112 gburugburu European Union, 999 na United Kingdom) ma ọ bụ lelee akwụkwọ ndekọ aha anyị nọmba mberede.
Mee nke a ugbu a¶
- ** agbala ọsọ
docker compose up -d,systemctl restart docker, ma ọ bụ megharịa Kubernetes pod ***: Megharịa akpa ahụ ma ọ bụ malitegharịa Docker daemon na-ede megabytes nke ọhụrụ.overlay2metadata, igbe JSON akpa, yana faịlụ nchekwa data efu emepụtara ọhụrụ (initdb) kpọmkwem n'elu kpọmkwemext4ma ọ bụXFSmgbochi ebe olu gị ehichapụrụ nọ ọdụ sekọnd ole na ole gara aga. - ** Lelee na 5 sekọnd ma ọ bụrụ na akpa usoro (
postgres,mysqld,redis-server,node,python) ka na-agba ọsọ na ebe nchekwa (ps auxnasudo lsof +L1***: Ọ bụrụ na mmadụ ehichapụ faịlụ n'ime olu agbakwunyere ma ọ bụ kechie olu na-amaghị aha mgbe akpa ahụ ka na-arụ ọrụ, kernel Linux na-edobe ** 100% nke faịlụ nchekwa data enweghị njikọ dị ndụ na diski *** ọ bụrụhaala na NJ usoro nnabata nke akpa ahụ.PID) na-ejide ihe nkọwa faịlụ mepere emepe (FD). Ị nwere ike iṅomi faịlụ ndị ahụ ozugbo na/proc/<PID>/fd/ma ọ bụ/proc/<PID>/root/na efu data ọnwụ tupu akpa akwụsị. - ** Ọ bụrụ na akwụsịlarị akpa ahụ wee ehichapụ olu ya (
docker compose down -vma ọ bụdocker system prune --volumes), freeze host disk dere ozugbo: Kwụsị Docker daemon (sudo systemctl stop docker.socket docker.service containerd) ya mere igbe ndabere na nlele ahụike kwụsị ide ndekọ n'ime/var/lib/docker, mgbe ahụ ma ọ bụ remount/var/lib/docker(ma ọ bụ mgbọrọgwụ/nkebi) naanị ọgụgụ (sudo mount -o remount,ro /) ma ọ bụ were foto olu igwe ojii ozugbo (AWS EBS Snapshot,GCP Persistent Disk Snapshot,DigitalOcean Volume Snapshot) tupu emetụ ihe ọ bụla aka. - ** Ọ bụrụ na ịnọ na Kubernetes (
kubectl delete pvcma ọ bụkubectl delete namespace), lelee Volume Persistent (PV)ReclaimPolicy(kubectl get pv) ozugbo ***: - Ọ bụrụ na
PVnwerepersistentVolumeReclaimPolicy: Retain, A naghị ehichapụ data gị **: nkePVnaanị kwagaraReleasedọnọdụ na diski igwe ojii gị (EBS,Azure Disk,Ceph RBD,NFS) bụ 100 percent emebibeghị. - Ọbụlagodi
kubectl delete pvca rapara naTerminating, Kubernetes ** Ndị ngwụcha (kubernetes.io/pvc-protection*** gbochie onye ọkwọ ụgbọ ala CSI ka ọ ghara ihichapụ nchekwa dị n'okpuru ma ọ bụrụhaala na Pod ọ bụla ka na-ezo aka na PVC. Ehichapụla Pod ahụ ruo mgbe i detuo data na Pọd na-agba ọsọ. - Foto nkebi ngọngọ dị n'okpuru (
dd/ddrescuen'elu SSH) gaa na diski mpụga ma ọ bụ olu igwe ojii dị iche tupu ịgba ọsọext4magic,extundelete, ma ọ bụPhotoRecỌ dịghị mgbe ị na-agba ndị na-ese faịlụ na-edepụta faịlụ mmepụta n'otu akụkụ diski nke ị na-agbake/var/lib/docker/volumes. - Maka steeti ụyọkọ Kubernetes mebiri emebi ma ọ bụ kpochapụrụ (na mberede)
kubectl delete crd/namespace), kwụsịkube-apiserverma weghachi ihe kacha ọhụrụ gịetcdfoto (etcdctl snapshot restore*: Ọ bụrụ na ụyọkọ steeti naetcdehichapụrụ mgbe oke nchekwa igwe ojii ka dị, na-eweghachietcdna-agbake niilePV,PVC,Secret, naConfigMapihe n'out oge.
Danger
** Ewepụla ya kubernetes.io/pvc-protection ma ọ bụ kubernetes.io/pv-protection finalizer na kubectl patch ... -p '{"metadata":{"finalizers":null}}' mgbe a na-agbanye PVC Terminating**: Onye ikpeazụ ahụ bụ naanị ihe na-edobe ọkwọ ụgbọ ala CSI igwe ojii gị (aws-ebs-csi-driver, pd.csi.storage.gke.io, Longhorn, Rook-Ceph) site na ịnye ngwaike DeleteVolume Oku API ibibi diski mmepụta gị. Mgbe PVC na-arapara n'ahụ Terminating, Pod ka na-agba ọsọ ma ka na-agbanye olu: agba ọsọ kubectl exec ma ọ bụ kubectl cp (ma ọ bụ pg_dump / mysqldump) ozugbo iji napụta 100 pasent nke nchekwa data gị tupu Pod akwụsị.
Osisi mkpebi: olu Docker ehichapụrụ, overlay2 oyi akwa, ma ọ bụ Kubernetes PVC triage¶
Jiri eserese ngosi a họrọ ụzọ mgbake efu kacha ọsọ ọsọ dabere na usoro akpa ahụ ka dị ndụ, ma diski mpaghara ma ọ bụ nchekwa CSI igwe ojii kwadoro olu ya, yana nke sistemụ faịlụ na-akwado. /var/lib/docker:
flowchart TD
Start["Data Mmepụta Na-efu Mgbe Docker ma ọ bụ Kubernetes Hichapụ Iwu"] --> WhichEnv{"Kedu Platform & Iwu kpalitere mfu ahụ?"}
WhichEnv -->|"Docker: Akpa ka na-agba ọsọ (faịlụ enweghị njikọ n'ime olu/akpa)"| ProcRescue["Napụta ndị na-akọwa faịlụ enweghị njikọ site na sudo lsof +L1 na /proc/PID/fd/N ma ọ bụ /proc/PID/root/"]
WhichEnv -->|"Docker: Akwụsịla akpa & Mpịakọta ehichapụ (dee ala -v / prune --mpịakọta)"| StopDocker["Gbaa ọsọ ọsọ: sudo systemctl kwụsị docker.socket docker akpa"]
WhichEnv -->|"Kubernetes: kubectl hichapụ pvc / pv / statefulset / namespace"| K8sCheck{"Pod ahụ ka na-agba ọsọ ma ọ bụ PVC ọ na-akwụsị?"}
K8sCheck -->|"Ee: Pod ka na-agba ọsọ (Finalizer na-egbochi CSI Hichapụ)"| K8sExec["Ehichapụla Pod -> Gbaa kubectl exec / pg_dump / tar n'elu stdout gaa na diski mpaghara ozugbo."]
K8sCheck -->|"Mba: Pod agaala -> Lelee kubectl nweta pv"| ReclaimCheck{"Kedu ihe bụ PV ReclaimPolicy?"}
ReclaimCheck -->|"Njide (Ọnọdụ PV = Ewepụtara)"| ClearClaimRef["100% Data adịchaghị -> Dezie PV ka Wepu spec.claimRef.uid -> Tinyegharịa na PVC ọhụrụ"]
ReclaimCheck -->|"Hichapụ (Cloud EBS / PD / Longhorn / Mpaghara-ụzọ)"| CloudOrLocal{"Olu CSI igwe ojii ma ọ bụ diski nnabata mpaghara?"}
CloudOrLocal -->|"Igwe ojii CSI (AWS EBS / GCP / Azure / Ceph)"| CloudSnap["Lelee Cloud Console Recycle Bin / Akpaaka EBS Snapshots / Ceph RBD ahịhịa (rbd ahịhịa ls)"]
CloudOrLocal -->|"Disk Node Mpaghara (ụzọ mpaghara / hostPath)"| StopDocker
StopDocker --> RemountRO["Ọgụgụ-naanị Remount Host Partition (mount-o remount,ro) ma ọ bụ Stream Block Image n'elu SSH"]
RemountRO --> HostFS{"Kedu ihe ndị nnabata faịlụ /var/lib/docker?"}
HostFS -->|"ex4"| Ext4Rec["Jiri debugfs / ext4magic Journal Inode Transaction Rollback (-a timestamp)"]
HostFS -->|"XFS/Btrfs"| CarveRec["Jiri Btrfs mgbọrọgwụ / xfs_irecover / mbinye aka omenala maka SQLite, Postgres Heap, ma ọ bụ InnoDB .ibd"]
Usoro 1: Otu Docker na Kubernetes si ehichapụ mpịakọta na diski¶
Tupu ịmee iwu mgbake ọ bụla, ghọta ebe data gị bi na Linux host yana ihe iwu ihichapụ metụrụ aka:
| Ụdị Nchekwa & Hichapụ Iwu | Ụzọ Filesystem Host na Linux Node | Ihe Iwu Hichapụ Mere n'ezie | Usoro mgbake ozugbo |
|---|---|---|---|
** Mpịakọta Docker akpọrọ (docker volume rm ma ọ bụ docker compose down -v)** |
/var/lib/docker/volumes/<vol_name>/_data |
Ekewapụrụ faịlụ ndị dị n'ime _data/ wee wepụ ndenye ndekọ na /var/lib/docker/volumes/metadata.db (boltdb). |
Kwụsị Docker ozugbo, bugharịa /var/lib/docker naanị ọgụgụ, wee nwetaghachi inodes enweghị njikọ site na ext4magic / debugfs ma ọ bụ ihe osise mbinye aka. |
** Mpịakọta Docker na-amaghị aha (docker run -v /var/lib/mysql + docker rm -v ma ọ bụ docker system prune --volumes)** |
/var/lib/docker/volumes/<64-char-hex-id>/_data |
docker system prune --volumes na-ehichapụ olu ọ bụla na-amaghị aha na aha ya bụ nke opekata mpe otu akpa dị ugbu a depụtara ya. |
Kwụsị Docker ozugbo; Ọ bụrụ na ị nwere ụkwụ ndị ọzọ kwụsịrị arịa ndị a na-ewepụghị mpịakọta ha, lelee nke fọdụrụ /var/lib/docker/volumes/*/_data nchekwa buru ụzọ tupu ya akpụ blọk anaghị ekenye ya. |
** Akpa Edere oyi akwa (docker rm <container> mgbe edere data na mpụga olu)** |
/var/lib/docker/overlay2/<layer-id>/diff/ |
Ekewapụrụ elu akpa ahụ diff/ ndekọ n'ime overlay2 ọkwọ ụgbọala nchekwa. |
Kwụsị Docker ozugbo wee nwetaghachi osisi ndekọ na-enweghị njikọ na ya ext4 akwụkwọ akụkọ ma ọ bụ XFS ihe mgbochi. |
* Desktọpụ Docker na MacOS ma ọ bụ Windows (docker system prune --volumes)** |
N'ime otu onyonyo diski igwe mebere: -/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw (macOS) ma ọ bụ %LocalAppData%\Docker\wsl\disk\docker_data.vhdx (Windows WSL2). |
E zigara ya unlink() n'ime Linux VM, ma ọ bụrụ discard/TRIM na-arụ ọrụ na Docker.raw / docker_data.vhdx, tụrụ obere oghere na faịlụ nnabata. |
Kwụsị Desktọpụ Docker n'ime sekọnd ise, detuo Docker.raw ma ọ bụ docker_data.vhdx gaa na mpụta mpụta, wee gbaa ọsọ ext4magic / PhotoRec megide ihe oyiyi diski mebere. |
** Kubernetes PVC nwere Delete Ntughari iwu na Ceph RBD (Rook-Ceph) ma ọ bụ Longhorn *** |
ọdọ mmiri Ceph OSD (rbd) ma ọ bụ /var/lib/longhorn/replicas/. |
Ọ bụrụ csi-rbdplugin nwere trash enyere (rbd trash), a na-ebuga ihe oyiyi RBD na ebe a na-ekpofu ahịhịa Ceph; Ma ọ bụghị ya, blọk enweghị maapụ. |
Gbaa ọsọ rbd trash ls --pool <pool> n'ime rook-ceph-tools pod ma weghachi ya rbd trash restore. |
Nkeji 2: Napụta faịlụ nchekwa data mepere emepe n'ime akpa na-agba ọsọ (/proc/<pid>/fd/)¶
Chere: ** akpa ahụ ka na-agba ọsọ ugbu a?**
Ugboro ugboro, onye injinia na-eme edemede mbugharị ngwa, ọrụ cron nchacha, ma ọ bụ akwụkwọ ntuziaka rm -rf /var/lib/postgresql/data/* ma ọ bụ rm /app/data/production.sqlite3 n'ime akpa na-agba ọsọ, ma ọ bụ hichapụ folda nnabata nnabata bind-mount /opt/app/data mgbe akpa ahụ n'onwe ya (postgres, mysqld, mariadbd, redis-server, mongod, gunicorn, node)** ka na-agba ọsọ**.
Na Linux, anaghị ehichapụ faịlụ na diski mgbe rm ma ọ bụ unlink() a na-akpọ. Ihe mgbochi diski ya na inode na-anọgide ** 100% ekenye ya ma nwee ike ịgụ ya ** ruo mgbe usoro ikpeazụ na-ejide nkọwa faịlụ mepere emepe (FD) na inode na-emechi ya ma ọ bụ pụọ.
Nzọụkwụ 1: Chọta onye ọbịa Process ID (PID) nke usoro akpa¶
Na ọnụ ụzọ Linux (ọ bụghị n'ime akpa), chọta onye ọbịa PID nke nchekwa data gị ma ọ bụ usoro ngwa:
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: kwuru 0, na aha faịlụ mechie na (deleted) . Faịlụ apụọla kpamkpam ls /var/lib/docker/volumes/..., ma ** ọ bụla otu byte (482 MB n'ime users.ibd, 89 MB n'ime production.sqlite3) ka dị ndụ n'ime /proc/<PID>/fd/<FD>** .
Kwụpụ 2: Detuo faịlụ nchekwa data enweghị njikọ ozugbo /proc/<PID>/fd/¶
Akwụsịla ma ọ bụ malitegharịa akpa ahụ. Mgbe usoro a ka na-aga, detuo nkọwa nkọwa faịlụ ozugbo na nchekwa nchekwa na onye ọbịa gị:
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
Kwụpụ 3: Ọbụna ka mma: Gbaa mkpofu ezi uche dị ndụ (pg_dump / mysqldump / .backup) tupu akpa ahụ emechi FD¶
Ọ bụrụ postgres ma ọ bụ mysqld ka na-agba ọsọ na faịlụ data ya na-emeghe na ebe nchekwa na /proc/<PID>/fd/, gbalịa na-ebu ụzọ mee mkpofu ezi uche dị ndụ n'elu oghere unix dị ugbu a ma ọ bụ njikọ TCP:
# 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 ngalaba faịlụ n'ofe usoro ndị ọrụ na-agbanwe agbanwe, yabụ pg_dump nwere ike daa n'elu tebụl na-enweghị nchekwa; ijikọ ajụjụ SQL dị ndụ yana iṅomi ọ bụla mepere emepe /proc/<pid>/fd/* n'akụkụ niile *** postgres PID backend nwa na-echekwa data ikpo tebụl kacha nwere ike.)*
Usoro 3: Iweghachi olu Docker ehichapụrụ ext4 ma ọ bụ XFS mgbe akpa ahụ kwụsịrị¶
Gịnị ma ọ bụrụ na ị gbara ọsọ docker compose down -v ma ọ bụ docker system prune --volumes, ya mere akpa ahụ ** akwụsịlarị ** na ihe niile /proc/<pid>/fd/ emechiela nkọwa nkọwa? Ugbu a ị nọ n'ọsọ megide diski ndabere na-ede na Linux host.
Kwụpụ 1: Wepu sistemụ faịlụ Linux n'ime sekọnd 10¶
- ** Kwụsị Docker, akpa, kubelet na cron ozugbo ** yabụ na ọ nweghị akpa, nyocha ahụike ma ọ bụ rotator log na-ede byte ọzọ
/var/lib/docker: - ** Lelee ngwaọrụ ngọngọ na sistemụ faịlụ jide
/var/lib/docker**: - ** Tinyegharịa nkebi naanị Read-nanị (ma ọ bụ bunye onyonyo nkebi nke sitere na SSH gaa na igwe ọzọ) ***:
- Ọ bụrụ
/var/lib/dockerdị na nkebi raara onwe ya nye ma ọ bụ olu LVM (dịka ọmụmaatụ/dev/nvme0n1p2ma ọ bụ/dev/mapper/vg0-docker), bugharịa ya naanị ngwa ngwa: - Ọ bụrụ
/var/lib/dockerdị na mgbọrọgwụ/nkebi (/), nwaa ịmanye mgbọrọgwụ nkebi ka ọ gụọ naanị site na iji kernel Magic SysRq trigger (echo u | sudo tee /proc/sysrq-trigger) ma ọ bụsudo mount -o remount,ro /. - ** Ọ bụrụ na ịnọ na VPS ígwé ojii (AWS EC2, GCP, DigitalOcean, Hetzner, Linode) ***: gaa na igwe njikwa igwe ojii gị ozugbo wee pịa ** Mepụta foto ** na olu ngọngọ nkesa (ma ọ bụ na-ebugharị ngwaọrụ mgbochi raw n'elu SSH gaa na nkesa nke abụọ:
sudo dd if=/dev/nvme0n1p1 bs=4M status=progress | gzip -1 | ssh user@backup-server "cat > /mnt/storage/docker_host_raw.img.gz").
Kwụpụ 2: Lelee ma data gị ka nọ ọdụ na olu ọzọ akwachabeghị ma ọ bụ overlay2 oyi akwa¶
Tupu ịkpụ ngọngọ diski a na-ekenyeghị, chọpụta na echekwaghị nchekwa data gị n'ezie n'ugwu agbụ ma ọ bụ olu aha ya dị iche nke dịgidere:
# 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, naanị iji chọpụta find /var/lib/docker na docker-compose.yml kere n'ezie projectname_app_db_data (nke ka bụ 100 percent emebibeghị na diski) mgbe app_db_data bụ mpịakọta ochie ejighi ya kemgbe ọnwa isii gara aga.
Kwụpụ 3: Na-eweghachi akwụkwọ ndekọ aha Docker enweghị njikọ ext4 iji ext4 Akwụkwọ akụkọ (ext4magic na debugfs)¶
Mgbe docker volume rm na-ehichapụ /var/lib/docker/volumes/<vol_name>/_data na a ext4 sistemụ faịlụ, ext4 na-ewepụ ihe nrịbama mgbochi kpọmkwem (i_block / oke mgbọrọgwụ osisi) na tebụl inode dị ndụ. Agbanyeghị, ext4 akwụkwọ akụkọ (inode <8>, na-emekarị 128 MB ka 1024 MB mgbanaka mgbanaka okirikiri) ka na-ejide akwụkwọ akụkọ ihe mere eme nke tebụl inode na akwụkwọ ndekọ aha ya ozugbo. docker compose down -v e gburu.
+-------------------------------------------------------------------------+
| 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. |
+-------------------------------------------------------------------------+
Gbaa ọsọ ext4magic megidere nkebi naanị ọgụgụ gị (ma ọ bụ nke .img oyiri foto na sava nke abụọ), na-akọwapụta stampụ oge (-a) si **5 nkeji tupu *** ịgba ọsọ docker compose down -v ma ọ bụ 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: Na-agụ foto akwụkwọ akụkọ ị chekwaa na RAM ozugbo ịkwụsị Docker.
- -f var/lib/docker/volumes: Na-echedo osisi ndekọ ndekọ aha Docker (mara: hapụ onye isi / n'ime ext4magic ụzọ ikwu).
- -a $(date -d "-15 minutes" +%s): Na-agwa ext4magic iji wughachi osisi ndekọ aha site na iji inode mbipụta dị irè nkeji iri na ise gara aga (n'ihu tupu ihichapụ mberede).
- -r: Na-enwetaghachi akwụkwọ ndekọ aha zuru oke ebe edegharịghị ihe mgbochi; ọ bụrụ -r na-atụfu faịlụ ndị edegharịrị n'akụkụ ụfọdụ, jiri dochie ngafe nke abụọ -r ya na -m (ụkpụrụ anwansi + ụdị ngwakọ akwụkwọ akụkọ).
Kwụpụ 4: Ịkpụpụta SQLite raw, PostgreSQL, ma ọ bụ MySQL InnoDB faịlụ mgbe akwụkwọ akụkọ ahụ kechie (XFS ma ọ bụ ext4)¶
Warning
** Gịnị kpatara ya XFS anaghị akwado ext4magic ma na-achọ iwepụ naanị ọgụgụ ngwa ngwa ***: N'adịghị ka ext4, nke na-ede akwụkwọ inode zuru ezu 256-byte n'ime akwụkwọ akụkọ ya, XFS na-edekọ ebumnuche metadata deltas ma na-eji ike na-eji osisi inode B-osisi emebere eme ihe (agi). Ọ bụrụ /var/lib/docker anọdụ na an XFS Nkebi (ndapụta na RHEL, Rocky Linux, AlmaLinux, na Amazon Linux), na-ebuli elu. /var/lib/docker ma ọ bụ remounting / naanị ịgụ-naanị n'ime sekọnd bụ otu nzọụkwụ kacha mkpa tupu akpụ akpụ.
Ọ bụrụ na onye ọbịa na-eji XFS ma ọ bụrụ na ext4 akwụkwọ akụkọ etinyelarị n'elu ihe nrịbama inode, jiri mbinye aka na ihe akpụrụ akpụ megide onyonyo diski raw (docker_host_raw.img):
- ** Maka ọdụ data SQLite3 (
.sqlite,.db- ọmụmaatụ, Vaultwarden, Nextcloud, Onye enyemaka ụlọ, Gitea, Grafana) ***: Ebe nchekwa data SQLite3 ọ bụla na-amalite site na nkụnye eji isi mee 16-byte ASCII na-enweghị mgbagha na byte 0 nke ibe 4 kilobyte mbụ ya:53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00("SQLite format 3\0"), ma na-echekwa nha ibe nchekwa data kpọmkwem (Bytes 16..17, na-emekarị4096) na mkpokọta nchekwa data dị na ibe (Bytes 28..31, big-endian 32-bit integer) kpọmkwem n'ime otu nkụnye eji isi mee. - Gbaa ọsọ
PhotoRecya na[File Opt]->[x] sqliteagbanyere, ma ọ bụ jiri nyochaa nkebi ahụ ozugbogrep -ab "SQLite format 3"ka ịchọta ihe nkwụghachi nke byte nke faịlụ SQLite gị ehichapụrụ wee wepụ ya na yadd:Ozugbo ewepụtara ya, gbaa ọsọ# 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.dbiji wughachi ibe akwukwo osisi B ọ bụla na-emebibeghị.
Tip
** Otu esi agbakọ nke ọma dd Ogo byte nke faịlụ SQLite3 enweghị njikọ site na nkụnye eji isi mee ya **: Otu oge grep -ab "SQLite format 3" na-enye gị nkwụsị byte mmalite OFFSET nke nchekwa data SQLite ehichapụ, gụọ bytes 16..17 (uint16 nnukwu-endian nha ibe, ọmụmaatụ, 0x1000 = 4096 bytes) na bytes 28..31 (uint32 nnukwu-endian ọnụ ọgụgụ peeji, dịka, 25000 ibe) eji hexdump -C -s OFFSET -n 32. Ịba ụba Page Size x Page Count na-enye gị kpọmkwem ogologo byte ka ị gafere dd (iflag=skip_bytes,count_bytes) mgbe faịlụ na-aga n'ihu na diski.
- ** Maka MySQL / MariaDB InnoDB (
.ibdtebụl faịlụ)**: InnoDB ọ bụla.ibdtebụl mejupụtara usoro16 KB(16,384byte) ibe nwere iheFIL_PAGE_INDEX(0x45BF) nkụnye eji isi mee na tebụl pụrụ ichespace_id. Jiri Percona / TwinDBundrop-for-innodb(stream_parser+c_parser* ngwá ọrụ iji nyochaa/dev/nvme0n1p1maka mmadụ niile16 KBInnoDB index peeji ma tụfuo ahịrị ọ bụla ozugbo na faịlụ TSV/SQL maka mbubata. - ** Maka faịlụ mkpokoro PostgreSQL (
$PGDATA/base/<db_oid>/<relfilenode>***: PostgreSQL na-echekwa tebụl ọ bụla ka ọ na-aga n'ihu8 KB(8,192byte) ibe akwụkwọ nwerePageHeaderData(pd_lower,pd_upper,pd_special). Jiripg_filedumpma ọ bụpglazarus/pduinyocha mpaghara diski ekenyeghị maka8 KBibe dakọtara na kọlụm tebụl gị tuple okirikiri nhọrọ ukwuu (HeapTupleHeaderData) ma rụgharịa ahịrị ndị ahụ.
Usoro 4: Kubernetes PVC, PV, na etcd Foto mgbake mberede¶
Na Kubernetes (EKS, GKE, AKS, k3s, RKE2, kubeadm, OpenShift), na mberede ihichapụ PersistentVolumeClaim (kubectl delete pvc), a StatefulSet, ma ọ bụ dum Namespace (kubectl delete ns prod) na-agbaso ụkpụrụ ụlọ dị iche karịa Docker kwụ ọtọ.
Ihe atụ A: Ihe ngosi PVC Terminating (The Finalizer Lifesaver)¶
Gbaa ọsọ:
Ọ bụrụ naSTATUS kọlụm kwuru Terminating, kukuo ume: E ehichapụbeghị data gị.
- Gịnị kpatara? Kubernetes PVC ọ bụla emepụtara ebe ọ bụ na Kubernetes 1.9 gụnyere na-akpaghị aka finalizers: [kubernetes.io/pvc-protection].
- Ọ bụrụhaala na Pod ka na-arịgo na PVC, onye na-ahụ maka Kubernetes jụrụ imecha nhichapụ PVC yana ** akpọghị onye ọkwọ ụgbọ ala CSI. DeleteVolume RPC ***.
- ** Ihe omume ozugbo ***: Emela ** ehichapụ ma ọ bụ malitegharịa Pod ahụ, wee mee ** BỤGHỊ *** kpachie onye ikpeazụ. Detuo ozugbo data niile sitere na Pod na-agba ọsọ na igwe mpaghara ma ọ bụ bọket 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
Ihe atụ B: E ehichapụrụ PVC ahụ, yana kubectl get pv na-egosi PersistentVolume in Released steeti (ReclaimPolicy: Retain)¶
Gbaa ọsọ:
Ọ bụrụ na olu gị na-adịgide adịgide (pv-prod-postgres) ka edepụtara ya na STATUS: Released (n'ihi na ejiri klaasị nchekwa ya reclaimPolicy: Retain), ** 100 pasent nke data gị ka na-anọdụ ala na-emetụghị aka na diski dị n'okpuru ***. Agbanyeghị, Kubernetes jụrụ ikwe ka PVC ọhụrụ jikọta na a Released PV n'ihi na PV ka nwere a spec.claimRef na-atụ aka na PVC ochie ehichapụ UID.
Otu esi eme a Released PV Available ọzọ na 10 sekọnd na efu data ọnwụ:
1. Dezie ihe PersistentVolume wee hichapụ ya spec.claimRef ngọngọ:
kubectl get pv ọzọ: ọnọdụ na-agbanwe ozugbo site na Released na Available .
3. Megharịa gị PersistentVolumeClaim (na-akọwapụta volumeName: <your-pv-name> na dakọtara ike/nchekwa ClassAha). Ọ ga-ejikọta na PV dị ugbu a na faịlụ niile adịghị.
Ọnọdụ C: Iweghachi steeti ụyọkọ Kubernetes kpochapụrụ site na otu etcd foto (etcdctl snapshot restore)¶
Ọ bụrụkwanụ na mmadụ agbaa ọsọ kubectl delete namespace prod ma ọ bụ helm uninstall wee kpochapụ ihe ngosi 200 Kubernetes, Nzuzo, ConfigMaps, na nkọwa PV na njikwa onwe ya. kubeadm, k3s, ma ọ bụ RKE2 ụgbọ elu akara?
- ** Chọpụta ihe kachasị ọhụrụ gị
etcdfoto** (site na ndabara na/var/lib/rancher/k3s/server/db/snapshots/,/var/lib/rancher/rke2/server/db/snapshots/, ma ọ bụ ahaziri gị/var/backups/etcd/snapshot.db). - ** Nyochaa iguzosi ike n'ezi ihe onyonyo tupu ị metụ ụyọkọ dị ndụ**:
- ** Kwụsị
kube-apiservernaetcdna ọnụ(s) ụgbọ elu njikwa ***: - Na
kubeadm(mkpụrụ osisi static): Bugharịa/etc/kubernetes/manifests/kube-apiserver.yamlna/etc/kubernetes/manifests/etcd.yamlnwa oge ka/root/manifests_hold/sokubeletna-akwụsị akpa abụọ ahụ nke ọma, wee kwadoo ya/var/lib/etcdka/var/lib/etcd.bak. - Na
k3s: Gbaa ọsọsudo systemctl stop k3snasudo k3s server --cluster-reset --cluster-reset-restore-path=/path/to/snapshot. - ** Weghachite
etcdndekọ data nakubeadm**: - Bugharịa
etcd.yamlnakube-apiserver.yamllaghachi n'ime/etc/kubernetes/manifests/. N'ime sekọnd 30,kube-apiserverjikọọ ọzọ na nke eweghachirietcdụlọ ahịa na oghere aha, Nzuzo, ConfigMap, na ihe na-adịgide adịgide ehichapụrụ ga-apụta.
Usoro 5: Docker na-agbasi ike na mpịakọta Kubernetes megide ihichapụ mberede¶
Ozugbo eweghachiri nchekwa data mmepụta gị, mejuputa ụzọ nchekwa ụlọ anọ ndị a ka otu CLI typo enweghị ike ihichapụ olu dị ndụ ọzọ:
- ** Gbanwee Kubernetes mmepụta ọ bụla
StorageClasssireclaimPolicy: DeletekareclaimPolicy: Retain**: Site na ndabara, klaasị nchekwa igwe ejiri arụnyere (gp2,gp3,standard-rwo) ndabara kareclaimPolicy: Delete, nke pụtara ihichapụ PVC na-emebi diski igwe ojii. Mepụta aStorageClassya nareclaimPolicy: Retain(ma ọ bụ mechie PV dị ugbu a nakubectl patch pv <pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}') ya mere, ihichapụ PVC ma ọ bụ Namespace anaghị ehichapụ olu ngọngọ dị n'okpuru. - ** Kwado AWS EBS Recycle Bin / GCP Snapshot Schedules / Velero na CSI Snapshots ***: Ịkwado AWS EBS Recycle Bin na-ejigide olu EBS ọ bụla ehichapụrụ maka ụbọchị 7 ruo 30 ọbụlagodi ma onye ọkwọ ụgbọ ala CSI na-akpọ.
DeleteVolume. - ** Ejila ya
docker system prune --volumesna edemede nhicha akpaaka ma ọ bụ ndị na-agba ọsọ CI / CD ***: Ọ bụrụ na igbe nchekwa data mmepụta daa obere oge (Exited (1)) n'otu oge ahụ, ọrụ cron na-arụ ọrụdocker system prune -a --volumes -f, Docker na-ewere mpịakọta ya na-amaghị aha "ejighi ya" wee kpochapụ ha kpamkpam. Mwepu--volumessite na edemede mkpocha niile. - **Jiri ngwunye ejikọtara ndị ọbịa doro anya (
/srv/prod_data/postgres:/var/lib/postgresql/data) ma ọ bụ ọdụ data ejisiri na mpụga maka oke ọrụ nrụpụta steeti *: N'adịghị ka/var/lib/docker/volumes/, nnabata akwụkwọ ndekọ aha na-ekekọta n'èzí/var/lib/docker/bụ ** emetụghị sitedocker compose down -v,docker volume rm, ma ọ bụdocker system prune --volumes.
Nọmba mberede mpaghara na ụkpụrụ ụlọ ọrụ¶
Mgbe mkpochapụ akpa ma ọ bụ Kubernetes na-emetụta ọrụ ụlọ ọgwụ, izipu nchekwa ọha, ma ọ bụ data nkeonwe ahaziri, na-abawanye ozugbo:
- United States na Canada : Kpọọ
911ma ọ bụrụ na ụyọkọ akpa ọdịda kwụsịrị nleba anya onye ọrịa, sistemu EHR, ma ọ bụ izipu ihe mberede. Kpesa ozi ọjọọ ihicha akụrụngwa ma ọ bụ ihe omume cyber na ** CISA (1-844-Say-CISA/cisa.gov/reportma ọ bụ ** Canada Center for Cyber Security (1-833-CYBER-88). - **United Kingdom ***: Ịkpọ oku
999maka iyi egwu ndụ ma ọ bụ akụrụngwa NHS dị oke egwu. N'okpuru UK GDPR, mbibi na-adịgide adịgide ma ọ bụ mfu nke nnweta data nkeonwe na-enweghị nkwado ndabere na mpaghara na-eweghachite chọrọ nyocha ọkwa nbibi nke awa 72 na ICO (0303 123 1113). - ** European Union ***: Ịkpọ oku
112gafee mba ndị otu EU niile. Ụlọ ọrụ dị n'okpuru **NIS2 Ntuziaka *** ga-edozi ịdọ aka ná ntị mbụ na CSIRT obodo ha n'ime awa 24 nke nkwụsị ọrụ siri ike, yana ọnwụ data nkeonwe na-adịgide adịgide na-akpalite ** GDPR Nkeji edemede 33 *** mkpesa n'ime awa 72. - **Australia na New Zealand ***: Ịkpọ oku
000na Australia ma ọ bụ111na New Zealand; kọọ akụkọ ihe gbasara akụrụngwa dị egwu na ACSC (1300 CYBER1). - **India na Asia-Pacific : Ịkpọ oku
112na India maka nzaghachi mberede; kọọ ihe mere nchekwa igwe ojii ma ọ bụ akpa na ** CERT-In (incident@cert-in.org.inn'ime mpio awa 6 amanyere iwu.
Ajụjụ a na-ajụkarị¶
Ọ na-eme docker compose down -v hichapụ ihe ejikọtara ọnụ (./data:/var/lib/mysql) ma ọ bụ naanị mpịakọta Docker aha na amaghị aha?¶
`docker compose down -v` Naanị na-ehichapụ mpịakọta akpọpụtara na ya `volumes:` ngalaba nke `docker-compose.yml` na mpịakọta na-amaghị aha jikọtara na arịa; ya ọ dịghị mgbe na-ehichapụ faịlụ n'ime ebe a na-ekekọta onye ọbịa (dịka `- /opt/mysql_data:/var/lib/mysql` ma ọ bụ `- ./postgres_data:/var/lib/postgresql/data`). Ọ bụrụ na idepụta faịlụ gị jiri ụzọ nnabata malite na `/` ma ọ bụ `./`, Lelee folda ahụ na onye ọbịa ugbu a: faịlụ gị ka dị 100 percent.
Gịnị mere docker system prune --volumes hichapụ olu nchekwa data m mgbe naanị m kwụsịrị akpa ahụ maka nkeji 2 iji melite mgbanwe gburugburu ebe obibi?¶
Chere nke ọma maka ọdịiche dị n'etiti `docker stop` na `docker rm`: ọ bụrụ na akpa bụ naanị `Stopped / Exited` (dị na `docker ps -a`), `docker system prune --volumes` eme ọ bụghị hichapụ mpịakọta ya n'ihi na akpa ahụ kwụsịrị ka na-ezo aka na ha. Agbanyeghị, ọ bụrụ na ị gbara ọsọ `docker rm
Enwere m ike iweghachi olu Docker ehichapụ n'ime Desktọpụ Docker na Mac (Apple Silicon / Intelma ọ bụ Windows (WSL2)?¶
Ee, ọ bụrụ na ị kwụsịrị Docker Desktop ozugbo ka igwe mebere akwụsị ịgba ọsọ `fstrim` megide mebere diski. Na macOS, Docker na-echekwa mpịakọta Linux niile n'ime `-/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw`; na Windows WSL2, n'ime `%LocalAppData%\Docker\wsl\disk\docker_data.vhdx`. Detuo ya `.raw` ma ọ bụ `.vhdx` faịlụ na SSD mpụga ozugbo, tinye ya na-agụ naanị na Linux (iji `losetup -Pr` maka `.raw` ma ọ bụ `qemu-nbd -r` maka `.vhdx`), na-agba ọsọ `ext4magic` ma ọ bụ `PhotoRec` megide mebere `ext4` nkebi n'ime.
Gịnị ma ọ bụrụ na m ji ehichapụ Kubernetes StatefulSet kubectl delete statefulset postgres? Nke ahụ ehichapụkwara PVC m?¶
Mba. Site na ndabara na Kubernetes (belụsọ `persistentVolumeClaimRetentionPolicy.whenDeleted: Delete` ahaziri nke ọma na Kubernetes 1.27+), na-agba ọsọ `kubectl delete statefulset` na-ehichapụ ihe njikwa StatefulSet na Pods ya, na-ahapụ ihe niile `PersistentVolumeClaims` (`data-postgres-0`, `data-postgres-1`) na data ha dị n'okpuru 100 emebibeghị. Naanị tinyegharịa nke gị `StatefulSet` YAML gosipụtara na otu aha na `volumeClaimTemplates`, na Pọd ọhụrụ ahụ ga-ejikọ ọzọ na nke dị adị ozugbo `data-postgres-0` PVC.
Kedu ka m ga-esi nweta faịlụ n'ime Docker overlay2 ndekọ mgbe akpa jụrụ ibido (CrashLoopBackOff / Exited (1))?¶
Ehichapụla akpa ahụ dara ada. Ọ bụrụhaala na akpa kwụsịrị ka dị n'ime ya `docker ps -a`, oyi akwa nke a na-ede ede na oke olu na-adị kpamkpam na diski. Ị nwere ike idetu faịlụ ozugbo site na akpa ahụ kwụsịrị site na iji `docker cp
Kedu ihe ma ọ bụrụ na mmadụ ehichapụ Kubernetes Namespace (kubectl delete ns prod) na PVC niile nwere reclaimPolicy: Delete na AWS EBS ma ọ bụ GCP?¶
Ọ bụrụ na igwe ojii CSI ọkwọ ụgbọ ala (`ebs.csi.aws.com` ma ọ bụ `pd.csi.storage.gke.io`) egbuolarị `DeleteVolume` n'ihi na `reclaimPolicy` bụ `Delete`, lelee ụgbụ nchekwa nchekwa igwe ojii atọ ozugbo: (1) lelee ** AWS Recycle Bin for EBS Volumes ** na njikwa AWS EC2 (ọ bụrụ na iwu njide na-arụ ọrụ na akaụntụ / mkpado, olu EBS ehichapụ na-anọdụ na Recycle Bin na enwere ike iweghachi ya na 1 pịa); (2) lelee ** AWS ndabere / DLM / GCP nhazi oge foto ** maka foto olu akpaghị aka kacha ọhụrụ; na (3) lelee ma nchekwa data gị na-enuba WAL/binlogs (`WAL-G`, `pgBackRest`, `Litestream`) gaa na bọket S3/GCS.
Ntuziaka emetụtara¶
- Ihe nkesa diski 100% zuru (0 bytes efu): nchekwa data WAL log bloat, osisi B mebiri emebi, yana mgbake oghere efu.
- Mberede `rm-rf' ma ọ bụ 'Shift+ Delete' na Linux, macOS, ma ọ bụ Windows: naanị ihe na-agụ naanị na-ebughachi na ihe osise inode
- Igwe mebere VMDK, VHDX, na qcow2 nrụrụ aka yinye ihe onyonyo na nnapụta hypervisor
- Git ihe mberede mere nke igodo AWS, faịlụ
.env, ma ọ bụ igodo SSH nkeonwe maka GitHub repo ọha. - Ọgba aghara nnabata webụ, mbugharị, na mweghachi ndabere
- Ndokwa kọmputa, atụmatụ 3-2-1, na mgbake ọdachi
- Nọmba mberede site na obodo
Isi mmalite na nduzi ọchịchị¶
- Akwụkwọ ikike Kubernetes (
kubernetes.io/ Cloud Native Computing Foundation): * Ihe Nchekwa na Nchekwa ojiji (kubernetes.io/pvc-protectionNdị mmecha), na-eweghachite olu na-adịgide adịgide (Retainvs.Delete), na arụ ọrụetcdụyọkọ maka Kubernetes (etcdctl snapshot restore)* - Ụlọ ọrụ Docker Inc.
docs.docker.com): * Jikwaa data na Docker: Mpịakọta, Kechie Ugwu,overlay2Ihe owuwu onye na-anya ụgbọ ala, yana ntụaka prune*. - Òtù Linux Kernel Organisation
kernel.org): * Nke/procSistemụ faịlụ (procfsMepee File Descriptor Iweghachite site na/proc/<pid>/fd/) na Ext4 akwụkwọ nkọwa *. ext4magicAkwụkwọ oru ngo (ext4magic.sourceforge.net): * Forensic Inode na Journal azụmahịa Iweghachite na Ext3/Ext4 Filesystem*.- National Institute of Standards and Technology (
NIST) (United States): * Mbipụta Pụrụ Iche 800-190: Ntuziaka Nchekwa Ngwa & Iweghachite Mberede *.