Skip to content

ਸਰਵਰ ਡਿਸਕ 100% ਪੂਰੀ (0 ਬਾਈਟ ਮੁਫਤ): ਇੱਕ ਕਰੈਸ਼ ਡੇਟਾਬੇਸ ਨੂੰ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਨਾ ਜਦੋਂ rm ਅਤੇ apt ਇਨੋਡਸ/ਸਪੇਸ ਦੀ ਘਾਟ ਕਾਰਨ ਅਸਫਲ

ਐਮਰਜੈਂਸੀ ਨੰਬਰ ਦੇਸ਼ ਅਨੁਸਾਰ ਵੱਖਰੇ ਹੁੰਦੇ ਹਨ. ਇਹ ਪੰਨਾ 911 ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ, ਸੰਯੁਕਤ ਰਾਜ ਅਤੇ ਕੈਨੇਡਾ ਲਈ ਨੰਬਰ। ਕਈ ਹੋਰ ਦੇਸ਼ 112, 999, ਜਾਂ ਕੋਈ ਹੋਰ ਨੰਬਰ ਵਰਤਦੇ ਹਨ। ਆਪਣੇ ਦੇਸ਼ ਲਈ ਨੰਬਰ ਲੱਭੋ.

ਖੋਜ ਕਰਨਾ ਕਿ ਇੱਕ ਉਤਪਾਦਨ ਲੀਨਕਸ ਸਰਵਰ ਹਿੱਟ ਹੋਇਆ ਹੈ 100% ਡਿਸਕ ਉਪਯੋਗਤਾ (0 bytes free) ਜਾਂ 100% inode ਉਪਯੋਗਤਾ (df -i) ਇੱਕ ਸਰਗਰਮ PostgreSQL, MySQL/InnoDB, MariaDB, ਜਾਂ SQLite ਡਾਟਾਬੇਸ ਚਲਾਉਣ ਵੇਲੇ ਸਿਸਟਮ ਪ੍ਰਸ਼ਾਸਨ ਵਿੱਚ ਸਭ ਤੋਂ ਖਤਰਨਾਕ ਅਸਫਲਤਾ ਮੋਡਾਂ ਵਿੱਚੋਂ ਇੱਕ ਹੈ। ਜ਼ੀਰੋ ਬਾਈਟਸ ਜਾਂ ਜ਼ੀਰੋ ਫ੍ਰੀ ਇਨੋਡਸ 'ਤੇ, ਸੰਕਟ ਤੇਜ਼ੀ ਨਾਲ ਫੈਲਦਾ ਹੈ: ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਕਰਨਲ ਹੁਣ ਯੂਨਿਕਸ ਡੋਮੇਨ ਸਾਕਟ ਨਹੀਂ ਬਣਾ ਸਕਦਾ ਹੈ /tmp ਜਾਂ /var/run, bash ਟੈਬ-ਪੂਰਾ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਕਿਉਂਕਿ ਇਹ ਅਸਥਾਈ ਸ਼ੈੱਲ ਪਾਈਪਾਂ ਨੂੰ ਨਹੀਂ ਲਿਖ ਸਕਦਾ, apt ਜਾਂ dnf ਪੈਕੇਜਾਂ ਨੂੰ ਸਾਫ਼ ਕਰਨ ਲਈ ਨਹੀਂ ਚੱਲ ਸਕਦਾ ਕਿਉਂਕਿ ਪੈਕੇਜ ਪ੍ਰਬੰਧਕਾਂ ਨੂੰ ਅਸਥਾਈ ਲਾਕ ਫਾਈਲਾਂ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਅਤੇ ਤੁਹਾਡਾ ਡਾਟਾਬੇਸ ਇੰਜਣ ਇੱਕ ਰਾਈਟ-ਅਹੇਡ ਲੌਗ ਦੇ ਵਿਚਕਾਰ ਕਰੈਸ਼ ਹੋ ਜਾਂਦਾ ਹੈ (WAL) ਚੈਕਪੁਆਇੰਟ ਜਾਂ ਸਾਫ਼ ਤੌਰ 'ਤੇ ਬੰਦ ਕਰਨ ਤੋਂ ਇਨਕਾਰ ਕਰਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਇਸਦੇ ਲਈ ਇੱਕ ਸਿੰਗਲ 4 ਕਿਲੋਬਾਈਟ (0.004 ਮੈਗਾਬਾਈਟ) ਬਲਾਕ ਨਿਰਧਾਰਤ ਨਹੀਂ ਕਰ ਸਕਦਾ ਹੈ। .pid ਜਾਂ ਫਾਈਲ ਨੂੰ ਲਾਕ ਕਰੋ। ਇਸ ਤੋਂ ਵੀ ਮਾੜੀ ਗੱਲ ਇਹ ਹੈ ਕਿ ਘਬਰਾਏ ਹੋਏ ਪ੍ਰਬੰਧਕ ਅਕਸਰ ਦੌੜਦੇ ਹਨ rm -rf /var/log/*.log ਮਲਟੀ-ਗੀਗਾਬਾਈਟ ਲੌਗ ਫਾਈਲਾਂ 'ਤੇ ਅਤੇ ਡਰਾਉਣੇ ਰੂਪ ਵਿੱਚ ਦੇਖੋ df -h ਅਜੇ ਵੀ ਰਿਪੋਰਟ ਕਰਦਾ ਹੈ 100% Use% (0 Avail), ਜਾਂ ਉਹ ਘਾਤਕ ਤੌਰ 'ਤੇ ਮਿਟਾ ਦਿੰਦੇ ਹਨ pg_wal (pg_xlog) ਜਾਂ ib_logfile0 ਸਪੇਸ ਖਾਲੀ ਕਰਨ ਲਈ, ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਰਿਕਵਰੀ ਤੋਂ ਇਲਾਵਾ ਡਾਟਾਬੇਸ ਨੂੰ ਸਥਾਈ ਤੌਰ 'ਤੇ ਖਰਾਬ ਕਰਨਾ। ਜੇਕਰ ਤੁਸੀਂ ਸਫ਼ਾਈ ਦੀ ਕੋਸ਼ਿਸ਼ ਦੌਰਾਨ ਗੰਭੀਰ ਡਾਟਾਬੇਸ ਫਾਈਲਾਂ ਨੂੰ ਗਲਤੀ ਨਾਲ ਮਿਟਾ ਦਿੱਤਾ ਹੈ, ਤਾਂ ਤੁਰੰਤ ਬੰਦ ਕਰੋ ਅਤੇ ਇਸ 'ਤੇ ਸਵਿਚ ਕਰੋ ਦੁਰਘਟਨਾਤਮਕ rm -rf ਜਾਂ Shift-Delete read-only remount and inode carving; ਜੇਕਰ ਤੁਹਾਡਾ ਅੰਡਰਲਾਈੰਗ ਸਟੋਰੇਜ ਹਾਰਡਵੇਅਰ I/O ਗਲਤੀਆਂ ਸੁੱਟ ਰਿਹਾ ਹੈ ਜਾਂ ਲਿਖਤਾਂ ਦੇ ਵਿਰੁੱਧ ਆਪਣੇ ਆਪ ਨੂੰ ਬੰਦ ਕਰ ਦਿੱਤਾ ਹੈ, ਤਾਂ ਸਲਾਹ ਕਰੋ SSD ਅਤੇ NVMe ਅਚਾਨਕ ਰੀਡ-ਓਨਲੀ ਮੋਡ ਅਤੇ TRIM ਅਸਮਰੱਥ ਬਚਾਅ ਬਚਾਅ ਜਾਂ ਨਿਕਾਰਾ Word, Excel, PDF, ਅਤੇ ਡਾਟਾਬੇਸ ਫਾਈਲ ਰਿਕਵਰੀ. ਜੇਕਰ ਇਹ ਆਊਟੇਜ ਹਸਪਤਾਲ ਦੇ ਜੀਵਨ-ਸੁਰੱਖਿਆ ਪ੍ਰਣਾਲੀਆਂ, ਐਮਰਜੈਂਸੀ ਡਿਸਪੈਚ, ਜਾਂ ਨਾਜ਼ੁਕ ਜਨਤਕ ਸਹੂਲਤਾਂ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦਾ ਹੈ, ਤਾਂ ਆਪਣੇ ਸਥਾਨਕ ਐਮਰਜੈਂਸੀ ਨੰਬਰ 'ਤੇ ਕਾਲ ਕਰੋ (911 ਸੰਯੁਕਤ ਰਾਜ ਅਤੇ ਕੈਨੇਡਾ ਵਿੱਚ, 112 ਯੂਰਪੀਅਨ ਯੂਨੀਅਨ ਵਿੱਚ, 999 ਯੂਨਾਈਟਿਡ ਕਿੰਗਡਮ ਵਿੱਚ) ਜਾਂ ਸਾਡੀ ਗਲੋਬਲ ਡਾਇਰੈਕਟਰੀ ਦੀ ਸਲਾਹ ਲਓ ਐਮਰਜੈਂਸੀ ਨੰਬਰ.

ਹੁਣ ਇਹ ਕਰੋ

  1. ** ਨਾ ਮਿਟਾਓ pg_wal/, pg_xlog/, pg_multixact/, ib_logfile*, undo_*, ਜਾਂ -wal / -shm ਸਪੇਸ ਬਣਾਉਣ ਲਈ ਫਾਈਲਾਂ**: ਡਾਟਾਬੇਸ ਦੇ ਕਰੈਸ਼ ਜਾਂ ਅਨਚੈਕਪੁਆਇੰਟਡ ਹੋਣ 'ਤੇ ਰਾਈਟ-ਅਹੇਡ ਲੌਗ ਜਾਂ ਇਨੋਡੀਬੀ ਰੀਡੂ/ਅਨਡੂ ਲੌਗ ਫਾਈਲਾਂ ਨੂੰ ਮਿਟਾਉਣਾ ਅਣ-ਪ੍ਰਤੀਤ ਅਤੇ ਇਨ-ਫਲਾਈਟ ਪੰਨਿਆਂ ਦਾ ਇੱਕੋ ਇੱਕ ਰਿਕਾਰਡ ਨਸ਼ਟ ਕਰ ਦਿੰਦਾ ਹੈ। ਇੱਕ ਪੂਰੀ ਡਿਸਕ ਵਾਲਾ ਇੱਕ ਡੇਟਾਬੇਸ ਇੱਕ ਵਾਰ ਸਪੇਸ ਖਾਲੀ ਹੋਣ ਤੋਂ ਬਾਅਦ 100 ਪ੍ਰਤੀਸ਼ਤ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਨ ਯੋਗ ਹੁੰਦਾ ਹੈ; ਇੱਕ ਡੇਟਾਬੇਸ ਜਿਸਦੀ WAL ਫਾਈਲਾਂ ਨੂੰ ਦਸਤੀ ਨਾਲ ਮਿਟਾਇਆ ਗਿਆ ਸੀ rm ਅਟੱਲ ਬੀ-ਟ੍ਰੀ ਅਤੇ ਢੇਰ ਭ੍ਰਿਸ਼ਟਾਚਾਰ ਦਾ ਸ਼ਿਕਾਰ ਹੋਵੇਗਾ।
  2. ** 5 ਸਕਿੰਟਾਂ ਵਿੱਚ ਨਿਦਾਨ ਕਰੋ ਕਿ ਕੀ ਤੁਸੀਂ ਡਿਸਕ ਬਲਾਕਾਂ ਤੋਂ ਬਾਹਰ ਹੋ (df -h), ਫਾਈਲ ਸਿਸਟਮ ਆਈਨੋਡ ਤੋਂ ਬਾਹਰ (df -i), ਜਾਂ ਅਣਲਿੰਕ ਕੀਤੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਖੋਲ੍ਹਣਾ (lsof +L1)**:
  3. ਚਲਾਓ df -h ਬਲਾਕ ਸਮਰੱਥਾ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਅਤੇ df -i ਇਨੋਡ ਸਮਰੱਥਾ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ. 50 ਗੀਗਾਬਾਈਟ (53.6 ਬਿਲੀਅਨ ਬਾਈਟ) ਖਾਲੀ ਡਿਸਕ ਸਪੇਸ ਵਾਲਾ ਸਰਵਰ ਅਜੇ ਵੀ ਸੁੱਟੇਗਾ No space left on device (ENOSPC) ਜੇਕਰ df -i ਦਿਖਾਉਂਦਾ ਹੈ IUse% = 100% (ਆਮ ਤੌਰ 'ਤੇ ਲੱਖਾਂ ਛੋਟੇ ਸੈਸ਼ਨ, ਕੈਸ਼, ਜਾਂ ਮੇਲ ਸਪੂਲ ਫਾਈਲਾਂ ਕਾਰਨ ਹੁੰਦਾ ਹੈ)।
  4. ਜੇ df -h ਦਿਖਾਉਂਦਾ ਹੈ 100% ਵਰਤਿਆ (0 Availਤੁਹਾਡੇ ਭੱਜਣ ਤੋਂ ਬਾਅਦ ਵੀ rm ਵੱਡੀਆਂ ਲੌਗ ਫਾਈਲਾਂ 'ਤੇ, ਚਲਾਓ sudo lsof +L1. ਨਾਲ ਕੋਈ ਵੀ ਫਾਈਲ ਡਿਲੀਟ ਕੀਤੀ ਗਈ rm ਜਦਕਿ nginx, rsyslog, docker, postgres, ਜਾਂ mysqld ਅਜੇ ਵੀ ਇੱਕ ਓਪਨ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰ ਰੱਖਦਾ ਹੈ ਜਦੋਂ ਤੱਕ ਪ੍ਰਕਿਰਿਆ ਮੁੜ ਚਾਲੂ ਨਹੀਂ ਹੋ ਜਾਂਦੀ ਜਾਂ ਤੁਸੀਂ ਡਿਸਕਰੀਪਰਟਰ ਨੂੰ ਸਿੱਧੇ ਤੌਰ 'ਤੇ ਕੱਟਣ ਤੱਕ ਇਸਦੇ 100 ਪ੍ਰਤੀਸ਼ਤ ਡਿਸਕ ਬਲਾਕਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਜਾਰੀ ਰੱਖਦੇ ਹਨ।
  5. ** 1 ਸਕਿੰਟ ਵਿੱਚ ਖਾਲੀ ਗੀਗਾਬਾਈਟ ਸਪੇਸ ਵਿੱਚ ਖੁੱਲ੍ਹੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਥਾਂ ਤੇ ਕੱਟ ਕੇ ਡੈਮਨ ਨੂੰ ਮੁੜ ਚਾਲੂ ਕੀਤੇ ਬਿਨਾਂ (: > /path/to/logfile ਜਾਂ : > /proc/<pid>/fd/<n>)**:
  6. ਦੀ ਬਜਾਏ rm /var/log/syslog (ਜੋ ਚੱਲ ਰਹੇ ਲੌਗਰ ਦੁਆਰਾ ਲਾਕ ਕੀਤੇ ਬਲਾਕਾਂ ਨੂੰ ਛੱਡ ਦਿੰਦਾ ਹੈ), ਸ਼ੈੱਲ ਨੱਲ ਰੀਡਾਇਰੈਕਟ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਫਾਈਲ ਨੂੰ ਜ਼ੀਰੋ ਕਰੋ: sudo sh -c ': > /var/log/syslog' ਜਾਂ sudo truncate -s 0 /var/log/syslog.
  7. ਜੇ ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ ਦੌੜ ਗਏ ਹੋ rm ਇੱਕ ਵਿਸ਼ਾਲ ਲੌਗ ਫਾਈਲ ਤੇ ਅਤੇ df -h ਨਹੀਂ ਛੱਡਿਆ, ਇਸਦੀ ਪ੍ਰਕਿਰਿਆ ID ਲੱਭੋ (PID) ਅਤੇ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰ (FD) ਵਿੱਚ sudo lsof +L1 ਅਤੇ ਇਸਨੂੰ ਕਰਨਲ procfs ਇੰਟਰਫੇਸ ਰਾਹੀਂ ਸਿੱਧਾ ਕੱਟੋ: sudo sh -c ': > /proc/<PID>/fd/<FD>'. ਸਪੇਸ 'ਤੇ ਵਾਪਸ ਆ ਜਾਵੇਗਾ df -h ਤੁਰੰਤ.
  8. ** ਤੁਰੰਤ ਐਮਰਜੈਂਸੀ ਸਾਹ ਲੈਣ ਵਾਲੇ ਕਮਰੇ ਨੂੰ ਅਨਲੌਕ ਕਰੋ ext4 / ext3 ਰਾਖਵੇਂ ਰੂਟ ਬਲਾਕ ਪ੍ਰਤੀਸ਼ਤ ਨੂੰ ਘਟਾ ਕੇ (tune2fs -m 1)**: ਮੂਲ ਰੂਪ ਵਿੱਚ, ext4 ਪੂਰੇ ਭਾਗ ਦਾ 5 ਪ੍ਰਤੀਸ਼ਤ ਰਾਖਵਾਂ ਕਰਦਾ ਹੈ (25 gigabytes 'ਤੇ ਏ 500 gigabyte ਡਿਸਕ) ਲਈ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ UID 0 (root), ਭਾਵ ਗੈਰ-ਰੂਟ ਸੇਵਾਵਾਂ ਜਿਵੇਂ postgres (UID 109), mysql, ਅਤੇ www-data ਹਿੱਟ No space left on device 95 ਪ੍ਰਤੀਸ਼ਤ ਉਪਯੋਗਤਾ 'ਤੇ. ਦੌੜ ਕੇ ਜ਼ੀਰੋ ਡਾਊਨਟਾਈਮ ਦੇ ਨਾਲ 1 ਸਕਿੰਟ ਵਿੱਚ ਉਸ ਰਿਜ਼ਰਵ ਦਾ 80 ਪ੍ਰਤੀਸ਼ਤ ਔਨਲਾਈਨ ਮੁੜ ਦਾਅਵਾ ਕਰੋ sudo tune2fs -m 1 /dev/sda1 (ਜਾਂ ਤੁਹਾਡੇ ਰੂਟ ਬਲਾਕ ਡਿਵਾਈਸ ਤੋਂ findmnt /).
  9. ** ਵੈਕਿਊਮ systemd-journald ਬਾਈਨਰੀ ਲੌਗਸ ਅਤੇ ਪੁਰਾਣੇ ਪੈਕੇਜ ਕੈਚ ਸੁਰੱਖਿਅਤ **: ਚਲਾਓ sudo journalctl --vacuum-size=50M (ਜੋ ਸੁਰੱਖਿਅਤ ਰੂਪ ਨਾਲ ਘੁੰਮਦਾ ਹੈ ਅਤੇ ਬਾਈਨਰੀ ਨੂੰ ਸਾਫ਼ ਕਰਦਾ ਹੈ /var/log/journal 50 ਮੈਗਾਬਾਈਟ ਤੱਕ ਪੁਰਾਲੇਖ) ਅਤੇ sudo apt-get clean (ਜਾਂ sudo dnf clean all), ਜੋ ਡਾਊਨਲੋਡ ਕੀਤੇ ਨੂੰ ਮਿਟਾ ਦਿੰਦਾ ਹੈ .deb / .rpm ਵਿੱਚ ਪੁਰਾਲੇਖ /var/cache/apt/archives/ dpkg ਡੇਟਾਬੇਸ ਨੂੰ ਲਿਖਣ ਦੀ ਲੋੜ ਤੋਂ ਬਿਨਾਂ।
  10. ਇੱਕ ਵਾਰ ਘੱਟੋ-ਘੱਟ 1 ਗੀਗਾਬਾਈਟ ਤੋਂ 5 ਗੀਗਾਬਾਈਟ (1.07 ਬਿਲੀਅਨ ਤੋਂ 5.36 ਬਿਲੀਅਨ ਬਾਈਟ) ਸਪੇਸ ਖਾਲੀ ਹੋਣ 'ਤੇ, ਕਲਾਇੰਟ ਟ੍ਰੈਫਿਕ ਦੀ ਆਗਿਆ ਦੇਣ ਤੋਂ ਪਹਿਲਾਂ ਇਸਦੇ WAL ਚੈੱਕਪੁਆਇੰਟ ਨੂੰ ਪੂਰਾ ਕਰਨ ਲਈ ਡੇਟਾਬੇਸ ਨੂੰ ਸਿੰਗਲ-ਯੂਜ਼ਰ ਜਾਂ ਰਿਕਵਰੀ ਮੋਡ ਵਿੱਚ ਲਿਆਓ: PostgreSQL, MySQL/InnoDB, ਜਾਂ SQLite ਇਸ ਦੇ WAgri ਨੂੰ ਰੀਪਲੇਅ ਕਰੋ।WAL), ਮੁੱਖ ਡੇਟਾ ਫਾਈਲਾਂ ਵਿੱਚ ਗੰਦੇ ਪੰਨਿਆਂ ਨੂੰ ਫਲੱਸ਼ ਕਰੋ, ਅਤੇ ਆਪਣੀ ਐਪਲੀਕੇਸ਼ਨ ਫਾਇਰਵਾਲ ਜਾਂ ਵੈਬ ਸਰਵਰ ਨੂੰ ਦੁਬਾਰਾ ਖੋਲ੍ਹਣ ਤੋਂ ਪਹਿਲਾਂ ਇਸਦੇ ਫੁੱਲੇ ਹੋਏ WAL ਹਿੱਸਿਆਂ ਨੂੰ ਸਾਫ਼-ਸੁਥਰਾ ਰੀਸਾਈਕਲ ਕਰੋ।

Danger

** ਕਦੇ ਨਾ ਦੌੜੋ pg_resetwal (ਜਾਂ pg_resetxlog) PostgreSQL 'ਤੇ ਜਾਂ innodb_force_recovery = 6 MySQL 'ਤੇ ਸਿਰਫ਼ ਕਿਉਂਕਿ ਡਿਸਕ ਭਰ ਗਈ**: ਚੱਲ ਰਹੀ ਹੈ pg_resetwal ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਲੌਗ ਪੁਆਇੰਟਰਾਂ ਨੂੰ ਪੂੰਝਦਾ ਹੈ ਅਤੇ PostgreSQL ਨੂੰ ਅੱਧ-ਲਿਖਤ ਡੇਟਾ ਪੰਨਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਮਜ਼ਬੂਰ ਕਰਦਾ ਹੈ, ਚੁੱਪ ਕਤਾਰ ਦੇ ਨੁਕਸਾਨ, ਡੁਪਲੀਕੇਟ ਪ੍ਰਾਇਮਰੀ ਕੁੰਜੀਆਂ, ਅਤੇ ਟੁੱਟੇ ਵਿਦੇਸ਼ੀ-ਕੁੰਜੀ ਬੀ-ਟ੍ਰੀਜ਼ ਦੀ ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ। ਡਿਸਕ-ਪੂਰੇ ਡੇਟਾਬੇਸ ਕਰੈਸ਼ਾਂ ਦੇ 99.9 ਪ੍ਰਤੀਸ਼ਤ ਵਿੱਚ, ਭਾਗ ਉੱਤੇ ਸਿਰਫ਼ 2 ਗੀਗਾਬਾਈਟ ਤੋਂ 10 ਗੀਗਾਬਾਈਟ (2.1 ਬਿਲੀਅਨ ਤੋਂ 10.7 ਬਿਲੀਅਨ ਬਾਈਟ) ਸਪੇਸ ਖਾਲੀ ਕਰਨਾ ਅਤੇ ਡਾਟਾਬੇਸ ਡੈਮਨ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨਾ ਆਮ ਤੌਰ 'ਤੇ ਆਟੋਮੈਟਿਕ ਕਰੈਸ਼ ਰਿਕਵਰੀ (REDO ਪੜਾਅ) ਜ਼ੀਰੋ ਡਾਟਾ ਨੁਕਸਾਨ ਦੇ ਨਾਲ ਸਾਫ਼-ਸਫ਼ਾਈ ਨਾਲ ਖਤਮ ਕਰਨ ਲਈ.


ਫੈਸਲਾ ਟ੍ਰੀ: ਜ਼ੀਰੋ-ਸਪੇਸ ਸਰਵਰ ਅਤੇ ਕ੍ਰੈਸ਼ਡ ਡੇਟਾਬੇਸ ਟ੍ਰਾਈਜ

ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਰਿਪੋਰਟ ਕਿਉਂ ਕਰ ਰਿਹਾ ਹੈ, ਇਸਦੀ ਪਛਾਣ ਕਰਨ ਲਈ ਇਸ ਫੈਸਲੇ ਦੇ ਰੁੱਖ ਦੀ ਵਰਤੋਂ ਕਰੋ ENOSPC (No space left on device) ਅਤੇ ਸਹੀ ਗੈਰ-ਵਿਨਾਸ਼ਕਾਰੀ ਰਿਕਵਰੀ ਮਾਰਗ ਚੁਣੋ:

flowchart TD
    Start["ਸਰਵਰ ਜਾਂ ਡਾਟਾਬੇਸ ਥ੍ਰੋਇੰਗ: ਡਿਵਾਈਸ 'ਤੇ ਕੋਈ ਜਗ੍ਹਾ ਨਹੀਂ ਬਚੀ (ENOSPC)"] --> CheckDF["ਚਲਾਓ: df -h ਅਤੇ df -i"]

    CheckDF --> DiagType{"ਡੀਐਫ ਰਿਪੋਰਟ ਕੀ ਕਰਦੀ ਹੈ?"}

    DiagType -->|"df -h 100% ਵਰਤੋਂ (0 ਲਾਭ) ਅਤੇ df -i <95% ਦਿਖਾਉਂਦਾ ਹੈ"| BlockFull["ਬਲਾਕ ਥਕਾਵਟ: ਜਾਂਚ ਕਰੋ ਕਿ ਕੀ du -shx / df -h ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ"]
    DiagType -->|"df -h ਮੁਫ਼ਤ GBs ਦਿਖਾਉਂਦਾ ਹੈ ਪਰ df -i 100% IUse ਦਿਖਾਉਂਦਾ ਹੈ"| InodeFull["ਆਈਨੋਡ ਥਕਾਵਟ: ਲੱਖਾਂ ਛੋਟੀਆਂ 0-ਤੋਂ-4KB ਫਾਈਲਾਂ"]
    DiagType -->|"ਦੋਵੇਂ df -h ਅਤੇ df -i ਦਿਖਾਓ <90% ਵਰਤੇ ਗਏ"| RamOrQuota["ਲੁਕਵੀਂ ਸੀਮਾ: df -h /tmp (tmpfs RAM ਪੂਰੀ), ਡੌਕਰ ਓਵਰਲੇ2, ਜਾਂ XFS/ext4 ਡਿਸਕ ਕੋਟਾ ਦੀ ਜਾਂਚ ਕਰੋ"]

    BlockFull --> GhostCheck{"ਕੀ ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ df ਡ੍ਰੌਪਿੰਗ ਤੋਂ ਬਿਨਾਂ ਵੱਡੀਆਂ ਫਾਈਲਾਂ 'ਤੇ rm ਚਲਾ ਚੁੱਕੇ ਹੋ?"}
    GhostCheck -->|"ਹਾਂ: du df ਨਾਲੋਂ ਬਹੁਤ ਛੋਟਾ ਹੈ"| UnlinkedFD["ਚਲਾਓ: sudo lsof +L1 -> ਭੂਤ ਫਾਈਲ ਨੂੰ ਇਸ ਰਾਹੀਂ ਕੱਟੋ: > /proc/PID/fd/FD"]
    GhostCheck -->|"ਨਹੀਂ: ਅਸਲ ਫਾਈਲਾਂ ਡਿਸਕ ਨੂੰ ਭਰ ਰਹੀਆਂ ਹਨ"| EmergencySpace["ਤੁਰੰਤ ਸਾਹ ਲੈਣ ਵਾਲਾ ਕਮਰਾ ਬਣਾਓ (1 GB ਤੋਂ 5 GB)"]

    EmergencySpace --> Ext4Check{"ਕੀ ਫਾਈਲਸਿਸਟਮ ext4 / ext3 ਹੈ?"}
    Ext4Check -->|"ਹਾਂ"| Tune2fs["ਚਲਾਓ: sudo tune2fs -m 1 /dev/root_dev (ਗੈਰ-ਰੂਟ DB ਉਪਭੋਗਤਾ ਲਈ ਤੁਰੰਤ ਡਿਸਕ ਦਾ 4% ਖਾਲੀ ਕਰਦਾ ਹੈ)"]
    Ext4Check -->|"ਨਹੀਂ (XFS / Btrfs / ZFS)"| TruncLogs["ਲੌਗਸ ਇਨ-ਪਲੇਸ (: > /var/log/syslog) ਨੂੰ ਕੱਟੋ ਅਤੇ journalctl --vacuum-size=50M ਚਲਾਓ"]

    InodeFull --> InodeClean["Find / -xdev -printf '%h\n' | ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਲੱਖਾਂ ਫਾਈਲਾਂ ਨਾਲ ਡਾਇਰੈਕਟਰੀ ਲੱਭੋ ਲੜੀਬੱਧ | uniq -c | ਲੜੀਬੱਧ -k 1 -r | head -20 -> find -delete ਨਾਲ ਮਿਟਾਓ"]

    UnlinkedFD --> DBRecover["ਡਾਟਾਬੇਸ ਇੰਜਣ WAL ਅਤੇ ਬੀ-ਟ੍ਰੀ ਰਿਕਵਰੀ ਲਈ ਅੱਗੇ ਵਧੋ"]
    Tune2fs --> DBRecover
    TruncLogs --> DBRecover
    InodeClean --> DBRecover
    RamOrQuota --> DBRecover

    DBRecover --> WhichDB{"ਕਿਹੜਾ ਡਾਟਾਬੇਸ ਇੰਜਣ ਕਰੈਸ਼ ਹੋਇਆ?"}
    WhichDB -->|"PostgreSQL"| PGFlow["pg_wal ਨੂੰ ਬਰਕਰਾਰ ਰੱਖੋ -> WAL ਨੂੰ ਮੁੜ ਚਲਾਉਣ ਲਈ ਪੋਸਟਗ੍ਰੇਸ ਸ਼ੁਰੂ ਕਰੋ -> ਚੈਕਪੁਆਇੰਟ ਚਲਾਓ; -> ਸਟੈਲ ਰੀਪਲੀਕੇਸ਼ਨ ਸਲਾਟ ਸੁੱਟੋ"]
    WhichDB -->|"MySQL / MariaDB (InnoDB)"| MyFlow["ib_logfile* ਨੂੰ ਬਰਕਰਾਰ ਰੱਖੋ -> mysqld ਸ਼ੁਰੂ ਕਰੋ -> ਬਾਈਨਰੀ ਲੌਗਸ ਨੂੰ PURGE BINARY LOGS -> ਅਨੁਕੂਲਿਤ ਟੇਬਲ ਦੁਆਰਾ ਪਰਜ ਕਰੋ"]
    WhichDB -->|"SQLite3"| SqFlow["ਬੈਕਅੱਪ .db + .db-wal + .db-shm -> PRAGMA wal_checkpoint(TRUNCATE) ਜਾਂ sqlite3 break.db '.recover' ਚਲਾਓ"]

ਪੜਾਅ 1: ਸਟੈਂਡਰਡ ਕਮਾਂਡਾਂ ਕਿਉਂ (rm, apt, tab-completion) 0 ਬਾਈਟ ਫਰੀ 'ਤੇ ਫੇਲ

ਜਦੋਂ ਇੱਕ ਲੀਨਕਸ ਭਾਗ 100 ਪ੍ਰਤੀਸ਼ਤ ਬਲਾਕ ਜਾਂ ਆਈਨੋਡ ਥਕਾਵਟ ਨੂੰ ਹਿੱਟ ਕਰਦਾ ਹੈ, ਤਾਂ ਮਿਆਰੀ ਉਪਚਾਰ ਕਮਾਂਡਾਂ ਅਚਾਨਕ ਤਰੀਕਿਆਂ ਨਾਲ ਅਸਫਲ ਹੋ ਜਾਂਦੀਆਂ ਹਨ: - ** ਦਬਾਓ Tab ਵਿੱਚ bash ਸੁੱਟਦਾ ਹੈ cannot create temp file for here-document: No space left on device**: ਆਧੁਨਿਕ bash-completion ਸਕ੍ਰਿਪਟਾਂ ਵਿੱਚ ਅਸਥਾਈ ਫਾਈਲਾਂ ਬਣਾਉਂਦੀਆਂ ਹਨ /tmp. ਜੇ /tmp ਰੂਟ 'ਤੇ ਰਹਿੰਦਾ ਹੈ / a ਦੀ ਬਜਾਏ ਭਾਗ tmpfs RAM ਮਾਊਂਟ, ਸ਼ੈੱਲ ਮੁਕੰਮਲ ਹੋਣਾ ਅਤੇ heredocs (<<EOF) ਅਸਫਲ। ਇਸ਼ਾਰਾ ਕਰਕੇ ਇਸ ਨੂੰ ਤੁਰੰਤ ਠੀਕ ਕਰੋ TMPDIR ਸ਼ੇਅਰਡ ਮੈਮੋਰੀ ਰੈਮ ਲਈ:

export TMPDIR=/dev/shm
- apt-get autoremove ਜਾਂ dpkg --configure -a ਨਾਲ ਫੇਲ ਹੁੰਦਾ ਹੈ No space left on device: ਕਦੋਂ /boot ਜਾਂ / 100 ਪ੍ਰਤੀਸ਼ਤ ਭਰਿਆ ਹੋਇਆ ਹੈ, apt ਪੁਰਾਣੇ ਕਰਨਲ ਹਟਾ ਨਹੀਂ ਸਕਦੇ ਕਿਉਂਕਿ dpkg ਵਿੱਚ ਪਹਿਲਾਂ ਸਟੇਟਸ ਅੱਪਡੇਟ ਲਿਖਣਾ ਚਾਹੀਦਾ ਹੈ /var/lib/dpkg/updates/. ਇਸ ਦੀ ਬਜਾਏ, ਚਲਾਓ sudo apt-get clean (ਜੋ ਕੈਸ਼ ਨੂੰ ਅਨਲਿੰਕ ਕਰਦਾ ਹੈ .deb ਵਿੱਚ ਪੁਰਾਲੇਖ /var/cache/apt/archives/ ਸਿੱਧੇ), ਜਾਂ ਇੱਕ ਨਾ-ਵਰਤੇ ਕਰਨਲ ਚਿੱਤਰ ਨੂੰ ਵਿੱਚ ਕੱਟੋ /boot (sudo sh -c ': > /boot/initrd.img-<old-unused-version>') ਦੇਣ ਲਈ dpkg ਇਸ ਨੂੰ ਚਲਾਉਣ ਲਈ 50 ਮੈਗਾਬਾਈਟ (52.4 ਮਿਲੀਅਨ ਬਾਈਟ) ਦੀ ਲੋੜ ਹੈ sudo dpkg --purge linux-image-<old-unused-version>. - rm /path/to/dir/* ਨਾਲ ਫੇਲ ਹੁੰਦਾ ਹੈ Argument list too long: ਕਦੋਂ df -i 100 ਪ੍ਰਤੀਸ਼ਤ 'ਤੇ ਹੈ ਕਿਉਂਕਿ ਇੱਕ ਡਾਇਰੈਕਟਰੀ ਵਰਗੀ /var/lib/php/sessions ਲੱਖਾਂ ਛੋਟੀਆਂ ਫਾਈਲਾਂ, ਵਾਈਲਡਕਾਰਡ ਗਲੋਬਿੰਗ (*) ਕਰਨਲ ਨੂੰ ਓਵਰਫਲੋ ਕਰਦਾ ਹੈ ARG_MAX ਬਫਰ (2 megabytes) ਤੋਂ ਪਹਿਲਾਂ rm ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ। ਵਰਤੋ find ਨਾਲ -delete ਇਸਦੀ ਬਜਾਏ:
sudo find /var/lib/php/sessions -type f -delete

ਦੇ 5 ਵੱਖਰੇ ਕਾਰਨ No space left on device (ENOSPC)

ਕਿਸੇ ਵੀ ਡੇਟਾਬੇਸ ਫਾਈਲਾਂ ਨੂੰ ਛੂਹਣ ਤੋਂ ਪਹਿਲਾਂ, ਇਹ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਇਹਨਾਂ ਪੰਜ ਦ੍ਰਿਸ਼ਾਂ ਦੀ ਤੁਲਨਾ ਕਰੋ ਕਿ ਅਸਲ ਵਿੱਚ ਕਿਹੜਾ ਸਰੋਤ ਖਤਮ ਹੋ ਗਿਆ ਹੈ:

ਡਾਇਗਨੌਸਟਿਕ ਕਮਾਂਡ ਲੱਛਣ ਦੇਖਿਆ ਗਿਆ ਮੂਲ ਕਾਰਨ ਤੁਰੰਤ 10-ਸਕਿੰਟ ਫਿਕਸ
df -h ਬਨਾਮ sudo du -shx / df -h ਦਿਖਾਉਂਦਾ ਹੈ 100% ਵਰਤਿਆ (0 Avail), ਪਰ du -shx / ਤੱਕ ਹੀ ਜੋੜਦਾ ਹੈ 60% ਡਿਸਕ ਦੇ ਆਕਾਰ ਦਾ. ਅਨਲਿੰਕਡ ਫਾਈਲਾਂ ਖੋਲ੍ਹੋ ("ਘੋਸਟ ਫਾਈਲਾਂ"): ਕੋਈ ਦੌੜ ਗਿਆ rm ਇੱਕ ਪ੍ਰਕਿਰਿਆ ਦੇ ਦੌਰਾਨ ਇੱਕ ਵਿਸ਼ਾਲ ਲੌਗ ਜਾਂ ਟੈਂਪ ਫਾਈਲ 'ਤੇ (nginx, java, postgres, docker) ਅਜੇ ਵੀ ਇਹ ਖੁੱਲ੍ਹਾ ਸੀ। ਚਲਾਓ sudo lsof +L1, ਦਾ ਪਤਾ ਲਗਾਓ PID ਅਤੇ FD ਦੇ (deleted) ਫਾਈਲ, ਅਤੇ ਚਲਾਓ sudo sh -c ': > /proc/<PID>/fd/<FD>'.
df -h ਦਿਖਾਉਂਦਾ ਹੈ 95% ਵਰਤਿਆ, 0 Avail Used + Avail ਬਰਾਬਰ ਨਹੀਂ ਹੈ Size; root ਫਾਈਲਾਂ ਲਿਖ ਸਕਦੇ ਹਨ, ਪਰ postgres ਜਾਂ mysql ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ ENOSPC. ext4 ਰਿਜ਼ਰਵਡ ਰੂਟ ਬਲਾਕ (5% ਡਿਫੌਲਟ): ext4 ਗੈਰ-ਰੂਟ ਉਪਭੋਗਤਾਵਾਂ ਤੋਂ 5 ਪ੍ਰਤੀਸ਼ਤ ਬਲਾਕ ਰੋਕਦਾ ਹੈ (UID > 0) ਰੂਟ ਤਾਲਾਬੰਦੀ ਅਤੇ ਵਿਖੰਡਨ ਨੂੰ ਰੋਕਣ ਲਈ। ਚਲਾਓ sudo tune2fs -m 1 /dev/<partition> ਰਿਜ਼ਰਵ ਨੂੰ ਤੁਰੰਤ 5 ਪ੍ਰਤੀਸ਼ਤ ਤੋਂ ਘਟਾ ਕੇ 1 ਪ੍ਰਤੀਸ਼ਤ ਔਨਲਾਈਨ ਕਰਨ ਲਈ।
df -i df -h ਗੀਗਾਬਾਈਟ ਖਾਲੀ ਥਾਂ ਦਿਖਾਉਂਦਾ ਹੈ, ਪਰ df -i ਦਿਖਾਉਂਦਾ ਹੈ IUse% = 100% (IFree = 0). ਇਨੋਡ ਥਕਾਵਟ: ext4 'ਤੇ ਬਣਾਏ ਗਏ ਇਨੋਡਸ ਦੀ ਇੱਕ ਨਿਸ਼ਚਿਤ ਸੰਖਿਆ ਹੈ mkfs ਸਮਾਂ; ਲੱਖਾਂ ਛੋਟੀਆਂ ਫਾਈਲਾਂ ਹਰ ਇਨੋਡ ਸਲਾਟ ਦੀ ਖਪਤ ਕਰਦੀਆਂ ਹਨ। ਦੋਸ਼ੀ ਫੋਲਡਰ ਲੱਭੋ (sudo find / -xdev -printf '%h\n' \ | ਕ੍ਰਮਬੱਧ \ | uniq -c \ | ਲੜੀਬੱਧ -k 1 -r \ | ਸਿਰ -10) and run sudo ਲੱਭੋ /ਮੁਲਜ਼ਮ/dir -type f -delete.
**ਸੁਡੋ ਮਾਊਂਟ \ grep /path** |du -sh /var/logਛੋਟਾ ਹੈ, ਅਜੇ ਵੀ/ਵਿੱਚ 40 ਗੀਗਾਬਾਈਟ ਗੁੰਮ ਸਪੇਸ ਹੈ। | **ਇੱਕ ਮਾਊਂਟ ਪੁਆਇੰਟ ਦੇ ਹੇਠਾਂ ਲੁਕੀਆਂ ਫਾਈਲਾਂ**: ਇੱਕ ਪ੍ਰਕਿਰਿਆ ਵਿੱਚ 40 ਗੀਗਾਬਾਈਟ ਲਿਖੀਆਂ ਗਈਆਂ/mnt/backupਜਦੋਂ ਕਿ ਬਾਹਰੀ ਡਰਾਈਵ ਨੂੰ ਅਣਮਾਊਂਟ ਕੀਤਾ ਗਿਆ ਸੀ, ਅਤੇ ਬਾਅਦ ਵਿੱਚ ਕਿਸੇ ਨੇ *ਸਿਖਰ* ਉੱਤੇ ਇੱਕ ਡਿਸਕ ਮਾਊਂਟ ਕੀਤੀ/mnt/backup, ਤੋਂ ਅੰਡਰਲਾਈੰਗ ਫਾਈਲਾਂ ਨੂੰ ਲੁਕਾਉਣਾdu. | ਰੂਟ ਫਾਈਲ ਸਿਸਟਮ ਨੂੰ ਇੱਕ ਅਸਥਾਈ ਦ੍ਰਿਸ਼ ਨਾਲ ਬੰਨ੍ਹੋ-ਮਾਊਂਟ ਕਰੋ (sudo mkdir /dev/shm/rootview && sudo mount --bind / /dev/shm/rootview), ਚੈੱਕ ਕਰੋdu -sh /dev/shm/rootview/mnt/*`, ਅਤੇ ਲੁਕੀਆਂ ਹੋਈਆਂ ਫਾਈਲਾਂ ਨੂੰ ਮਿਟਾਓ।
btrfs filesystem df / df -h ਏ 'ਤੇ 20 ਗੀਗਾਬਾਈਟ ਮੁਫਤ ਦਿਖਾਉਂਦਾ ਹੈ Btrfs ਵਾਲੀਅਮ, ਫਿਰ ਵੀ ਨਾਲ ਫੇਲ ਲਿਖਦਾ ਹੈ ENOSPC. Btrfs ਮੈਟਾਡੇਟਾ ਚੰਕ ਥਕਾਵਟ: Btrfs ਵੱਖਰੇ ਡੇਟਾ ਅਤੇ ਮੈਟਾਡੇਟਾ ਭਾਗਾਂ ਵਿੱਚ ਸਪੇਸ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ; ਜੇਕਰ ਸਾਰੀ ਅਣ-ਅਲੋਟ ਕੀਤੀ ਕੱਚੀ ਥਾਂ ਨੂੰ ਸਪਾਰਸ ਡੇਟਾ ਚੰਕਸ ਵਿੱਚ ਬੰਦ ਕਰ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਮੈਟਾਡੇਟਾ ਦੇ ਹਿੱਸੇ 100 ਪ੍ਰਤੀਸ਼ਤ ਹਿੱਟ ਹੁੰਦੇ ਹਨ। ਅਸਥਾਈ ਤੌਰ 'ਤੇ 2 ਗੀਗਾਬਾਈਟ RAM ਫਾਈਲ ਲੂਪ ਡਿਵਾਈਸ ਸ਼ਾਮਲ ਕਰੋ (dd if=/dev/zero of=/dev/shm/btrfs_ram bs=1M count=2048 && sudo btrfs device add -f /dev/shm/btrfs_ram /), ਚਲਾਓ sudo btrfs balance start -dusage=10 /, ਫਿਰ sudo btrfs device remove /dev/shm/btrfs_ram /.

ਪੜਾਅ 2: 60 ਸਕਿੰਟਾਂ ਦੇ ਅੰਦਰ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਡਿਸਕ ਸਪੇਸ ਦਾ ਮੁੜ ਦਾਅਵਾ ਕਰਨਾ

ਕਿਰਿਆਸ਼ੀਲ ਪ੍ਰਕਿਰਿਆਵਾਂ ਨੂੰ ਖਰਾਬ ਕੀਤੇ ਬਿਨਾਂ 500 ਮੈਗਾਬਾਈਟ ਅਤੇ 50 ਗੀਗਾਬਾਈਟ (0.53 ਬਿਲੀਅਨ ਤੋਂ 53.6 ਬਿਲੀਅਨ ਬਾਈਟ) ਸਪੇਸ ਦੇ ਵਿਚਕਾਰ ਮੁੜ ਦਾਅਵਾ ਕਰਨ ਲਈ ਇਹਨਾਂ ਸਹੀ ਕਦਮਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ:

ਕਦਮ 1: ਦੁਆਰਾ ਮਿਟਾਈਆਂ ਗਈਆਂ ("ਭੂਤ") ਫਾਈਲਾਂ ਨੂੰ ਖੋਲ੍ਹੋ /proc/<pid>/fd/

ਜੇਕਰ ਤੁਸੀਂ ਜਾਂ ਇੱਕ ਆਟੋਮੇਟਿਡ ਲਾਗਰੋਟੇਟ ਸਕ੍ਰਿਪਟ ਨੇ ਵੱਡੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਪਹਿਲਾਂ ਹੀ ਮਿਟਾ ਦਿੱਤਾ ਹੈ ਪਰ ਡਿਸਕ ਸਪੇਸ ਵਾਪਸ ਨਹੀਂ ਕੀਤੀ ਗਈ ਸੀ, ਤਾਂ ਕਰਨਲ ਦੀ ਅਣਲਿੰਕ ਕੀਤੀ ਓਪਨ ਫਾਈਲ ਟੇਬਲ ਦੀ ਜਾਂਚ ਕਰੋ:

sudo lsof +L1
'ਤੇ ਦੇਖੋ SIZE/OFF ਕਾਲਮ (ਬਾਈਟ ਵਿੱਚ ਮਾਪਿਆ ਗਿਆ)। ਜੇ ਤੁਸੀਂ ਇੱਕ ਐਂਟਰੀ ਦੇਖਦੇ ਹੋ ਜਿਵੇਂ:
COMMAND    PID     USER   FD   TYPE DEVICE    SIZE/OFF NLINK    NODE NAME
mysqld    1942    mysql    6u   REG  259,1 34896609280     0  918273 /tmp/ibXz91aB (deleted)
rsyslogd   612   syslog    7w   REG  259,1 18253611008     0  131092 /var/log/syslog.1 (deleted)
ਇੱਥੇ, rsyslogd (PID 612, ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰ 7w -> 7) ਕੋਲ ਇੱਕ 18.2 ਗੀਗਾਬਾਈਟ ਹਟਾਈ ਗਈ ਲੌਗ ਫਾਈਲ ਖੁੱਲੀ ਹੈ। ਨਾ ਕਰੋ kill -9 ਡਾਟਾਬੇਸ ਪ੍ਰਕਿਰਿਆਵਾਂ (mysqld ਜਾਂ postgres) ਮੁਕਤ ਕਰਨ ਲਈ /tmp ਫਾਈਲਾਂ ਜੇਕਰ ਤੁਸੀਂ ਪਹਿਲਾਂ ਕਿਤੇ ਹੋਰ ਥਾਂ ਖਾਲੀ ਕਰ ਸਕਦੇ ਹੋ। ਇਸਦੀ ਬਜਾਏ, ਲਾਗ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰ ਨੂੰ ਜ਼ੀਰੋ ਕਰੋ (PID 612, FD 7) ਸਿੱਧੇ ਕਰਨਲ ਮੈਮੋਰੀ ਵਿੱਚ:
sudo sh -c ': > /proc/612/fd/7'
ਚਲਾਓ df -h ਤੁਰੰਤ: ਸਾਰੇ 18.2 ਗੀਗਾਬਾਈਟ ਇੱਕ ਵੀ ਸੇਵਾ ਨੂੰ ਮੁੜ ਚਾਲੂ ਕੀਤੇ ਬਿਨਾਂ ਮੌਕੇ 'ਤੇ ਹੀ ਮੁਕਤ ਹੋ ਜਾਂਦੇ ਹਨ।

ਕਦਮ 2: ਮੁੜ ਦਾਅਵਾ ਕਰੋ ext4 ਨਾਲ ਆਨਲਾਈਨ ਰਾਖਵੇਂ ਬਲਾਕ tune2fs

ਕਿਸੇ ਵੀ 'ਤੇ ext4 ਜਾਂ ext3 ਫਾਈਲ ਸਿਸਟਮ, ਮੌਜੂਦਾ ਰਿਜ਼ਰਵਡ ਬਲਾਕ ਗਿਣਤੀ ਦੀ ਜਾਂਚ ਕਰੋ:

df -h /
sudo tune2fs -l /dev/nvme0n1p1 | grep -i "reserved block"
ਕਿਉਂਕਿ PostgreSQL (postgres), MySQL (mysql), ਰੇਡਿਸ (redis), ਅਤੇ SQLite ਵੈੱਬ ਐਪਸ (www-data, node) ਗੈਰ-ਪ੍ਰਾਪਤ ਗੈਰ-ਰੂਟ ਉਪਭੋਗਤਾਵਾਂ ਵਜੋਂ ਚਲਾਉਂਦੇ ਹਨ, ਲੀਨਕਸ ਕਰਨਲ ਉਹਨਾਂ ਨੂੰ ਡਿਸਕ ਦੇ ਆਖਰੀ 5 ਪ੍ਰਤੀਸ਼ਤ ਦੀ ਵਰਤੋਂ ਕਰਨ ਤੋਂ ਰੋਕਦਾ ਹੈ। ਤੋਂ ਰਾਖਵੇਂ ਬਲਾਕ ਅਨੁਪਾਤ ਨੂੰ ਘਟਾ ਰਿਹਾ ਹੈ 5% ਨੂੰ 1% (ਜਾਂ 0% ਇੱਕ ਸਰਗਰਮ ਐਮਰਜੈਂਸੀ ਦੌਰਾਨ) ਲਾਈਵ ਮਾਊਂਟ ਕੀਤੇ ਫਾਈਲ ਸਿਸਟਮ ਤੇ ਤੁਰੰਤ ਪ੍ਰਭਾਵ ਪਾਉਂਦਾ ਹੈ:
sudo tune2fs -m 1 /dev/nvme0n1p1
1 ਟੇਰਾਬਾਈਟ (1,000 ਗੀਗਾਬਾਈਟ) ਡਾਟਾਬੇਸ ਵਾਲੀਅਮ 'ਤੇ, ਇਹ ਸਿੰਗਲ ਕਮਾਂਡ ਤੁਰੰਤ ਤੁਹਾਡੇ ਡੇਟਾਬੇਸ ਇੰਜਣ ਨੂੰ ਲਿਖਣਯੋਗ ਸਪੇਸ 40 ਗੀਗਾਬਾਈਟ (42.9 ਬਿਲੀਅਨ ਬਾਈਟ) ਸੌਂਪਦੀ ਹੈ ਤਾਂ ਜੋ ਇਹ ਆਪਣੇ WAL ਚੈੱਕਪੁਆਇੰਟ ਨੂੰ ਪੂਰਾ ਕਰ ਸਕੇ। ਇੱਕ ਵਾਰ ਜਦੋਂ ਸੰਕਟ ਹੱਲ ਹੋ ਜਾਂਦਾ ਹੈ ਅਤੇ ਪੁਰਾਣਾ ਡੇਟਾ ਸਾਫ਼ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਰਿਜ਼ਰਵ ਨੂੰ ਮੁੜ ਬਹਾਲ ਕਰੋ 2% ਜਾਂ 5% (sudo tune2fs -m 2 /dev/nvme0n1p1).

ਕਦਮ 3: ਸਥਾਨ ਅਤੇ ਵੈਕਿਊਮ ਵਿੱਚ ਕਿਰਿਆਸ਼ੀਲ ਟੈਕਸਟ ਲੌਗਸ ਨੂੰ ਕੱਟੋ journald

ਰੂਟ ਫਾਈਲਸਿਸਟਮ ਉੱਤੇ ਸਭ ਤੋਂ ਵੱਡੀਆਂ ਫਾਈਲਾਂ ਲੱਭੋ (ਇਸਦੇ ਨਾਲ ਉਸੇ ਫਾਈਲ ਸਿਸਟਮ ਤੇ ਰਹਿਣਾ -xdev ਇਸ ਲਈ ਤੁਸੀਂ ਸਕੈਨ ਕਰਨ ਵਿੱਚ ਸਮਾਂ ਬਰਬਾਦ ਨਾ ਕਰੋ /proc ਜਾਂ ਬਾਹਰੀ ਮਾਊਂਟ):

sudo find / -xdev -type f -size +100M -exec ls -lh {} + 2>/dev/null | sort -k 5 -hr | head -n 25
- ਵੱਡੀਆਂ ਪਲੇਨ-ਟੈਕਸਟ ਲੌਗ ਫਾਈਲਾਂ ਲਈ (/var/log/nginx/access.log, /var/log/syslog, /var/log/postgresql/*.log, ਡੌਕਰ *-json.log): ਕਦੇ ਨਾ ਦੌੜੋ rm ਇੱਕ ਸਰਗਰਮ ਲਾਗ ਫਾਇਲ 'ਤੇ. ਇਸ ਨੂੰ ਥਾਂ 'ਤੇ ਜ਼ੀਰੋ ਬਾਈਟ ਤੱਕ ਕੱਟੋ ਤਾਂ ਕਿ ਡੈਮਨ ਦਾ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰ ਵੈਧ ਰਹੇ ਅਤੇ ਆਫਸੈੱਟ ਪੁਆਇੰਟਰ ਸਾਫ਼ ਤੌਰ 'ਤੇ ਰੀਸੈਟ ਹੋ ਸਕਣ:
sudo truncate -s 0 /var/log/nginx/error.log
sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log
- ** ਲਈ systemd-journald ਬਾਈਨਰੀ ਲਾਗ (/var/log/journal/)**:
sudo journalctl --vacuum-size=50M


ਫੇਜ਼ 3: 100% ਡਿਸਕ-ਫੁੱਲ ਕਰੈਸ਼ ਤੋਂ ਬਾਅਦ PostgreSQL ਨੂੰ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਨਾ (pg_wal ਫੁੱਲਣਾ)

ਜਦੋਂ ਇੱਕ PostgreSQL ਸਰਵਰ ਡਿਸਕ ਸਪੇਸ ਖਤਮ ਹੋ ਜਾਂਦਾ ਹੈ, ਇਹ ਲੌਗ ਹੁੰਦਾ ਹੈ PANIC: could not write to file "pg_wal/xlogtemp.1234": No space left on device, ਪੋਸਟਮਾਸਟਰ ਚਾਈਲਡ ਪ੍ਰਕਿਰਿਆਵਾਂ ਨੂੰ ਤੁਰੰਤ ਅਧੂਰਾ ਛੱਡ ਦਿੰਦਾ ਹੈ, ਅਤੇ ਸ਼ੁਰੂ ਕਰਨ ਤੋਂ ਇਨਕਾਰ ਕਰਦਾ ਹੈ।

ਕਿਉਂ pg_wal (pg_xlog PostgreSQL 9.6 ਅਤੇ ਪੁਰਾਣੇ ਵਿੱਚ) ਪੂਰੀ ਡਿਸਕ ਨੂੰ ਭਰਦਾ ਹੈ

ਸਧਾਰਣ ਕਾਰਵਾਈ ਵਿੱਚ, PostgreSQL ਹਰੇਕ ਤਬਦੀਲੀ ਨੂੰ 16 ਮੈਗਾਬਾਈਟ (16.7 ਮਿਲੀਅਨ ਬਾਈਟ) ਖੰਡ ਫਾਈਲਾਂ ਵਿੱਚ ਲਿਖਦਾ ਹੈ $PGDATA/pg_wal/ ਅਤੇ ਹਰ ਇੱਕ ਦੇ ਬਾਅਦ ਉਹਨਾਂ ਨੂੰ ਰੀਸਾਈਕਲ ਕਰਦਾ ਹੈ CHECKPOINT ਇੱਕ ਵਾਰ ਵੱਧ max_wal_size. ਹਾਲਾਂਕਿ, PostgreSQL ** ਨੂੰ ਪੁਰਾਣੇ ਨੂੰ ਮਿਟਾਉਣ ਜਾਂ ਰੀਸਾਈਕਲ ਕਰਨ ਦੀ ਮਨਾਹੀ ਹੈ pg_wal ਫਾਈਲਾਂ** ਤਿੰਨ ਸ਼ਰਤਾਂ ਅਧੀਨ: 1. ਇੱਕ ਅਨਾਥ ਜਾਂ ਪਛੜਿਆ ਭੌਤਿਕ/ਲਾਜ਼ੀਕਲ ਰੀਪਲੀਕੇਸ਼ਨ ਸਲਾਟ: ਇੱਕ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਸਰਵਰ (standby), ਡੇਬੇਜ਼ੀਅਮ/ਕਾਫਕਾ ਕਨੈਕਟਰ, ਜਾਂ pg_receivewal ਕਲਾਇੰਟ ਦਿਨ ਪਹਿਲਾਂ ਡਿਸਕਨੈਕਟ ਹੋ ਗਿਆ ਸੀ, ਪਰ ਇਸਦਾ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਸਲਾਟ (pg_replication_slots) ਅਜੇ ਵੀ ਹੈ active = false ਪ੍ਰਾਇਮਰੀ 'ਤੇ, ਡਿਸਕਨੈਕਟ ਹੋਣ ਤੋਂ ਬਾਅਦ ਤਿਆਰ ਕੀਤੇ ਹਰੇਕ WAL ਹਿੱਸੇ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਣ ਲਈ PostgreSQL ਨੂੰ ਨਿਰਦੇਸ਼ ਦਿੰਦਾ ਹੈ। 2. ** ਇੱਕ ਅਸਫਲਤਾ archive_command**: archive_mode = on ਵਿੱਚ ਸਮਰੱਥ ਹੈ postgresql.conf, ਅਤੇ ਬੈਕਅੱਪ ਸਕ੍ਰਿਪਟ (pgBackRest, WAL-G, Barman, ਜਾਂ aws s3 cp) ਇੱਕ ਗੈਰ-ਜ਼ੀਰੋ ਐਗਜ਼ਿਟ ਕੋਡ ਵਾਪਸ ਕਰ ਰਿਹਾ ਹੈ (ਉਦਾਹਰਨ ਲਈ, ਇੱਕ ਮਿਆਦ ਪੁੱਗ ਚੁੱਕੀ S3 ਕੁੰਜੀ ਜਾਂ ਪਹੁੰਚਯੋਗ ਬੈਕਅੱਪ ਹੋਸਟ)। PostgreSQL ਹਰ ਅਣ-ਪੁਰਾਲੇਖ ਵਾਲੇ WAL ਹਿੱਸੇ ਨੂੰ ਅੰਦਰ ਰੱਖਦਾ ਹੈ pg_wal/ ਜਦ ਤੱਕ archive_command ਵਾਪਸੀ 0. 3. ਇੱਕ ਡਿਸਕ-ਪੂਰਾ ਡੈੱਡਲਾਕ: pg_wal ਤੱਕ ਵਧਿਆ 0 bytes 'ਤੇ ਰਿਹਾ /var/lib/postgresql, ਅਤੇ ਹੁਣ PostgreSQL ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਸਲਾਟ ਨੂੰ ਛੱਡਣਾ ਸ਼ੁਰੂ ਨਹੀਂ ਕਰ ਸਕਦਾ ਹੈ ਜਾਂ ਇੱਕ ਚੈਕਪੁਆਇੰਟ ਨੂੰ ਪੂਰਾ ਨਹੀਂ ਕਰ ਸਕਦਾ ਹੈ ਕਿਉਂਕਿ ਸ਼ੁਰੂਆਤੀ ਰਿਕਵਰੀ ਨੂੰ ਅਸਥਾਈ ਸਟੇਟ ਫਾਈਲਾਂ ਨੂੰ ਲਿਖਣ ਲਈ ਕਈ ਮੈਗਾਬਾਈਟ ਖਾਲੀ ਡਿਸਕ ਸਪੇਸ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।

ਕਦਮ-ਦਰ-ਕਦਮ PostgreSQL ਜ਼ੀਰੋ-ਸਪੇਸ ਬਚਾਓ (ਜ਼ੀਰੋ ਡਾਟਾ ਨੁਕਸਾਨ)

  1. ** 1 ਗੀਗਾਬਾਈਟ ਤੋਂ 5 ਗੀਗਾਬਾਈਟ (1.07 ਬਿਲੀਅਨ ਤੋਂ 5.36 ਬਿਲੀਅਨ ਬਾਈਟ) ਬਾਹਰ ਅਸਥਾਈ ਥਾਂ ਬਣਾਓ pg_wal/**:
  2. ਪਹਿਲੀ ਵਰਤੋਂ sudo tune2fs -m 0 /dev/<partition> ਅਤੇ ਸਿਸਟਮ/PostgreSQL ਟੈਕਸਟ ਲੌਗਸ ਨੂੰ ਕੱਟੋ (sudo truncate -s 0 /var/lib/postgresql/*/main/log/*.log ਜਾਂ /var/log/postgresql/*.log).
  3. ਕੀ ਹੋਵੇਗਾ ਜੇਕਰ ਡੇਟਾਬੇਸ ਦਾ ਜ਼ੀਰੋ ਟੈਕਸਟ ਲੌਗਸ ਅਤੇ XFS ਨਾਲ ਆਪਣਾ ਸਮਰਪਿਤ ਭਾਗ ਹੈ (ਇਸ ਲਈ tune2fs ਕੀ ਉਪਲਬਧ ਨਹੀਂ ਹੈ)? ਸਭ ਤੋਂ ਪੁਰਾਣੇ ਵਿੱਚੋਂ 10 ਤੋਂ 20 ਨੂੰ ਹਿਲਾਓ .ready ਜਾਂ ਗੈਰ-WAL ਡਾਇਰੈਕਟਰੀ ਵਿੱਚੋਂ ਅਕਿਰਿਆਸ਼ੀਲ ਫਾਈਲਾਂ, ਜਾਂ ਮੁੜ-ਸਥਾਪਿਤ ਕਰੋ pg_wal ਇੱਕ ਸਿੰਬਲਿਕ ਲਿੰਕ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਖਾਲੀ ਥਾਂ ਵਾਲੇ ਕਿਸੇ ਹੋਰ ਭਾਗ ਲਈ ਅਸਥਾਈ ਤੌਰ 'ਤੇ ਡਾਇਰੈਕਟਰੀ:
    # ONLY while PostgreSQL is completely stopped (verify with: ps aux | grep postgres)
    sudo mkdir -p /mnt/extra_space/pg_wal_rescue
    sudo chown -R postgres:postgres /mnt/extra_space/pg_wal_rescue
    sudo mv /var/lib/postgresql/16/main/pg_wal/* /mnt/extra_space/pg_wal_rescue/
    sudo rmdir /var/lib/postgresql/16/main/pg_wal
    sudo ln -s /mnt/extra_space/pg_wal_rescue /var/lib/postgresql/16/main/pg_wal
    sudo chown -h postgres:postgres /var/lib/postgresql/16/main/pg_wal
    
  4. ** ਜੇ archive_command WAL ਰੀਸਾਈਕਲਿੰਗ ਨੂੰ ਅਸਫਲ ਅਤੇ ਬਲਾਕ ਕਰ ਰਿਹਾ ਹੈ, ਇਸ ਨੂੰ ਅਸਥਾਈ ਤੌਰ 'ਤੇ ਬਾਈਪਾਸ ਕਰੋ postgresql.conf**: ਜੇਕਰ ਤੁਹਾਡਾ S3/ਬੈਕਅੱਪ ਟੀਚਾ ਘੱਟ ਹੈ ਅਤੇ pg_wal/archive_status/ ਦੇ ਹਜ਼ਾਰ ਸ਼ਾਮਿਲ ਹਨ .ready ਫਾਈਲਾਂ, ਸੰਪਾਦਿਤ ਕਰੋ postgresql.conf (archive_command = '/bin/true') ਡਿਸਕ ਨੂੰ ਮਰਨ ਤੋਂ ਰੋਕਣ ਲਈ ਸਿਰਫ ਇੱਕ ਆਖਰੀ-ਸਹਾਰਾ ਐਮਰਜੈਂਸੀ ਉਪਾਅ ਵਜੋਂ, ਇਹ ਜਾਣਦੇ ਹੋਏ ਕਿ ਤੁਹਾਨੂੰ ਇੱਕ ਤਾਜ਼ਾ ਲੈਣਾ ਚਾਹੀਦਾ ਹੈ pg_basebackup ਰਿਕਵਰੀ ਤੋਂ ਤੁਰੰਤ ਬਾਅਦ ਕਿਉਂਕਿ WAL ਆਰਕਾਈਵ ਚੇਨ ਵਿੱਚ ਇੱਕ ਪਾੜਾ ਹੋਵੇਗਾ।
  5. PostgreSQL ਸ਼ੁਰੂ ਕਰੋ ਅਤੇ ਤੁਰੰਤ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਸਲਾਟਾਂ ਦੀ ਜਾਂਚ ਕਰੋ: PostgreSQL ਸ਼ੁਰੂ ਕਰੋ (sudo systemctl start postgresql) ਅਤੇ ਰਾਹੀਂ ਜੁੜੋ sudo -u postgres psql:
    SELECT slot_name, plugin, slot_type, active,
           pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained_wal
    FROM pg_replication_slots;
    
  6. ਕਿਸੇ ਵੀ ਮਰੇ/ਅਕਿਰਿਆਸ਼ੀਲ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਸਲਾਟ ਨੂੰ ਸੁੱਟੋ ਜੋ WAL ਦੇ ਗੀਗਾਬਾਈਟ ਨੂੰ ਇਕੱਠਾ ਕਰ ਰਿਹਾ ਹੈ: ਜੇਕਰ ਤੁਸੀਂ ਇੱਕ ਅਕਿਰਿਆਸ਼ੀਲ ਸਲਾਟ ਦੇਖਦੇ ਹੋ (active = f) ਕੋਲ 80 ਗੀਗਾਬਾਈਟ ਹੈ retained_wal:
    SELECT pg_drop_replication_slot('name_of_dead_slot');
    
  7. ** ਤੁਰੰਤ ਮਜਬੂਰ ਕਰੋ CHECKPOINT ਫੁੱਲੇ ਹੋਏ ਨੂੰ ਰੀਸਾਈਕਲ ਕਰਨ ਲਈ pg_wal ਹਿੱਸੇ**:
    CHECKPOINT;
    
    ਪਲ CHECKPOINT; ਡੈੱਡ ਸਲਾਟ ਛੱਡਣ ਤੋਂ ਬਾਅਦ ਖਤਮ ਹੋ ਜਾਂਦਾ ਹੈ, PostgreSQL ਪੁਰਾਣੀਆਂ 16 ਮੈਗਾਬਾਈਟ ਖੰਡ ਦੀਆਂ ਫਾਈਲਾਂ ਦੇ ਗੀਗਾਬਾਈਟ ਨੂੰ ਆਪਣੇ ਆਪ ਅਨਲਿੰਕ ਜਾਂ ਰੀਸਾਈਕਲ ਕਰ ਦੇਵੇਗਾ pg_wal/, ਤੁਹਾਡੀ ਡਿਸਕ ਦੀ ਵਰਤੋਂ ਨੂੰ ਆਮ ਵਾਂਗ ਵਾਪਸ ਕਰਨਾ।
  8. ਭਵਿੱਖ ਵਿੱਚ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਸਲਾਟ ਡਿਸਕ ਦੀ ਮੌਤ ਨੂੰ ਰੋਕੋ: ਸੈੱਟ max_slot_wal_keep_size ਵਿੱਚ postgresql.conf (PostgreSQL 13+ ਵਿੱਚ ਉਪਲਬਧ) ਇੱਕ ਸੁਰੱਖਿਅਤ ਕੈਪ (ਜਿਵੇਂ ਕਿ max_slot_wal_keep_size = 20GB) ਇਸਲਈ PostgreSQL ਪ੍ਰਾਇਮਰੀ ਡੇਟਾਬੇਸ ਨੂੰ 0 ਬਾਈਟ ਫਰੀ 'ਤੇ ਕ੍ਰੈਸ਼ ਕਰਨ ਦੀ ਬਜਾਏ ਇੱਕ ਮਰੇ ਹੋਏ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਦੇ ਸਲਾਟ ਨੂੰ ਅਯੋਗ ਬਣਾਉਂਦਾ ਹੈ।

ਪੜਾਅ 4: MySQL / MariaDB ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਨਾ (InnoDB) 0 ਬਾਈਟ ਮੁਫ਼ਤ 'ਤੇ

ਜਦੋਂ MySQL ਜਾਂ MariaDB ਹਿੱਟ ਹੁੰਦਾ ਹੈ 100% ਡਿਸਕ ਉਪਯੋਗਤਾ (/var/lib/mysql), InnoDB ਸਟਾਲ ਸਾਰੇ ਲਿਖਦੇ ਜਾਂ ਕਰੈਸ਼ ਹੁੰਦੇ ਹਨ [ERROR] [MY-012640] [InnoDB] Error number 28 means 'No space left on device'.

ਪਛਾਣਨਾ ਕਿ ਕੀ ਭਰਿਆ ਹੈ /var/lib/mysql

ਚਲਾਓ sudo du -sh /var/lib/mysql/* | sort -hr | head -n 15 ਇਹ ਵੇਖਣ ਲਈ ਕਿ ਇਹਨਾਂ ਚਾਰ ਦੋਸ਼ੀਆਂ ਵਿੱਚੋਂ ਕਿਸ ਨੇ ਡਿਸਕ ਦੀ ਖਪਤ ਕੀਤੀ: 1. ਬੇਅੰਤ ਬਾਈਨਰੀ ਲਾਗ (binlog.000001, mysql-bin.000042);binlog_expire_logs_seconds = 2592000), ਜੋ ਕਿ ਬਲਕ ਆਯਾਤ ਦੇ ਦੌਰਾਨ ਸੈਂਕੜੇ ਗੀਗਾਬਾਈਟ ਕਤਾਰ ਇਵੈਂਟਾਂ ਨੂੰ ਆਸਾਨੀ ਨਾਲ ਤਿਆਰ ਕਰ ਸਕਦਾ ਹੈ। 2. ** ਇੱਕ ਭਗੌੜਾ ਸਵਾਲ ਲਿਖਣ ਵਾਲਾ ਵਿਸ਼ਾਲ ਅਸਥਾਈ ਟੇਬਲ (#sql* ਜਾਂ ibtmp1): ਇੱਕ ਵਿਸ਼ਾਲ GROUP BY ਜਾਂ ORDER BY ਪੁੱਛਗਿੱਛ ਭਰੀ ਗਈ ibtmp1 ਜਾਂ /tmp/#sql_* ਜਦੋਂ ਤੱਕ ਡਿਸਕ 0 ਬਾਈਟ ਨਹੀਂ ਮਾਰਦੀ। 3. ** ਮੋਨੋਲਿਥਿਕ ibdata1 ਸਿਸਟਮ ਟੇਬਲਸਪੇਸ ਬਲੋਟ**: ਜੇਕਰ innodb_file_per_table ਅਯੋਗ ਕੀਤਾ ਗਿਆ ਸੀ ਜਾਂ ਲੰਬੇ ਸਮੇਂ ਤੋਂ ਚੱਲ ਰਹੇ ਟ੍ਰਾਂਜੈਕਸ਼ਨਾਂ ਨੇ InnoDB ਇਤਿਹਾਸ ਸੂਚੀ ਨੂੰ ਰੋਕਿਆ (ਅੰਦਰ ਲੌਗਸ ਨੂੰ ਵਾਪਸ ਕਰੋ ibdata1 ਜਾਂ undo_001) ਸਾਫ਼ ਕਰਨ ਤੋਂ। 4. MySQL ਹੌਲੀ ਪੁੱਛਗਿੱਛ ਲੌਗ ਜਾਂ ਗਲਤੀ ਲੌਗ (/var/log/mysql/mysql-slow.log)।

ਕਦਮ-ਦਰ-ਕਦਮ MySQL / MariaDB ਜ਼ੀਰੋ-ਸਪੇਸ ਬਚਾਅ

  1. ** ਕਦੇ ਨਾ ਮਿਟਾਓ ibdata1, ib_logfile0, ib_logfile1, #innodb_redo/*, ਜਾਂ undo_001 ਨਾਲ rm**: ਇਹਨਾਂ ਵਿੱਚੋਂ ਕਿਸੇ ਵੀ ਫਾਈਲ ਨੂੰ ਮਿਟਾਉਣਾ ਹਰ ਇੱਕ ਬਣਾਉਂਦਾ ਹੈ .ibd ਤੁਹਾਡੇ ਡੇਟਾਬੇਸ ਵਿੱਚ ਟੇਬਲ ਫਾਈਲ ਪੜ੍ਹਨਯੋਗ ਨਹੀਂ ਹੈ।
  2. ਮੁਫ਼ਤ ਸ਼ੁਰੂਆਤੀ ਸ਼ੁਰੂਆਤੀ ਥਾਂ (500 ਮੈਗਾਬਾਈਟ ਤੋਂ 2 ਗੀਗਾਬਾਈਟ):
  3. ਕੱਟੋ /var/log/mysql/error.log ਅਤੇ mysql-slow.log ਰਾਹੀਂ sudo truncate -s 0 /var/log/mysql/*.log.
  4. 'ਤੇ ext4, ਚਲਾਓ sudo tune2fs -m 1 /dev/<partition>.
  5. ਜੇ mysqld ਵਰਤਮਾਨ ਵਿੱਚ ਰੋਕਿਆ ਗਿਆ ਹੈ ਅਤੇ /var/lib/mysql/ibtmp1 (ਗੈਰ-ਸੰਕੁਚਿਤ ਅਸਥਾਈ ਟੇਬਲ ਟੇਬਲਸਪੇਸ) ਬਹੁਤ ਵੱਡਾ ਹੈ, ibtmp1 ਸਟਾਰਟਅੱਪ 'ਤੇ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਮੁੜ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ, ਜਾਂ ਤੁਸੀਂ ਸਭ ਤੋਂ ਪੁਰਾਣੇ ਦੋ ਜਾਂ ਤਿੰਨ ਬਾਈਨਰੀ ਲੌਗਸ (binlog.000001, binlog.000002 - ਕਦੇ ਵੀ ਸਭ ਤੋਂ ਵੱਧ ਨੰਬਰ ਵਾਲਾ ਐਕਟਿਵ ਬਿਨਲੌਗ) ਤੋਂ /dev/shm ਅਸਥਾਈ ਤੌਰ 'ਤੇ ਇਸ ਲਈ mysqld ਬੂਟ ਕਰ ਸਕਦਾ ਹੈ।
  6. ** MySQL ਸ਼ੁਰੂ ਕਰੋ ਅਤੇ SQL (PURGE BINARY LOGS)**: ਤੁਹਾਨੂੰ SQL ਦੀ ਬਜਾਏ ਕਿਉਂ ਵਰਤਣਾ ਚਾਹੀਦਾ ਹੈ rm /var/lib/mysql/binlog.*? ਕਿਉਂਕਿ MySQL ਹਰ ਬਾਈਨਰੀ ਲੌਗ ਫਾਈਲ ਨਾਮ ਨੂੰ ਟਰੈਕ ਕਰਦਾ ਹੈ binlog.index. ਜੇਕਰ ਤੁਸੀਂ ਇਸ ਨਾਲ ਬਾਈਨਰੀ ਲੌਗਸ ਨੂੰ ਮਿਟਾਉਂਦੇ ਹੋ rm ਅੱਪਡੇਟ ਕੀਤੇ ਬਿਨਾਂ binlog.index, MySQL ਸ਼ੁਰੂ ਕਰਨ ਤੋਂ ਇਨਕਾਰ ਕਰ ਦੇਵੇਗਾ ਜਾਂ ਪ੍ਰਤੀਕ੍ਰਿਤੀ ਟੁੱਟ ਜਾਵੇਗੀ। ਇੱਕ ਵਾਰ mysqld ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ, ਲਾਗ ਇਨ (sudo mysql) ਅਤੇ ਚਲਾਓ:
    SHOW BINARY LOGS;
    PURGE BINARY LOGS BEFORE NOW() - INTERVAL 1 DAY;
    
    (ਜਾਂ ਦੇ ਹੇਠਾਂ ਦਿਖਾਈ ਗਈ ਮੌਜੂਦਾ ਕਿਰਿਆਸ਼ੀਲ ਲੌਗ ਫਾਈਲ ਤੱਕ ਸਭ ਕੁਝ ਸਾਫ਼ ਕਰੋ SHOW BINARY LOGS; ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ PURGE BINARY LOGS TO 'binlog.000085';)
  7. ਸਥਾਈ ਬਾਈਨਰੀ ਲੌਗ ਸਾਈਜ਼ ਅਤੇ ਧਾਰਨ ਕੈਪ ਇਨ ਸੈਟ ਕਰੋ /etc/mysql/mysql.conf.d/mysqld.cnf:
    [mysqld]
    binlog_expire_logs_seconds = 259200   # Keep only 3 days (259,200 seconds)
    max_binlog_size = 256M
    innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G
    
    ਕੈਪਿੰਗ ibtmp1 'ਤੇ max:5G ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਇੱਕ ਠੱਗ ਅਨਇੰਡੈਕਸਡ ਹੈ JOIN ਜਾਂ ORDER BY ਇੱਕ ਨਾਲ ਪੁੱਛਗਿੱਛ ਫੇਲ ਹੋ ਜਾਂਦੀ ਹੈ table is full ਫੈਲਾਉਣ ਦੀ ਬਜਾਏ ਗਲਤੀ ibtmp1 ਜਦੋਂ ਤੱਕ ਸਾਰਾ ਲੀਨਕਸ ਸਰਵਰ 0 ਬਾਈਟ ਫਰੀ 'ਤੇ ਮਰ ਨਹੀਂ ਜਾਂਦਾ।

ਪੜਾਅ 5: ਇੱਕ ਖਰਾਬ SQLite3 ਡਾਟਾਬੇਸ ਨੂੰ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਨਾ (database or disk is full / SQLITE_FULL / malformed)

ਏਮਬੈਡਡ ਐਪਲੀਕੇਸ਼ਨ, ਡੌਕਰ ਕੰਟੇਨਰ (Nextcloud, Vaultwarden, Home Assistant, Plex, Grafana, Gitea), ਅਤੇ ਮੋਬਾਈਲ/ਡੈਸਕਟਾਪ ਸੇਵਾਵਾਂ SQLite3 'ਤੇ ਨਿਰਭਰ ਕਰਦੀਆਂ ਹਨ। ਜਦੋਂ ਇੱਕ ਡਿਸਕ 0 ਬਾਈਟ ਫਰੀ ਹਿੱਟ ਕਰਦੀ ਹੈ ਜਦੋਂ ਕਿ SQLite ਜਰਨਲ ਰੋਲਬੈਕ ਜਾਂ ਇੱਕ ਰਾਈਟ-ਅਹੇਡ ਲੌਗ (-wal) ਚੈਕਪੁਆਇੰਟ, ਤੁਹਾਨੂੰ ਦੋ ਐਮਰਜੈਂਸੀ ਵਿੱਚੋਂ ਇੱਕ ਦਾ ਸਾਹਮਣਾ ਕਰਨਾ ਪਵੇਗਾ: 1. ** ਵਿਸ਼ਾਲ .db-wal ਫਾਈਲ ਬਲੋਟ** (ਦੀ .db-wal ਫਾਈਲ 10 ਗੀਗਾਬਾਈਟ ਤੱਕ ਵਧ ਗਈ ਹੈ ਜਦੋਂ ਕਿ .db ਫਾਈਲ ਸਿਰਫ 200 ਮੈਗਾਬਾਈਟ ਹੈ, ਕਿਉਂਕਿ ਲੰਬੇ ਸਮੇਂ ਤੋਂ ਚੱਲ ਰਹੇ ਪਾਠਕਾਂ ਨੇ ਇੱਕ ਪੈਸਿਵ WAL ਚੈਕਪੁਆਇੰਟ ਨੂੰ ਰੋਕਿਆ, ਅਤੇ ਹੁਣ ਡਿਸਕ 100 ਪ੍ਰਤੀਸ਼ਤ ਭਰੀ ਹੋਈ ਹੈ)। 2. RuntimeError: database disk image is malformed (SQLITE_CORRUPT) ਟੁੱਟੇ ਹੋਏ ਹਾਰਡਵੇਅਰ ਕਾਰਨ ਹੋਇਆ fsync(), ਇੱਕ ਕੰਟੇਨਰ ਨੇ 0 ਬਾਈਟ ਮੁਫ਼ਤ 'ਤੇ ਮਿਡ-ਰੋਲਬੈਕ ਮਾਰਿਆ, ਜਾਂ ਕੋਈ ਇਸਨੂੰ ਮਿਟਾਉਂਦਾ ਹੈ -wal ਜਾਂ -journal ਹੱਥ ਨਾਲ ਫਾਇਲ.

Warning

** ਕਦੇ ਨਾ ਹਿਲਾਓ, ਨਾਂ ਬਦਲੋ, ਜਾਂ ਕਾਪੀ ਨਾ ਕਰੋ .db ਇਸ ਨੂੰ ਛੱਡਣ ਵੇਲੇ ਆਪਣੇ ਆਪ ਫਾਈਲ ਕਰੋ .db-wal (ਲਿਖੋ-ਅੱਗੇ ਦਾ ਲੌਗ) ਜਾਂ .db-journal (ਰੋਲਬੈਕ ਜਰਨਲ) ਫਾਈਲ ਪਿੱਛੇ**: ਜੇਕਰ app.db-wal ਜਾਂ app.db-journal ਦੇ ਨਾਲ ਮੌਜੂਦ ਹੈ app.db, ਉਸ ਸਾਥੀ ਫਾਈਲ ਵਿੱਚ ਵਚਨਬੱਧ ਲੈਣ-ਦੇਣ ਅਤੇ ਬਣਾਉਣ ਲਈ ਲੋੜੀਂਦੇ ਅਸਲ ਬੀ-ਟ੍ਰੀ ਪੰਨੇ ਸ਼ਾਮਲ ਹਨ app.db ਢਾਂਚਾਗਤ ਤੌਰ 'ਤੇ ਇਕਸਾਰ. ਹਮੇਸ਼ਾ ਸਾਰੀਆਂ ਤਿੰਨ ਫਾਈਲਾਂ ਦੀ ਨਕਲ ਕਰੋ (app.db, app.db-wal, app.db-shmਕੋਈ ਵੀ ਕਮਾਂਡ ਚਲਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਇਕੱਠੇ.

ਕਦਮ 1: ਫੁੱਲੇ ਹੋਏ ਨੂੰ ਸੁੰਗੜਾਉਣਾ .db-wal ਫਾਈਲ ਅਤੇ ਵੈਕਿਊਮਿੰਗ SQLite ਜਦੋਂ ਡਿਸਕ ਸਪੇਸ ਜ਼ੀਰੋ ਦੇ ਨੇੜੇ ਹੋਵੇ

  1. SQLite ਡਾਟਾਬੇਸ ਨੂੰ ਖੁੱਲਾ ਰੱਖਣ ਵਾਲੇ ਐਪਲੀਕੇਸ਼ਨ ਕੰਟੇਨਰ ਜਾਂ ਸੇਵਾ ਨੂੰ ਰੋਕੋ (sudo systemctl stop app ਜਾਂ docker stop container_name).
  2. ਕਾਪੀ ਕਰੋ app.db, app.db-wal, ਅਤੇ app.db-shm ਇੱਕ ਭਾਗ ਜਾਂ ਬਾਹਰੀ ਡਰਾਈਵ ਵਿੱਚ ਬਹੁਤ ਸਾਰੀ ਖਾਲੀ ਥਾਂ (ਜਾਂ ਖਾਲੀ 2x ਆਕਾਰ ਦਾ app.db ਪਹਿਲਾਂ ਸਥਾਨਕ ਡਿਸਕ 'ਤੇ)।
  3. ਨਾਲ ਡਾਟਾਬੇਸ ਖੋਲ੍ਹੋ sqlite3 CLI ਅਤੇ ਇੱਕ ਕੱਟੇ ਹੋਏ WAL ਚੈਕਪੁਆਇੰਟ ਨੂੰ ਮਜਬੂਰ ਕਰੋ, ਜੋ ਸਾਰੇ ਵਚਨਬੱਧ ਫਰੇਮਾਂ ਨੂੰ ਫੋਲਡ ਕਰਦਾ ਹੈ app.db-wal ਵਿੱਚ app.db ਅਤੇ ਸੁੰਗੜਦਾ ਹੈ app.db-wal 0 ਬਾਈਟ ਤੱਕ:
    sqlite3 /path/to/app.db "PRAGMA wal_checkpoint(TRUNCATE);"
    
  4. ਬੀ-ਟ੍ਰੀ ਅਤੇ ਫ੍ਰੀਲਿਸਟ ਸਟ੍ਰਕਚਰਲ ਇਕਸਾਰਤਾ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ:
    sqlite3 /path/to/app.db "PRAGMA integrity_check;"
    
    ਜੇ ਇਹ ਛਾਪਦਾ ਹੈ ok, ਤੁਹਾਡਾ ਡੇਟਾਬੇਸ 100 ਪ੍ਰਤੀਸ਼ਤ ਸਿਹਤਮੰਦ ਹੈ।
  5. ** ਕਿਵੇਂ VACUUM ਇੱਕ ਵਿਸ਼ਾਲ SQLite ਡੇਟਾਬੇਸ ਜਦੋਂ ਸਥਾਨਕ ਡਿਸਕ ਵਿੱਚ ਲੋੜੀਂਦੀ ਖਾਲੀ ਥਾਂ ਨਹੀਂ ਹੁੰਦੀ ਹੈ**: ਮਿਆਰੀ VACUUM; ਉਸੇ ਭਾਗ ਤੇ ਖਾਲੀ ਡਿਸਕ ਸਪੇਸ ਵਿੱਚ 2x ਡਾਟਾਬੇਸ ਆਕਾਰ ਦੀ ਲੋੜ ਹੈ ਅਤੇ /var/tmp. ਇਸ ਦੀ ਬਜਾਏ, ਵਰਤੋ VACUUM INTO (SQLite 3.27.0 ਵਿੱਚ ਪੇਸ਼ ਕੀਤਾ ਗਿਆ) ਇੱਕ ਵੱਖਰੀ ਮਾਊਂਟ ਕੀਤੀ ਡਿਸਕ ਜਾਂ ਨੈੱਟਵਰਕ ਸ਼ੇਅਰ 'ਤੇ ਸਿੱਧੇ ਤੌਰ 'ਤੇ ਸੰਕੁਚਿਤ, ਡੀਫ੍ਰੈਗਮੈਂਟਡ ਕਾਪੀ ਲਿਖਣ ਲਈ:
    sqlite3 /path/to/app.db "VACUUM INTO '/mnt/external_usb/app_compacted.db';"
    

ਕਦਮ 2: ਇੱਕ ਖਰਾਬ ਬੀ-ਰੁੱਖ ਨੂੰ ਬਚਾਉਣਾ (database disk image is malformed) ਨਾਲ .recover

ਜੇ PRAGMA integrity_check; ਰਿਪੋਰਟਾਂ row 412 missing from index, btreeInitPage() returns error code 11, ਜਾਂ database disk image is malformed:

  1. ਪਹਿਲਾਂ ਟੁੱਟੇ ਸੈਕੰਡਰੀ ਸੂਚਕਾਂਕ ਨੂੰ ਦੁਬਾਰਾ ਬਣਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ (REINDEX): ਅਕਸਰ ਅਸਲ ਸਾਰਣੀ ਡੇਟਾ (table B-trees) 100 ਪ੍ਰਤੀਸ਼ਤ ਬਰਕਰਾਰ ਹੈ ਅਤੇ ਜਦੋਂ ਡਿਸਕ ਭਰੀ ਗਈ ਸੀ ਤਾਂ ਸਿਰਫ ਇੱਕ ਸੈਕੰਡਰੀ ਸੂਚਕਾਂਕ ਬੀ-ਟ੍ਰੀ ਖਰਾਬ ਹੋਇਆ ਸੀ। ਚਲਾਓ:
    sqlite3 /mnt/external_usb/copy_of_app.db "REINDEX;"
    sqlite3 /mnt/external_usb/copy_of_app.db "PRAGMA integrity_check;"
    
    ਜੇ PRAGMA integrity_check; ਹੁਣ ਵਾਪਸੀ ok, ਤੁਸੀਂ ਜ਼ੀਰੋ ਗੁਆਚੀਆਂ ਕਤਾਰਾਂ ਨਾਲ ਆਪਣੇ ਡੇਟਾਬੇਸ ਦਾ 100 ਪ੍ਰਤੀਸ਼ਤ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰ ਲਿਆ ਹੈ।
  2. ** ਜੇ REINDEX ਅਸਫਲ ਹੋ ਜਾਂਦਾ ਹੈ, ਫੋਰੈਂਸਿਕ ਬੀ-ਟ੍ਰੀ ਸਕੈਨਰ ਚਲਾਓ (.recover)**: ਪੁਰਾਣੇ ਦੇ ਉਲਟ .dump ਕਮਾਂਡ (ਜੋ ਇੱਕ ਟੇਬਲ ਨੂੰ ਨਿਰਯਾਤ ਕਰਨਾ ਬੰਦ ਕਰ ਦਿੰਦਾ ਹੈ ਜਦੋਂ ਇਹ ਇੱਕ ਖਰਾਬ ਬੀ-ਟ੍ਰੀ ਪੁਆਇੰਟਰ ਨੂੰ ਮਾਰਦਾ ਹੈ), .recover (ਵਿੱਚ ਬਣਾਇਆ sqlite3 ਸੰਸਕਰਣ 3.29.0+) ਖਰਾਬ ਹੋਏ ਅੰਦਰੂਨੀ ਬੀ-ਟ੍ਰੀ ਪੁਆਇੰਟਰਾਂ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਬਾਈਪਾਸ ਕਰਦਾ ਹੈ, ਫਾਈਲ ਦੇ ਹਰ ਕੱਚੇ 4 ਕਿਲੋਬਾਈਟ ਲੀਫ ਪੇਜ ਨੂੰ ਬਾਈਟ 0 ਤੋਂ EOF ਤੱਕ ਕ੍ਰਮਵਾਰ ਸਕੈਨ ਕਰਦਾ ਹੈ, ਹਰ ਪੜ੍ਹਨਯੋਗ ਕਤਾਰ ਦਾ ਪੁਨਰਗਠਨ ਕਰਦਾ ਹੈ, ਅਤੇ ਕਿਸੇ ਵੀ ਅਨਾਥ ਰਿਕਾਰਡ ਨੂੰ ਇੱਕ ਵਿੱਚ ਰੱਖਦਾ ਹੈ। lost_and_found ਸਾਰਣੀ:
    sqlite3 /mnt/external_usb/copy_of_app.db ".recover" | sqlite3 /mnt/external_usb/repaired_app.db
    
  3. ਨਵੇਂ ਪੁਨਰਗਠਿਤ ਡੇਟਾਬੇਸ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ:
    sqlite3 /mnt/external_usb/repaired_app.db "PRAGMA integrity_check;"
    
    ਜਾਂਚ ਕਰੋ ਕਿ ਕੀ ਏ lost_and_found ਸਾਰਣੀ ਬਣਾਈ ਗਈ ਸੀ (sqlite3 /mnt/external_usb/repaired_app.db ".tables") ਅਣਲਿੰਕ ਕੀਤੇ ਪੱਤਿਆਂ ਦੇ ਪੰਨਿਆਂ ਤੋਂ ਬਰਾਮਦ ਕੀਤੀਆਂ ਕਿਸੇ ਵੀ ਅਨਾਥ ਕਤਾਰਾਂ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ। ਏਨਕ੍ਰਿਪਟ ਕੀਤੇ SQLCipher ਡੇਟਾਬੇਸ (ਜਿਵੇਂ ਕਿ ਸਿਗਨਲ ਜਾਂ WhatsApp ਬੈਕਅਪ) ਲਈ, ਸਾਡੀ ਸਮਰਪਿਤ ਗਾਈਡ ਵੇਖੋ ਏਨਕ੍ਰਿਪਟਡ SQLite, ਸਿਗਨਲ, ਅਤੇ WhatsApp ਚੈਟ ਬੈਕਅੱਪ ਭ੍ਰਿਸ਼ਟਾਚਾਰ ਅਤੇ ਸਥਾਨਕ ਕੁੰਜੀ ਕੱਢਣ.

ਫੇਜ਼ 6: ਐਮਰਜੈਂਸੀ "ਟ੍ਰਿਪਵਾਇਰ ਬੈਲਾਸਟ ਫਾਈਲ" ਅਤੇ ਨਿਗਰਾਨੀ ਰੋਕਥਾਮ ਚੈਕਲਿਸਟ

ਇੱਕ ਵਾਰ ਜਦੋਂ ਤੁਹਾਡਾ ਸਰਵਰ ਅਤੇ ਡੇਟਾਬੇਸ ਵਾਪਸ ਔਨਲਾਈਨ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਇਹਨਾਂ ਚਾਰ ਸੁਰੱਖਿਆ ਉਪਾਵਾਂ ਨੂੰ ਤੁਰੰਤ ਲਾਗੂ ਕਰੋ ਤਾਂ ਜੋ ਤੁਸੀਂ ਦੁਬਾਰਾ ਕਦੇ ਵੀ 0 ਬਾਈਟ ਮੁਫ਼ਤ ਵਿੱਚ ਨਾ ਫਸੋ:

  • ਇੱਕ 1 ਗੀਗਾਬਾਈਟ ਬਣਾਓ (1,073,741,824 ਬਾਈਟ) ਹਰ ਡੇਟਾਬੇਸ ਭਾਗ ਉੱਤੇ ਐਮਰਜੈਂਸੀ ਬੈਲਸਟ ਫਾਈਲ: ਚਲਾਓ sudo fallocate -l 1G /var/lib/EMERGENCY_DELETE_ME.ballast. ਜੇਕਰ ਸਰਵਰ ਕਦੇ ਹਿੱਟ ਹੁੰਦਾ ਹੈ 100% ਡਿਸਕ ਭਰੀ, ਚੱਲ ਰਹੀ ਹੈ sudo rm /var/lib/EMERGENCY_DELETE_ME.ballast 1 ਮਿਲੀਸਕਿੰਟ ਵਿੱਚ 1 ਗੀਗਾਬਾਈਟ ਨਾਲ ਜੁੜੇ ਬਲਾਕਾਂ ਨੂੰ ਮੁਕਤ ਕਰਦਾ ਹੈ।
  • ਕੈਪ systemd-journald ਅਤੇ ਡੌਕਰ ਕੰਟੇਨਰ ਲੌਗ ਸਥਾਈ ਤੌਰ 'ਤੇ: ਸੈੱਟ ਕਰੋ SystemMaxUse=200M ਵਿੱਚ /etc/systemd/journald.conf ਅਤੇ ਸੰਰਚਨਾ /etc/docker/daemon.json ਨਾਲ "log-opts": {"max-size": "20m", "max-file": "3"}.
  • ** ਅਲੱਗ-ਥਲੱਗ ਕਰੋ /var/log, /tmp, ਅਤੇ /var/lib/postgresql ਵੱਖਰੇ LVM ਵਾਲੀਅਮ ਉੱਤੇ**: ਰੱਖਣਾ /var/log ਅਤੇ /tmp ਡਾਟਾਬੇਸ ਵਾਲੀਅਮ ਤੋਂ ਵੱਖ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਇੱਕ ਭਗੌੜਾ ਵੈੱਬ ਲੌਗ ਕਦੇ ਵੀ ਡੇਟਾਬੇਸ ਨੂੰ ਕਰੈਸ਼ ਨਹੀਂ ਕਰਦਾ ਜਾਂ SSH ਲਾਗਇਨਾਂ ਨੂੰ ਬੰਦ ਨਹੀਂ ਕਰਦਾ।
  • ** ਦੋਵਾਂ 'ਤੇ ਚੇਤਾਵਨੀ df -h (> 80%) ਅਤੇ df -i (> 80%) ਪਲੱਸ pg_replication_slots lag**: ਨਿਗਰਾਨੀ ਦੀ ਸੰਰਚਨਾ ਕਰੋ (node_filesystem_avail_bytes ਅਤੇ node_filesystem_files_free) ਦੀ ਵਰਤੋਂ 85 ਪ੍ਰਤੀਸ਼ਤ ਨੂੰ ਪਾਰ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਚੇਤਾਵਨੀ ਦੇਣ ਲਈ।

ਖੇਤਰੀ ਐਮਰਜੈਂਸੀ ਨੰਬਰ ਅਤੇ ਏਜੰਸੀ ਪ੍ਰੋਟੋਕੋਲ

ਜਦੋਂ ਕਿ ਇੱਕ ਪੂਰੀ ਸਰਵਰ ਡਿਸਕ ਆਮ ਤੌਰ 'ਤੇ ਇੱਕ ਅੰਦਰੂਨੀ IT ਓਪਰੇਸ਼ਨ ਐਮਰਜੈਂਸੀ ਹੁੰਦੀ ਹੈ, ਇੱਕ ਆਊਟੇਜ ਸਿਹਤ ਸੰਭਾਲ ਇਲੈਕਟ੍ਰਾਨਿਕ ਹੈਲਥ ਰਿਕਾਰਡ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦਾ ਹੈ (EHR) ਡੇਟਾਬੇਸ, ਐਮਰਜੈਂਸੀ ਡਿਸਪੈਚ (CAD), ਮਿਊਂਸੀਪਲ ਵਾਟਰ/ਪਾਵਰ ਟੈਲੀਮੈਟਰੀ, ਜਾਂ ਕਾਨੂੰਨੀ ਨਿੱਜੀ ਡੇਟਾ ਦੀ ਉਪਲਬਧਤਾ ਲਈ ਰਸਮੀ ਐਮਰਜੈਂਸੀ ਵਾਧੇ ਦੀ ਲੋੜ ਹੋ ਸਕਦੀ ਹੈ:

  • ਸੰਯੁਕਤ ਰਾਜ ਅਤੇ ਕੈਨੇਡਾ: ਡਾਇਲ ਕਰੋ 911 ਜੇ ਸਰਵਰ ਕਰੈਸ਼ ਕਲੀਨਿਕਲ ਨਿਗਰਾਨੀ ਜਾਂ ਡਿਸਪੈਚ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਉਂਦਾ ਹੈ, ਅਤੇ ਡਾਊਨਟਾਈਮ ਪ੍ਰਕਿਰਿਆਵਾਂ ਨੂੰ ਸਰਗਰਮ ਕਰਦਾ ਹੈ। ਨਾਜ਼ੁਕ ਬੁਨਿਆਦੀ ਢਾਂਚੇ ਦੇ ਸਰੋਤ-ਥਕਾਵਟ ਜਾਂ ਰੈਨਸਮਵੇਅਰ ਹਮਲਿਆਂ ਦੀ ਰਿਪੋਰਟ CISA (1-844-Say-CISA / cisa.gov/report) ਜਾਂ ਕੈਨੇਡੀਅਨ ਸੈਂਟਰ ਫਾਰ ਸਾਈਬਰ ਸੁਰੱਖਿਆ (1-833-CYBER-88)।
  • ਯੂਨਾਈਟਿਡ ਕਿੰਗਡਮ: ਡਾਇਲ ਕਰੋ 999 ਜੀਵਨ ਜਾਂ ਨਾਜ਼ੁਕ NHS ਪ੍ਰਣਾਲੀਆਂ ਲਈ ਖਤਰੇ ਲਈ। UK GDPR ਅਤੇ NIS ਨਿਯਮਾਂ ਦੇ ਤਹਿਤ, ਮੁਲਾਂਕਣ ਕਰੋ ਕਿ ਕੀ ਸਥਾਈ ਡਾਟਾਬੇਸ ਉਪਲਬਧਤਾ ਦੇ ਨੁਕਸਾਨ ਲਈ ICO (0303 123 1113) 72 ਘੰਟਿਆਂ ਦੇ ਅੰਦਰ।
  • ਯੂਰਪੀਅਨ ਯੂਨੀਅਨ: ਡਾਇਲ ਕਰੋ 112 ਸਾਰੇ ਈਯੂ ਮੈਂਬਰ ਰਾਜਾਂ ਵਿੱਚ। NIS2 ਡਾਇਰੈਕਟਿਵ ਦੇ ਅਧੀਨ ਜ਼ਰੂਰੀ ਇਕਾਈਆਂ ਨੂੰ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਆਊਟੇਜ ਦੇ 24 ਘੰਟਿਆਂ ਦੇ ਅੰਦਰ ਆਪਣੇ ਰਾਸ਼ਟਰੀ CSIRT ਨੂੰ ਸੂਚਿਤ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ, ਅਤੇ ਬੈਕਅੱਪ ਰਿਕਵਰੀ ਦੇ ਬਿਨਾਂ ਸਥਾਈ ਨਿੱਜੀ ਡੇਟਾ ਦਾ ਨੁਕਸਾਨ 72 ਘੰਟਿਆਂ ਦੇ ਅੰਦਰ GDPR ਆਰਟੀਕਲ 33 ਦੀ ਰਿਪੋਰਟਿੰਗ ਨੂੰ ਚਾਲੂ ਕਰਦਾ ਹੈ।
  • ਆਸਟ੍ਰੇਲੀਆ ਅਤੇ ਨਿਊਜ਼ੀਲੈਂਡ: ਡਾਇਲ ਕਰੋ 000 ਆਸਟ੍ਰੇਲੀਆ ਵਿੱਚ ਜਾਂ 111 ਨਿਊਜ਼ੀਲੈਂਡ ਵਿੱਚ; ACSC ਨਾਲ ਸੰਪਰਕ ਕਰੋ (1300 CYBER1) ਬੁਨਿਆਦੀ ਢਾਂਚੇ ਦੀਆਂ ਘਟਨਾਵਾਂ ਲਈ।
  • ਭਾਰਤ ਅਤੇ ਏਸ਼ੀਆ-ਪ੍ਰਸ਼ਾਂਤ: ਡਾਇਲ ਕਰੋ 112 ਸੰਕਟਕਾਲੀਨ ਜਵਾਬ ਲਈ; ਸਾਈਬਰ-ਪ੍ਰੇਰਿਤ ਆਊਟੇਜ ਦੀ ਰਿਪੋਰਟ CERT-In ( ਨੂੰ ਕਰੋincident@cert-in.org.in) ਲਾਜ਼ਮੀ 6-ਘੰਟੇ ਦੀ ਵਿੰਡੋ ਦੇ ਅੰਦਰ।

ਅਕਸਰ ਪੁੱਛੇ ਜਾਂਦੇ ਸਵਾਲ

ਕਿਉਂ ਕੀਤਾ df -h 100% 'ਤੇ ਰਹੋ (0 Avail) ਦੇ ਨਾਲ ਇੱਕ 50 GB ਲੌਗ ਫਾਈਲ ਨੂੰ ਮਿਟਾਉਣ ਤੋਂ ਬਾਅਦ ਵੀ rm?

ਲੀਨਕਸ ਫਾਈਲ ਸਿਸਟਮ ਵਿੱਚ, rm ਸਿਰਫ ਕਾਲ ਅਣਲਿੰਕ(), ਡਾਇਰੈਕਟਰੀ ਵਿੱਚੋਂ ਫਾਇਲ ਨਾਂ ਨੂੰ ਹਟਾਉਣਾ, ਜਦੋਂ ਕਿ ਕਰਨਲ ਡਿਸਕ ਬਲਾਕਾਂ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ ਜਦੋਂ ਤੱਕ ਕਿ ਹਰੇਕ ਪ੍ਰਕਿਰਿਆ ਜੋ ਉਸ ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹਦੀ ਹੈ, ਇਸਦੇ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰ ਨੂੰ ਬੰਦ ਨਹੀਂ ਕਰਦੀ ਹੈ (i_count == 0). ਚਲਾਓ sudo lsof +L1 ਪ੍ਰਕਿਰਿਆ ID ਨੂੰ ਲੱਭਣ ਲਈ (ਪੀ.ਆਈ.ਡੀ) ਅਤੇ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰ (ਐੱਫ.ਡੀ) ਦਾ (ਹਟਾਏ) ਫਾਈਲ, ਫਿਰ ਚਲਾਓ sudo sh -c ': > /proc/PID/fd/FD' ਸੇਵਾ ਨੂੰ ਮੁੜ ਚਾਲੂ ਕੀਤੇ ਬਿਨਾਂ ਤੁਰੰਤ ਬਲਾਕਾਂ ਨੂੰ ਜ਼ੀਰੋ ਕਰਨ ਲਈ।

ਕੀ ਹੁੰਦਾ ਹੈ ਜੇਕਰ ਮੈਂ ਸਰਵਰ ਵਿੱਚ SSH ਵੀ ਨਹੀਂ ਕਰ ਸਕਦਾ ਕਿਉਂਕਿ /tmp ਜਾਂ /var/run 100% ਭਰਿਆ ਹੋਇਆ ਹੈ ਅਤੇ sshd ਇੱਕ ਸੈਸ਼ਨ ਨਿਰਧਾਰਤ ਕਰਨ ਤੋਂ ਇਨਕਾਰ ਕਰਦਾ ਹੈ?

ਪਹਿਲਾਂ ਇੱਕ ਇੰਟਰਐਕਟਿਵ ਸੂਡੋ-ਟਰਮੀਨਲ ਨਿਰਧਾਰਤ ਕੀਤੇ ਬਿਨਾਂ SSH ਉੱਤੇ ਇੱਕ ਗੈਰ-PTY ਸਿੱਧੀ ਕਮਾਂਡ ਚਲਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ: ssh -T root@server "sh -c ': > /var/log/syslog'". ਜੇ ਰੂਟ ਲੌਗਇਨ ਅਸਮਰੱਥ ਹੈ, ਸਿੱਧੇ ਤੌਰ 'ਤੇ ਲੌਗਇਨ ਕਰਨ ਲਈ ਆਪਣੇ ਕਲਾਉਡ ਪ੍ਰਦਾਤਾ ਦੇ ਆਊਟ-ਆਫ-ਬੈਂਡ ਸੀਰੀਅਲ ਕੰਸੋਲ (AWS EC2 ਸੀਰੀਅਲ ਕੰਸੋਲ, DigitalOcean Console, Linode Lish, ਜਾਂ Proxmox/VMware VNC) ਦੀ ਵਰਤੋਂ ਕਰੋ। ttyS0 ਜਾਂ ਸਿੰਗਲ-ਯੂਜ਼ਰ ਰਿਕਵਰੀ ਮੋਡ ਵਿੱਚ ਬੂਟ ਕਰੋ।

ਕਿਸੇ ਨੇ ਪਹਿਲਾਂ ਹੀ PostgreSQL ਦੇ ਅੰਦਰ ਫਾਈਲਾਂ ਨੂੰ ਮਿਟਾ ਦਿੱਤਾ ਹੈ pg_wal ਇਸ ਗਾਈਡ ਨੂੰ ਪੜ੍ਹਨ ਤੋਂ ਪਹਿਲਾਂ ਡਾਇਰੈਕਟਰੀ, ਅਤੇ ਹੁਣ PostgreSQL ਨਾਲ ਸ਼ੁਰੂ ਕਰਨ ਤੋਂ ਇਨਕਾਰ ਕਰਦਾ ਹੈ PANIC: could not locate a valid checkpoint record. ਕੀ ਸਾਰਾ ਡਾਟਾ ਖਤਮ ਹੋ ਗਿਆ ਹੈ?

ਨਹੀਂ, ਜ਼ਿਆਦਾਤਰ ਟੇਬਲ ਕਤਾਰਾਂ ਅਜੇ ਵੀ ਅੰਦਰ ਹਨ $PGDATA/base/, ਹਾਲਾਂਕਿ ਮਿਟਾਈਆਂ ਗਈਆਂ WAL ਫਾਈਲਾਂ ਦੇ ਅੰਦਰ-ਇਨ-ਫਲਾਈਟ ਲੈਣ-ਦੇਣ ਖਤਮ ਹੋ ਜਾਂਦੇ ਹਨ ਅਤੇ ਕੁਝ ਪੰਨੇ ਫਟ ਸਕਦੇ ਹਨ। ਪਹਿਲਾਂ ਪੂਰੇ ਦੀ ਪੂਰੀ ਕਾਪੀ ਬਣਾਓ $PGDATA ਡਾਇਰੈਕਟਰੀ (cp -a /var/lib/postgresql/16/main /mnt/backup/pgdata_raw). ਫਿਰ ਚਲਾਓ sudo -u postgres /usr/lib/postgresql/16/bin/pg_resetwal -f /var/lib/postgresql/16/main, ਸਿੰਗਲ-ਯੂਜ਼ਰ ਮੋਡ ਵਿੱਚ PostgreSQL ਸ਼ੁਰੂ ਕਰੋ, ਅਤੇ ਤੁਰੰਤ ਚਲਾਓ pg_dumpall ਇੱਕ ਤਾਜ਼ਾ ਸ਼ੁਰੂਆਤ ਵਿੱਚ (initdb) ਕਲੱਸਟਰ; ਇਸ ਤੋਂ ਬਾਅਦ ਕਦੇ ਵੀ ਕਲੱਸਟਰ 'ਤੇ ਉਤਪਾਦਨ ਟ੍ਰੈਫਿਕ ਚਲਾਉਣਾ ਜਾਰੀ ਰੱਖੋ pg_resetwal.

ਜਦੋਂ ਮੈਂ ਲੱਖਾਂ ਛੋਟੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਕਿਵੇਂ ਮਿਟਾਵਾਂ rm -rf ਇੱਕ inode-ਥੱਕਿਆ 'ਤੇ ਲਟਕਦਾ ਜਾਂ ਅਸਫਲ ਹੁੰਦਾ ਹੈ (df -i 100%) ਸਰਵਰ?

ਜਦੋਂ ਇੱਕ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਲੱਖਾਂ ਛੋਟੇ ਸੈਸ਼ਨ ਜਾਂ ਕੈਸ਼ ਫਾਈਲਾਂ ਹੁੰਦੀਆਂ ਹਨ, ਤਾਂ ਇਸਦੀ ਡਾਇਰੈਕਟਰੀ ਸੂਚਕਾਂਕ (htree) ਵੱਡਾ ਵਧਦਾ ਹੈ, ਜਿਸ ਨਾਲ ls ਅਤੇ rm -rf RAM ਵਿੱਚ ਫਾਈਲਨਾਮਾਂ ਦੀ ਛਾਂਟੀ ਨੂੰ ਰੋਕਣ ਲਈ। ਇਸ ਦੀ ਬਜਾਏ, ਚਲਾਓ sudo ਲੱਭੋ /path/to/million_files -mindepth 1 -delete, ਜਾਂ ਇੱਕ ਖਾਲੀ RAM ਡਾਇਰੈਕਟਰੀ ਬਣਾਓ (mkdir /dev/shm/ਖਾਲੀ) ਅਤੇ ਚਲਾਓ sudo rsync -a --delete /dev/shm/empty/ /path/to/million_files/ ਤੇਜ਼ੀ ਨਾਲ inodes ਨੂੰ ਅਨਲਿੰਕ ਕਰਨ ਲਈ.

ਡੌਕਰ ਨੇ ਮੇਰੀ ਪੂਰੀ ਸਰਵਰ ਡਿਸਕ ਨੂੰ ਕਿਉਂ ਭਰਿਆ ਜਦੋਂ ਮੇਰੇ ਕੰਟੇਨਰ ਖੁਦ ਛੋਟੇ ਹੁੰਦੇ ਹਨ, ਅਤੇ ਮੈਂ ਕਿਵੇਂ ਸਾਫ਼ ਕਰਾਂ? /var/lib/docker ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ?

ਡੌਕਰ ਅਣ-ਰੋਟੇਡ JSON stdout ਲੌਗਸ ਵਿੱਚ ਡਿਸਕ ਸਪੇਸ ਇਕੱਠਾ ਕਰਦਾ ਹੈ (/var/lib/docker/containers/*/*-json.log), ਲਟਕਣਾ ਓਵਰਲੇ 2 ਚਿੱਤਰ ਪਰਤਾਂ, ਅਤੇ ਬਿਲਡਕਿੱਟ ਕੈਸ਼। ਕਦੇ ਵੀ ਹੱਥੀਂ ਨਹੀਂ rm -rf ਅੰਦਰ ਫੋਲਡਰ /var/lib/docker/overlay2/. ਪਹਿਲਾਂ JSON ਲੌਗਸ ਨੂੰ ਕੱਟੋ (sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log) ਤਾਂ ਡੈਮਨ ਕੋਲ ਸਾਹ ਲੈਣ ਦਾ ਕਮਰਾ ਹੈ, ਫਿਰ ਦੌੜੋ sudo docker ਸਿਸਟਮ prune -a -f (ਛੱਡਣਾ --ਵਾਲੀਅਮ ਇਸ ਲਈ ਡੇਟਾਬੇਸ ਵਾਲੀਅਮ ਅਣਛੂਹੇ ਰਹਿੰਦੇ ਹਨ)।

