Volime ya kisalu ya Docker to ya Kubernetes me katuka: Kugulusa docker system prune --volumes, overlay2 Ba inode, mpi etcd Bafoto¶
Banimero ya urgence ke swaswanaka na insi. Lutiti yai ke sadilaka 911, nimero ya États-Unis mpi ya Canada. Bansi mingi yankaka kesadilaka 112, 999, to ntalu yankaka. Sosa nimero ya insi na beno.
Kutambula docker compose down -v, docker system prune -a --volumes, docker volume rm, to kubectl delete pvc na zulu ya tab ya terminal ya mbi na kisalu ya kusala kele mosi na kati ya mitindu ya nswalu ya kufwa volime ya bansangu ya PostgreSQL, MySQL, MariaDB, Redis, MongoDB, to SQLite ya ke zinga. Na kuswaswana ti bafoto ya masini virtuel ya matuti yina kekwendaka na kisika ya bo ketulaka bima ya ntama ya bilumbu 7, pilote ya volime ya Docker (/var/lib/docker/volumes/<name>/_data) mpi Kubernete local-path / hostPath bantu yina ke pesaka bima ke basisaka mbala mosi POSIX ya bo me yidika mbote . unlink() mpi rmdir() ke binga mbala mosi na ntwala ya ngidika ya bafishe ya Linux yina kele na nsi (ext4, XFS, to Btrfs). Konso kusonika yina kesalamaka na host yina ya Linux na nima ya kumanisa ntuma lenda sonika na zulu ya ba bloque ya base de données yina bo mekatulaka na diske. Kana diske ya serveur na nge me fuluka tii na 100 na kati ya nkama (0 bytes free) na ntwala nde muntu mosi kubaka ntinu . docker system prune --volumes na boma, yula disque ya serveur me fuluka 100%, kufuluka ya WAL ya base de données, mpi kuvutula kisika ya kukonda kisika; sambu na kufwa bafishe ya Linux ya bibende ya mpamba na nganda ya ba conteneur, tala . rm -rf ya mpamba-mpamba to Shift-Supprimer na ext4, XFS, APFS, mpi NTFS: kutanga kaka na zulu mpi kuzenga inode . mpi masini ya kieleka VMDK, VHDX, mpi qcow2 ke bakaka bifwanisu ya kubeba mpi ya kugulusa hyperviseur. Kana kukatuka ya kisalu yai kele ti bupusi na mutindu bo ke sansaka bambefo na lupitalu, na kutinda bantu na kintulumukina, to na mutindu bo ke taninaka bantu yonso, binga nimero ya urgence ya bwala na beno (911 na États-Unis mpi na Canada, . 112 na Union européenne ya mvimba, . 999 na Royaume-Uni) to tala mukanda na beto ya . nimero ya urgence.
Sala yo sesepi¶
- KUTINA VE
docker compose up -d,systemctl restart docker, to kuvutula pod ya Kubernetes: Kusala dyaka kisika ya kubumba bima to kuyantika dyaka démon ya Docker kesonikaka ba megabyte ya mpa .overlay2metadata, ba nsangu ya JSON ya conteneur, mpi ba fichier ya base de données ya mpamba yina bo me katuka kuyantika (initdb) mbala mosi na zulu ya sikisiki .ext4toXFSbloque kisika volime na nge ya bo me katulaka vandaka basegonde me luta. - Tala na basegonde 5 kana kisalu ya kontenere (
postgres,mysqld,redis-server,node,python) kele kaka na kisalu na mabanza (ps auxmpisudo lsof +L1): Kana muntu mosi me katula bafishe na kati ya volime mosi ya bo me tula to me katula lien ya volime mosi ya me zabana ve ntangu conteneur ke sala kaka, kernel ya Linux ke taninaka 100 na kati ya nkama ya bafishe ya base de données yina me konda lien na luzingu na diske kana ID ya Processus ya host ya conteneur (PID) ke simbaka ntendula ya fichier ya kukangula ( ).FD). Nge lenda sala kopi ya bafishe yina mbala mosi na ./proc/<PID>/fd/to/proc/<PID>/root/na zero ya kuvidisa bansangu na ntwala nde kontenere kutelama. - Kana kontenere me kangama dezia mpi bo me katula volime (
docker compose down -vtodocker system prune --volumes), kanga disque d’hôte ke sonika mbala mosi: Kangisa démon Docker (sudo systemctl stop docker.socket docker.service containerd) yo yina ba conteneur ya nima mpi ba check ya mavimpi ke yambulaka kusonika ba nsangu na kati ./var/lib/docker, na nima tula diaka/var/lib/docker(to misisa/kukabula) kutanga kaka (sudo mount -o remount,ro /) to baka mbala mosi foto ya volime ya matuti ya nivo ya bloque (AWS EBS Snapshot,GCP Persistent Disk Snapshot,DigitalOcean Volume Snapshot) na ntwala ya kusimba kima mosi. - Kana nge kele na Kubernetes (
kubectl delete pvctokubectl delete namespace), tala Volime ya Kulanda ( ).PV)ReclaimPolicy(kubectl get pv) mbala mosi: - Kana
PVvandaka tipersistentVolumeReclaimPolicy: Retain, bansangu na nge me katuka ve: yaPVbo me nata kaka naReleasedstatut mpi disque dur na nge (EBS,Azure Disk,Ceph RBD,NFS) kele 100 na kati ya nkama ya kukonda kubeba. - Ata kana
kubectl delete pvcme kangama naTerminating, Kubernetes Bantu ya ke manisaka (kubernetes.io/pvc-protection) kanga nzila na pilote ya CSI na kufwa kisika ya kubumba bima yina kele na nsi ntangu yonso yina konso Pod ke tubila kaka PVC yina. Kufwa ve Pod tii kuna nge ta sala kopi ya bansangu yina kele na Pod yina ke sala. - Kifwanisu ya kitini ya bloque ya nsi (
dd/ddrescuena zulu ya SSH) na diske ya nganda to na volime ya matuti ya kukabwana na ntwala ya kusala .ext4magic,extundelete, toPhotoRec: Kusala ve ata fioti ba carver ya ba fichier yina ke sonikaka ba fichiers ya kubasika na partition ya disque yina nge ke na kuvutula ./var/lib/docker/volumes. - Sambu na kisika ya kimvuka ya Kubernetes yina me beba to yina bo me katula na kintulumukina (
kubectl delete crd/namespace), kutelamakube-apiservermpi vutula bima na nge ya mpaetcdkifwanisu (etcdctl snapshot restore): Kana leta ya kimvuka na .etcdbo katulaka yo ntangu bavolime ya kubumba bima na matuti yina kele na nsi kele kaka, kuvutula .etcdkuvutula yonsoPV,PVC,Secret, mpiConfigMapbima na mbala mosi.
Danger
Katula ve ata fioti kubernetes.io/pvc-protection to kubernetes.io/pv-protection nsuka na kubectl patch ... -p '{"metadata":{"finalizers":null}}' ntangu PVC me kangama na . Terminating: Finaliser yina kele kima mosi mpamba yina ke taninaka pilote na nge ya CSI ya matuti (aws-ebs-csi-driver, pd.csi.storage.gke.io, Longhorn, Rook-Ceph) katuka na kubasisa kima mosi ya ngolo . DeleteVolume API ke binga sambu na kufwa diske na nge ya kisalu. Ntangu PVC ke kangamaka na . Terminating, Pod kele kaka na kisalu mpi volime kele kaka na zulu: sala . kubectl exec to kubectl cp (to pg_dump / mysqldump) mbala mosi sambu na kugulusa 100 na kati ya nkama ya bansangu na nge na ntwala nde Pod kumana.
Nti ya lukanu: volime ya Docker ya bo me katula, overlay2 couche, to triage ya PVC ya Kubernetes¶
Sadila diagrame yai sambu na kupona nzila ya nswalu ya kuvutula zero-loss na kutadila kana kisalu ya conteneur kele kaka na luzingu, kana volime vandaka na nsadisa ya diske ya bwala to ya kubumba CSI na matuti, mpi nki systeme ya bafishe ke yambaka . /var/lib/docker:
flowchart TD
Start["Ba nsangu ya kisalu me konda na nima ya Docker to Kubernetes Kufwa Nsiku"] --> WhichEnv{"Inki Platforme & Komanda Me Basisa Kuvidisa?"}
WhichEnv -->|"Docker: Conteneur ke sala kaka (Ba fichiers ya kukangama ve na kati ya volime/conteneur)"| ProcRescue["Lugulusa Kangula Bantendula ya Bafichier ya Kukonda Kuwakana na nzila ya sudo lsof +L1 mpi /proc/PID/fd/N to /proc/PID/kisina/"]
WhichEnv -->|"Docker: Bo me kanga kisika ya kutula bima mpi bo me katula volime (sonika -v / zenga --bavolime)"| StopDocker["Na mbala mosi, sala: sudo systemctl kanga docker."]
WhichEnv -->|"Kubernetes: kubectl kufwa pvc / pv / kimvuka ya mambu / kisika ya bazina"| K8sCheck{"Keti Pod Kele Kaka Kusala TO Keti PVC Mekangama Na Kumanisa?"}
K8sCheck -->|"Ee: Pod ke sala kaka (Finalizer ke kanga CSI Kufwa)"| K8sExec["KUFUNGA VE Pod -> Kusala kubectl exec / pg_dump / tar na zulu ya stdout na Disque Local Nswalu ."]
K8sCheck -->|"Ve: Pod me kwenda -> Tala kubectl baka pv"| ReclaimCheck{"Inki Vandaka Politiki ya Kuvutula PV?"}
ReclaimCheck -->|"Kubumba (Status PV = Kubasika)"| ClearClaimRef["100% ya bansangu ya kukonda kubeba -> Soba PV sambu na kukatula spec.claimRef.uid -> Vutula diaka na PVC ya Mpa"]
ReclaimCheck -->|"Kufwa (EBS ya matuti / PD / Kibongo ya nda / Nzila ya Kisika)"| CloudOrLocal{"Volime ya CSI ya matuti to Disque ya Host ya Kisika?"}
CloudOrLocal -->|"CSI ya matuti (AWS EBS / GCP / Azure / Ceph)"| CloudSnap["Tala kisika ya kutula bima ya mpa ya Console ya matuti / Bafoto ya EBS ya bo me sala yo mosi / Poubelle ya Ceph RBD (poubelle rbd ls)"]
CloudOrLocal -->|"Disque ya node ya kisika (nzila ya kisika / Nzila ya host)"| StopDocker
StopDocker --> RemountRO["Kuyidika diaka Partition ya Nzo-Nkanda ya Kutanga Kaka (kuyidika -o kuvutula,ro) TO Kifwanisu ya Bloque ya Kutambula na zulu ya SSH"]
RemountRO --> HostFS{"Inki mutindu ya kusadila bafichier /var/lib/docker?"}
HostFS -->|"ext4"| Ext4Rec["Sadila debugfs / ext4magic Kuvutula mambu ya Inode ya zulunalu (-kashe ya ntangu)"]
HostFS -->|"XFS / Brfs"| CarveRec["Sadila misisa ya Btrfs / xfs_irecover / Kuzenga bidimbu ya nge mosi sambu na SQLite, Kimvuka ya Postgres, to InnoDB .ibd ."]
Fase 1: Mutindu Docker mpi Kubernetes ke katulaka kibeni bavolime yina kele na diske .¶
Na ntwala ya kusala konso ntuma ya kuvutula, bakisa kisika bansangu na nge vandaka kuzinga na nitu na zulu ya host ya Linux mpi inki ntuma ya kufwa simbaka mpenza:
| Mutindu ya kubumba & Nsiku ya kufwa | Nzila ya ngidika ya bafichier ya nkwa-nzo na Node ya Linux | Mambu yina Nsiku ya Kufwa Salaka Kibeni . | Metode ya kubeluka nswalu |
|---|---|---|---|
Volime ya Docker ya bo me pesa zina (docker volume rm to docker compose down -v) |
/var/lib/docker/volumes/<vol_name>/_data |
Katula bafishe yina kele na kati _data/ mpi katulaka mambu yina bo sonikaka na répertoire na . /var/lib/docker/volumes/metadata.db (boltdb). |
Kangisa Docker mbala mosi, tula diaka /var/lib/docker tanga kaka, mpi vutula ba inode ya kukonda kuwakana na nzila ya ext4magic / debugfs to kuzenga-zenga bidimbu. |
Volume ya Docker ya kukonda zina (docker run -v /var/lib/mysql + . docker rm -v to docker system prune --volumes) |
/var/lib/docker/volumes/<64-char-hex-id>/_data |
docker system prune --volumes ke katulaka konso volime ya kukonda zina mpi ya kele ti zina yina bo ke tubilaka ve ntangu yai ata na kontenere mosi ya kele dezia. |
Sukisa Docker mbala mosi; kana nge vandaka ti ba conteneur ya nkaka ya kukangama yina ba volume na yo vandaka ve ya kuzenga, tala yina me bikala /var/lib/docker/volumes/*/_data dossier ntete na ntwala ya kuzenga ba bloque yina bo me kabulaka ve. |
Couche ya kusonika ya conteneur (docker rm <container> ntangu bo sonikaka bansangu na nganda ya volime mosi) |
/var/lib/docker/overlay2/<layer-id>/diff/ |
Kukatula nsinga ya zulu ya conteneur diff/ répertoire na kati ya overlay2 mfumu ya kubumba bima. |
Kangisa Docker mbala mosi mpi vutula nti ya répertoire yina me vukana ve na . ext4 zulunalu to XFS bima. |
Ordinaire ya Docker na macOS to na Windows (docker system prune --volumes) |
Na kati ya kifwanisu ya disque ya masini mosi ya virtuel: -/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw (macOS) to %LocalAppData%\Docker\wsl\disk\docker_data.vhdx (Bafenetre WSL2). |
Tindaka unlink() na kati ya VM ya Linux, mpi kana . discard/TRIM kele na kisalu na Docker.raw / docker_data.vhdx, bo bulaka mabulu ya fioti-fioti na fichier ya host. |
Katuka na ordinatere ya Docker na nsungi ya basegonde 5, sala kopi Docker.raw to docker_data.vhdx na disque dur ya nganda, mpi sala . ext4magic / PhotoRec na zulu ya kifwanisu ya diske ya virtuel. |
PVC ya Kubernetes ti Delete Kuvutula Nsiku na Ceph RBD (Rook-Ceph) to Kibongo ya Nda |
Piscine ya OSD ya Ceph (rbd) to /var/lib/longhorn/replicas/. |
Kana csi-rbdplugin kele ti trash me pesa nzila (rbd trash), kifwanisu ya RBD ke nataka na kisika ya kutula bamvindu ya Ceph; kana ve, babloki kele ve ti karte. |
Kubaka ntinu rbd trash ls --pool <pool> na kati rook-ceph-tools pod mpi kuvutula ti rbd trash restore. |
Kitini ya zole: Kugulusa bafishe ya base de données ya kukangula na kati ya conteneur yina kelanda kaka kusala (/proc/<pid>/fd/)¶
Vingila: keti conteneur ke sala kaka sesepi yai?
Mbala mingi, enzeniere ke salaka script ya migrasio ya application, kisalu ya cron ya bunkete, to mukanda ya ke monisa mutindu ya kusadila . rm -rf /var/lib/postgresql/data/* to rm /app/data/production.sqlite3 na kati ya kima mosi ya ke sala, to kufwa dossier ya bo me tula na nsi ya host bind-mount . /opt/app/data na ntangu yina kontenere yo mosi (postgres, mysqld, mariadbd, redis-server, mongod, gunicorn, node) kele kaka na zulu mpi ke sala.
Na Linux, fichier ke katukaka ve na disque dur ntangu . rm to unlink() ke bingamaka. Ba bloque ya disque na yandi mpe inode ke bikala 100 pourcent ya kukabula mpe ya kutanga tii na processus ya nsuka ke simba descripteur ya fichier ya kukangula (FD) na inode yina ke kanga yo to ke basika.
Kitini 1: Sosa ID ya Processus ya host (PID) ya kisalu ya kontenere .¶
Na node ya nkwa-nzo ya Linux (na kati ya conteneur ve), sosa nkwa-nzo . PID ya bansangu na nge to mutindu ya kusadila:
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: yo ke tuba nde 0, mpe zina ya fioti ke suka na (deleted). Dosie me mana kibeni katuka na . ls /var/lib/docker/volumes/..., kansi konso byte mosi (482 MB na users.ibd, 89 MB na production.sqlite3) kele kaka na luzingu na kati . /proc/<PID>/fd/<FD>.
Kitini ya 2: Kopia bafishe ya base de données yina kele ve na kuwakana mbala mosi na . /proc/<PID>/fd/¶
Kusala ku ve to kuvutula kontenere. Ntangu kisalu ke na kusalama, sala kopi ya ba descripteurs ya fichier brut mbala mosi na dossier mosi ya lutaninu na host na nge:
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
Kitini ya 3: Kuluta mbote: Kusala dump logique en direct (pg_dump / mysqldump / .backup) na ntwala nde kontenere kukanga ba FD .¶
Kana postgres to mysqld ke sala kaka ti bafishe na yo ya bansangu ya kukanguka na mabanza mpi . /proc/<PID>/fd/, meka kusala ntete dump ya logique ya ke zinga na zulu ya socket unix to connexion TCP yina kele dezia:
# 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 bitini ya bafishe na kati ya bisalu ya bisadi na mutindu mosi ya ke sobaka, yo yina pg_dump lenda lemba na bamesa yina bo me bumbaka ve; kuvukisa ngiufula ya SQL ya ke zinga ti kusala kopi ya konso kima yina me kanguka /proc/<pid>/fd/* na zulu ya nionso postgres bana PIDs ya backend ke bumbaka bansangu ya kimvuka ya mesa ya kuluta mingi.)
Fase 3: Kuvutula volime ya Docker yina bo me katulaka na . ext4 to XFS na nima ya kontenere kutelama¶
Adieyi tuvova kele vo otina docker compose down -v to docker system prune --volumes, yo yina kontenere kele me kangama dezia mpi yonso . /proc/<pid>/fd/ bantendula kele ya kukangama? Ntangu yai, nge kele na nsaka ya kubaka ntinu na disque fond ke sonikaka na zulu ya host ya Linux.
1: Kanga nzila ya fichier ya Linux na nsungi ya basegonde 10 .¶
- Kanga Docker, containerd, kubelet, mpi cron mbala mosi na mpila nde ata kima mosi ve, kima ya kutala mavimpi, to rotateur ya zulunalu kusonika byte yankaka na .
/var/lib/docker: - Tala nki kisadilu ya kubumba mpi ngidika ya bafishe kele
/var/lib/docker: - Tula diaka kitini ya kutanga kaka (to tinda kifwanisu ya kitini ya mpamba na nzila ya SSH na masini ya nkaka):
- Kana
/var/lib/dockerkele na kitini na yo mosi ya bo me pesaka to volime ya LVM (mu mbandu ./dev/nvme0n1p2to/dev/mapper/vg0-docker), tula yo diaka mbala mosi sambu na kutanga kaka: - Kana
/var/lib/dockerkele na misisa/kukabula (/), meka kupusa kitini ya kisina na ngolo na kutanga kaka na kusadilaka trigger ya kernel Magic SysRq (echo u | sudo tee /proc/sysrq-trigger) tosudo mount -o remount,ro /. - Kana nge kele na VPS ya matuti (AWS EC2, GCP, DigitalOcean, Hetzner, Linode): Kwenda mbala mosi na console web na nge ya matuti mpi niema Sala foto na volime ya bloque ya serveur (to streaming appareil ya bloque brute na nzila ya SSH na serveur ya zole:
sudo dd if=/dev/nvme0n1p1 bs=4M status=progress | gzip -1 | ssh user@backup-server "cat > /mnt/storage/docker_host_raw.img.gz").
Kitini ya 2: Tala kana bansangu na nge kele kaka na volime YANKAKA yina bo me zenga ve to . overlay2 couche¶
Na ntwala ya kuzenga ba bloque ya disque yina bo me kabulaka ve, zikisa nde base de données na nge vandaka ve ya kubumbana na bind mount to na volime mosi ya kele ti zina ya nkaka yina bikalaka:
# 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, kaka sambu na kuzaba ti . find /var/lib/docker yina docker-compose.yml vandaka mpenza kusala projectname_app_db_data (yina kele kaka 100 na kati ya nkama na diske) na ntangu . app_db_data vandaka volime mosi ya ntama yina bo sadilaka ve bangonda sambanu me luta.
3: Kuvutula ba répertoires ya volime ya Docker yina kele ve na kuwakana na . ext4 kusadila ext4 Zulunalu (ext4magic mpi debugfs)¶
Ntangu docker volume rm kufwa /var/lib/docker/volumes/<vol_name>/_data na ext4 systeme ya ba fichier, ext4 zero na nganda ya bapointeur ya bloque direct (i_block / nsuka ya nti ya nsuka) na mesa ya inode ya moyo. Kansi, e ** .ext4 zulunalu (inode <8>, mingi-mingi 128 MB na 1024 MB buffer ya bague circulaire)** ke bumba kaka bakopi ya ntama ya bamesa inode ya siki-siki mpi ya ba bloque ya répertoire yina katukaka na ntwala ya . docker compose down -v bo fwaka yandi.
+-------------------------------------------------------------------------+
| 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. |
+-------------------------------------------------------------------------+
Kubaka ntinu ext4magic na ntwala ya kitini na nge ya kutanga kaka (to ya . .img kopi ya foto na serveur ya zole), yina ke monisa ntangu (-a) tuka minuta 5 na ntwala nde nge baka ntinu docker compose down -v to 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: Tanga kifwanisu ya zulunalu yina nge me bumba na RAM mbala mosi na nima ya kukanga Docker.
- -f var/lib/docker/volumes: Ke tadila nti ya répertoire ya ba volume ya Docker ya siki-siki (noti: katula mambu ya ntete . / na ext4magic banzila ya ke tadila mambu).
- -a $(date -d "-15 minutes" +%s): Ke tuba ext4magic sambu na kutunga diaka nti ya répertoire na kusadilaka bakopi ya inode yina kele na ngolo na minuta 15 me luta (kaka na ntwala ya kufwa na kintulumukina).
- -r: Kuvutula ba répertoires ya mvimba kisika ata bloque mosi ve sonikaka na zulu; kana -r ke konda bafishe yina bo me sonikaka ndambu, sala nzila ya zole sambu na kuyingisa . -r ti -m (kusala mazi + mutindu ya hybride ya zulunalu).
4: Kuzenga bafishe ya SQLite, ya PostgreSQL, to ya MySQL InnoDB ya mpamba ntangu zulunalu me kangama (XFS to ext4)¶
Warning
Sambu na nki XFS ke sadisa ve ext4magic mpi yo ke lombaka kukatula nswalu-nswalu kutanga kaka: Na kuswaswana ti . ext4, yina ke sonikaka bakopi ya mvimba ya inode ya 256-byte na zulunalu na yo, . XFS logs metadata ke zola deltas mpi ke sadila diaka na ngolo yonso banti B ya inode yina bo me katulaka (agi). Kana /var/lib/docker me vanda na zulu ya XFS kukabula (na luyantiku na RHEL, Linux ya Ditadi, AlmaLinux, mpi Linux ya Amazone), kukatula . /var/lib/docker to kutula diaka na zulu / kutanga kaka na basegonde fyoti kele kitambi mosi mpamba ya kuluta mfunu na ntwala ya kuzenga.
Kana muntu ya ke yambaka banzenza ke sadila XFS to kana ext4 zulunalu yina bo me ziunga dezia na zulu ya bapointeur ya inode, sadila bidimbu mpi structure ya kuzenga na zulu ya kifwanisu ya disque brut (docker_host_raw.img):
- Sambu na ba nsangu ya SQLite3 (
.sqlite,.db- mu mbandu, Nsadisi ya Nzo, Gitea, Grafana): Konso nsangu ya SQLite3 ke yantikaka na ntu-dyambu ya ASCII ya 16 byte ya kukonda kifu na byte 0 ya lutiti na yo ya ntete ya 4 kilobyte:53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00("SQLite format 3\0"), mpi ke bumbaka nene ya siki-siki ya lutiti ya bansangu ( ).Bytes 16..17, mingi-mingi4096) ye nene wa nsangu zawonso muna lukaya ( ).Bytes 28..31, ntalu ya mvimba ya 32-bit ya nene-endian) kaka na kati ya ntu-dyambu yina mosi. - Kubaka ntinu
PhotoRecti[File Opt]->[x] sqliteme pesa nzila, to tala mbala mosi kitini yina ti .grep -ab "SQLite format 3"sambu na kuzwa kisika ya sikisiki ya byte ya fichier SQLite na nge yina bo me katula mpi kubasisa yo ti .dd:Kana nge me basisa yo, tina# 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.dbsambu na kutunga dyaka konso lutiti ya matiti ya B-tree yina mebikala ya kukonda kubeba.
Tip
Mutindu ya kusala calcul ya sikisiki dd nene ya byte ya fichier SQLite3 ya kukonda kuwakana katuka na ntu-dyambu na yo: Mbala mosi grep -ab "SQLite format 3" ke pesa nge kisika ya byte ya luyantiku OFFSET ya bansangu na nge ya SQLite yina bo me katulaka, tanga ba byte . 16..17 (uint16 nene ya lutiti, mu mbandu, 0x1000 = 4096 ba byte) mpi ba byte 28..31 (uint32 Ntalu ya Lutiti, mu mbandu, 25000 balutiti) kusadila hexdump -C -s OFFSET -n 32. Kuvukisa Page Size x Page Count ke pesa nge nda ya byte ya siki-siki sambu na kuluta na . dd (iflag=skip_bytes,count_bytes) ntangu fichier kele ya kukangama na diske.
- Sambu na SQL na mono / MariaDB InnoDB (
.ibdba fichier ya mesa): Konso InnoDB.ibdmesa kele ti ndonga16 KB(16,384byte) balutiti yina kele ti .FIL_PAGE_INDEX(0x45BF) ntu-dyambu mpi mesa ya kuswaswanaspace_id. Sadila Percona / MapasaDBundrop-for-innodb(stream_parser+ .c_parser) bisadilu ya kutala/dev/nvme0n1p1sambu na bantu yonso16 KBInnoDB ke monisa balutiti mpi ke losa konso ndonga mbala mosi na bafishe ya TSV/SQL sambu na kukotisa yo diaka. - Sambu na bafichier ya kimvuka ya PostgreSQL (
$PGDATA/base/<db_oid>/<relfilenode>): PostgreSQL ke bumbaka konso mesa bonso ya ke landanaka .8 KB(8,192byte) kimvuka ya balutiti yina kele tiPageHeaderData(pd_lower,pd_upper,pd_special). Sadilapg_filedumptopglazarus/pdusambu na kutala bisika ya disque dur yina bo me kabulaka ve sambu na8 KBbalutiti yina ke wakana ti mutindu ya mesa na nge (HeapTupleHeaderData) ye tunga diaka e nlonga.
Kitini ya 4: PVC, PV, mpi etcd Kuvutuka na Nswalu¶
Na Kubernetes (EKS, GKE, AKS, k3s, RKE2, kubeadm, OpenShift), kufwa na kintulumukina nsangu ya Volume ya Kelanda (kubectl delete pvc), Kimvuka ya Leta, to Kisika ya Bazina ya mvimba (kubectl delete ns prod) ke landa architecture ya kuswaswana kibeni ti Docker yina kele yo mosi.
Scénario A: PVC ke monisa . Terminating (Muntu ya Ke Gulusaka Luzingu)¶
Kubaka ntinu:
KanaSTATUS colonne ke tuba Terminating, pema na kiese yonso: ba nsangu na nge me katuka ntete ve.
- Sambu na nki? Konso PVC ya Kubernetes yina bo me salaka Banda Kubernetes 1.9 ke kotisaka yo mosi . finalizers: [kubernetes.io/pvc-protection].
- Na ntangu yonso yina Pod mosi kelanda kaka na kutula PVC yina, mfumu ya Kubernetes kebuyaka kumanisa kufwa PVC mpi kebingaka ve ata fyoti mfumu ya CSI . DeleteVolume RPC.
- Kisalu ya Nswalu: Kusala VE kufwa to kuvutula Pod, mpi kusala VE kukanga nsuka. Kopia mbala mosi bansangu yonso ya Pod yina ke sala na masini na beno ya bwala to na bucket 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
Scénario B: Bo katulaka PVC, mpi . kubectl get pv ke monisa Volime ya Kulanda na . Released kutuba (ReclaimPolicy: Retain)¶
Kubaka ntinu:
Kana Volime na nge ya Kulanda (pv-prod-postgres) kele kaka na ndonga ti . STATUS: Released (sambu Kitini na yo ya Kubumba bima vandaka kusadila reclaimPolicy: Retain), 100 na kati ya nkama ya bansangu na nge kele kaka ya kukonda kusimba na diske yina kele na nsi. Kansi, Kubernetes kebuya kubika nde PVC ya mpa kukangama na . Released PV sambu PV kele kaka ti . spec.claimRef kusonga PVC ya ntama yina bo me katulaka UID.
Mutindu ya kusala Released PV Available diaka na basegonde 10 ti zero ya kuvidisa bansangu:
1. Soba kima Volume ya ke zingaka mpi katula . spec.claimRef kigonsa:
kubectl get pv diaka: kisika ke soba mbala mosi katuka na Released na Available.
3. Sala diaka PersistentVolumeClaim (kusonga volumeName: <your-pv-name> na kufwanana ya ngolo/kubumbaNkumbu ya Kitini). Yo ta kangama na PV yina kele dezia mbala mosi ti bafishe yonso ya kukonda kubeba.
Scénario C: Kuvutula kisika ya kimvuka ya Kubernetes yina bo me katulaka na . etcd kifwanisu (etcdctl snapshot restore)¶
Adieyi tuvova kele vo muntu watina . kubectl delete namespace prod to helm uninstall mpi bo katulaka bamanifeste 200 ya Kubernetes, Binsweki, Bakarte ya Config, mpi bantendula ya PV na zulu ya ordinatere mosi yina bo ke twadisaka yandi mosi . kubeadm, k3s, to RKE2 avio ya kuyala?
- Sosa mambu na nge ya nsuka
etcdkifwanisu (na luyantiku na/var/lib/rancher/k3s/server/db/snapshots/,/var/lib/rancher/rke2/server/db/snapshots/, to manaka na nge/var/backups/etcd/snapshot.db). - Zikisa bumosi ya foto na ntwala ya kusimba kimvuka ya ke zinga:
- Kutelama
kube-apiservermpietcdna zulu ya node ya avio ya kutwadisa: - Na
kubeadm(ba pods ya kukangama): Kutambula/etc/kubernetes/manifests/kube-apiserver.yamlmpi/etc/kubernetes/manifests/etcd.yamlsambu na ntangu fioti na/root/manifests_hold/mpidinakubeletke kangaka bima yonso zole na bunkete, na nima ke vutulaka yo na zulu ./var/lib/etcdna/var/lib/etcd.bak. - Na
k3s: Kubaka ntinusudo systemctl stop k3smpisudo k3s server --cluster-reset --cluster-reset-restore-path=/path/to/snapshot. - Vutula
etcdRépertoire ya bansangu nakubeadm: - Kunikana
etcd.yamlmpikube-apiserver.yamlkuvutuka na/etc/kubernetes/manifests/. Na nsungi ya basegonde 30,kube-apiserverke vukana diaka ti yina bo me vutulaetcdmagazini mpi konso kima yina bo me katulaka na kisika ya bazina, na kinsweki, na karte ya config, mpi na Volume ya ke zingaka mingi ke monanaka diaka.
Kitini ya 5: Kukumisa ngolo bavolime ya Docker mpi ya Kubernetes sambu na kufwa yo na kintulumukina¶
Kana nge me vutula bansangu na nge ya kisalu, sadila bima yai iya ya ke taninaka sambu kifu mosi ya CLI kufwa diaka ve volime mosi ya ke zinga:
- Soba konso kisalu ya Kubernetes
StorageClasstukareclaimPolicy: DeletenareclaimPolicy: Retain: Na luyantiku, baClasses ya kubumba bima na matuti (gp2,gp3,standard-rwo) ya luyantiku nareclaimPolicy: Delete, disongidila kufwa PVC ke bebisaka diske ya matuti. SalaStorageClassnareclaimPolicy: Retain(to kukanga ba PV yina kele dezia tikubectl patch pv <pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}') yo yina kufwa PVC to Namespace ke katulaka ve ata fioti volime ya bloque yina kele na nsi. - Kupesa nzila na Poubelle ya AWS EBS / Baprograme ya Bafoto ya GCP / Velero ti Bafoto ya CSI: Kupesa nzila na Poubelle ya AWS EBS ke bumba konso volime ya EBS yina bo me katula bilumbu 7 tii na 30 ata kana pilote ya CSI ke binga .
DeleteVolume. - Kusadila ve ata fioti
docker system prune --volumesna ba script ya bunkete ya automatisé to na ba CI/CD: Kana conteneur ya base de données ya kisalu me bwa na bunkufi (Exited (1)) na ntangu ya sikisiki yina kisalu ya cron ke salamaka .docker system prune -a --volumes -f, Docker ke tadilaka ba volime na yandi ya kukonda zina "ya bo me sadila ve" mpi ke katulaka yo kimakulu. Nzila--volumestuka muna nkanda miawonso mia lunga-lunga. - Sadila bima ya ke kangaka host ya pwelele (
/srv/prod_data/postgres:/var/lib/postgresql/data) to ba base de données ya nganda yina bo ke twadisaka sambu na bisalu ya kusala bima yina kele na leta: Kuswaswana ti ./var/lib/docker/volumes/, yamba ba répertoires ya kukangama na nganda/var/lib/docker/kele kusimbama ve ata fioti nadocker compose down -v,docker volume rm, todocker system prune --volumes.
Banimero ya urgence ya kizunga mpi bansiku ya kimvuka¶
Kana conteneur to kufwa ya kisika ya kubumba bima ya Kubernetes kele ti bupusi na bisalu ya kimunganga ya lupitalu, na kutinda bansangu ya lutaninu ya bantu yonso, to na bansangu ya muntu yina bo me tula na nsiku, kuma ngolo mbala mosi:
- Etats-Unis na Canada: Binga
911kana kifu ya kimvuka ya ba conteneur ke kanga nzila na kutala bambefo na lupitalu, na ba système ya EHR, to na kutinda bantu na kintulumukina. Rapore ya kufwa ya infrastructure ya conteneur ya mbi to mambu ya mbi ya ke salama na nzila ya Internet na CISA (1-844-Say-CISA/cisa.gov/report) to Centre canadien de sécurité cibernétique (1-833-CYBER-88). - Kimfumu ya Bumosi: Binga
999sambu na bigonsa ya luzingu to bisalu ya mfunu ya NHS. Na nsi ya GDPR ya UK, kufwa kimakulu to kuvidisa bansangu ya muntu kukonda kusala kopi yina bo lenda vutudila yo kelombaka kutadila nsangu ya kufwa nsiku yina bo mepesa bangunga 72 na ICO (0303 123 1113). - Union européenne: Binga
112na bansi yonso ya kele na kati ya UE. Bimvuka yina kele na nsi ya nsiku ya NIS2 fwete pesa lukebisu na ntwala na CSIRT ya insi na bo na nsungi ya bangunga 24 na nima ya kukatuka ya ngolo ya kisalu, mpi kuvidisa bansangu ya muntu kimakulu ke salaka nde GDPR Artikle 33 kupesa rapore na nsungi ya bangunga 72. - Australie na Nouvelle-Zélande: Kubula
000na Australie to111na Nouvelle-Zélande; pesa rapore ya mambu ya mfunu ya ke tadila banzo na ACSC (1300 CYBER1). - Inde na Asie-Pacifique: Binga
112na Inde sambu na mvutu ya nswalu; zabisa mambu ya ke tadila lutaninu ya matuti to ya conteneur na CERT-In (incident@cert-in.org.in) na kati ya fenetre ya bangunga 6 ya bo fwete lomba.
Bangyufula yina bantu keyulaka mbala na mbala¶
Kusala docker compose down -v katula bima ya ke kangaka host (./data:/var/lib/mysql) to kaka bavolime ya Docker ya Zina mpi ya Kukonda Zina?¶
`docker compose down -v` KAKA ke katulaka bavolime yina bo me pesa zina yina bo me zabisa na . `volumes:` kitini ya `docker-compose.yml` mpi Bavolime ya kukonda zina yina bo me kanga na ba conteneur .; yo ata fioti ve ke katulaka bafishe na kati ya kisika ya bo ke kangaka bima (bonso `- /opt/mysql_data:/var/lib/mysql` to `- ./postgres_data:/var/lib/postgresql/data`). Kana fichier na nge ya compose sadilaka nzila ya host yina ke yantika na . `/` to `./`, tala dossier yina na host sesepi yai: bafishe na nge kele kaka 100 na kati ya nkama.
Sambu na nki docker system prune --volumes kufwa volime ya base de données na mono ntangu mono kangaka kaka conteneur na minuta 2 sambu na kutula na kilumbu variable mosi ya environnement?¶
Vingila mbote-mbote luswaswanu yina kele na kati ya . `docker stop` mpi `docker rm`: kana kontenere kele kaka . `Stopped / Exited` (ke monana na `docker ps -a`), `docker system prune --volumes` ke salaka ve katula bavolime na yo sambu kontenere yina bo me kangaka ke tubilaka yo kaka. Kansi, kana nge tina . `docker rm
Nga ndenda vutula e nkanda mia Docker miafwaswa muna kati kwa Docker Desktop muna Mac (Apple Silicon / Intel) to bafenetre (WSL2)?¶
Ee, kana nge katuka na Docker Desktop mbala mosi sambu masini ya virtuel kuyambula kusala . `fstrim` na zulu ya diske ya virtuel. Na macOS, Docker ke bumbaka ba volime yonso ya Linux na kati . `-/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw`; na fenetre WSL2, na kati `%LocalAppData%\Docker\wsl\disk\docker_data.vhdx`. Kopia yina `.raw` to `.vhdx` fichier na SSD ya nganda mbala mosi, kanga yo kaka sambu na kutanga na Linux (na kusadilaka `losetup -Pr` sambu na `.raw` to `qemu-nbd -r` sambu na `.vhdx`), mpi kubaka ntinu `ext4magic` to `PhotoRec` na ntwala ya virtuel `ext4` kukabula na kati.
Adieyi tuvova kele vo yafwasa e kunku kia Kubernetes ye . kubectl delete statefulset postgres? Keti yo me katulaka mpi ba PVC na mono?¶
Ve. Na luyantiku na Kubernetes (katula kaka kana `persistentVolumeClaimRetentionPolicy.whenDeleted: Delete` bo yidikaka yo na pwelele yonso na Kubernetes 1.27+), yina ke salaka . `kubectl delete statefulset` ke katulaka ngidika ya StatefulSet mpi ba Pods na yo, . kubika yonso `PersistentVolumeClaims` (`data-postgres-0`, `data-postgres-1`) ye nsangu zau za nsuka 100 muna nkama .. Sadila kaka diaka mambu na nge `StatefulSet` Manifeste ya YAML ti zina mosi mpi . `volumeClaimTemplates`, mpi Pods ya mpa ta kangama diaka na mbala mosi ti yina vandaka dezia . `data-postgres-0` Ba PVC.
Inki mutindu mono lenda kota na bafishe na kati ya Docker . overlay2 répertoire ntangu conteneur ke buya kubanda (CrashLoopBackOff / Exited (1))?¶
Kufwa ve kontenere yina me bwa. Ntangu yonso yina kontenere yina bo me kangaka kele kaka na mvu 2012. `docker ps -a`, couche na yo ya bo lenda sonika mpi bima yina bo ke tulaka na volime kele ya kukonda kubeba na diske. Nge lenda sala kopi ya bafishe mbala mosi na nganda ya kisika yina bo me kangaka na kusadilaka . `docker cp
Adieyi tuvova kele vo muntu ofwisi e Kubernetes . Namespace (kubectl delete ns prod) ye PVC zawonso zakala ye . reclaimPolicy: Delete na AWS EBS to GCP?¶
Kana mfumu ya CSI ya matuti (`ebs.csi.aws.com` to `pd.csi.storage.gke.io`) me salama dezia `DeleteVolume` sambu `reclaimPolicy` vandaka `Delete`, tala nswalu-nswalu bima tatu ya lutaninu yina kele na nivo ya matuti: (1) tala **AWS Recycle Bin sambu na Bavolime ya EBS** na console ya AWS EC2 (kana nsiku mosi ya kubumba bima vandaka na kisalu na konti/ba tag, volime ya EBS yina bo me katula ke vandaka na Poubelle ya EBS mpi yo lenda vutuka na mbala mosi); (2) tala **Baprograme ya Bafoto ya AWS Backup / DLM / GCP** sambu na kubaka foto ya volime ya automatisé ya ntama mingi ve; mpi (3) tala kana bansangu na nge vandaka kubasisa bansangu ya WAL/binlogs (`WAL-G`, `pgBackRest`, `Litestream`) na kitunga ya S3/GCS.
Bantwadisi ya ke wakana¶
- Disque ya serveur me fuluka 100% (0 bytes ya ofele): kufuluka ya zulunalu ya WAL ya base de données, nti B ya kubeba, mpi kuvutula kisika ya kukonda kisika
rm -rftoMaj+Supprimerna kintulumukina na Linux, macOS, to Windows: mbala mosi kutula dyaka kaka kutanga mpi kuzenga inode- Mashini ya kieleka VMDK, VHDX, mpi qcow2 ke bakaka bifwanisu ya kubeba mpi ya kugulusa ya hyperviseur
- Kusala ya Git na kintulumukina ya bansapi ya AWS, fichier
.env, to nsabi ya SSH ya kinsweki na repo ya GitHub ya bantu yonso - Mpasi ya kuyamba bantu na nzila ya Internet, kukwenda na insi ya nkaka, mpi kuvutula ba copie
- Bakopi ya ordinatere, mayele ya 3-2-1, mpi kuyidika mambu kana bisumbula me salama .
- Ba nimero ya urgence na insi
Bisika mpi lutwadisu ya leta¶
- Mikanda ya Kubernetes (
kubernetes.io/ Fondasio ya Informatique Native ya Matuti): Kima ya Kubumba na Lutaninu ya Kusadila (kubernetes.io/pvc-protectionBantu ya ke manisaka), Kuvutula Bavolime ya Ke Landaka (Retainvs.Delete), ye Kusadila .etcdBimvuka ya Kubernetes (etcdctl snapshot restore). - Docker Inc. (
docs.docker.com): Kusadila Bansangu na Docker: Bavolime, Kukangama,overlay2Architecture ya Pilote ya Kubumba Bima, mpi Référence ya Kuzenga. - Kimvuka ya Kernel ya Linux (
kernel.org): Ya/procSisteme ya ba fichier (procfsKangula Kuvutula Bantendula ya Fichier na nzila ya/proc/<pid>/fd/) ye Ext4 Nsikudukusu ya Zulunalu. ext4magicMikanda ya kisalu (ext4magic.sourceforge.net): Inode ya Forensique mpi Kuvutula mambu ya bo me sala na zulunalu na zulu ya ba fichier Ext3/Ext4.- Institut ya Insi ya Bansiku mpi ya Teknolozi (
NIST) (États-Unis): Mukanda ya Sipesiali 800-190: Mukanda ya Lutaninu ya Ba-Conteneur ya Ba-Aplication & Kuvutula Mambu Yina Mesalamaka.