ਡੌਕਰ ਜਾਂ ਕੁਬਰਨੇਟਸ ਉਤਪਾਦਨ ਵਾਲੀਅਮ ਮਿਟਾਇਆ ਗਿਆ: ਬਚਾਅ ਕਰਨਾ docker system prune --volumes, overlay2 ਇਨੋਡਸ, ਅਤੇ etcd ਸਨੈਪਸ਼ਾਟ¶
ਐਮਰਜੈਂਸੀ ਨੰਬਰ ਦੇਸ਼ ਅਨੁਸਾਰ ਵੱਖਰੇ ਹੁੰਦੇ ਹਨ. ਇਹ ਪੰਨਾ 911 ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ, ਸੰਯੁਕਤ ਰਾਜ ਅਤੇ ਕੈਨੇਡਾ ਲਈ ਨੰਬਰ। ਕਈ ਹੋਰ ਦੇਸ਼ 112, 999, ਜਾਂ ਕੋਈ ਹੋਰ ਨੰਬਰ ਵਰਤਦੇ ਹਨ। ਆਪਣੇ ਦੇਸ਼ ਲਈ ਨੰਬਰ ਲੱਭੋ.
ਚੱਲ ਰਿਹਾ ਹੈ docker compose down -v, docker system prune -a --volumes, docker volume rm, ਜਾਂ kubectl delete pvc ਉਤਪਾਦਨ ਵਿੱਚ ਗਲਤ ਟਰਮੀਨਲ ਟੈਬ 'ਤੇ ਲਾਈਵ PostgreSQL, MySQL, MariaDB, Redis, MongoDB, ਜਾਂ SQLite ਡਾਟਾਬੇਸ ਵਾਲੀਅਮ ਨੂੰ ਮਿਟਾਉਣ ਦੇ ਸਭ ਤੋਂ ਤੇਜ਼ ਤਰੀਕਿਆਂ ਵਿੱਚੋਂ ਇੱਕ ਹੈ। ਕਲਾਉਡ ਵਰਚੁਅਲ ਮਸ਼ੀਨ ਸਨੈਪਸ਼ਾਟ ਦੇ ਉਲਟ ਜੋ 7-ਦਿਨ ਦੇ ਰੀਸਾਈਕਲ ਬਿਨ ਵਿੱਚ ਚਲੇ ਜਾਂਦੇ ਹਨ, ਡੌਕਰ ਦਾ ਸਥਾਨਕ ਵਾਲੀਅਮ ਡਰਾਈਵਰ (/var/lib/docker/volumes/<name>/_data) ਅਤੇ ਕੁਬਰਨੇਟਸ local-path / hostPath ਪ੍ਰੋਵੀਜ਼ਨਰ ਤੁਰੰਤ ਸਟੈਂਡਰਡ POSIX ਜਾਰੀ ਕਰਦੇ ਹਨ unlink() ਅਤੇ rmdir() ਅੰਡਰਲਾਈੰਗ ਲੀਨਕਸ ਹੋਸਟ ਫਾਈਲ ਸਿਸਟਮ (ext4, XFS, ਜਾਂ Btrfs). ਕਮਾਂਡ ਖਤਮ ਹੋਣ ਤੋਂ ਬਾਅਦ ਉਸ ਲੀਨਕਸ ਹੋਸਟ 'ਤੇ ਹੋਣ ਵਾਲੀ ਹਰ ਲਿਖਤ ਡਿਸਕ 'ਤੇ ਖਾਲੀ ਕੀਤੇ ਡਾਟਾਬੇਸ ਬਲਾਕਾਂ ਨੂੰ ਓਵਰਰਾਈਟ ਕਰ ਸਕਦੀ ਹੈ। ਜੇਕਰ ਤੁਹਾਡੀ ਸਰਵਰ ਡਿਸਕ 100 ਪ੍ਰਤੀਸ਼ਤ (0 bytes freeਕਿਸੇ ਦੇ ਭੱਜਣ ਤੋਂ ਪਹਿਲਾਂ docker system prune --volumes ਪੈਨਿਕ ਵਿੱਚ, ਸਲਾਹ ਕਰੋ ਸਰਵਰ ਡਿਸਕ 100% ਪੂਰੀ, ਡਾਟਾਬੇਸ WAL ਲੌਗ ਬਲੋਟ, ਅਤੇ ਜ਼ੀਰੋ-ਸਪੇਸ ਰਿਕਵਰੀ; ਕੰਟੇਨਰਾਂ ਦੇ ਬਾਹਰ ਬੇਅਰ-ਮੈਟਲ ਲੀਨਕਸ ਫਾਈਲਾਂ ਨੂੰ ਮਿਟਾਉਣ ਲਈ, ਵੇਖੋ ext4, XFS, APFS, ਅਤੇ NTFS 'ਤੇ ਐਕਸੀਡੈਂਟਲ rm -rf ਜਾਂ Shift-Delete: ਰੀਡ-ਓਨਲੀ ਰੀਮਾਉਂਟ ਅਤੇ ਇਨੋਡ ਕਾਰਵਿੰਗ ਅਤੇ ਵਰਚੁਅਲ ਮਸ਼ੀਨ VMDK, VHDX, ਅਤੇ qcow2 ਸਨੈਪਸ਼ਾਟ ਚੇਨ ਭ੍ਰਿਸ਼ਟਾਚਾਰ ਅਤੇ ਹਾਈਪਰਵਾਈਜ਼ਰ ਬਚਾਅ. ਜੇਕਰ ਇਹ ਉਤਪਾਦਨ ਆਊਟੇਜ ਹਸਪਤਾਲ ਦੇ ਮਰੀਜ਼ਾਂ ਦੀ ਦੇਖਭਾਲ, ਐਮਰਜੈਂਸੀ ਡਿਸਪੈਚ, ਜਾਂ ਜਨਤਕ ਉਪਯੋਗਤਾ ਸੁਰੱਖਿਆ ਪ੍ਰਣਾਲੀਆਂ ਨੂੰ ਪ੍ਰਭਾਵਤ ਕਰਦਾ ਹੈ, ਤਾਂ ਆਪਣੇ ਸਥਾਨਕ ਐਮਰਜੈਂਸੀ ਨੰਬਰ 'ਤੇ ਕਾਲ ਕਰੋ (911 ਸੰਯੁਕਤ ਰਾਜ ਅਤੇ ਕੈਨੇਡਾ ਵਿੱਚ, 112 ਯੂਰਪੀਅਨ ਯੂਨੀਅਨ ਵਿੱਚ, 999 ਯੂਨਾਈਟਿਡ ਕਿੰਗਡਮ ਵਿੱਚ) ਜਾਂ ਸਾਡੀ ਡਾਇਰੈਕਟਰੀ ਦੀ ਜਾਂਚ ਕਰੋ ਐਮਰਜੈਂਸੀ ਨੰਬਰ.
ਹੁਣ ਇਹ ਕਰੋ¶
- ** ਨਾ ਦੌੜੋ
docker compose up -d,systemctl restart docker, ਜਾਂ ਕੁਬਰਨੇਟਸ ਪੌਡ ਨੂੰ ਦੁਬਾਰਾ ਲਾਗੂ ਕਰੋ**: ਕੰਟੇਨਰ ਨੂੰ ਦੁਬਾਰਾ ਬਣਾਉਣਾ ਜਾਂ ਡੌਕਰ ਡੈਮਨ ਨੂੰ ਮੁੜ ਚਾਲੂ ਕਰਨਾ ਮੈਗਾਬਾਈਟ ਨਵੇਂ ਲਿਖਦਾ ਹੈoverlay2ਮੈਟਾਡੇਟਾ, ਕੰਟੇਨਰ JSON ਲੌਗਸ, ਅਤੇ ਤਾਜ਼ਾ ਸ਼ੁਰੂ ਕੀਤੀਆਂ ਖਾਲੀ ਡਾਟਾਬੇਸ ਫਾਈਲਾਂ (initdb) ਸਿੱਧੇ ਤੌਰ 'ਤੇ ਸਹੀext4ਜਾਂXFSਬਲਾਕ ਜਿੱਥੇ ਤੁਹਾਡੀ ਡਿਲੀਟ ਕੀਤੀ ਵਾਲੀਅਮ ਸਕਿੰਟ ਪਹਿਲਾਂ ਬੈਠੀ ਸੀ। - ** 5 ਸਕਿੰਟਾਂ ਵਿੱਚ ਜਾਂਚ ਕਰੋ ਜੇਕਰ ਕੰਟੇਨਰ ਪ੍ਰਕਿਰਿਆ (
postgres,mysqld,redis-server,node,python) ਅਜੇ ਵੀ ਮੈਮੋਰੀ ਵਿੱਚ ਚੱਲ ਰਿਹਾ ਹੈ (ps auxਅਤੇsudo lsof +L1);PID) ਇੱਕ ਓਪਨ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰ ਰੱਖਦਾ ਹੈ (FD). ਤੁਸੀਂ ਉਹਨਾਂ ਫਾਈਲਾਂ ਨੂੰ ਸਿੱਧੇ ਬਾਹਰ ਕਾਪੀ ਕਰ ਸਕਦੇ ਹੋ/proc/<PID>/fd/ਜਾਂ/proc/<PID>/root/ਕੰਟੇਨਰ ਦੇ ਰੁਕਣ ਤੋਂ ਪਹਿਲਾਂ ਜ਼ੀਰੋ ਡਾਟਾ ਨੁਕਸਾਨ ਦੇ ਨਾਲ। - ** ਜੇ ਕੰਟੇਨਰ ਪਹਿਲਾਂ ਹੀ ਬੰਦ ਹੋ ਗਿਆ ਹੈ ਅਤੇ ਵਾਲੀਅਮ ਮਿਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ (
docker compose down -vਜਾਂdocker system prune --volumes), ਫ੍ਰੀਜ਼ ਹੋਸਟ ਡਿਸਕ ਤੁਰੰਤ ਲਿਖਦੀ ਹੈ**: ਡੌਕਰ ਡੈਮਨ ਨੂੰ ਰੋਕੋ (sudo systemctl stop docker.socket docker.service containerd) ਇਸ ਲਈ ਬੈਕਗ੍ਰਾਉਂਡ ਕੰਟੇਨਰ ਅਤੇ ਸਿਹਤ ਜਾਂਚ ਲੌਗ ਇਨ ਲਿਖਣਾ ਬੰਦ ਕਰ ਦਿੰਦੇ ਹਨ/var/lib/docker, ਫਿਰ ਜਾਂ ਤਾਂ ਰੀਮਾਉਂਟ ਕਰੋ/var/lib/docker(ਜਾਂ ਰੂਟ/ਭਾਗ) ਸਿਰਫ਼ ਪੜ੍ਹਨ ਲਈ (sudo mount -o remount,ro /) ਜਾਂ ਇੱਕ ਤੁਰੰਤ ਬਲਾਕ-ਪੱਧਰ ਦੇ ਕਲਾਉਡ ਵਾਲੀਅਮ ਸਨੈਪਸ਼ਾਟ ਲਓ (AWS EBS Snapshot,GCP Persistent Disk Snapshot,DigitalOcean Volume Snapshot) ਕਿਸੇ ਵੀ ਚੀਜ਼ ਨੂੰ ਛੂਹਣ ਤੋਂ ਪਹਿਲਾਂ। - ** ਜੇ ਤੁਸੀਂ ਕੁਬਰਨੇਟਸ 'ਤੇ ਹੋ (
kubectl delete pvcਜਾਂkubectl delete namespace), ਪਰਸਿਸਟੈਂਟ ਵਾਲੀਅਮ ਦੀ ਜਾਂਚ ਕਰੋ (PV)ReclaimPolicy(kubectl get pv) ਤੁਰੰਤ**: - ਜੇਕਰ ਦ
PVਸੀpersistentVolumeReclaimPolicy: Retain, ਤੁਹਾਡਾ ਡੇਟਾ ਮਿਟਾਇਆ ਨਹੀਂ ਗਿਆ: thePVਬਸ ਵਿੱਚ ਚਲੇ ਗਏReleasedਸਥਿਤੀ ਅਤੇ ਤੁਹਾਡੀ ਕਲਾਉਡ ਡਿਸਕ (EBS,Azure Disk,Ceph RBD,NFS) 100 ਪ੍ਰਤੀਸ਼ਤ ਬਰਕਰਾਰ ਹੈ। - ਭਾਵੇਂ
kubectl delete pvcਵਿੱਚ ਫਸਿਆ ਹੋਇਆ ਹੈTerminating, ਕੁਬਰਨੇਟਸ ** ਫਾਈਨਲਾਈਜ਼ਰ (kubernetes.io/pvc-protection)** CSI ਡਰਾਈਵਰ ਨੂੰ ਅੰਡਰਲਾਈੰਗ ਸਟੋਰੇਜ ਨੂੰ ਮਿਟਾਉਣ ਤੋਂ ਰੋਕੋ ਜਦੋਂ ਤੱਕ ਕੋਈ ਵੀ Pod ਅਜੇ ਵੀ ਪੀਵੀਸੀ ਦਾ ਹਵਾਲਾ ਦਿੰਦਾ ਹੈ। Pod ਨੂੰ ਉਦੋਂ ਤੱਕ ਨਾ ਮਿਟਾਓ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਚੱਲ ਰਹੇ Pod ਵਿੱਚੋਂ ਡੇਟਾ ਦੀ ਨਕਲ ਨਹੀਂ ਕਰਦੇ। - ** ਅੰਡਰਲਾਈੰਗ ਬਲਾਕ ਭਾਗ ਦੀ ਤਸਵੀਰ (
dd/ddrescueSSH ਉੱਤੇ) ਇੱਕ ਬਾਹਰੀ ਡਿਸਕ ਜਾਂ ਵੱਖਰਾ ਕਲਾਉਡ ਵਾਲੀਅਮ ਚਲਾਉਣ ਤੋਂ ਪਹਿਲਾਂext4magic,extundelete, ਜਾਂPhotoRec**: ਕਦੇ ਵੀ ਫਾਈਲ ਕਾਰਵਰ ਨਾ ਚਲਾਓ ਜੋ ਆਉਟਪੁੱਟ ਫਾਈਲਾਂ ਨੂੰ ਉਸੇ ਡਿਸਕ ਭਾਗ ਉੱਤੇ ਲਿਖਦੇ ਹਨ ਜਿੱਥੋਂ ਤੁਸੀਂ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰ ਰਹੇ ਹੋ/var/lib/docker/volumes. - ਕੁਬਰਨੇਟਸ ਕਲੱਸਟਰ ਸਟੇਟ ਨੂੰ ਖਰਾਬ ਜਾਂ ਗਲਤੀ ਨਾਲ ਪੂੰਝਣ ਲਈ (
kubectl delete crd/namespace), ਰੁਕੋkube-apiserverਅਤੇ ਆਪਣੇ ਨਵੀਨਤਮ ਨੂੰ ਰੀਸਟੋਰ ਕਰੋetcdਸਨੈਪਸ਼ਾਟ (etcdctl snapshot restore): ਜੇਕਰ ਕਲੱਸਟਰ ਸਟੇਟ ਵਿੱਚ ਹੈetcdਨੂੰ ਮਿਟਾਇਆ ਗਿਆ ਸੀ ਜਦੋਂ ਕਿ ਅੰਡਰਲਾਈੰਗ ਕਲਾਉਡ ਸਟੋਰੇਜ ਵਾਲੀਅਮ ਅਜੇ ਵੀ ਮੌਜੂਦ ਹਨ, ਰੀਸਟੋਰ ਹੋ ਰਿਹਾ ਹੈetcdਸਭ ਠੀਕ ਕਰਦਾ ਹੈPV,PVC,Secret, ਅਤੇConfigMapਇੱਕੋ ਸਮੇਂ ਵਸਤੂਆਂ।
Danger
** ਕਦੇ ਨਾ ਹਟਾਓ kubernetes.io/pvc-protection ਜਾਂ kubernetes.io/pv-protection ਦੇ ਨਾਲ ਫਾਈਨਲ ਕਰਨ ਵਾਲਾ kubectl patch ... -p '{"metadata":{"finalizers":null}}' ਜਦੋਂ ਇੱਕ ਪੀਵੀਸੀ ਵਿੱਚ ਫਸਿਆ ਹੁੰਦਾ ਹੈ Terminating**: ਤੁਹਾਡੇ ਕਲਾਉਡ CSI ਡ੍ਰਾਈਵਰ (aws-ebs-csi-driver, pd.csi.storage.gke.io, Longhorn, Rook-Ceph) ਇੱਕ ਹਾਰਡਵੇਅਰ ਜਾਰੀ ਕਰਨ ਤੋਂ DeleteVolume ਤੁਹਾਡੀ ਉਤਪਾਦਨ ਡਿਸਕ ਨੂੰ ਨਸ਼ਟ ਕਰਨ ਲਈ API ਕਾਲ। ਜਦੋਂ ਕਿ ਪੀ.ਵੀ.ਸੀ Terminating, ਪੌਡ ਅਜੇ ਵੀ ਚੱਲ ਰਿਹਾ ਹੈ ਅਤੇ ਵਾਲੀਅਮ ਅਜੇ ਵੀ ਮਾਊਂਟ ਹੈ: ਚਲਾਓ kubectl exec ਜਾਂ kubectl cp (ਜਾਂ pg_dump / mysqldump) Pod ਬੰਦ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੇ ਡੇਟਾਬੇਸ ਦੇ 100 ਪ੍ਰਤੀਸ਼ਤ ਨੂੰ ਬਚਾਉਣ ਲਈ ਤੁਰੰਤ.
ਫੈਸਲੇ ਦਾ ਰੁੱਖ: ਮਿਟਾਇਆ ਡੌਕਰ ਵਾਲੀਅਮ, overlay2 ਪਰਤ, ਜਾਂ ਕੁਬਰਨੇਟਸ ਪੀਵੀਸੀ ਟ੍ਰਾਈਜ¶
ਕੀ ਕੰਟੇਨਰ ਪ੍ਰਕਿਰਿਆ ਅਜੇ ਵੀ ਜ਼ਿੰਦਾ ਹੈ, ਕੀ ਵਾਲੀਅਮ ਨੂੰ ਲੋਕਲ ਡਿਸਕ ਜਾਂ ਕਲਾਉਡ CSI ਸਟੋਰੇਜ ਦੁਆਰਾ ਬੈਕ ਕੀਤਾ ਗਿਆ ਸੀ, ਅਤੇ ਕਿਹੜਾ ਫਾਈਲ ਸਿਸਟਮ ਹੋਸਟ ਹੈ ਜਾਂ ਨਹੀਂ, ਇਸ ਆਧਾਰ 'ਤੇ ਸਭ ਤੋਂ ਤੇਜ਼ ਜ਼ੀਰੋ-ਨੁਕਸਾਨ ਰਿਕਵਰੀ ਮਾਰਗ ਦੀ ਚੋਣ ਕਰਨ ਲਈ ਇਸ ਫਲੋਚਾਰਟ ਦੀ ਵਰਤੋਂ ਕਰੋ। /var/lib/docker:
flowchart TD
Start["ਡੌਕਰ ਜਾਂ ਕੁਬਰਨੇਟਸ ਡਿਲੀਟ ਕਮਾਂਡ ਤੋਂ ਬਾਅਦ ਉਤਪਾਦਨ ਡੇਟਾ ਗੁੰਮ ਹੈ"] --> WhichEnv{"ਕਿਹੜੇ ਪਲੇਟਫਾਰਮ ਅਤੇ ਕਮਾਂਡ ਨੇ ਨੁਕਸਾਨ ਨੂੰ ਸ਼ੁਰੂ ਕੀਤਾ?"}
WhichEnv -->|"ਡੌਕਰ: ਕੰਟੇਨਰ ਅਜੇ ਵੀ ਚੱਲ ਰਿਹਾ ਹੈ (ਵਾਲੀਅਮ/ਕੰਟੇਨਰ ਦੇ ਅੰਦਰ ਅਣਲਿੰਕ ਕੀਤੀਆਂ ਫਾਈਲਾਂ)"| ProcRescue["sudo lsof +L1 ਅਤੇ /proc/PID/fd/N ਜਾਂ /proc/PID/root/ ਰਾਹੀਂ ਅਨਲਿੰਕਡ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰਾਂ ਨੂੰ ਖੋਲ੍ਹੋ।"]
WhichEnv -->|"ਡੌਕਰ: ਕੰਟੇਨਰ ਰੋਕਿਆ ਗਿਆ ਅਤੇ ਵਾਲੀਅਮ ਮਿਟਾਇਆ ਗਿਆ (ਕੰਪੋਜ਼ ਡਾਊਨ -v / ਪ੍ਰੂਨ --ਵੋਲਿਊਮ)"| StopDocker["ਤੁਰੰਤ ਚਲਾਓ: sudo systemctl stop docker.socket docker containerd"]
WhichEnv -->|"ਕੁਬਰਨੇਟਸ: kubectl ਮਿਟਾਓ pvc / pv / statefulset / namespace"| K8sCheck{"ਕੀ ਪੌਡ ਅਜੇ ਵੀ ਚੱਲ ਰਿਹਾ ਹੈ ਜਾਂ ਕੀ ਪੀਵੀਸੀ ਸਮਾਪਤ ਹੋਣ ਵਿੱਚ ਫਸਿਆ ਹੋਇਆ ਹੈ?"}
K8sCheck -->|"ਹਾਂ: ਪੌਡ ਅਜੇ ਵੀ ਚੱਲ ਰਿਹਾ ਹੈ (ਫਾਈਨਲਾਈਜ਼ਰ ਬਲਾਕਿੰਗ ਸੀਐਸਆਈ ਡਿਲੀਟ)"| K8sExec["Pod ਨੂੰ ਨਾ ਮਿਟਾਓ -> kubectl exec/pg_dump/tar ਨੂੰ ਸਥਾਨਕ ਡਿਸਕ ਉੱਤੇ ਤੁਰੰਤ ਚਲਾਓ।"]
K8sCheck -->|"ਨਹੀਂ: Pod Gone -> ਚੈੱਕ kubectl get pv"| ReclaimCheck{"ਪੀਵੀ ਰੀਕਲੇਮ ਪਾਲਿਸੀ ਕੀ ਸੀ?"}
ReclaimCheck -->|"ਬਰਕਰਾਰ ਰੱਖੋ (PV ਸਥਿਤੀ = ਜਾਰੀ)"| ClearClaimRef["100% ਡਾਟਾ ਬਰਕਰਾਰ -> spec.claimRef.uid ਨੂੰ ਹਟਾਉਣ ਲਈ PV ਸੰਪਾਦਿਤ ਕਰੋ -> ਨਵੇਂ PVC ਨਾਲ ਮੁੜ-ਬਾਈਡ ਕਰੋ"]
ReclaimCheck -->|"ਮਿਟਾਓ (ਕਲਾਊਡ EBS / PD / Longhorn / Local-Path)"| CloudOrLocal{"ਕਲਾਉਡ CSI ਵਾਲੀਅਮ ਜਾਂ ਸਥਾਨਕ ਹੋਸਟ ਡਿਸਕ?"}
CloudOrLocal -->|"ਕਲਾਉਡ CSI (AWS EBS / GCP / Azure / Ceph)"| CloudSnap["ਕਲਾਉਡ ਕੰਸੋਲ ਰੀਸਾਈਕਲ ਬਿਨ / ਆਟੋਮੇਟਿਡ EBS ਸਨੈਪਸ਼ਾਟ / Ceph RBD ਰੱਦੀ (rbd ਰੱਦੀ ls) ਦੀ ਜਾਂਚ ਕਰੋ"]
CloudOrLocal -->|"ਲੋਕਲ ਨੋਡ ਡਿਸਕ (ਲੋਕਲ-ਪਾਥ / ਹੋਸਟਪਾਥ)"| StopDocker
StopDocker --> RemountRO["ਰੀਮਾਉਂਟ ਹੋਸਟ ਪਾਰਟੀਸ਼ਨ ਰੀਡ-ਓਨਲੀ (ਮਾਊਟ -ਓ ਰੀਮਾਉਂਟ,ro) ਜਾਂ SSH ਉੱਤੇ ਸਟ੍ਰੀਮ ਬਲੌਕ ਚਿੱਤਰ"]
RemountRO --> HostFS{"ਕੀ ਫਾਈਲਸਿਸਟਮ ਹੋਸਟ /var/lib/docker?"}
HostFS -->|"ext4"| Ext4Rec["debugfs / ext4magic ਜਰਨਲ ਇਨੋਡ ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਰੋਲਬੈਕ (-ਇੱਕ ਟਾਈਮਸਟੈਂਪ) ਦੀ ਵਰਤੋਂ ਕਰੋ"]
HostFS -->|"XFS / Btrfs"| CarveRec["SQLite, Postgres Heap, ਜਾਂ InnoDB .ibd ਲਈ Btrfs ਰੂਟਸ / xfs_irecover / ਕਸਟਮ ਦਸਤਖਤ ਕਾਰਵਿੰਗ ਦੀ ਵਰਤੋਂ ਕਰੋ"]
ਪੜਾਅ 1: ਡੌਕਰ ਅਤੇ ਕੁਬਰਨੇਟਸ ਅਸਲ ਵਿੱਚ ਡਿਸਕ ਉੱਤੇ ਵਾਲੀਅਮ ਨੂੰ ਕਿਵੇਂ ਮਿਟਾਉਂਦੇ ਹਨ¶
ਕੋਈ ਵੀ ਰਿਕਵਰੀ ਕਮਾਂਡ ਚਲਾਉਣ ਤੋਂ ਪਹਿਲਾਂ, ਇਹ ਸਮਝੋ ਕਿ ਤੁਹਾਡਾ ਡਾਟਾ ਲੀਨਕਸ ਹੋਸਟ 'ਤੇ ਸਰੀਰਕ ਤੌਰ 'ਤੇ ਕਿੱਥੇ ਰਹਿੰਦਾ ਸੀ ਅਤੇ ਡਿਲੀਟ ਕਮਾਂਡ ਨੇ ਅਸਲ ਵਿੱਚ ਕੀ ਛੂਹਿਆ ਸੀ:
| ਸਟੋਰੇਜ ਦੀ ਕਿਸਮ ਅਤੇ ਮਿਟਾਓ ਕਮਾਂਡ | ਲੀਨਕਸ ਨੋਡ 'ਤੇ ਹੋਸਟ ਫਾਈਲਸਿਸਟਮ ਮਾਰਗ | ਡਿਲੀਟ ਕਮਾਂਡ ਨੇ ਅਸਲ ਵਿੱਚ ਕੀ ਕੀਤਾ | ਤੁਰੰਤ ਰਿਕਵਰੀ ਵਿਧੀ |
|---|---|---|---|
** ਨਾਮੀ ਡੌਕਰ ਵਾਲੀਅਮ (docker volume rm ਜਾਂ docker compose down -v)** |
/var/lib/docker/volumes/<vol_name>/_data |
ਅੰਦਰਲੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਅਣਲਿੰਕ ਕੀਤਾ _data/ ਅਤੇ ਤੋਂ ਡਾਇਰੈਕਟਰੀ ਐਂਟਰੀ ਨੂੰ ਹਟਾ ਦਿੱਤਾ /var/lib/docker/volumes/metadata.db (boltdb). |
ਡੌਕਰ ਨੂੰ ਤੁਰੰਤ ਰੋਕੋ, ਮੁੜ ਮਾਊਂਟ ਕਰੋ /var/lib/docker ਸਿਰਫ਼-ਪੜ੍ਹਨ ਲਈ, ਅਤੇ ਇਸ ਰਾਹੀਂ ਅਣਲਿੰਕ ਕੀਤੇ ਆਈਨੋਡਾਂ ਨੂੰ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰੋ ext4magic / debugfs ਜਾਂ ਦਸਤਖਤ ਨੱਕਾਸ਼ੀ. |
ਅਨਾਮ ਡੌਕਰ ਵਾਲੀਅਮ (docker run -v /var/lib/mysql + docker rm -v ਜਾਂ docker system prune --volumes) |
/var/lib/docker/volumes/<64-char-hex-id>/_data |
docker system prune --volumes ਹਰੇਕ ਅਗਿਆਤ ਅਤੇ ਨਾਮਿਤ ਵਾਲੀਅਮ ਨੂੰ ਮਿਟਾ ਦਿੰਦਾ ਹੈ ਜੋ ਵਰਤਮਾਨ ਵਿੱਚ ਘੱਟੋ-ਘੱਟ ਇੱਕ ਮੌਜੂਦਾ ਕੰਟੇਨਰ ਦੁਆਰਾ ਹਵਾਲਾ ਨਹੀਂ ਦਿੱਤਾ ਗਿਆ ਹੈ। |
ਡੌਕਰ ਨੂੰ ਤੁਰੰਤ ਰੋਕੋ; ਜੇਕਰ ਤੁਹਾਡੇ ਕੋਲ ਹੋਰ ਰੁਕੇ ਹੋਏ ਕੰਟੇਨਰ ਸਨ ਜਿਨ੍ਹਾਂ ਦੀ ਮਾਤਰਾ ਛੇਤੀ ਨਹੀਂ ਕੀਤੀ ਗਈ ਸੀ, ਤਾਂ ਬਾਕੀ ਬਚੇ ਹੋਏ ਚੈੱਕ ਕਰੋ /var/lib/docker/volumes/*/_data ਨਾ-ਨਿਰਧਾਰਤ ਬਲਾਕਾਂ ਨੂੰ ਬਣਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਪਹਿਲਾਂ ਫੋਲਡਰ। |
ਕੰਟੇਨਰ ਲਿਖਣਯੋਗ ਪਰਤ (docker rm <container> ਜਦੋਂ ਡੇਟਾ ਇੱਕ ਵਾਲੀਅਮ ਦੇ ਬਾਹਰ ਲਿਖਿਆ ਗਿਆ ਸੀ) |
/var/lib/docker/overlay2/<layer-id>/diff/ |
ਕੰਟੇਨਰ ਦੇ ਉੱਪਰਲੇ ਹਿੱਸੇ ਨੂੰ ਅਣਲਿੰਕ ਕੀਤਾ diff/ ਦੇ ਅੰਦਰ ਡਾਇਰੈਕਟਰੀ overlay2 ਸਟੋਰੇਜ਼ ਡਰਾਈਵਰ. |
ਡੌਕਰ ਨੂੰ ਤੁਰੰਤ ਰੋਕੋ ਅਤੇ ਅਣਲਿੰਕ ਕੀਤੇ ਡਾਇਰੈਕਟਰੀ ਟ੍ਰੀ ਨੂੰ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰੋ ext4 ਜਰਨਲ ਜ XFS ਬਲਾਕ. |
** ਮੈਕੋਸ ਜਾਂ ਵਿੰਡੋਜ਼ 'ਤੇ ਡੌਕਰ ਡੈਸਕਟਾਪ (docker system prune --volumes)** |
ਇੱਕ ਸਿੰਗਲ ਵਰਚੁਅਲ ਮਸ਼ੀਨ ਡਿਸਕ ਚਿੱਤਰ ਦੇ ਅੰਦਰ: -/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw (macOS) ਜਾਂ %LocalAppData%\Docker\wsl\disk\docker_data.vhdx (ਵਿੰਡੋਜ਼ WSL2)। |
ਭੇਜਿਆ unlink() Linux VM ਦੇ ਅੰਦਰ, ਅਤੇ ਜੇਕਰ discard/TRIM 'ਤੇ ਸਰਗਰਮ ਹੈ Docker.raw / docker_data.vhdx, ਹੋਸਟ ਫਾਈਲ ਵਿੱਚ ਸਪਾਰਸ ਹੋਲ ਪੰਚ ਕੀਤੇ ਗਏ ਹਨ। |
5 ਸਕਿੰਟਾਂ ਦੇ ਅੰਦਰ ਡੌਕਰ ਡੈਸਕਟੌਪ ਛੱਡੋ, ਕਾਪੀ ਕਰੋ Docker.raw ਜਾਂ docker_data.vhdx ਇੱਕ ਬਾਹਰੀ ਡਰਾਈਵ ਨੂੰ, ਅਤੇ ਚਲਾਓ ext4magic / PhotoRec ਵਰਚੁਅਲ ਡਿਸਕ ਚਿੱਤਰ ਦੇ ਵਿਰੁੱਧ. |
** ਕੁਬਰਨੇਟਸ ਪੀਵੀਸੀ ਨਾਲ Delete Ceph RBD 'ਤੇ ਮੁੜ ਦਾਅਵਾ ਨੀਤੀ (Rook-Ceph) ਜਾਂ ਲੋਂਗਹੋਰਨ** |
Ceph OSD ਪੂਲ (rbd) ਜਾਂ /var/lib/longhorn/replicas/. |
ਜੇ csi-rbdplugin ਕੋਲ ਹੈ trash ਸਮਰੱਥ (rbd trash), RBD ਚਿੱਤਰ ਨੂੰ Ceph ਰੱਦੀ ਵਿੱਚ ਭੇਜ ਦਿੱਤਾ ਗਿਆ ਹੈ; ਨਹੀਂ ਤਾਂ ਬਲਾਕ ਅਣਮੈਪ ਕੀਤੇ ਗਏ ਹਨ। |
ਚਲਾਓ rbd trash ls --pool <pool> ਦੇ ਅੰਦਰ rook-ceph-tools ਪੌਡ ਅਤੇ ਨਾਲ ਰੀਸਟੋਰ rbd trash restore. |
ਪੜਾਅ 2: ਇੱਕ ਅਜੇ ਵੀ ਚੱਲ ਰਹੇ ਕੰਟੇਨਰ ਤੋਂ ਓਪਨ ਡੇਟਾਬੇਸ ਫਾਈਲਾਂ ਨੂੰ ਬਚਾਉਣਾ (/proc/<pid>/fd/)¶
ਉਡੀਕ ਕਰੋ: ਕੀ ਕੰਟੇਨਰ ਅਜੇ ਵੀ ਚੱਲ ਰਿਹਾ ਹੈ?
ਅਕਸਰ, ਇੱਕ ਇੰਜੀਨੀਅਰ ਇੱਕ ਐਪਲੀਕੇਸ਼ਨ ਮਾਈਗ੍ਰੇਸ਼ਨ ਸਕ੍ਰਿਪਟ, ਇੱਕ ਕਲੀਨਅਪ ਕ੍ਰੋਨ ਜੌਬ, ਜਾਂ ਇੱਕ ਮੈਨੂਅਲ ਚਲਾਉਂਦਾ ਹੈ rm -rf /var/lib/postgresql/data/* ਜਾਂ rm /app/data/production.sqlite3 ਚੱਲ ਰਹੇ ਕੰਟੇਨਰ ਦੇ ਅੰਦਰ, ਜਾਂ ਅੰਡਰਲਾਈੰਗ ਹੋਸਟ ਬਾਇੰਡ-ਮਾਊਂਟ ਫੋਲਡਰ ਨੂੰ ਮਿਟਾਉਂਦਾ ਹੈ /opt/app/data ਜਦੋਂ ਕਿ ਕੰਟੇਨਰ ਖੁਦ (postgres, mysqld, mariadbd, redis-server, mongod, gunicorn, nodeਅਜੇ ਵੀ ਚੱਲ ਰਿਹਾ ਹੈ।
ਲੀਨਕਸ ਵਿੱਚ, ਇੱਕ ਫਾਈਲ ਨੂੰ ਡਿਸਕ ਤੋਂ ਨਹੀਂ ਮਿਟਾਇਆ ਜਾਂਦਾ ਹੈ ਜਦੋਂ rm ਜਾਂ unlink() ਕਿਹਾ ਜਾਂਦਾ ਹੈ। ਇਸ ਦੇ ਡਿਸਕ ਬਲਾਕ ਅਤੇ ਆਈਨੋਡ 100 ਪ੍ਰਤੀਸ਼ਤ ਨਿਰਧਾਰਤ ਅਤੇ ਪੜ੍ਹਨਯੋਗ ਰਹਿੰਦੇ ਹਨ ਜਦੋਂ ਤੱਕ ਇੱਕ ਓਪਨ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰ ਰੱਖਣ ਵਾਲੀ ਆਖਰੀ ਪ੍ਰਕਿਰਿਆ (FD) ਉਸ ਆਈਨੋਡ ਨੂੰ ਬੰਦ ਕਰ ਦਿੰਦਾ ਹੈ ਜਾਂ ਬਾਹਰ ਆ ਜਾਂਦਾ ਹੈ।
ਕਦਮ 1: ਹੋਸਟ ਪ੍ਰਕਿਰਿਆ ID ਲੱਭੋ (PID) ਕੰਟੇਨਰ ਪ੍ਰਕਿਰਿਆ ਦਾ¶
ਲੀਨਕਸ ਹੋਸਟ ਨੋਡ 'ਤੇ (ਕੰਟੇਨਰ ਦੇ ਅੰਦਰ ਨਹੀਂ), ਹੋਸਟ ਨੂੰ ਲੱਭੋ PID ਤੁਹਾਡੇ ਡੇਟਾਬੇਸ ਜਾਂ ਐਪਲੀਕੇਸ਼ਨ ਪ੍ਰਕਿਰਿਆ ਦਾ:
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: ਇਹ ਕਹਿੰਦਾ ਹੈ 0, ਅਤੇ ਫਾਈਲ ਦਾ ਨਾਮ ** ਨਾਲ ਖਤਮ ਹੁੰਦਾ ਹੈ(deleted). ਤੋਂ ਫਾਈਲ ਪੂਰੀ ਤਰ੍ਹਾਂ ਖਤਮ ਹੋ ਗਈ ਹੈ ls /var/lib/docker/volumes/..., ਫਿਰ ਵੀ ** ਹਰ ਇੱਕ ਬਾਈਟ (482 MB ਵਿੱਚ users.ibd, 89 MB ਵਿੱਚ production.sqlite3) ਅੰਦਰ ਅਜੇ ਵੀ ਜਿੰਦਾ ਹੈ /proc/<PID>/fd/<FD>.
ਕਦਮ 2: ਅਣਲਿੰਕ ਕੀਤੇ ਡੇਟਾਬੇਸ ਫਾਈਲਾਂ ਨੂੰ ਸਿੱਧੇ ਬਾਹਰ ਕਾਪੀ ਕਰੋ /proc/<PID>/fd/¶
ਕੰਟੇਨਰ ਨੂੰ **ਨਾ ** ਰੋਕੋ ਜਾਂ ਮੁੜ ਚਾਲੂ ਕਰੋ। ਜਦੋਂ ਪ੍ਰਕਿਰਿਆ ਅਜੇ ਵੀ ਚੱਲ ਰਹੀ ਹੈ, ਤਾਂ ਕੱਚੀ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰਾਂ ਨੂੰ ਸਿੱਧੇ ਆਪਣੇ ਹੋਸਟ ਦੇ ਇੱਕ ਸੁਰੱਖਿਅਤ ਫੋਲਡਰ ਵਿੱਚ ਕਾਪੀ ਕਰੋ:
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
ਕਦਮ 3: ਹੋਰ ਵੀ ਵਧੀਆ: ਲਾਈਵ ਲਾਜ਼ੀਕਲ ਡੰਪ ਚਲਾਓ (pg_dump / mysqldump / .backupਕੰਟੇਨਰ FD ਬੰਦ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ¶
ਜੇ postgres ਜਾਂ mysqld ਮੈਮੋਰੀ ਵਿੱਚ ਖੁੱਲ੍ਹੀਆਂ ਇਸਦੀਆਂ ਡਾਟਾ ਫਾਈਲਾਂ ਨਾਲ ਅਜੇ ਵੀ ਚੱਲ ਰਿਹਾ ਹੈ ਅਤੇ /proc/<PID>/fd/, ਪਹਿਲਾਂ ਮੌਜੂਦਾ ਯੂਨਿਕਸ ਸਾਕਟ ਜਾਂ 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 ਕਾਰਜਕਰਤਾ ਪ੍ਰਕਿਰਿਆਵਾਂ ਵਿੱਚ ਗਤੀਸ਼ੀਲ ਤੌਰ 'ਤੇ ਫਾਈਲਾਂ ਨੂੰ ਵੰਡੋ, ਇਸ ਲਈ pg_dump ਅਣਕੈਸ਼ ਟੇਬਲ 'ਤੇ ਫੇਲ ਹੋ ਸਕਦਾ ਹੈ; ਹਰ ਓਪਨ ਦੀ ਨਕਲ ਕਰਨ ਦੇ ਨਾਲ ਲਾਈਵ SQL ਪੁੱਛਗਿੱਛ ਨੂੰ ਜੋੜਨਾ /proc/<pid>/fd/* ਸਾਰੇ ਵਿੱਚ postgres ਚਾਈਲਡ ਬੈਕਐਂਡ PIDs ਵੱਧ ਤੋਂ ਵੱਧ ਸੰਭਵ ਟੇਬਲ ਹੀਪ ਡੇਟਾ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰਦਾ ਹੈ।)
ਪੜਾਅ 3: ਮਿਟਾਏ ਗਏ ਡੌਕਰ ਵਾਲੀਅਮ ਨੂੰ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਨਾ ext4 ਜਾਂ XFS ਕੰਟੇਨਰ ਦੇ ਰੁਕਣ ਤੋਂ ਬਾਅਦ¶
ਜੇ ਤੁਸੀਂ ਭੱਜ ਗਏ ਤਾਂ ਕੀ ਹੋਵੇਗਾ docker compose down -v ਜਾਂ docker system prune --volumes, ਇਸ ਲਈ ਕੰਟੇਨਰ ਪਹਿਲਾਂ ਹੀ ਬੰਦ ਹੈ ਅਤੇ ਸਭ /proc/<pid>/fd/ ਵਰਣਨਕਾਰ ਬੰਦ ਹਨ? ਹੁਣ ਤੁਸੀਂ ਲੀਨਕਸ ਹੋਸਟ 'ਤੇ ਬੈਕਗਰਾਊਂਡ ਡਿਸਕ ਰਾਈਟਸ ਦੇ ਵਿਰੁੱਧ ਦੌੜ ਵਿੱਚ ਹੋ।
ਕਦਮ 1: 10 ਸਕਿੰਟਾਂ ਦੇ ਅੰਦਰ ਲੀਨਕਸ ਹੋਸਟ ਫਾਈਲ ਸਿਸਟਮ ਨੂੰ ਫ੍ਰੀਜ਼ ਕਰੋ¶
- ਡੌਕਰ, ਕੰਟੇਨਰ, ਕੁਬੇਲੇਟ, ਅਤੇ ਕ੍ਰੋਨ ਨੂੰ ਤੁਰੰਤ ਰੋਕੋ ਇਸ ਲਈ ਕੋਈ ਵੀ ਕੰਟੇਨਰ, ਸਿਹਤ ਜਾਂਚ, ਜਾਂ ਲੌਗ ਰੋਟੇਟਰ ਹੋਰ ਬਾਈਟ ਨਹੀਂ ਲਿਖਦਾ ਹੈ
/var/lib/docker: - ** ਜਾਂਚ ਕਰੋ ਕਿ ਕਿਹੜਾ ਬਲਾਕ ਡਿਵਾਈਸ ਅਤੇ ਫਾਈਲ ਸਿਸਟਮ ਹੈ
/var/lib/docker**: - ਰੀਡ-ਓਨਲੀ ਭਾਗ ਨੂੰ ਮੁੜ ਮਾਊਂਟ ਕਰੋ (ਜਾਂ ਕਿਸੇ ਹੋਰ ਮਸ਼ੀਨ ਲਈ SSH ਉੱਤੇ ਇੱਕ ਕੱਚਾ ਭਾਗ ਚਿੱਤਰ ਸਟ੍ਰੀਮ ਕਰੋ):
- ਜੇ
/var/lib/dockerਇਸਦੇ ਆਪਣੇ ਸਮਰਪਿਤ ਭਾਗ ਜਾਂ LVM ਵਾਲੀਅਮ 'ਤੇ ਹੈ (ਉਦਾਹਰਨ ਲਈ/dev/nvme0n1p2ਜਾਂ/dev/mapper/vg0-docker), ਇਸਨੂੰ ਸਿਰਫ਼-ਪੜ੍ਹਨ ਲਈ ਤੁਰੰਤ ਰੀਮਾਉਂਟ ਕਰੋ: - ਜੇ
/var/lib/dockerਰੂਟ 'ਤੇ ਹੈ/ਭਾਗ (/, ਕਰਨਲ ਮੈਜਿਕ SysRq ਟਰਿੱਗਰ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਰੂਟ ਭਾਗ ਨੂੰ ਸਿਰਫ਼ ਪੜ੍ਹਨ ਲਈ ਮਜਬੂਰ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ (echo u | sudo tee /proc/sysrq-trigger) ਜਾਂsudo mount -o remount,ro /. - ਜੇਕਰ ਤੁਸੀਂ ਕਲਾਊਡ VPS (AWS EC2, GCP, DigitalOcean, Hetzner, Linode) 'ਤੇ ਹੋ: ਤੁਰੰਤ ਆਪਣੇ ਕਲਾਊਡ ਵੈੱਬ ਕੰਸੋਲ 'ਤੇ ਜਾਓ ਅਤੇ ਸਰਵਰ ਦੇ ਬਲਾਕ ਵਾਲੀਅਮ 'ਤੇ ਸਨੈਪਸ਼ਾਟ ਬਣਾਓ 'ਤੇ ਕਲਿੱਕ ਕਰੋ (ਜਾਂ SSH ਤੋਂ ਦੂਜੇ ਸਰਵਰ 'ਤੇ ਕੱਚੇ ਬਲਾਕ ਡਿਵਾਈਸ ਨੂੰ ਸਟ੍ਰੀਮ ਕਰੋ:
sudo dd if=/dev/nvme0n1p1 bs=4M status=progress | gzip -1 | ssh user@backup-server "cat > /mnt/storage/docker_host_raw.img.gz").
ਕਦਮ 2: ਜਾਂਚ ਕਰੋ ਕਿ ਕੀ ਤੁਹਾਡਾ ਡੇਟਾ ਅਜੇ ਵੀ ਕਿਸੇ ਹੋਰ ਅਪ੍ਰੂਨਡ ਵਾਲੀਅਮ ਵਿੱਚ ਬੈਠਾ ਹੈ ਜਾਂ overlay2 ਪਰਤ¶
ਨਿਰਧਾਰਿਤ ਡਿਸਕ ਬਲਾਕਾਂ ਨੂੰ ਬਣਾਉਣ ਤੋਂ ਪਹਿਲਾਂ, ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਤੁਹਾਡਾ ਡੇਟਾਬੇਸ ਅਸਲ ਵਿੱਚ ਇੱਕ ਬਾਈਂਡ ਮਾਊਂਟ ਵਿੱਚ ਸਟੋਰ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਸੀ ਜਾਂ ਇੱਕ ਵੱਖਰੇ ਨਾਮ ਵਾਲੇ ਵਾਲੀਅਮ ਜੋ ਬਚਿਆ ਸੀ:
# 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, ਸਿਰਫ ਨਾਲ ਖੋਜਣ ਲਈ find /var/lib/docker ਉਹ docker-compose.yml ਅਸਲ ਵਿੱਚ ਬਣਾਇਆ ਸੀ projectname_app_db_data (ਜੋ ਅਜੇ ਵੀ ਡਿਸਕ 'ਤੇ 100 ਪ੍ਰਤੀਸ਼ਤ ਬਰਕਰਾਰ ਹੈ) ਜਦਕਿ app_db_data ਛੇ ਮਹੀਨੇ ਪਹਿਲਾਂ ਦੀ ਇੱਕ ਪੁਰਾਣੀ ਅਣਵਰਤੀ ਵਾਲੀਅਮ ਸੀ।
ਕਦਮ 3: ਅਨਲਿੰਕਡ ਡੌਕਰ ਵਾਲੀਅਮ ਡਾਇਰੈਕਟਰੀਆਂ ਨੂੰ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਨਾ ext4 ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ext4 ਜਰਨਲ (ext4magic ਅਤੇ debugfs)¶
ਜਦੋਂ docker volume rm ਮਿਟਾਉਂਦਾ ਹੈ /var/lib/docker/volumes/<vol_name>/_data ਇੱਕ 'ਤੇ ext4 ਫਾਈਲ ਸਿਸਟਮ, ext4 ਸਿੱਧੇ ਬਲਾਕ ਪੁਆਇੰਟਰਾਂ ਨੂੰ ਜ਼ੀਰੋ ਕਰੋ (i_block / ਹੱਦ ਦਰੱਖਤ ਰੂਟ) ਲਾਈਵ ਇਨੋਡ ਸਾਰਣੀ ਵਿੱਚ. ਹਾਲਾਂਕਿ, ext4 ਜਰਨਲ (ਇਨੋਡ <8>, ਆਮ ਤੌਰ 'ਤੇ 128 MB ਨੂੰ 1024 MB ਸਰਕੂਲਰ ਰਿੰਗ ਬਫਰ) ਅਜੇ ਵੀ ਪਹਿਲਾਂ ਤੋਂ ਸਹੀ ਇਨੋਡ ਟੇਬਲ ਅਤੇ ਡਾਇਰੈਕਟਰੀ ਬਲਾਕਾਂ ਦੀਆਂ ਇਤਿਹਾਸਕ ਕਾਪੀਆਂ ਰੱਖਦਾ ਹੈ docker compose down -v ਚਲਾਇਆ ਗਿਆ ਸੀ।
+-------------------------------------------------------------------------+
| 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. |
+-------------------------------------------------------------------------+
ਚਲਾਓ ext4magic ਤੁਹਾਡੇ ਸਿਰਫ਼-ਪੜ੍ਹਨ ਵਾਲੇ ਭਾਗ (ਜਾਂ .img ਇੱਕ ਦੂਜੇ ਸਰਵਰ 'ਤੇ ਸਨੈਪਸ਼ਾਟ ਕਾਪੀ), ਟਾਈਮਸਟੈਂਪ (-a) ਤੁਹਾਡੇ ਦੌੜਨ ਤੋਂ 5 ਮਿੰਟ ਪਹਿਲਾਂ ਤੋਂ docker compose down -v ਜਾਂ 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: ਡੌਕਰ ਨੂੰ ਰੋਕਣ ਤੋਂ ਤੁਰੰਤ ਬਾਅਦ ਤੁਹਾਡੇ ਦੁਆਰਾ RAM ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤੇ ਜਰਨਲ ਸਨੈਪਸ਼ਾਟ ਨੂੰ ਪੜ੍ਹਦਾ ਹੈ।
- -f var/lib/docker/volumes: ਸਹੀ ਡੌਕਰ ਵਾਲੀਅਮ ਡਾਇਰੈਕਟਰੀ ਟ੍ਰੀ ਨੂੰ ਨਿਸ਼ਾਨਾ ਬਣਾਉਂਦਾ ਹੈ (ਨੋਟ: ਮੋਹਰੀ ਨੂੰ ਛੱਡੋ / ਵਿੱਚ ext4magic ਰਿਸ਼ਤੇਦਾਰ ਮਾਰਗ)।
- -a $(date -d "-15 minutes" +%s): ਦੱਸਦਾ ਹੈ ext4magic 15 ਮਿੰਟ ਪਹਿਲਾਂ ਵੈਧ ਆਈਨੋਡ ਕਾਪੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਡਾਇਰੈਕਟਰੀ ਟ੍ਰੀ ਦਾ ਪੁਨਰਗਠਨ ਕਰਨ ਲਈ (ਦੁਰਘਟਨਾਤਮਕ ਮਿਟਾਉਣ ਤੋਂ ਪਹਿਲਾਂ)।
- -r: ਪੂਰੀ ਡਾਇਰੈਕਟਰੀਆਂ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ ਜਿੱਥੇ ਕੋਈ ਵੀ ਬਲਾਕ ਓਵਰਰਾਈਟ ਨਹੀਂ ਹੋਏ ਸਨ; ਜੇਕਰ -r ਅੰਸ਼ਕ ਤੌਰ 'ਤੇ ਓਵਰਰਾਈਟ ਕੀਤੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਮਿਸ ਕਰਦਾ ਹੈ, ਬਦਲ ਕੇ ਦੂਜਾ ਪਾਸ ਚਲਾਓ -r ਨਾਲ -m (ਮੈਜਿਕ ਕਾਰਵਿੰਗ + ਜਰਨਲ ਹਾਈਬ੍ਰਿਡ ਮੋਡ)।
ਕਦਮ 4: ਕੱਚੀ SQLite, PostgreSQL, ਜਾਂ MySQL InnoDB ਫਾਈਲਾਂ ਨੂੰ ਉਕਰਾਉਣਾ ਜਦੋਂ ਜਰਨਲ ਨੂੰ ਸਮੇਟਿਆ ਜਾਂਦਾ ਹੈ (XFS ਜਾਂ ext4)¶
Warning
** ਕਿਉਂ XFS ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ ext4magic ਅਤੇ ਤੁਰੰਤ ਰੀਡ-ਓਨਲੀ ਅਨਮਾਊਂਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ**: ਉਲਟ ext4, ਜੋ ਆਪਣੇ ਜਰਨਲ ਵਿੱਚ ਪੂਰੀ 256-ਬਾਈਟ ਆਈਨੋਡ ਕਾਪੀਆਂ ਲਿਖਦਾ ਹੈ, XFS ਲੌਗਸ ਮੈਟਾਡੇਟਾ ਇਰਾਦਾ ਡੈਲਟਾ ਅਤੇ ਹਮਲਾਵਰ ਢੰਗ ਨਾਲ ਫ੍ਰੀਡ ਆਈਨੋਡ ਬੀ-ਟਰੀਜ਼ (agi). ਜੇ /var/lib/docker ਇੱਕ 'ਤੇ ਬੈਠਦਾ ਹੈ XFS ਭਾਗ (RHEL, Rocky Linux, AlmaLinux, ਅਤੇ Amazon Linux 'ਤੇ ਡਿਫਾਲਟ), ਅਣਮਾਊਂਟ ਕਰਨਾ /var/lib/docker ਜਾਂ ਰੀਮਾਉਂਟ ਕਰਨਾ / ਸਕਿੰਟਾਂ ਦੇ ਅੰਦਰ-ਅੰਦਰ ਸਿਰਫ਼ ਪੜ੍ਹਨ ਲਈ ਨੱਕਾਸ਼ੀ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਕਦਮ ਹੈ।
ਜੇ ਹੋਸਟ ** ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈXFS** ਜਾਂ ਜੇਕਰ ext4 ਜਰਨਲ ਪਹਿਲਾਂ ਹੀ ਇਨੋਡ ਪੁਆਇੰਟਰਾਂ ਉੱਤੇ ਲਪੇਟਿਆ ਹੋਇਆ ਹੈ, ਰਾਅ ਡਿਸਕ ਚਿੱਤਰ (docker_host_raw.img):
- ** SQLite3 ਡੇਟਾਬੇਸ ਲਈ (
.sqlite,.db- ਉਦਾਹਰਨ ਲਈ, ਵਾਲਟਵਾਰਡਨ, ਨੈਕਸਟ ਕਲਾਉਡ, ਹੋਮ ਅਸਿਸਟੈਂਟ, ਗੀਤਾ, ਗ੍ਰਾਫਾਨਾ)**: ਹਰੇਕ SQLite3 ਡਾਟਾਬੇਸ ਆਪਣੇ ਪਹਿਲੇ 4 ਕਿਲੋਬਾਈਟ ਪੰਨੇ ਦੇ ਬਾਈਟ 0 'ਤੇ ਇੱਕ ਬੇਮਿਸਾਲ 16-ਬਾਈਟ ASCII ਸਿਰਲੇਖ ਨਾਲ ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ:53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00("SQLite format 3\0"), ਅਤੇ ਸਹੀ ਡੇਟਾਬੇਸ ਪੇਜ ਦਾ ਆਕਾਰ ਸਟੋਰ ਕਰਦਾ ਹੈ (Bytes 16..17, ਆਮ ਤੌਰ 'ਤੇ4096) ਅਤੇ ਪੰਨਿਆਂ ਵਿੱਚ ਕੁੱਲ ਡਾਟਾਬੇਸ ਦਾ ਆਕਾਰ (Bytes 28..31, ਵੱਡੇ-ਐਂਡੀਅਨ 32-ਬਿੱਟ ਪੂਰਨ ਅੰਕ) ਉਸੇ ਸਿਰਲੇਖ ਦੇ ਅੰਦਰ। - ਚਲਾਓ
PhotoRecਨਾਲ[File Opt]->[x] sqliteਯੋਗ, ਜਾਂ ਭਾਗ ਨੂੰ ਸਿੱਧਾ ਸਕੈਨ ਕਰੋgrep -ab "SQLite format 3"ਤੁਹਾਡੀ ਡਿਲੀਟ ਕੀਤੀ SQLite ਫਾਈਲ ਦਾ ਸਹੀ ਬਾਈਟ ਆਫਸੈੱਟ ਲੱਭਣ ਲਈ ਅਤੇ ਇਸਨੂੰ ਐਕਸਟਰੈਕਟ ਕਰਨ ਲਈdd:ਇੱਕ ਵਾਰ ਕੱਢਿਆ, ਚਲਾਓ# 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.dbਹਰ ਬਰਕਰਾਰ ਬੀ-ਟ੍ਰੀ ਲੀਫ ਪੇਜ ਨੂੰ ਦੁਬਾਰਾ ਬਣਾਉਣ ਲਈ।
Tip
** ਸਹੀ ਗਣਨਾ ਕਿਵੇਂ ਕਰੀਏ dd ਇਸਦੇ ਸਿਰਲੇਖ ਤੋਂ ਅਣਲਿੰਕ ਕੀਤੀ SQLite3 ਫਾਈਲ ਦਾ ਬਾਈਟ ਆਕਾਰ**: ਇੱਕ ਵਾਰ grep -ab "SQLite format 3" ਤੁਹਾਨੂੰ ਸ਼ੁਰੂਆਤੀ ਬਾਈਟ ਆਫਸੈੱਟ ਦਿੰਦਾ ਹੈ OFFSET ਤੁਹਾਡੇ ਮਿਟਾਏ ਗਏ SQLite ਡੇਟਾਬੇਸ ਦਾ, ਬਾਈਟਸ ਪੜ੍ਹੋ 16..17 (uint16 ਵੱਡੇ-ਐਂਡੀਅਨ ਪੰਨੇ ਦਾ ਆਕਾਰ, ਉਦਾਹਰਨ ਲਈ, 0x1000 = 4096 ਬਾਈਟਸ) ਅਤੇ ਬਾਈਟਸ 28..31 (uint32 ਵੱਡੀ-ਐਂਡੀਅਨ ਪੰਨਾ ਗਿਣਤੀ, ਉਦਾਹਰਨ ਲਈ, 25000 ਪੰਨੇ) ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ hexdump -C -s OFFSET -n 32. ਗੁਣਾ Page Size x Page Count ਤੁਹਾਨੂੰ ਪਾਸ ਕਰਨ ਲਈ ਸਹੀ ਬਾਈਟ ਲੰਬਾਈ ਦਿੰਦਾ ਹੈ dd (iflag=skip_bytes,count_bytes) ਜਦੋਂ ਫਾਈਲ ਡਿਸਕ 'ਤੇ ਇਕਸਾਰ ਹੁੰਦੀ ਹੈ।
- ** MySQL / MariaDB InnoDB ਲਈ (
.ibdਟੇਬਲ ਫਾਈਲਾਂ): ਹਰ InnoDB.ibdਸਾਰਣੀ ਵਿੱਚ ਕ੍ਰਮਵਾਰ ਹੁੰਦਾ ਹੈ16 KB(16,384ਬਾਈਟ) ਵਾਲੇ ਪੰਨੇFIL_PAGE_INDEX(0x45BF) ਸਿਰਲੇਖ ਅਤੇ ਸਾਰਣੀ ਵਿਲੱਖਣ ਹੈspace_id. ਪਰਕੋਨਾ / ਟਵਿਨਡੀਬੀ ** ਦੀ ਵਰਤੋਂ ਕਰੋundrop-for-innodb(stream_parser+c_parser) ਸਕੈਨ ਕਰਨ ਲਈ ਟੂਲਕਿੱਟ/dev/nvme0n1p1ਸਭ ਲਈ16 KBInnoDB ਸੂਚਕਾਂਕ ਪੰਨੇ ਅਤੇ ਮੁੜ-ਆਯਾਤ ਲਈ ਹਰੇਕ ਕਤਾਰ ਨੂੰ ਸਿੱਧੇ TSV/SQL ਫਾਈਲਾਂ ਵਿੱਚ ਡੰਪ ਕਰੋ। - ** PostgreSQL ਹੀਪ ਫਾਈਲਾਂ ਲਈ (
$PGDATA/base/<db_oid>/<relfilenode>)**: PostgreSQL ਹਰੇਕ ਸਾਰਣੀ ਨੂੰ ਸੰਜੋਗ ਵਜੋਂ ਸਟੋਰ ਕਰਦਾ ਹੈ8 KB(8,192ਬਾਈਟ) ਵਾਲੇ ਹੀਪ ਪੰਨੇPageHeaderData(pd_lower,pd_upper,pd_special). ਵਰਤੋpg_filedumpਜਾਂpglazarus/pduਲਈ ਨਾ ਨਿਰਧਾਰਿਤ ਡਿਸਕ ਖੇਤਰਾਂ ਨੂੰ ਸਕੈਨ ਕਰਨ ਲਈ8 KBਤੁਹਾਡੇ ਟੇਬਲ ਦੇ ਕਾਲਮ ਟੂਪਲ ਲੇਆਉਟ ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਪੰਨੇ (HeapTupleHeaderData) ਅਤੇ ਕਤਾਰਾਂ ਦਾ ਪੁਨਰਗਠਨ ਕਰੋ।
ਪੜਾਅ 4: ਕੁਬਰਨੇਟਸ ਪੀਵੀਸੀ, ਪੀਵੀ, ਅਤੇ etcd ਸਨੈਪਸ਼ਾਟ ਐਮਰਜੈਂਸੀ ਰਿਕਵਰੀ¶
ਕੁਬਰਨੇਟਸ ਵਿੱਚ (EKS, GKE, AKS, k3s, RKE2, kubeadm, OpenShift), ਗਲਤੀ ਨਾਲ ਇੱਕ Persistent VolumeClaim ਨੂੰ ਮਿਟਾਉਣਾ (kubectl delete pvc), ਇੱਕ ਸਟੇਟਫੁਲਸੈੱਟ, ਜਾਂ ਇੱਕ ਪੂਰਾ ਨੇਮਸਪੇਸ (kubectl delete ns prod) ਸਟੈਂਡਅਲੋਨ ਡੌਕਰ ਨਾਲੋਂ ਬਹੁਤ ਵੱਖਰੀ ਆਰਕੀਟੈਕਚਰ ਦੀ ਪਾਲਣਾ ਕਰਦਾ ਹੈ।
ਦ੍ਰਿਸ਼ A: ਪੀਵੀਸੀ ਦਿਖਾਉਂਦਾ ਹੈ Terminating (ਫਾਈਨਲਾਈਜ਼ਰ ਲਾਈਫਸੇਵਰ)¶
ਚਲਾਓ:
ਜੇਕਰ ਦSTATUS ਕਾਲਮ ਕਹਿੰਦਾ ਹੈ Terminating, ਰਾਹਤ ਦਾ ਸਾਹ ਲਓ: ਤੁਹਾਡਾ ਡੇਟਾ ਅਜੇ ਮਿਟਾਇਆ ਨਹੀਂ ਗਿਆ ਹੈ।
- ਕਿਉਂ? ਹਰ Kubernetes PVC ਬਣਾਇਆ ਗਿਆ ਹੈ ਕਿਉਂਕਿ Kubernetes 1.9 ਵਿੱਚ ਆਪਣੇ ਆਪ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ finalizers: [kubernetes.io/pvc-protection].
- ਜਿੰਨਾ ਚਿਰ ਇੱਕ ਪੋਡ ਅਜੇ ਵੀ ਉਸ ਪੀਵੀਸੀ ਨੂੰ ਮਾਊਂਟ ਕਰ ਰਿਹਾ ਹੈ, ਕੁਬਰਨੇਟਸ ਕੰਟਰੋਲਰ ਪੀਵੀਸੀ ਨੂੰ ਮਿਟਾਉਣ ਨੂੰ ਪੂਰਾ ਕਰਨ ਤੋਂ ਇਨਕਾਰ ਕਰਦਾ ਹੈ ਅਤੇ ** ਕਦੇ ਵੀ CSI ਡਰਾਈਵਰ ਨੂੰ ਕਾਲ ਨਹੀਂ ਕਰਦਾ ਹੈ। DeleteVolume RPC**।
- ਤੁਰੰਤ ਕਾਰਵਾਈ: ਪੋਡ ਨੂੰ ਨਹੀਂ ਮਿਟਾਓ ਜਾਂ ਮੁੜ ਚਾਲੂ ਕਰੋ, ਅਤੇ ਫਾਈਨਲਾਈਜ਼ਰ ਨੂੰ ਨਾਟ ਕਰੋ। ਆਪਣੀ ਸਥਾਨਕ ਮਸ਼ੀਨ ਜਾਂ 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
ਦ੍ਰਿਸ਼ B: ਪੀਵੀਸੀ ਨੂੰ ਮਿਟਾ ਦਿੱਤਾ ਗਿਆ ਸੀ, ਅਤੇ kubectl get pv ਵਿੱਚ ਪਰਸਿਸਟੈਂਟ ਵਾਲੀਅਮ ਦਿਖਾਉਂਦਾ ਹੈ Released ਰਾਜ (ReclaimPolicy: Retain)¶
ਚਲਾਓ:
ਜੇਕਰ ਤੁਹਾਡੀ ਪਰਸਿਸਟੈਂਟ ਵਾਲੀਅਮ (pv-prod-postgres) ਨਾਲ ਅਜੇ ਵੀ ਸੂਚੀਬੱਧ ਹੈ STATUS: Released (ਕਿਉਂਕਿ ਇਸਦੀ ਸਟੋਰੇਜ ਕਲਾਸ ਵਰਤੀ ਜਾਂਦੀ ਹੈ reclaimPolicy: Retain), ਤੁਹਾਡਾ 100 ਪ੍ਰਤੀਸ਼ਤ ਡੇਟਾ ਅਜੇ ਵੀ ਅੰਡਰਲਾਈੰਗ ਡਿਸਕ ਉੱਤੇ ਅਛੂਤ ਬੈਠਾ ਹੈ। ਹਾਲਾਂਕਿ, ਕੁਬਰਨੇਟਸ ਇੱਕ ਨਵੇਂ PVC ਨੂੰ a ਨਾਲ ਬੰਨ੍ਹਣ ਦੇਣ ਤੋਂ ਇਨਕਾਰ ਕਰਦਾ ਹੈ Released PV ਕਿਉਂਕਿ PV ਵਿੱਚ ਅਜੇ ਵੀ ਏ ਸ਼ਾਮਲ ਹੈ spec.claimRef ਪੁਰਾਣੇ ਹਟਾਏ ਗਏ ਪੀਵੀਸੀ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦੇ ਹੋਏ UID.
ਕਿਵੇਂ ਏ Released ਪੀ.ਵੀ Available ਜ਼ੀਰੋ ਡਾਟਾ ਨੁਕਸਾਨ ਦੇ ਨਾਲ 10 ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ:
1. Persistent Volume ਆਬਜੈਕਟ ਨੂੰ ਸੰਪਾਦਿਤ ਕਰੋ ਅਤੇ ਮਿਟਾਓ spec.claimRef ਬਲਾਕ:
kubectl get pv ਦੁਬਾਰਾ: ਸਥਿਤੀ ਤੁਰੰਤ ** ਤੋਂ ਬਦਲ ਜਾਂਦੀ ਹੈReleased** ਤੋਂ Available.
3. ਆਪਣੇ ਮੁੜ ਬਣਾਓ PersistentVolumeClaim (ਨਿਰਧਾਰਤ ਕਰਨਾ volumeName: <your-pv-name> ਅਤੇ ਮੇਲ ਖਾਂਦੀ ਸਮਰੱਥਾ/storageClassName)। ਇਹ ਸਾਰੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਣ ਦੇ ਨਾਲ ਤੁਰੰਤ ਮੌਜੂਦਾ ਪੀਵੀ ਨਾਲ ਜੁੜ ਜਾਵੇਗਾ।
ਦ੍ਰਿਸ਼ C: ਇੱਕ ਤੋਂ ਪੂੰਝੇ ਹੋਏ Kubernetes ਕਲੱਸਟਰ ਅਵਸਥਾ ਨੂੰ ਮੁੜ ਬਹਾਲ ਕਰਨਾ etcd ਸਨੈਪਸ਼ਾਟ (etcdctl snapshot restore)¶
ਕੀ ਹੋਇਆ ਜੇ ਕੋਈ ਭੱਜ ਗਿਆ kubectl delete namespace prod ਜਾਂ helm uninstall ਅਤੇ ਸਵੈ-ਪ੍ਰਬੰਧਿਤ 'ਤੇ 200 ਕੁਬਰਨੇਟਸ ਮੈਨੀਫੈਸਟ, ਸੀਕਰੇਟਸ, ਕੌਂਫਿਗਮੈਪ, ਅਤੇ ਪੀਵੀ ਪਰਿਭਾਸ਼ਾਵਾਂ ਨੂੰ ਮਿਟਾ ਦਿੱਤਾ। kubeadm, k3s, ਜਾਂ RKE2 ਕੰਟਰੋਲ ਜਹਾਜ਼?
- ** ਆਪਣੇ ਨਵੀਨਤਮ ਲੱਭੋ
etcdਸਨੈਪਸ਼ਾਟ** (ਮੂਲ ਰੂਪ ਵਿੱਚ/var/lib/rancher/k3s/server/db/snapshots/,/var/lib/rancher/rke2/server/db/snapshots/, ਜਾਂ ਤੁਹਾਡਾ ਅਨੁਸੂਚਿਤ/var/backups/etcd/snapshot.db). - ਲਾਈਵ ਕਲੱਸਟਰ ਨੂੰ ਛੂਹਣ ਤੋਂ ਪਹਿਲਾਂ ਸਨੈਪਸ਼ਾਟ ਦੀ ਇਕਸਾਰਤਾ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ:
- ** ਰੁਕੋ
kube-apiserverਅਤੇetcdਕੰਟਰੋਲ ਪਲੇਨ ਨੋਡ(ਆਂ) ਉੱਤੇ**: - 'ਤੇ
kubeadm(ਸਥਿਰ ਪੌਡ): ਹਿਲਾਓ/etc/kubernetes/manifests/kube-apiserver.yamlਅਤੇ/etc/kubernetes/manifests/etcd.yamlਅਸਥਾਈ ਤੌਰ 'ਤੇ/root/manifests_hold/ਇਸ ਲਈkubeletਦੋਵੇਂ ਕੰਟੇਨਰਾਂ ਨੂੰ ਸਾਫ਼-ਸੁਥਰਾ ਰੋਕਦਾ ਹੈ, ਫਿਰ ਬੈਕਅੱਪ ਕਰਦਾ ਹੈ/var/lib/etcdਨੂੰ/var/lib/etcd.bak. - 'ਤੇ
k3s: ਦੌੜੋsudo systemctl stop k3sਅਤੇsudo k3s server --cluster-reset --cluster-reset-restore-path=/path/to/snapshot. - ** ਨੂੰ ਬਹਾਲ ਕਰੋ
etcdਡਾਟਾ ਡਾਇਰੈਕਟਰੀ ਚਾਲੂ ਹੈkubeadm**: - ਮੂਵ ਕਰੋ
etcd.yamlਅਤੇkube-apiserver.yamlਵਿੱਚ ਵਾਪਸ/etc/kubernetes/manifests/. 30 ਸਕਿੰਟਾਂ ਦੇ ਅੰਦਰ,kube-apiserverਰੀਸਟੋਰ ਕੀਤੇ ਨਾਲ ਮੁੜ ਜੁੜਦਾ ਹੈetcdਸਟੋਰ ਅਤੇ ਹਰ ਡਿਲੀਟ ਕੀਤੀ ਨੇਮਸਪੇਸ, ਸੀਕਰੇਟ, ਕੌਂਫਿਗਮੈਪ, ਅਤੇ ਪਰਸਿਸਟੈਂਟ ਵਾਲੀਅਮ ਆਬਜੈਕਟ ਮੁੜ ਪ੍ਰਗਟ ਹੁੰਦਾ ਹੈ।
ਫੇਜ਼ 5: ਦੁਰਘਟਨਾ ਮਿਟਾਉਣ ਦੇ ਵਿਰੁੱਧ ਡੌਕਰ ਅਤੇ ਕੁਬਰਨੇਟਸ ਵਾਲੀਅਮ ਨੂੰ ਸਖਤ ਕਰਨਾ¶
ਇੱਕ ਵਾਰ ਜਦੋਂ ਤੁਹਾਡਾ ਉਤਪਾਦਨ ਡੇਟਾਬੇਸ ਰੀਸਟੋਰ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਇਹਨਾਂ ਚਾਰ ਆਰਕੀਟੈਕਚਰਲ ਗਾਰਡਰੇਲਾਂ ਨੂੰ ਲਾਗੂ ਕਰੋ ਤਾਂ ਕਿ ਇੱਕ ਸਿੰਗਲ CLI ਟਾਈਪੋ ਕਦੇ ਵੀ ਲਾਈਵ ਵਾਲੀਅਮ ਨੂੰ ਦੁਬਾਰਾ ਨਾ ਮਿਟਾ ਸਕੇ:
- ** ਹਰ ਉਤਪਾਦਨ ਕੁਬਰਨੇਟਸ ਨੂੰ ਬਦਲੋ
StorageClassਤੋਂreclaimPolicy: DeleteਨੂੰreclaimPolicy: Retain**: ਮੂਲ ਰੂਪ ਵਿੱਚ, ਬਿਲਟ-ਇਨ ਕਲਾਉਡ ਸਟੋਰੇਜ ਕਲਾਸਾਂ (gp2,gp3,standard-rwo) ਨੂੰ ਡਿਫਾਲਟreclaimPolicy: Delete, ਭਾਵ ਇੱਕ PVC ਨੂੰ ਮਿਟਾਉਣਾ ਕਲਾਉਡ ਡਿਸਕ ਨੂੰ ਨਸ਼ਟ ਕਰ ਦਿੰਦਾ ਹੈ। ਬਣਾਓ ਏStorageClassਨਾਲreclaimPolicy: Retain(ਜਾਂ ਮੌਜੂਦਾ ਪੀਵੀ ਨੂੰ ਇਸ ਨਾਲ ਪੈਚ ਕਰੋkubectl patch pv <pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}') ਇਸਲਈ ਪੀਵੀਸੀ ਜਾਂ ਨੇਮਸਪੇਸ ਨੂੰ ਮਿਟਾਉਣਾ ਕਦੇ ਵੀ ਅੰਡਰਲਾਈੰਗ ਬਲਾਕ ਵਾਲੀਅਮ ਨੂੰ ਨਹੀਂ ਮਿਟਾਉਂਦਾ ਹੈ। - CSI ਸਨੈਪਸ਼ਾਟ ਨਾਲ AWS EBS ਰੀਸਾਈਕਲ ਬਿਨ / GCP ਸਨੈਪਸ਼ਾਟ ਸ਼ਡਿਊਲ / ਵੇਲੇਰੋ ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ: AWS EBS ਰੀਸਾਈਕਲ ਬਿਨ ਨੂੰ ਸਮਰੱਥ ਕਰਨ ਨਾਲ 7 ਤੋਂ 30 ਦਿਨਾਂ ਲਈ ਕਿਸੇ ਵੀ ਮਿਟਾਏ ਗਏ EBS ਵਾਲੀਅਮ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਿਆ ਜਾਂਦਾ ਹੈ ਭਾਵੇਂ CSI ਡਰਾਈਵਰ ਕਾਲ ਕਰਦਾ ਹੈ
DeleteVolume. - ** ਕਦੇ ਨਾ ਵਰਤੋ
docker system prune --volumesਆਟੋਮੇਟਿਡ ਕਲੀਨਅਪ ਸਕ੍ਰਿਪਟਾਂ ਜਾਂ ਸੀਆਈ/ਸੀਡੀ ਰਨਰਜ਼** ਵਿੱਚ: ਜੇਕਰ ਇੱਕ ਪ੍ਰੋਡਕਸ਼ਨ ਡੇਟਾਬੇਸ ਕੰਟੇਨਰ ਸੰਖੇਪ ਵਿੱਚ ਕਰੈਸ਼ ਹੋ ਜਾਂਦਾ ਹੈ (Exited (1)) ਸਹੀ ਸਮੇਂ 'ਤੇ ਕ੍ਰੋਨ ਜੌਬ ਚੱਲਦੀ ਹੈdocker system prune -a --volumes -f, ਡੌਕਰ ਇਸਦੇ ਅਗਿਆਤ ਵਾਲੀਅਮ ਨੂੰ "ਅਣਵਰਤਿਆ" ਮੰਨਦਾ ਹੈ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਸਥਾਈ ਤੌਰ 'ਤੇ ਮਿਟਾ ਦਿੰਦਾ ਹੈ। ਪੱਟੀ--volumesਸਾਰੀਆਂ ਕਲੀਨਅੱਪ ਸਕ੍ਰਿਪਟਾਂ ਤੋਂ। - ਸਪਸ਼ਟ ਹੋਸਟ ਬਾਈਂਡ ਮਾਊਂਟ ਦੀ ਵਰਤੋਂ ਕਰੋ (
/srv/prod_data/postgres:/var/lib/postgresql/data) ਜਾਂ ਸਟੇਟਫੁੱਲ ਪ੍ਰੋਡਕਸ਼ਨ ਵਰਕਲੋਡਸ ਲਈ ਬਾਹਰੀ ਪ੍ਰਬੰਧਿਤ ਡੇਟਾਬੇਸ: ਉਲਟ/var/lib/docker/volumes/, ਬਾਇੰਡ-ਮਾਊਂਟ ਡਾਇਰੈਕਟਰੀਆਂ ਨੂੰ ਬਾਹਰ ਹੋਸਟ ਕਰੋ/var/lib/docker/ਦੁਆਰਾ ਕਦੇ ਛੂਹਿਆ ਨਹੀਂ ਜਾਂਦਾ ਹਨdocker compose down -v,docker volume rm, ਜਾਂdocker system prune --volumes.
ਖੇਤਰੀ ਐਮਰਜੈਂਸੀ ਨੰਬਰ ਅਤੇ ਏਜੰਸੀ ਪ੍ਰੋਟੋਕੋਲ¶
ਜਦੋਂ ਇੱਕ ਕੰਟੇਨਰ ਜਾਂ ਕੁਬਰਨੇਟਸ ਸਟੋਰੇਜ ਮਿਟਾਉਣਾ ਹਸਪਤਾਲ ਦੇ ਕਲੀਨਿਕਲ ਓਪਰੇਸ਼ਨਾਂ, ਜਨਤਕ ਸੁਰੱਖਿਆ ਡਿਸਪੈਚ, ਜਾਂ ਨਿਯੰਤ੍ਰਿਤ ਨਿੱਜੀ ਡੇਟਾ ਨੂੰ ਪ੍ਰਭਾਵਤ ਕਰਦਾ ਹੈ, ਤਾਂ ਤੁਰੰਤ ਅੱਗੇ ਵਧੋ:
- ਸੰਯੁਕਤ ਰਾਜ ਅਤੇ ਕੈਨੇਡਾ: ਡਾਇਲ ਕਰੋ
911ਜੇ ਇੱਕ ਕੰਟੇਨਰ ਕਲੱਸਟਰ ਅਸਫਲਤਾ ਕਲੀਨਿਕਲ ਮਰੀਜ਼ ਦੀ ਨਿਗਰਾਨੀ, EHR ਪ੍ਰਣਾਲੀਆਂ, ਜਾਂ ਐਮਰਜੈਂਸੀ ਡਿਸਪੈਚ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਉਂਦਾ ਹੈ। ਖਤਰਨਾਕ ਕੰਟੇਨਰ ਬੁਨਿਆਦੀ ਢਾਂਚੇ ਨੂੰ ਮਿਟਾਉਣ ਜਾਂ ਸਾਈਬਰ ਘਟਨਾਵਾਂ ਦੀ ਰਿਪੋਰਟ CISA (1-844-Say-CISA/cisa.gov/report) ਜਾਂ ਕੈਨੇਡੀਅਨ ਸੈਂਟਰ ਫਾਰ ਸਾਈਬਰ ਸੁਰੱਖਿਆ (1-833-CYBER-88)। - ਯੂਨਾਈਟਿਡ ਕਿੰਗਡਮ: ਡਾਇਲ ਕਰੋ
999ਜੀਵਨ ਜਾਂ ਨਾਜ਼ੁਕ NHS ਬੁਨਿਆਦੀ ਢਾਂਚੇ ਲਈ ਖਤਰੇ ਲਈ। UK GDPR ਦੇ ਤਹਿਤ, ਇੱਕ ਰਿਕਵਰੀਯੋਗ ਬੈਕਅੱਪ ਦੇ ਬਿਨਾਂ ਨਿੱਜੀ ਡੇਟਾ ਦੀ ਸਥਾਈ ਤਬਾਹੀ ਜਾਂ ਉਪਲਬਧਤਾ ਦੇ ਨੁਕਸਾਨ ਲਈ ICO (0303 123 1113)। - ਯੂਰਪੀਅਨ ਯੂਨੀਅਨ: ਡਾਇਲ ਕਰੋ
112ਸਾਰੇ ਈਯੂ ਮੈਂਬਰ ਰਾਜਾਂ ਵਿੱਚ। NIS2 ਡਾਇਰੈਕਟਿਵ ਦੇ ਅਧੀਨ ਇਕਾਈਆਂ ਨੂੰ ਇੱਕ ਗੰਭੀਰ ਸੇਵਾ ਬੰਦ ਹੋਣ ਦੇ 24 ਘੰਟਿਆਂ ਦੇ ਅੰਦਰ ਆਪਣੇ ਰਾਸ਼ਟਰੀ CSIRT ਨੂੰ ਇੱਕ ਸ਼ੁਰੂਆਤੀ ਚੇਤਾਵਨੀ ਜਮ੍ਹਾਂ ਕਰਾਉਣੀ ਚਾਹੀਦੀ ਹੈ, ਅਤੇ ਸਥਾਈ ਨਿੱਜੀ ਡੇਟਾ ਦਾ ਨੁਕਸਾਨ GDPR ਆਰਟੀਕਲ 33 ਦੀ ਰਿਪੋਰਟਿੰਗ 72 ਘੰਟਿਆਂ ਦੇ ਅੰਦਰ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ। - ਆਸਟ੍ਰੇਲੀਆ ਅਤੇ ਨਿਊਜ਼ੀਲੈਂਡ: ਡਾਇਲ ਕਰੋ
000ਆਸਟ੍ਰੇਲੀਆ ਵਿੱਚ ਜਾਂ111ਨਿਊਜ਼ੀਲੈਂਡ ਵਿੱਚ; ਨਾਜ਼ੁਕ ਬੁਨਿਆਦੀ ਢਾਂਚੇ ਦੀਆਂ ਘਟਨਾਵਾਂ ਦੀ ਰਿਪੋਰਟ ACSC (1300 CYBER1)। - ਭਾਰਤ ਅਤੇ ਏਸ਼ੀਆ-ਪ੍ਰਸ਼ਾਂਤ: ਡਾਇਲ ਕਰੋ
112ਐਮਰਜੈਂਸੀ ਪ੍ਰਤੀਕਿਰਿਆ ਲਈ ਭਾਰਤ ਵਿੱਚ; ਕਲਾਉਡ ਜਾਂ ਕੰਟੇਨਰ ਸੁਰੱਖਿਆ ਘਟਨਾਵਾਂ ਦੀ ਰਿਪੋਰਟ CERT-In ( ਨੂੰ ਕਰੋincident@cert-in.org.in) ਲਾਜ਼ਮੀ 6-ਘੰਟੇ ਦੀ ਵਿੰਡੋ ਦੇ ਅੰਦਰ।
ਅਕਸਰ ਪੁੱਛੇ ਜਾਂਦੇ ਸਵਾਲ¶
ਕਰਦਾ ਹੈ docker compose down -v ਹੋਸਟ ਬਾਇੰਡ ਮਾਊਂਟ ਨੂੰ ਮਿਟਾਓ (./data:/var/lib/mysql) ਜਾਂ ਸਿਰਫ਼ ਨਾਮ ਅਤੇ ਅਗਿਆਤ ਡੌਕਰ ਵਾਲੀਅਮ?¶
`docker compose down -v` ਵਿੱਚ ਘੋਸ਼ਿਤ ਨਾਮਿਤ ਵਾਲੀਅਮ ਨੂੰ ਹੀ ਮਿਟਾਉਂਦਾ ਹੈ `volumes:` ਦੇ ਭਾਗ `docker-compose.yml` ਅਤੇ ਕੰਟੇਨਰਾਂ ਨਾਲ ਜੁੜੇ ਬੇਨਾਮ ਵਾਲੀਅਮ; ਇਹ ਕਦੇ ਨਹੀਂ ਹੋਸਟ ਬਾਇੰਡ ਮਾਊਂਟ ਦੇ ਅੰਦਰ ਫਾਈਲਾਂ ਨੂੰ ਮਿਟਾਉਂਦਾ ਹੈ (ਜਿਵੇਂ ਕਿ `- /opt/mysql_data:/var/lib/mysql` ਜਾਂ `- ./postgres_data:/var/lib/postgresql/data`). ਜੇਕਰ ਤੁਹਾਡੀ ਕੰਪੋਜ਼ ਫਾਈਲ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਇੱਕ ਹੋਸਟ ਮਾਰਗ ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਹੈ `/` ਜਾਂ `./`, ਹੁਣੇ ਹੋਸਟ 'ਤੇ ਉਸ ਫੋਲਡਰ ਦੀ ਜਾਂਚ ਕਰੋ: ਤੁਹਾਡੀਆਂ ਫਾਈਲਾਂ ਅਜੇ ਵੀ 100 ਪ੍ਰਤੀਸ਼ਤ ਬਰਕਰਾਰ ਹਨ।
ਕਿਉਂ ਕੀਤਾ docker system prune --volumes ਜਦੋਂ ਮੈਂ ਵਾਤਾਵਰਣ ਵੇਰੀਏਬਲ ਨੂੰ ਅਪਡੇਟ ਕਰਨ ਲਈ ਸਿਰਫ 2 ਮਿੰਟਾਂ ਲਈ ਕੰਟੇਨਰ ਨੂੰ ਰੋਕਿਆ ਤਾਂ ਮੇਰੇ ਡੇਟਾਬੇਸ ਵਾਲੀਅਮ ਨੂੰ ਮਿਟਾਓ?¶
ਵਿਚਕਾਰ ਅੰਤਰ ਲਈ ਧਿਆਨ ਨਾਲ ਉਡੀਕ ਕਰੋ `docker stop` ਅਤੇ `docker rm`: ਜੇਕਰ ਇੱਕ ਕੰਟੇਨਰ ਸਿਰਫ਼ ਹੈ `Stopped / Exited` (ਵਿੱਚ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ `docker ps -a`), `docker system prune --volumes` ਕਰਦਾ ਹੈ ਨਹੀਂ ਇਸਦੇ ਵਾਲੀਅਮ ਨੂੰ ਮਿਟਾਓ ਕਿਉਂਕਿ ਰੁਕਿਆ ਹੋਇਆ ਕੰਟੇਨਰ ਅਜੇ ਵੀ ਉਹਨਾਂ ਦਾ ਹਵਾਲਾ ਦਿੰਦਾ ਹੈ। ਹਾਲਾਂਕਿ, ਜੇ ਤੁਸੀਂ ਦੌੜ ਗਏ `docker rm
ਕੀ ਮੈਂ ਮੈਕ 'ਤੇ ਡੌਕਰ ਡੈਸਕਟੌਪ ਦੇ ਅੰਦਰ ਮਿਟਾਏ ਗਏ ਡੌਕਰ ਵਾਲੀਅਮ ਨੂੰ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦਾ ਹਾਂ (Apple Silicon / Intel) ਜਾਂ ਵਿੰਡੋਜ਼ (WSL2)?¶
ਹਾਂ, ਜੇਕਰ ਤੁਸੀਂ ਡੌਕਰ ਡੈਸਕਟੌਪ ਨੂੰ ਤੁਰੰਤ ਛੱਡ ਦਿੰਦੇ ਹੋ ਤਾਂ ਵਰਚੁਅਲ ਮਸ਼ੀਨ ਚੱਲਣਾ ਬੰਦ ਕਰ ਦਿੰਦੀ ਹੈ `fstrim` ਵਰਚੁਅਲ ਡਿਸਕ ਦੇ ਵਿਰੁੱਧ. ਮੈਕੋਸ 'ਤੇ, ਡੌਕਰ ਸਾਰੇ ਲੀਨਕਸ ਵਾਲੀਅਮ ਨੂੰ ਅੰਦਰ ਸਟੋਰ ਕਰਦਾ ਹੈ `-/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw`; ਵਿੰਡੋਜ਼ WSL2 'ਤੇ, ਅੰਦਰ `%LocalAppData%\Docker\wsl\disk\docker_data.vhdx`. ਇਸ ਦੀ ਨਕਲ ਕਰੋ `.raw` ਜਾਂ `.vhdx` ਫਾਈਲ ਨੂੰ ਤੁਰੰਤ ਬਾਹਰੀ SSD ਨਾਲ ਜੋੜੋ, ਇਸਨੂੰ ਲੀਨਕਸ ਵਿੱਚ ਸਿਰਫ਼ ਪੜ੍ਹਨ ਲਈ ਨੱਥੀ ਕਰੋ (ਵਰਤਦੇ ਹੋਏ `losetup -Pr` ਲਈ `.raw` ਜਾਂ `qemu-nbd -r` ਲਈ `.vhdx`), ਅਤੇ ਚਲਾਓ `ext4magic` ਜਾਂ `PhotoRec` ਵਰਚੁਅਲ ਦੇ ਵਿਰੁੱਧ `ext4` ਅੰਦਰ ਵੰਡ.
ਕੀ ਹੋਵੇਗਾ ਜੇਕਰ ਮੈਂ ਕੁਬਰਨੇਟਸ ਸਟੇਟਫੁਲਸੈੱਟ ਨੂੰ ਮਿਟਾ ਦਿੱਤਾ ਹੈ kubectl delete statefulset postgres? ਕੀ ਇਸਨੇ ਮੇਰੇ ਪੀਵੀਸੀ ਵੀ ਮਿਟਾ ਦਿੱਤੇ?¶
ਨੰ. ਕੁਬਰਨੇਟਸ ਵਿੱਚ ਮੂਲ ਰੂਪ ਵਿੱਚ (ਜਦੋਂ ਤੱਕ `persistentVolumeClaimRetentionPolicy.whenDeleted: Delete` Kubernetes 1.27+ 'ਤੇ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਕੌਂਫਿਗਰ ਕੀਤਾ ਗਿਆ ਸੀ), ਚੱਲ ਰਿਹਾ ਹੈ `kubectl delete statefulset` ਸਟੇਟਫੁਲਸੈੱਟ ਕੰਟਰੋਲਰ ਅਤੇ ਇਸਦੇ ਪੌਡਾਂ ਨੂੰ ਮਿਟਾਉਂਦਾ ਹੈ, ਸਭ ਨੂੰ ਛੱਡ ਕੇ `PersistentVolumeClaims` (`data-postgres-0`, `data-postgres-1`) ਅਤੇ ਉਹਨਾਂ ਦਾ ਅੰਡਰਲਾਈੰਗ ਡੇਟਾ 100 ਪ੍ਰਤੀਸ਼ਤ ਬਰਕਰਾਰ ਹੈ. ਬਸ ਆਪਣੇ ਮੁੜ-ਲਾਗੂ ਕਰੋ `StatefulSet` YAML ਉਸੇ ਨਾਮ ਨਾਲ ਪ੍ਰਗਟ ਹੁੰਦਾ ਹੈ ਅਤੇ `volumeClaimTemplates`, ਅਤੇ ਨਵੇਂ ਪੌਡ ਆਪਣੇ ਆਪ ਹੀ ਮੌਜੂਦਾ ਨਾਲ ਮੁੜ-ਨੱਥੀ ਹੋ ਜਾਣਗੇ `data-postgres-0` ਪੀ.ਵੀ.ਸੀ.
ਮੈਂ ਡੌਕਰ ਦੇ ਅੰਦਰ ਫਾਈਲਾਂ ਨੂੰ ਕਿਵੇਂ ਐਕਸੈਸ ਕਰਾਂ? overlay2 ਡਾਇਰੈਕਟਰੀ ਜਦੋਂ ਕੰਟੇਨਰ ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਇਨਕਾਰ ਕਰਦਾ ਹੈ (CrashLoopBackOff / Exited (1))?¶
ਕਰੈਸ਼ ਹੋਏ ਕੰਟੇਨਰ ਨੂੰ ਨਾ ਮਿਟਾਓ। ਜਿੰਨਾ ਚਿਰ ਰੁਕਿਆ ਹੋਇਆ ਕੰਟੇਨਰ ਅਜੇ ਵੀ ਮੌਜੂਦ ਹੈ `docker ps -a`, ਇਸਦੀ ਲਿਖਣਯੋਗ ਪਰਤ ਅਤੇ ਵਾਲੀਅਮ ਮਾਊਂਟ ਡਿਸਕ 'ਤੇ ਪੂਰੀ ਤਰ੍ਹਾਂ ਬਰਕਰਾਰ ਹਨ। ਤੁਸੀਂ ਜਾਂ ਤਾਂ ਵਰਤਦੇ ਹੋਏ ਰੋਕੇ ਗਏ ਕੰਟੇਨਰ ਤੋਂ ਸਿੱਧੇ ਫਾਈਲਾਂ ਦੀ ਨਕਲ ਕਰ ਸਕਦੇ ਹੋ `docker cp
ਜੇ ਕਿਸੇ ਨੇ ਕੁਬਰਨੇਟਸ ਨੂੰ ਮਿਟਾ ਦਿੱਤਾ ਤਾਂ ਕੀ ਹੋਵੇਗਾ Namespace (kubectl delete ns prod) ਅਤੇ ਸਾਰੇ ਪੀ.ਵੀ.ਸੀ reclaimPolicy: Delete AWS EBS ਜਾਂ GCP 'ਤੇ?¶
ਜੇਕਰ ਕਲਾਊਡ CSI ਡਰਾਈਵਰ (`ebs.csi.aws.com` ਜਾਂ `pd.csi.storage.gke.io`) ਪਹਿਲਾਂ ਹੀ ਚਲਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ `DeleteVolume` ਕਿਉਂਕਿ `reclaimPolicy` ਸੀ `Delete`, ਤੁਰੰਤ ਤਿੰਨ ਕਲਾਉਡ-ਪੱਧਰ ਸੁਰੱਖਿਆ ਜਾਲਾਂ ਦੀ ਜਾਂਚ ਕਰੋ: (1) AWS EC2 ਕੰਸੋਲ ਵਿੱਚ **EBS ਵਾਲੀਅਮਾਂ ਲਈ AWS ਰੀਸਾਈਕਲ ਬਿਨ** ਦੀ ਜਾਂਚ ਕਰੋ (ਜੇ ਖਾਤੇ/ਟੈਗਾਂ 'ਤੇ ਕੋਈ ਧਾਰਨ ਨਿਯਮ ਕਿਰਿਆਸ਼ੀਲ ਸੀ, ਤਾਂ ਹਟਾਇਆ ਗਿਆ EBS ਵਾਲੀਅਮ ਰੀਸਾਈਕਲ ਬਿਨ ਵਿੱਚ ਬੈਠਦਾ ਹੈ ਅਤੇ 1 ਕਲਿੱਕ ਵਿੱਚ ਰੀਸਟੋਰ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ); (2) ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਸਵੈਚਲਿਤ ਵੌਲਯੂਮ ਸਨੈਪਸ਼ਾਟ ਲਈ **AWS ਬੈਕਅੱਪ / DLM / GCP ਸਨੈਪਸ਼ਾਟ ਸਮਾਂ-ਸੂਚੀ** ਦੀ ਜਾਂਚ ਕਰੋ; ਅਤੇ (3) ਜਾਂਚ ਕਰੋ ਕਿ ਕੀ ਤੁਹਾਡਾ ਡੇਟਾਬੇਸ WAL/binlogs ਨੂੰ ਸਟ੍ਰੀਮ ਕਰ ਰਿਹਾ ਸੀ (`WAL-G`, `pgBackRest`, `Litestream`) ਨੂੰ ਇੱਕ S3/GCS ਬਾਲਟੀ।
ਸੰਬੰਧਿਤ ਗਾਈਡ¶
- ਸਰਵਰ ਡਿਸਕ 100% ਪੂਰੀ (0 ਬਾਈਟ ਮੁਫ਼ਤ): ਡਾਟਾਬੇਸ WAL ਲੌਗ ਬਲੋਟ, ਖਰਾਬ ਬੀ-ਟ੍ਰੀ, ਅਤੇ ਜ਼ੀਰੋ-ਸਪੇਸ ਰਿਕਵਰੀ
- ਲੀਨਕਸ, ਮੈਕੋਸ, ਜਾਂ ਵਿੰਡੋਜ਼ 'ਤੇ ਦੁਰਘਟਨਾਤਮਕ
rm -rfਜਾਂShift+Delete: ਤੁਰੰਤ ਰੀਡ-ਓਨਲੀ ਰੀਮਾਉਂਟ ਅਤੇ ਇਨੋਡ ਕਾਰਵਿੰਗ - ਵਰਚੁਅਲ ਮਸ਼ੀਨ VMDK, VHDX, ਅਤੇ qcow2 ਸਨੈਪਸ਼ਾਟ ਚੇਨ ਭ੍ਰਿਸ਼ਟਾਚਾਰ ਅਤੇ ਹਾਈਪਰਵਾਈਜ਼ਰ ਬਚਾਅ
- AWS ਕੁੰਜੀਆਂ,
.envਫਾਈਲ, ਜਾਂ ਜਨਤਕ GitHub ਰੈਪੋ ਲਈ ਪ੍ਰਾਈਵੇਟ SSH ਕੁੰਜੀ ਦੀ ਦੁਰਘਟਨਾਤਮਕ ਗਿੱਟ ਕਮਿਟ - ਵੈੱਬ ਹੋਸਟਿੰਗ ਸੰਕਟ, ਮਾਈਗ੍ਰੇਸ਼ਨ, ਅਤੇ ਬੈਕਅੱਪ ਬਹਾਲੀ
- ਕੰਪਿਊਟਰ ਬੈਕਅੱਪ, 3-2-1 ਰਣਨੀਤੀ, ਅਤੇ ਆਫ਼ਤ ਰਿਕਵਰੀ
- ਦੇਸ਼ ਦੁਆਰਾ ਐਮਰਜੈਂਸੀ ਨੰਬਰ
ਸਰੋਤ ਅਤੇ ਅਧਿਕਾਰਤ ਮਾਰਗਦਰਸ਼ਨ¶
- ਕੁਬਰਨੇਟਸ ਅਧਿਕਾਰਤ ਦਸਤਾਵੇਜ਼ (
kubernetes.io/ ਕਲਾਉਡ ਨੇਟਿਵ ਕੰਪਿਊਟਿੰਗ ਫਾਊਂਡੇਸ਼ਨ): ਸਟੋਰੇਜ ਆਬਜੈਕਟ ਇਨ ਯੂਜ਼ ਪ੍ਰੋਟੈਕਸ਼ਨ (kubernetes.io/pvc-protectionਫਾਈਨਲਾਈਜ਼ਰ), ਸਥਿਰ ਵਾਲੀਅਮ ਦਾ ਮੁੜ ਦਾਅਵਾ ਕਰਨਾ (RetainਬਨਾਮDelete), ਅਤੇ ਓਪਰੇਟਿੰਗetcdਕੁਬਰਨੇਟਸ ਲਈ ਕਲੱਸਟਰ (etcdctl snapshot restore)। - ਡੌਕਰ ਇੰਕ. (
docs.docker.com): ਡੌਕਰ ਵਿੱਚ ਡੇਟਾ ਪ੍ਰਬੰਧਿਤ ਕਰੋ: ਵਾਲੀਅਮ, ਬਾਇੰਡ ਮਾਊਂਟ,overlay2ਸਟੋਰੇਜ਼ ਡਰਾਈਵਰ ਆਰਕੀਟੈਕਚਰ, ਅਤੇ ਪ੍ਰੂਨ ਰੈਫਰੈਂਸ। - ਲੀਨਕਸ ਕਰਨਲ ਸੰਗਠਨ (
kernel.org): ਦ/procਫਾਇਲਸਿਸਟਮ(procfsਦੁਆਰਾ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰ ਰਿਕਵਰੀ ਖੋਲ੍ਹੋ/proc/<pid>/fd/) ਅਤੇ Ext4 ਜਰਨਲ ਨਿਰਧਾਰਨ। ext4magicਪ੍ਰੋਜੈਕਟ ਦਸਤਾਵੇਜ਼ (ext4magic.sourceforge.net): Forensic Inode ਅਤੇ ਜਰਨਲ ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਰਿਕਵਰੀ Ext3/Ext4 ਫਾਈਲਸਿਸਟਮ ਉੱਤੇ।- ਨੈਸ਼ਨਲ ਇੰਸਟੀਚਿਊਟ ਆਫ਼ ਸਟੈਂਡਰਡਜ਼ ਐਂਡ ਟੈਕਨਾਲੋਜੀ
NIST) (ਸੰਯੁਕਤ ਰਾਜ): ਵਿਸ਼ੇਸ਼ ਪ੍ਰਕਾਸ਼ਨ 800-190: ਐਪਲੀਕੇਸ਼ਨ ਕੰਟੇਨਰ ਸੁਰੱਖਿਆ ਗਾਈਡ ਅਤੇ ਘਟਨਾ ਰਿਕਵਰੀ।