ਕੀ ਮੈਂ ਇੱਕ ਕਲਾਉਡ EBS / ਸਥਿਰ ਡਿਸਕ ਵਾਲੀਅਮ ਲਾਈਵ ਦਾ ਵਿਸਥਾਰ ਕਰ ਸਕਦਾ ਹਾਂ ਜਦੋਂ ਕਿ ਸਰਵਰ 100% ਡਿਸਕ ਉਪਯੋਗਤਾ 'ਤੇ ਹੈ?

ਹਾਂ, ਔਨਲਾਈਨ ਵਾਲੀਅਮ ਵਿਸਥਾਰ ਰੀਬੂਟ ਕੀਤੇ ਬਿਨਾਂ ਕੰਮ ਕਰਦਾ ਹੈ, ਇੱਕ ਕੈਚ ਦੇ ਨਾਲ: ਸਹਾਇਕ ਸਕ੍ਰਿਪਟ growpart /dev/nvme0n1 1 ਵਿੱਚ ਇੱਕ ਅਸਥਾਈ ਫਾਈਲ ਬਣਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਹੈ /tmp ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ mktemp ਅਤੇ 0 ਬਾਈਟ ਫਰੀ 'ਤੇ ਫੇਲ ਹੁੰਦਾ ਹੈ। ਦੌੜ ਕੇ ਉਸ ਅਸਫਲਤਾ ਨੂੰ ਬਾਈਪਾਸ ਕਰੋ sudo TMPDIR=/dev/shm growpart /dev/nvme0n1 1 (RAM-ਬੈਕਡ ਦੀ ਵਰਤੋਂ ਕਰਕੇ /dev/shm ਮਾਊਂਟ) ਤੋਂ ਬਾਅਦ sudo resize2fs /dev/nvme0n1p1 (ext4) ਜਾਂ sudo xfs_growfs / (XFS).


ਸੰਬੰਧਿਤ ਗਾਈਡ


ਸਰੋਤ ਅਤੇ ਅਧਿਕਾਰਤ ਮਾਰਗਦਰਸ਼ਨ

  • PostgreSQL ਗਲੋਬਲ ਡਿਵੈਲਪਮੈਂਟ ਗਰੁੱਪ: PostgreSQL 16 ਅਧਿਕਾਰਤ ਦਸਤਾਵੇਜ਼ - ਅਧਿਆਇ 30: ਭਰੋਸੇਯੋਗਤਾ ਅਤੇ ਲਿਖਣ-ਅੱਗੇ ਦਾ ਲੌਗ (WAL ਕੌਂਫਿਗਰੇਸ਼ਨ, ਰੀਪਲੀਕੇਸ਼ਨ ਸਲਾਟ, ਅਤੇ ਡਿਸਕ ਦੀਆਂ ਪੂਰੀਆਂ ਅਸਫਲਤਾਵਾਂ ਤੋਂ ਰਿਕਵਰੀ)।
  • SQLite ਕੰਸੋਰਟੀਅਮ (sqlite.org): ਇੱਕ SQLite ਡੇਟਾਬੇਸ ਫਾਈਲ (ਫਾਇਲ ਲਾਕਿੰਗ, ਅਨਲਿੰਕਡ ਜਰਨਲ/ਵਾਲ ਫਾਈਲਾਂ, ਅਤੇ .recover CLI ਐਕਸਟੈਂਸ਼ਨ)।
  • ਓਰੇਕਲ ਕਾਰਪੋਰੇਸ਼ਨ / MySQL ਦਸਤਾਵੇਜ਼ ਅਤੇ ਮਾਰੀਆਡੀਬੀ ਫਾਊਂਡੇਸ਼ਨ: InnoDB ਕਰੈਸ਼ ਰਿਕਵਰੀ, ਬਾਈਨਰੀ ਲੌਗ ਪਰਜ ਪ੍ਰਕਿਰਿਆਵਾਂ (PURGE BINARY LOGS), ਅਤੇ ਅਸਥਾਈ ਟੇਬਲਸਪੇਸ (ibtmp1) ਪ੍ਰਬੰਧਨ.
  • ਲੀਨਕਸ ਕਰਨਲ ਸੰਗਠਨ (kernel.org): Ext4 ਫਾਈਲ ਸਿਸਟਮ ਪ੍ਰਸ਼ਾਸਨ (tune2fs ਰਿਜ਼ਰਵਡ ਬਲਾਕ, ਇਨੋਡ ਟੇਬਲ, ਅਤੇ /proc/<pid>/fd/ ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰ ਟ੍ਰੰਕੇਸ਼ਨ)।
  • ਨੈਸ਼ਨਲ ਇੰਸਟੀਚਿਊਟ ਆਫ਼ ਸਟੈਂਡਰਡਜ਼ ਐਂਡ ਟੈਕਨਾਲੋਜੀNIST) (ਸੰਯੁਕਤ ਰਾਜ): ਵਿਸ਼ੇਸ਼ ਪ੍ਰਕਾਸ਼ਨ 800-123: ਜਨਰਲ ਸਰਵਰ ਸੁਰੱਖਿਆ ਅਤੇ ਉਪਲਬਧਤਾ ਪ੍ਰਬੰਧਨ ਲਈ ਗਾਈਡ।