Server Disk 100% ເຕັມ (0 Bytes ຟຣີ): ກູ້ຄືນຖານຂໍ້ມູນທີ່ຂັດຂ້ອງເມື່ອ rm ແລະ apt ລົ້ມເຫລວສໍາລັບການຂາດ Inodes / Space¶
ຕົວເລກສຸກເສີນແຕກຕ່າງກັນໄປຕາມປະເທດ. ຫນ້ານີ້ໃຊ້ 911, ຕົວເລກສໍາລັບສະຫະລັດແລະການາດາ. ປະເທດອື່ນໆຈໍານວນຫຼາຍໃຊ້ 112, 999, ຫຼືຕົວເລກອື່ນ. ຊອກຫາຕົວເລກສໍາລັບປະເທດຂອງທ່ານ.
ການຄົ້ນພົບວ່າເຄື່ອງແມ່ຂ່າຍຂອງ Linux ການຜະລິດໄດ້ຕີ 100% ການນໍາໃຊ້ແຜ່ນ (0 bytes free) ຫຼື 100% ການນໍາໃຊ້ inode (df -i) ໃນຂະນະທີ່ແລ່ນຖານຂໍ້ມູນ PostgreSQL, MySQL/InnoDB, MariaDB, ຫຼື SQLite ທີ່ໃຊ້ວຽກແມ່ນໜຶ່ງໃນໂຫມດຄວາມລົ້ມເຫຼວທີ່ອັນຕະລາຍທີ່ສຸດໃນການບໍລິຫານລະບົບ. ຢູ່ທີ່ສູນ bytes ຫຼືສູນ inodes ຟຣີ, ວິກິດການ cascades ຢ່າງໄວວາ: kernel ລະບົບປະຕິບັດການບໍ່ສາມາດສ້າງ sockets ໂດເມນ Unix ອີກຕໍ່ໄປ. /tmp ຫຼື /var/run, bash ລົ້ມເຫລວໃນ tab-complete ເນື່ອງຈາກວ່າມັນບໍ່ສາມາດຂຽນທໍ່ shell ຊົ່ວຄາວ, apt ຫຼື dnf ບໍ່ສາມາດແລ່ນເພື່ອທໍາຄວາມສະອາດຫຸ້ມຫໍ່ເນື່ອງຈາກວ່າຜູ້ຈັດການຊຸດຕ້ອງການໄຟລ໌ລັອກຊົ່ວຄາວ, ແລະເຄື່ອງຈັກຖານຂໍ້ມູນຂອງທ່ານຂັດໃນກາງຂອງບັນທຶກການຂຽນລ່ວງຫນ້າ (WAL) ຈຸດກວດກາຫຼືປະຕິເສດທີ່ຈະປິດຢ່າງສະອາດເນື່ອງຈາກວ່າມັນບໍ່ສາມາດຈັດສັນ 4 ກິໂລໄບດຽວ (0.004 megabyte) block ສໍາລັບຂອງຕົນ. .pid ຫຼືລັອກໄຟລ໌. ຮ້າຍແຮງໄປກວ່ານັ້ນ, ຜູ້ບໍລິຫານທີ່ຕົກໃຈມັກຈະແລ່ນ rm -rf /var/log/*.log ໃນໄຟລ໌ບັນທຶກຫຼາຍ gigabyte ແລະເບິ່ງໃນ horror ເປັນ df -h ຍັງລາຍງານ 100% Use% (0 Avail), ຫຼືພວກເຂົາລຶບຢ່າງຕາຍ pg_wal (pg_xlog) ຫຼື ib_logfile0 ພື້ນທີ່ຫວ່າງ, ທໍາລາຍຖານຂໍ້ມູນຢ່າງຖາວອນນອກເຫນືອການຟື້ນຕົວຂອງທຸລະກໍາ. ຖ້າທ່ານໄດ້ລຶບໄຟລ໌ຖານຂໍ້ມູນທີ່ສໍາຄັນໂດຍບັງເອີນໃນລະຫວ່າງການພະຍາຍາມທໍາຄວາມສະອາດ, ໃຫ້ຢຸດທັນທີແລະປ່ຽນເປັນ ອຸບັດເຫດ rm -rf ຫຼື Shift-Delete remount ແບບອ່ານເທົ່ານັ້ນແລະການແກະສະຫຼັກ inode; ຖ້າຮາດແວບ່ອນເກັບຂໍ້ມູນພື້ນຖານຂອງທ່ານຖິ້ມຄວາມຜິດພາດ I/O ຫຼືໄດ້ລັອກຕົວເອງບໍ່ໃຫ້ຂຽນ, ໃຫ້ປຶກສາ ໂໝດອ່ານເທົ່ານັ້ນແບບກະທັນຫັນ SSD ແລະ NVMe ແລະ TRIM ປິດໃຊ້ງານການກູ້ຂໍ້ມູນ ຫຼື ເສຍຫາຍ Word, Excel, PDF, ແລະການຟື້ນຟູໄຟລ໌ຖານຂໍ້ມູນ. ຖ້າໄຟໄໝ້ນີ້ສົ່ງຜົນກະທົບຕໍ່ລະບົບຄວາມປອດໄພຊີວິດຂອງໂຮງໝໍ, ການສົ່ງໜ່ວຍງານສຸກເສີນ, ຫຼືສາທາລະນະສຸກທີ່ສຳຄັນ, ໃຫ້ໂທຫາເບີສຸກເສີນທ້ອງຖິ່ນຂອງເຈົ້າ (911 ໃນສະຫະລັດແລະການາດາ, 112 ໃນທົ່ວສະຫະພາບເອີຣົບ, 999 ໃນສະຫະລາດຊະອານາຈັກ) ຫຼືປຶກສາກັບໄດເລກະທໍລີທົ່ວໂລກຂອງພວກເຮົາ ຕົວເລກສຸກເສີນ.
ເຮັດອັນນີ້ດຽວນີ້¶
- ** ຢ່າລົບ
pg_wal/,pg_xlog/,pg_multixact/,ib_logfile*,undo_*, ຫຼື-wal/-shmໄຟລ໌ເພື່ອສ້າງພື້ນທີ່ **: ການລຶບບັນທຶກການຂຽນລ່ວງໜ້າ ຫຼື InnoDB redo/undo ໄຟລ໌ບັນທຶກໃນຂະນະທີ່ຖານຂໍ້ມູນຖືກຂັດຂ້ອງຫຼືບໍ່ມີຈຸດກວດກາຈະທໍາລາຍບັນທຶກດຽວຂອງຫນ້າທີ່ບໍ່ໄດ້ຕົກລົງແລະຢູ່ໃນການບິນ. ຖານຂໍ້ມູນທີ່ມີແຜ່ນເຕັມແມ່ນສາມາດກູ້ຄືນໄດ້ 100 ເປີເຊັນເມື່ອພື້ນທີ່ຖືກປົດປ່ອຍ; ຖານຂໍ້ມູນທີ່ໄຟລ໌ WAL ຖືກລຶບດ້ວຍຕົນເອງrmຈະທົນທຸກທໍລະມານ B-tree irreversible ແລະການສໍ້ລາດບັງຫຼວງ heap. - ** ກວດສອບໃນ 5 ວິນາທີບໍ່ວ່າທ່ານຈະອອກຈາກການຕັນແຜ່ນ (
df -h), ອອກຈາກ inodes ລະບົບໄຟລ໌ (df -i), ຫຼືຖືໄຟລ໌ທີ່ບໍ່ໄດ້ເຊື່ອມຕໍ່ເປີດ (lsof +L1)**: - ແລ່ນ
df -hການກວດສອບຄວາມອາດສາມາດຂອງຕັນແລະdf -iເພື່ອກວດສອບຄວາມສາມາດຂອງ inode. ເຊີບເວີທີ່ມີພື້ນທີ່ດິສກ໌ຟຣີ 50 gigabytes (53.6 ຕື້ໄບຕ໌) ຍັງຈະຖິ້ມຢູ່No space left on device (ENOSPC)ຖ້າdf -iການສະແດງIUse% = 100%(ໂດຍປົກກະຕິແມ່ນເກີດມາຈາກຫຼາຍລ້ານເຊດຊັນ, ແຄດ, ຫຼືໄຟລ໌ mail spool). - ຖ້າ
df -hການສະແດງ100%ໃຊ້ (0 Avail) ເຖິງແມ່ນວ່າຫຼັງຈາກທີ່ທ່ານໄດ້ແລ່ນrmໃນໄຟລ໌ບັນທຶກຂະຫນາດໃຫຍ່, ດໍາເນີນການsudo lsof +L1. ໄຟລ໌ໃດຫນຶ່ງທີ່ຖືກລົບກັບrmໃນຂະນະທີ່nginx,rsyslog,docker,postgres, ຫຼືmysqldຍັງຖືຕົວອະທິບາຍໄຟລ໌ເປີດສືບຕໍ່ໃຊ້ 100 ເປີເຊັນຂອງຕັນດິສກ໌ຂອງມັນຈົນກວ່າຂະບວນການຈະເລີ່ມໃໝ່ ຫຼືທ່ານຕັດຕົວອະທິບາຍໂດຍກົງ. - ພື້ນທີ່ຫວ່າງ gigabytes ໃນ 1 ວິນາທີ ໂດຍບໍ່ມີການ restart daemons ໂດຍການຕັດໄຟລ໌ທີ່ເປີດຢູ່ໃນບ່ອນ (
: > /path/to/logfileຫຼື: > /proc/<pid>/fd/<n>): - ແທນ
rm /var/log/syslog(ຊຶ່ງເຮັດໃຫ້ບລັອກຖືກລັອກໂດຍຜູ້ຕັດໄມ້ທີ່ແລ່ນຢູ່), ສູນໄຟລ໌ຢູ່ໃນສະຖານທີ່ໂດຍໃຊ້ shell null redirect:sudo sh -c ': > /var/log/syslog'ຫຼືsudo truncate -s 0 /var/log/syslog. - ຖ້າເຈົ້າແລ່ນແລ້ວ
rmໃນໄຟລ໌ບັນທຶກຂະຫນາດໃຫຍ່ແລະdf -hບໍ່ໄດ້ຫຼຸດລົງ, ຊອກຫາ ID ຂະບວນການຂອງມັນ (PID) ແລະຕົວອະທິບາຍໄຟລ໌ (FD) ໃນsudo lsof +L1ແລະຕັດມັນກົງຜ່ານ kernel procfs interface:sudo sh -c ': > /proc/<PID>/fd/<FD>'. Space ຈະກັບຄືນສູ່df -hທັນທີ. - ** ເປີດການປົດລັອກຫ້ອງຫາຍໃຈສຸກເສີນທັນທີທັນໃດ
ext4/ext3ໂດຍການຫຼຸດຜ່ອນອັດຕາສ່ວນ block ຮາກທີ່ຖືກຈອງໄວ້ (tune2fs -m 1)**: ໂດຍຄ່າເລີ່ມຕົ້ນ,ext4ສະຫງວນ 5 ເປີເຊັນຂອງການແບ່ງປັນທັງໝົດ (25 gigabytesສຸດ a500 gigabyteແຜ່ນ) ສະເພາະສໍາລັບUID 0(root), ຊຶ່ງຫມາຍຄວາມວ່າການບໍລິການທີ່ບໍ່ແມ່ນຮາກເຊັ່ນpostgres(UID 109),mysql, ແລະwww-dataຕີNo space left on deviceການນຳໃຊ້ 95 ເປີເຊັນ. ຮຽກຄືນ 80 ເປີເຊັນຂອງສະຫງວນໄວ້ທາງອອນລາຍໃນ 1 ວິນາທີ ໂດຍບໍ່ມີການຢຸດເຮັດວຽກໂດຍການແລ່ນsudo tune2fs -m 1 /dev/sda1(ຫຼືອຸປະກອນຕັນຮາກຂອງທ່ານຈາກfindmnt /). - **ສູນຍາກາດ
systemd-journaldບັນທຶກຖານສອງແລະຖານຄວາມຈໍາຊຸດອາຍຸຢ່າງປອດໄພ **: ດໍາເນີນການsudo journalctl --vacuum-size=50M(ຊຶ່ງຢ່າງປອດໄພ rotates ແລະ pururges binary/var/log/journalຮວບຮວມລົງເຖິງ 50 megabytes) ແລະsudo apt-get clean(ຫຼືsudo dnf clean all), ເຊິ່ງລຶບການດາວໂຫຼດ.deb/.rpmຮວບຮວມຢູ່ໃນ/var/cache/apt/archives/ໂດຍບໍ່ຈໍາເປັນຕ້ອງຂຽນໃສ່ຖານຂໍ້ມູນ dpkg. - **ເມື່ອຢ່າງໜ້ອຍ 1 gigabyte ຫາ 5 gigabytes (1.07 ຕື້ຫາ 5.36 ຕື້ bytes) ຂອງພື້ນທີ່ຫວ່າງແມ່ນບໍ່ເສຍຄ່າ, ເອົາຖານຂໍ້ມູນຂຶ້ນໃນໂຫມດຜູ້ໃຊ້ດຽວຫຼືການຟື້ນຕົວເພື່ອເຮັດສໍາເລັດຈຸດກວດກາ WAL ຂອງມັນກ່ອນທີ່ຈະອະນຸຍາດໃຫ້ການເຂົ້າຊົມລູກຄ້າ **: ໃຫ້ PostgreSQL, MySQL / InnoDB, ຫຼື SQLite replay ບັນທຶກການຂຽນກ່ອນຫນ້າ (
WAL), ລ້າງໜ້າທີ່ເປື້ອນໄປໃສ່ໄຟລ໌ຂໍ້ມູນຫຼັກ, ແລະເອົາສ່ວນ WAL ຂອງມັນຄືນມາໃໝ່ໃຫ້ສະອາດກ່ອນທີ່ຈະເປີດໄຟວໍ ຫຼືເຊີບເວີຂອງແອັບພລິເຄຊັນຂອງທ່ານຄືນໃໝ່.
Danger
** ບໍ່ເຄີຍແລ່ນ pg_resetwal (ຫຼື pg_resetxlog) ໃນ PostgreSQL ຫຼື innodb_force_recovery = 6 ຢູ່ໃນ MySQL ພຽງແຕ່ຍ້ອນວ່າແຜ່ນເຕັມໄປ **: ແລ່ນ pg_resetwal ເຊັດຕົວຊີ້ບັນທຶກການເຮັດທຸລະກຳ ແລະບັງຄັບໃຫ້ PostgreSQL ເລີ່ມຕົ້ນດ້ວຍໜ້າຂໍ້ມູນທີ່ຂຽນເຄິ່ງໜຶ່ງ, ຮັບປະກັນການສູນເສຍແຖວທີ່ງຽບໆ, ລະຫັດຫຼັກຊ້ຳກັນ, ແລະຕົ້ນໄມ້ B-key ທີ່ແຕກຫັກ. ໃນ 99.9 ສ່ວນຮ້ອຍຂອງ crash ຖານຂໍ້ມູນເຕັມແຜ່ນ, ພຽງແຕ່ປ່ອຍ 2 gigabyte ກັບ 10 gigabytes (2.1 ຕື້ຫາ 10.7 ຕື້ bytes) ຂອງພື້ນທີ່ໃນພາທິຊັນແລະການເລີ່ມຕົ້ນ daemon ຖານຂໍ້ມູນປົກກະຕິອະນຸຍາດໃຫ້ການຟື້ນຕົວອຸປະຕິເຫດອັດຕະໂນມັດ (.REDO ຂັ້ນຕອນ) ເພື່ອສໍາເລັດຮູບຢ່າງສະອາດໂດຍສູນເສຍຂໍ້ມູນ.
ຕົ້ນໄມ້ການຕັດສິນໃຈ: ເຊີບເວີສູນພື້ນທີ່ ແລະ triage ຖານຂໍ້ມູນ crashed¶
ໃຊ້ຕົ້ນໄມ້ການຕັດສິນໃຈນີ້ເພື່ອກໍານົດວ່າເປັນຫຍັງລະບົບປະຕິບັດງານກໍາລັງລາຍງານ ENOSPC (No space left on device) ແລະເລືອກເສັ້ນທາງການຟື້ນຕົວທີ່ບໍ່ທໍາລາຍທີ່ແນ່ນອນ:
flowchart TD
Start["ການຖິ້ມເຊີບເວີ ຫຼືຖານຂໍ້ມູນ: ບໍ່ມີພື້ນທີ່ເຫຼືອຢູ່ໃນອຸປະກອນ (ENOSPC)"] --> CheckDF["ແລ່ນ: df -h AND df -i"]
CheckDF --> DiagType{"df ລາຍງານຫຍັງ?"}
DiagType -->|"df -h ສະແດງ 100% ການນໍາໃຊ້ (0 Avail) ແລະ df -i < 95%"| BlockFull["Block Exhaustion: ກວດເບິ່ງວ່າ du -shx / Matches df -h"]
DiagType -->|"df -h ສະແດງ GBs ຟຣີ ແຕ່ df -i ສະແດງ 100% IUse"| InodeFull["Inode Exhaustion: ລ້ານໄຟລ໌ຂະໜາດນ້ອຍ 0-to-4KB"]
DiagType -->|"ທັງ df -h ແລະ df -i ສະແດງ < 90% ໃຊ້ແລ້ວ"| RamOrQuota["ຂີດຈຳກັດທີ່ເຊື່ອງໄວ້: ກວດເບິ່ງ df -h /tmp (tmpfs RAM ເຕັມ), Docker Overlay2, ຫຼື XFS/ext4 Disk Quotas"]
BlockFull --> GhostCheck{"ທ່ານໄດ້ດໍາເນີນການ rm ໃນໄຟລ໌ໃຫຍ່ແລ້ວໂດຍບໍ່ມີການ df ຫຼຸດລົງບໍ?"}
GhostCheck -->|"ແມ່ນແລ້ວ: du ແມ່ນນ້ອຍກວ່າ df ຫຼາຍ"| UnlinkedFD["ແລ່ນ: sudo lsof +L1 -> ຕັດໄຟລ໌ Ghost ຜ່ານ :> /proc/PID/fd/FD"]
GhostCheck -->|"ບໍ່: ໄຟລ໌ທີ່ແທ້ຈິງແມ່ນການຕື່ມຂໍ້ມູນໃສ່ແຜ່ນ"| EmergencySpace["ສ້າງຫ້ອງຫາຍໃຈທັນທີ (1 GB ຫາ 5 GB)"]
EmergencySpace --> Ext4Check{"ລະບົບໄຟລ໌ ext4 / ext3 ແມ່ນບໍ?"}
Ext4Check -->|"ແມ່ນແລ້ວ"| Tune2fs["ແລ່ນ: sudo tune2fs -m 1 /dev/root_dev (ປົດປ່ອຍທັນທີ 4% ຂອງ Disk ສໍາລັບຜູ້ໃຊ້ທີ່ບໍ່ແມ່ນ Root DB)"]
Ext4Check -->|"ບໍ່ (XFS / Btrfs / ZFS)"| TruncLogs["ຕັດບັນທຶກໃນສະຖານທີ່ (: > /var/log/syslog) ແລະແລ່ນ journalctl --vacuum-size=50M"]
InodeFull --> InodeClean["ຊອກຫາໄດເລກະທໍລີທີ່ມີລ້ານໄຟລ໌ໂດຍໃຊ້ find / -xdev -printf '%h\n' | ຄັດ | uniq -c | sort -k 1 -r | head -20 -> ລຶບດ້ວຍ find -delete"]
UnlinkedFD --> DBRecover["ດໍາເນີນການກັບ Database Engine WAL & B-Tree Recovery"]
Tune2fs --> DBRecover
TruncLogs --> DBRecover
InodeClean --> DBRecover
RamOrQuota --> DBRecover
DBRecover --> WhichDB{"ເຄື່ອງຈັກຖານຂໍ້ມູນໃດຂັດຂ້ອງ?"}
WhichDB -->|"PostgreSQL"| PGFlow["ຮັກສາ pg_wal Intact -> ເລີ່ມ Postgres ເພື່ອ Replay WAL -> ດໍາເນີນການ CHECKPOINT; -> Drop Stale Replication Slots"]
WhichDB -->|"MySQL / MariaDB (InnoDB)"| MyFlow["Keep ib_logfile* Intact -> Start mysqld -> Purge Binary Logs via PURGE BINARY LOGS -> Optimize Tables"]
WhichDB -->|"SQLite3"| SqFlow["Back Up .db + .db-wal + .db-shm -> ແລ່ນ PRAGMA wal_checkpoint(TRUNCATE) ຫຼື sqlite3 break.db '.recover'"]
ໄລຍະທີ 1: ເປັນຫຍັງຄຳສັ່ງມາດຕະຖານ (rm, apt, tab-completion) ລົ້ມເຫລວຢູ່ທີ່ 0 bytes ຟຣີ¶
ເມື່ອພາທິຊັນ Linux ໂຈມຕີ 100 ເປີເຊັນຫຼື inode ຫມົດ, ຄໍາສັ່ງການແກ້ໄຂມາດຕະຖານລົ້ມເຫລວໃນວິທີທີ່ບໍ່ຄາດຄິດ:
- ** ກົດ Tab ໃນ bash ຖິ້ມ cannot create temp file for here-document: No space left on device**: ທັນສະໄຫມ bash-completion scripts ສ້າງໄຟລ໌ຊົ່ວຄາວໃນ /tmp. ຖ້າ /tmp ອາໃສຢູ່ໃນຮາກ / partition ແທນ a tmpfs ການຕິດຕັ້ງ RAM, ການສໍາເລັດຮູບແກະແລະ heredocs (<<EOF) ລົ້ມເຫລວ. ແກ້ໄຂນີ້ທັນທີໂດຍການຊີ້ TMPDIR ກັບ RAM ຫນ່ວຍຄວາມຈໍາທີ່ໃຊ້ຮ່ວມກັນ:
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/ ໂດຍກົງ), ຫຼືຕັດຮູບ kernel ຫນຶ່ງທີ່ບໍ່ໄດ້ໃຊ້ເຂົ້າໃນ /boot (sudo sh -c ': > /boot/initrd.img-<old-unused-version>') ໃຫ້ dpkg 50 megabytes (52.4 ລ້ານ bytes) ມັນຈໍາເປັນຕ້ອງດໍາເນີນການ sudo dpkg --purge linux-image-<old-unused-version>.
- rm /path/to/dir/* ລົ້ມເຫລວກັບ Argument list too long: ເມື່ອ df -i ແມ່ນຢູ່ທີ່ 100 ເປີເຊັນເພາະວ່າໄດເລກະທໍລີເຊັ່ນ /var/lib/php/sessions ປະກອບມີໄຟລ໌ນ້ອຍໆຫຼາຍລ້ານໄຟລ໌, ການຈັບພາບດ້ວຍຕົວແທນ (*) overflows ແກ່ນ ARG_MAX ບັຟເຟີ (2 megabytes) ກ່ອນ rm ເລີ່ມ. ໃຊ້ find ກັບ -delete ແທນທີ່:
5 ສາເຫດທີ່ແຕກຕ່າງກັນຂອງ No space left on device (ENOSPC)¶
ກ່ອນທີ່ຈະສໍາຜັດກັບໄຟລ໌ຖານຂໍ້ມູນໃດໆ, ໃຫ້ສົມທຽບຫ້າສະຖານະການເຫຼົ່ານີ້ເພື່ອຢືນຢັນວ່າຊັບພະຍາກອນອັນໃດທີ່ຫມົດໄປ:
| ຄໍາສັ່ງການວິນິດໄສ | ອາການທີ່ສັງເກດເຫັນ | ສາເຫດຮາກ | ແກ້ໄຂທັນທີ 10 ວິນາທີ |
|---|---|---|---|
df -h ທຽບ sudo du -shx / |
df -h ການສະແດງ 100% ໃຊ້ (0 Avail), ແຕ່ du -shx / ເພີ່ມຂຶ້ນພຽງແຕ່ 60% ຂອງຂະຫນາດແຜ່ນ. |
ເປີດໄຟລ໌ທີ່ບໍ່ເຊື່ອມຕໍ່ ("ໄຟລ໌ຜີ"): ມີຄົນແລ່ນ rm ໃນບັນທຶກຂະຫນາດໃຫຍ່ຫຼືໄຟລ໌ temp ໃນຂະນະທີ່ຂະບວນການ (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 Reserved Root Blocks (ຄ່າເລີ່ມຕົ້ນ 5%): ext4 ຍຶດ 5 ເປີເຊັນຂອງບລັອກຈາກຜູ້ໃຊ້ທີ່ບໍ່ແມ່ນຮາກ (UID > 0) ເພື່ອປ້ອງກັນ lockouts ຮາກແລະການ fragmentation. |
ແລ່ນ sudo tune2fs -m 1 /dev/<partition> ທີ່ຈະຫຼຸດລົງສະຫງວນຈາກ 5 ເປີເຊັນເຖິງ 1 ເປີເຊັນທັນທີອອນໄລນ໌. |
df -i |
df -h ສະແດງໃຫ້ເຫັນ gigabytes ຂອງພື້ນທີ່ຫວ່າງ, ແຕ່ df -i ການສະແດງ IUse% = 100% (IFree = 0). |
** ການສູນເສຍ Inode **: ext4 ມີຈໍານວນຄົງທີ່ຂອງ inodes ສ້າງຢູ່ທີ່ mkfs ເວລາ; ລ້ານໄຟລ໌ຂະຫນາດນ້ອຍບໍລິໂພກທຸກຊ່ອງ inode. |
ຊອກຫາໂຟນເດີ culprit (sudo find / -xdev -printf '%h\n' \ | ຄັດ \ | uniq -c \ | ຄັດ -k 1 -r \ | ຫົວ -10) and run sudo ຊອກຫາ /culprit/dir -type f -delete. |
** sudo mount \ | grep /path** |
du -sh /var/log ແມ່ນຂະຫນາດນ້ອຍ, ທັນ / ມີພື້ນທີ່ຂາດຫາຍໄປ 40 gigabytes. |
** ໄຟລ໌ທີ່ເຊື່ອງໄວ້ພາຍໃຕ້ຈຸດ Mount **: ຂະບວນການຂຽນ 40 gigabytes ເຂົ້າໄປໃນ /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 gigabytes ຟຣີໃນ a Btrfs ປະລິມານ, ແຕ່ການຂຽນລົ້ມເຫລວກັບ ENOSPC. |
Btrfs Metadata Chuk Exhaustion: Btrfs ຈັດສັນພື້ນທີ່ເປັນຕ່ອນ Data ແລະ Metadata ແຍກຕ່າງຫາກ; ຖ້າຫາກວ່າພື້ນທີ່ວັດຖຸດິບທັງຫມົດທີ່ບໍ່ໄດ້ຈັດສັນຖືກລັອກເຂົ້າໄປໃນ chunks Data sparse, chunks Metadata ມົນຕີ 100 ສ່ວນຮ້ອຍ. |
ເພີ່ມອຸປະກອນ loop ໄຟລ໌ RAM 2 gigabyte ຊົ່ວຄາວ (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 megabytes ແລະ 50 gigabyte (0.53 ຕື້ຫາ 53.6 ຕື້ໄບຕ໌) ຂອງພື້ນທີ່ໂດຍບໍ່ມີການທໍາລາຍຂະບວນການເຄື່ອນໄຫວ:
ຂັ້ນຕອນທີ 1: ຕັດເປີດລຶບໄຟລ໌ ("ຜີ") ຜ່ານ /proc/<pid>/fd/¶
ຖ້າທ່ານຫຼືສະຄິບ logrotate ອັດຕະໂນມັດໄດ້ລຶບໄຟລ໌ຂະຫນາດໃຫຍ່ແລ້ວແຕ່ພື້ນທີ່ດິດບໍ່ໄດ້ຖືກສົ່ງຄືນ, ໃຫ້ກວດເບິ່ງຕາຕະລາງໄຟລ໌ເປີດທີ່ບໍ່ໄດ້ເຊື່ອມຕໍ່ຂອງ kernel:
ເບິ່ງຢູ່SIZE/OFF ຖັນ (ວັດແທກເປັນ bytes). ຖ້າເຈົ້າເຫັນລາຍການເຊັ່ນ:
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 gigabyte ເປີດ. ບໍ່ kill -9 ຂະບວນການຖານຂໍ້ມູນ (mysqld ຫຼື postgres) ໃຫ້ຟຣີ /tmp ໄຟລ໌ຖ້າທ່ານສາມາດເພີ່ມພື້ນທີ່ຫວ່າງຢູ່ບ່ອນອື່ນກ່ອນ. ແທນທີ່ຈະ, ສູນຕົວອະທິບາຍໄຟລ໌ບັນທຶກ (PID 612, FD 7) ໂດຍກົງໃນຫນ່ວຍຄວາມຈໍາ kernel:
ແລ່ນ df -h ທັນທີ: ທັງຫມົດ 18.2 gigabyte ຖືກປ່ອຍຢູ່ໃນຈຸດໂດຍບໍ່ມີການ restarting ການບໍລິການດຽວ.
ຂັ້ນຕອນທີ 2: ຖອນຄືນ ext4 ບລັອກສະຫງວນອອນໄລນ໌ກັບ tune2fs¶
ສຸດໃດ ext4 ຫຼື ext3 ລະບົບໄຟລ໌, ກວດເບິ່ງຈໍານວນບລັອກທີ່ສະຫງວນໄວ້ໃນປະຈຸບັນ:
postgres), MySQL (mysql), Redis (redis), ແລະແອັບຯເວັບ SQLite (www-data, node) ດໍາເນີນການເປັນຜູ້ໃຊ້ທີ່ບໍ່ແມ່ນ root ທີ່ບໍ່ມີສິດທິພິເສດ, kernel Linux ຂັດຂວາງພວກເຂົາຈາກການໃຊ້ 5 ເປີເຊັນສຸດທ້າຍຂອງແຜ່ນ. ຫຼຸດລົງອັດຕາສ່ວນບລັອກສະຫງວນຈາກ 5% ກັບ 1% (ຫຼື 0% ໃນລະຫວ່າງເຫດການສຸກເສີນ) ມີຜົນກະທົບທັນທີທັນໃດຢູ່ໃນລະບົບໄຟລ໌ທີ່ຕິດຕັ້ງສົດ:
ໃນປະລິມານຖານຂໍ້ມູນ 1 terabyte (1,000 gigabyte), ຄໍາສັ່ງດຽວນີ້ທັນທີມອບ ** 40 gigabyte (42.9 ຕື້ bytes)** ຂອງພື້ນທີ່ຂຽນໄດ້ກັບເຄື່ອງຈັກຖານຂໍ້ມູນຂອງທ່ານເພື່ອວ່າມັນສາມາດສໍາເລັດການກວດກາ WAL ຂອງຕົນ. ເມື່ອວິກິດການໄດ້ຖືກແກ້ໄຂແລະຂໍ້ມູນເກົ່າຖືກລຶບລ້າງ, ຟື້ນຟູສະຫງວນໄວ້ 2% ຫຼື 5% (sudo tune2fs -m 2 /dev/nvme0n1p1).
ຂັ້ນຕອນທີ 3: ຕັດບັນທຶກຂໍ້ຄວາມທີ່ມີຢູ່ໃນສະຖານທີ່ແລະສູນຍາກາດ journald¶
ຊອກຫາໄຟລ໌ທີ່ໃຫຍ່ທີ່ສຸດໃນລະບົບໄຟລ໌ຮາກ (ຢູ່ໃນລະບົບໄຟລ໌ດຽວກັນກັບ -xdev ດັ່ງນັ້ນທ່ານບໍ່ເສຍເວລາສະແກນ /proc ຫຼື mounts ພາຍນອກ):
/var/log/nginx/access.log, /var/log/syslog, /var/log/postgresql/*.log, Docker *-json.log):
ບໍ່ເຄີຍແລ່ນ rm ຢູ່ໃນໄຟລ໌ບັນທຶກການເຄື່ອນໄຫວ. ຕັດມັນອອກເປັນສູນໄບຕ໌ເພື່ອໃຫ້ຕົວອະທິບາຍໄຟລ໌ຂອງ daemon ຍັງຄົງຖືກຕ້ອງ ແລະຖືກປັບຕົວຊີ້ຄ່າຊົດເຊີຍໃຫ້ສະອາດ:
sudo truncate -s 0 /var/log/nginx/error.log
sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log
systemd-journald ບັນທຶກຖານສອງ (/var/log/journal/):
ໄລຍະທີ 3: ການຟື້ນຕົວ PostgreSQL ຫຼັງຈາກອຸປະຕິເຫດເຕັມແຜ່ນ 100% (pg_wal ບວມ)¶
ເມື່ອເຊີບເວີ PostgreSQL ໝົດພື້ນທີ່ດິດ, ມັນຈະບັນທຶກ PANIC: could not write to file "pg_wal/xlogtemp.1234": No space left on device, ທັນທີ aborts ຂະບວນການເດັກ postmaster, ແລະປະຕິເສດທີ່ຈະເລີ່ມຕົ້ນ.
ເປັນຫຍັງ pg_wal (pg_xlog ໃນ PostgreSQL 9.6 ແລະເກົ່າກວ່າ) ຕື່ມຂໍ້ມູນໃສ່ແຜ່ນທັງຫມົດ¶
ໃນການເຮັດວຽກປົກກະຕິ, PostgreSQL ຂຽນທຸກໆການປ່ຽນແປງໄປຫາໄຟລ໌ 16 megabyte (16.7 ລ້ານ byte) ພາຍໃນ. $PGDATA/pg_wal/ ແລະ recycles ໃຫ້ເຂົາເຈົ້າຫຼັງຈາກແຕ່ລະຄົນ CHECKPOINT ເມື່ອເກີນ max_wal_size. ຢ່າງໃດກໍຕາມ, PostgreSQL ** ຖືກຫ້າມບໍ່ໃຫ້ລຶບຫຼືລີໄຊເຄີນເກົ່າ pg_wal ໄຟລ໌ ** ພາຍໃຕ້ສາມເງື່ອນໄຂ:
1. ສະລັອດຕິງການຈຳລອງທາງກາຍຍະພາບ/ຕາມເຫດຜົນ: ເຊີບເວີແບບຈຳລອງ (standby), ຕົວເຊື່ອມຕໍ່ Debezium/Kafka, ຫຼື pg_receivewal ລູກຄ້າໄດ້ຕັດການເຊື່ອມຕໍ່ມື້ກ່ອນຫນ້ານີ້, ແຕ່ຊ່ອງການຈໍາລອງຂອງຕົນ (pg_replication_slots) ຍັງ active = false ໃນຂັ້ນຕົ້ນ, ແນະນໍາໃຫ້ PostgreSQL ຮັກສາທຸກໆ WAL segment ທີ່ສ້າງຂຶ້ນນັບຕັ້ງແຕ່ການຕັດການເຊື່ອມຕໍ່.
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 ບໍ່ສາມາດແມ້ແຕ່ເລີ່ມຕົ້ນທີ່ຈະລຸດຊ່ອງ replication ຫຼືສໍາເລັດການກວດກາເນື່ອງຈາກວ່າການເລີ່ມຕົ້ນການຟື້ນຕົວຕົວມັນເອງຕ້ອງການຫຼາຍ megabytes ຂອງພື້ນທີ່ດິດຟຣີເພື່ອຂຽນໄຟລ໌ລັດຊົ່ວຄາວ.
PostgreSQL ການກູ້ໄພສູນອະວະກາດຂັ້ນຕອນທີ (ສູນເສຍຂໍ້ມູນ)¶
- ສ້າງ 1 gigabyte ຫາ 5 gigabyte (1.07 ຕື້ຫາ 5.36 ຕື້ bytes) ຂອງພື້ນທີ່ຊົ່ວຄາວພາຍນອກ
pg_wal/: - ການນໍາໃຊ້ຄັ້ງທໍາອິດ
sudo tune2fs -m 0 /dev/<partition>ແລະຕັດບັນທຶກຂໍ້ຄວາມລະບົບ/PostgreSQL (sudo truncate -s 0 /var/lib/postgresql/*/main/log/*.logຫຼື/var/log/postgresql/*.log). - ** ຈະເປັນແນວໃດຖ້າຫາກວ່າຖານຂໍ້ມູນມີການແບ່ງປັນທີ່ອຸທິດຕົນຂອງຕົນໂດຍມີສູນຂໍ້ຄວາມບັນທຶກແລະ 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 - ** ຖ້າ
archive_commandລົ້ມເຫລວ ແລະຂັດຂວາງການລີໄຊເຄີນ WAL, ຂ້າມມັນເຂົ້າໄປຊົ່ວຄາວpostgresql.conf**: ຖ້າຫາກວ່າເປົ້າຫມາຍ S3 / ການສໍາຮອງຂໍ້ມູນຂອງທ່ານແມ່ນຫຼຸດລົງແລະpg_wal/archive_status/ບັນຈຸພັນ.readyໄຟລ໌, ແກ້ໄຂpostgresql.conf(archive_command = '/bin/true') ** ເປັນພຽງແຕ່ເປັນມາດຕະການສຸກເສີນທີ່ສຸດທີ່ພັກເພື່ອຢຸດແຜ່ນຈາກການເສຍຊີວິດ **, ໂດຍຮູ້ວ່າທ່ານຈະຕ້ອງໃຊ້ເວລາສົດ.pg_basebackupທັນທີຫຼັງຈາກການຟື້ນຕົວເນື່ອງຈາກວ່າລະບົບຕ່ອງໂສ້ການເກັບຮັກສາ WAL ຈະມີຊ່ອງຫວ່າງ. - ** ເລີ່ມຕົ້ນ PostgreSQL ແລະກວດກາໃນທັນທີສະລັອດຕິງ replications **:
ເລີ່ມ PostgreSQL (
sudo systemctl start postgresql) ແລະເຊື່ອມຕໍ່ຜ່ານsudo -u postgres psql: - ** ວາງຊ່ອງການທົດລອງທີ່ຕາຍແລ້ວ/ບໍ່ມີການເຄື່ອນໄຫວທີ່ເກັບກຳລັງ gigabytes ຂອງ WAL**:
ຖ້າເຈົ້າເຫັນຊ່ອງທີ່ບໍ່ເຄື່ອນໄຫວ (
active = f) ຖື 80 gigabytes ຂອງretained_wal: - ** ບັງຄັບທັນທີ
CHECKPOINTເພື່ອ recycle bloated ໄດ້pg_walພາກສ່ວນ **: ປັດຈຸບັນCHECKPOINT;ສໍາເລັດຮູບຫຼັງຈາກການຫຼຸດລົງຊ່ອງຕາຍ, PostgreSQL ຈະອັດຕະໂນມັດຖອນການເຊື່ອມຕໍ່ຫຼື recycle gigabytes ຂອງໄຟລ໌ 16 megabyte ເກົ່າໃນພາກສ່ວນpg_wal/, ກັບຄືນການນໍາໃຊ້ແຜ່ນຂອງທ່ານກັບປົກກະຕິ. - ** ປ້ອງກັນບໍ່ໃຫ້ການເສຍຊີວິດສະລັອດຕິສການທົດລອງໃນອະນາຄົດ **: ກໍານົດ
max_slot_wal_keep_sizeໃນpostgresql.conf(ມີຢູ່ໃນ PostgreSQL 13+) ໄປຫາຫມວກທີ່ປອດໄພ (ເຊັ່ນ:max_slot_wal_keep_size = 20GB) ດັ່ງນັ້ນ PostgreSQL invalidates ຊ່ອງ replica ຂອງຕາຍແທນທີ່ຈະ crashing ຖານຂໍ້ມູນຕົ້ນຕໍຢູ່ທີ່ 0 bytes ຟຣີ.
ໄລຍະ 4: ການຟື້ນຕົວ MySQL / MariaDB (InnoDB) ທີ່ 0 bytes ຟຣີ¶
ເມື່ອ MySQL ຫຼື MariaDB ຕີ 100% ການນໍາໃຊ້ແຜ່ນ (/var/lib/mysql), InnoDB stalls ທັງຫມົດຂຽນຫຼື crash ກັບ [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 ເພື່ອເບິ່ງວ່າຜູ້ກະທຳຜິດທັງ 4 ຄົນນີ້ ບໍລິໂພກແຜ່ນໃດແດ່:
1. ** ບັນທຶກຖານສອງບໍ່ມີຂອບເຂດ (binlog.000001, mysql-bin.000042): ໂດຍຄ່າເລີ່ມຕົ້ນໃນ MySQL 8.0+, ການບັນທຶກໄບນາຣີຖືກເປີດໃຊ້ດ້ວຍການຮັກສາໄວ້ 30 ມື້ (binlog_expire_logs_seconds = 2592000), ເຊິ່ງສາມາດສ້າງເຫດການແຖວຫຼາຍຮ້ອຍ gigabytes ໄດ້ຢ່າງງ່າຍດາຍໃນລະຫວ່າງການນໍາເຂົ້າຫຼາຍ.
2. ** ການສອບຖາມ runaway ຂຽນຕາຕະລາງຊົ່ວຄາວຂະຫນາດໃຫຍ່ (#sql* ຫຼື ibtmp1) : ໃຫຍ່ GROUP BY ຫຼື ORDER BY ຕື່ມການສອບຖາມ ibtmp1 ຫຼື /tmp/#sql_* ຈົນກ່ວາແຜ່ນມົນຕີ 0 bytes.
3. ** monolithic ibdata1 system tablespace bloat : ຖ້າ innodb_file_per_table ຖືກປິດໃຊ້ງານ ຫຼືການເຮັດທຸລະກໍາທີ່ຍາວນານໄດ້ຂັດຂວາງບັນຊີລາຍຊື່ປະຫວັດສາດ InnoDB (ຍົກເລີກການເຂົ້າສູ່ລະບົບພາຍໃນ ibdata1 ຫຼື undo_001) ຈາກການລົບລ້າງ.
4. ** ບັນທຶກການສອບຖາມຊ້າ MySQL ຫຼືບັນທຶກຄວາມຜິດພາດ (/var/log/mysql/mysql-slow.log).
MySQL / MariaDB ເປັນການກູ້ຂໍ້ມູນແບບບໍ່ມີພື້ນທີ່ເທື່ອລະກ້າວ¶
- ** ຢ່າລົບລ້າງ
ibdata1,ib_logfile0,ib_logfile1,#innodb_redo/*, ຫຼືundo_001ກັບrm**: ການລຶບໃດໆຂອງໄຟລ໌ເຫຼົ່ານີ້ເຮັດໃຫ້ທຸກ.ibdໄຟລ໌ຕາຕະລາງໃນຖານຂໍ້ມູນຂອງເຈົ້າບໍ່ສາມາດອ່ານໄດ້. - ພື້ນທີ່ເລີ່ມຕົ້ນເລີ່ມຕົ້ນຟຣີ (500 megabytes ຫາ 2 gigabyte):
- ຕັດອອກ
/var/log/mysql/error.logແລະmysql-slow.logຜ່ານsudo truncate -s 0 /var/log/mysql/*.log. - ສຸດ
ext4, ແລ່ນsudo tune2fs -m 1 /dev/<partition>. - ຖ້າ
mysqldປະຈຸບັນໄດ້ຢຸດເຊົາແລະ/var/lib/mysql/ibtmp1(ພື້ນທີ່ຕາຕະລາງຊົ່ວຄາວທີ່ບໍ່ຖືກບີບອັດ) ແມ່ນໃຫຍ່ຫຼວງ,ibtmp1ຖືກສ້າງຄືນໃຫມ່ໂດຍອັດຕະໂນມັດໃນເວລາເລີ່ມຕົ້ນ, ຫຼືທ່ານສາມາດຍ້າຍ ** ສອງຫຼືສາມ ** ບັນທຶກຄູ່ທີ່ເກົ່າແກ່ທີ່ສຸດ (binlog.000001,binlog.000002- ບໍ່ເຄີຍເປັນ binlog ທີ່ມີການເຄື່ອນໄຫວສູງສຸດ) ກັບ/dev/shmດັ່ງນັ້ນຊົ່ວຄາວmysqldສາມາດ boot ໄດ້. - ເລີ່ມ MySQL ແລະລຶບບັນທຶກຖານສອງຢ່າງປອດໄພໂດຍໃຊ້ SQL (
PURGE BINARY LOGS): ເປັນຫຍັງເຈົ້າຕ້ອງໃຊ້ SQL ແທນrm /var/lib/mysql/binlog.*? ເນື່ອງຈາກວ່າ MySQL ຕິດຕາມທຸກຊື່ໄຟລ໌ບັນທຶກສອງໃນbinlog.index. ຖ້າທ່ານລຶບບັນທຶກຖານສອງດ້ວຍrmໂດຍບໍ່ມີການປັບປຸງbinlog.index, MySQL ຈະປະຕິເສດທີ່ຈະເລີ່ມຕົ້ນຫຼື replication ຈະແຕກ. ຄັ້ງດຽວmysqldເລີ່ມຕົ້ນ, ເຂົ້າສູ່ລະບົບ (sudo mysql) ແລະດໍາເນີນການ: (ຫຼືລຶບລ້າງທຸກຢ່າງຂຶ້ນກັບໄຟລ໌ບັນທຶກທີ່ເຄື່ອນໄຫວປະຈຸບັນທີ່ສະແດງຢູ່ລຸ່ມສຸດຂອງSHOW BINARY LOGS;ການນໍາໃຊ້PURGE BINARY LOGS TO 'binlog.000085';) - ** ຕັ້ງຂະຫນາດຂອງບັນທຶກຖານສອງຖາວອນແລະຫລວງການເກັບຮັກສາໄວ້ໃນ
/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:5Gibtmp1ທີ່max:5Gຮັບປະກັນວ່າ unindexed rogueJOINຫຼືORDER BYການສອບຖາມລົ້ມເຫລວກັບ atable is fullຄວາມຜິດພາດແທນທີ່ຈະຂະຫຍາຍibtmp1ຈົນກ່ວາເຄື່ອງແມ່ຂ່າຍ Linux ທັງຫມົດເສຍຊີວິດຢູ່ທີ່ 0 bytes ຟຣີ.
ໄລຍະທີ 5: ກູ້ຄືນຖານຂໍ້ມູນ SQLite3 ທີ່ເສຍຫາຍ (database or disk is full / SQLITE_FULL / malformed)¶
ແອັບພລິເຄຊັນທີ່ຝັງໄວ້, Docker containers (Nextcloud, Vaultwarden, Home Assistant, Plex, Grafana, Gitea), ແລະການບໍລິການມືຖື / desktop ແມ່ນອີງໃສ່ SQLite3. ເມື່ອດິສກ໌ຕີ 0 ໄບຕ໌ຟຣີ ໃນຂະນະທີ່ SQLite ຢູ່ເຄິ່ງກາງຂອງບັນທຶກການກັບຄືນ ຫຼືບັນທຶກການຂຽນລ່ວງໜ້າ (-wal) ດ່ານກວດກາ, ທ່ານຈະພົບກັບຫນຶ່ງໃນສອງກໍລະນີສຸກເສີນ:
1. ** ຂະຫນາດໃຫຍ່ .db-wal file bloat ** (ໄດ້ .db-wal ໄຟລ໌ໄດ້ເຕີບໂຕເຖິງ 10 gigabytes ໃນຂະນະທີ່ .db ໄຟລ໌ແມ່ນພຽງແຕ່ 200 megabytes, ເພາະວ່າຜູ້ອ່ານທີ່ໃຊ້ເວລາດົນນານໄດ້ປ້ອງກັນການກວດກາ WAL ແບບ passive, ແລະໃນປັດຈຸບັນ disk ແມ່ນເຕັມ 100 ເປີເຊັນ).
2. **RuntimeError: database disk image is malformed (SQLITE_CORRUPT) ** ເກີດຈາກຮາດແວແຕກ fsync(), ຕູ້ຄອນເທນເນີໄດ້ຂ້າ rollback ກາງຢູ່ທີ່ 0 bytes ຟຣີ, ຫຼືບາງຄົນທີ່ລຶບ -wal ຫຼື -journal ຍື່ນດ້ວຍມື.
Warning
** ຢ່າຍ້າຍ, ປ່ຽນຊື່, ຫຼືສຳເນົາ ກ .db ໄຟລ໌ດ້ວຍຕົວມັນເອງໃນຂະນະທີ່ອອກຈາກມັນ .db-wal (Write-Ahead Log) ຫຼື .db-journal (Rollback Journal) ໄຟລ໌ຫລັງ**: ຖ້າ app.db-wal ຫຼື app.db-journal ມີຢູ່ຄຽງຂ້າງ app.db, ໄຟລ໌ຄູ່ນັ້ນປະກອບດ້ວຍທຸລະກໍາທີ່ຫມັ້ນສັນຍາແລະຫນ້າ B-tree ຕົ້ນສະບັບທີ່ຕ້ອງການເພື່ອເຮັດໃຫ້ app.db ສອດຄ່ອງຕາມໂຄງສ້າງ. ສຳເນົາທັງສາມໄຟລ໌ສະເໝີ (app.db, app.db-wal, app.db-shm) ຮ່ວມກັນກ່ອນທີ່ຈະດໍາເນີນການຄໍາສັ່ງໃດໆ.
ຂັ້ນຕອນທີ 1: ຫຼຸດລົງ bloated .db-wal ໄຟລ໌ແລະສູນຍາກາດ SQLite ເມື່ອພື້ນທີ່ດິດຢູ່ໃກ້ກັບສູນ¶
- ຢຸດເຊົາການບັນຈຸຄໍາຮ້ອງສະຫມັກຫຼືບໍລິການທີ່ຖືຖານຂໍ້ມູນ SQLite ເປີດ (
sudo systemctl stop appຫຼືdocker stop container_name). - ສຳເນົາ
app.db,app.db-wal, ແລະapp.db-shmກັບ partition ຫຼື drive ພາຍນອກທີ່ມີພື້ນທີ່ຫວ່າງຫຼາຍ (ຫຼື 2x ຂະຫນາດຂອງຟຣີapp.dbຢູ່ໃນແຜ່ນທ້ອງຖິ່ນກ່ອນ). - ເປີດຖານຂໍ້ມູນດ້ວຍ
sqlite3CLI ແລະບັງຄັບຈຸດກວດກາ WAL ທີ່ຖືກຕັດ, ເຊິ່ງພັບກອບທີ່ຫມັ້ນສັນຍາທັງຫມົດຈາກapp.db-walເຂົ້າໄປໃນapp.dbແລະຫົດຕົວລົງapp.db-walເຖິງ 0 bytes: - ຢັ້ງຢືນ B-tree ແລະ freelist ຄວາມສົມບູນຂອງໂຄງສ້າງ:
ຖ້າມັນພິມ
ok, ຖານຂໍ້ມູນຂອງເຈົ້າມີສຸຂະພາບດີ 100 ເປີເຊັນ. - ** ວິທີການ
VACUUMຖານຂໍ້ມູນ SQLite ຂະໜາດໃຫຍ່ເມື່ອແຜ່ນທ້ອງຖິ່ນບໍ່ມີພື້ນທີ່ຫວ່າງພຽງພໍ**: ມາດຕະຖານVACUUM;ຮຽກຮ້ອງໃຫ້ສູງເຖິງ 2x ຂະຫນາດຖານຂໍ້ມູນ ໃນຊ່ອງແຜ່ນຟຣີໃນການແບ່ງປັນດຽວກັນແລະ/var/tmp. ແທນທີ່ຈະ, ໃຊ້VACUUM INTO(ແນະນໍາໃນ SQLite 3.27.0) ເພື່ອຂຽນສໍາເນົາທີ່ຫນາແຫນ້ນ, defragmented ສົດໆໂດຍກົງໃສ່ແຜ່ນທີ່ຕິດຕັ້ງແຍກຕ່າງຫາກຫຼືການແບ່ງປັນເຄືອຂ່າຍ:
ຂັ້ນຕອນທີ 2: ການກູ້ຄືນຕົ້ນໄມ້ B ທີ່ເສຍຫາຍ (database disk image is malformed) ກັບ .recover¶
ຖ້າ PRAGMA integrity_check; ບົດລາຍງານ row 412 missing from index, btreeInitPage() returns error code 11, ຫຼື database disk image is malformed:
- ** ຄັ້ງທໍາອິດພະຍາຍາມສ້າງດັດຊະນີມັດທະຍົມທີ່ແຕກຫັກຄືນໃຫມ່ (
REINDEX)**: ເລື້ອຍໆຂໍ້ມູນຕາຕະລາງຕົວຈິງ (table B-trees) ແມ່ນ 100 ເປີເຊັນ intact ແລະພຽງແຕ່ດັດຊະນີ B-tree ທີສອງໄດ້ຖືກເສຍຫາຍໃນເວລາທີ່ແຜ່ນເຕັມໄປ. ແລ່ນ:ຖ້າ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 ເປີເຊັນຂອງຖານຂໍ້ມູນຂອງທ່ານກັບສູນການສູນເສຍແຖວ. - ** ຖ້າ
REINDEXລົ້ມເຫລວ, ແລ່ນເຄື່ອງສະແກນ forensic B-tree (.recover)**: ແຕກຕ່າງຈາກເກົ່າ.dumpຄໍາສັ່ງ (ເຊິ່ງຢຸດການສົ່ງອອກຕາຕະລາງໃນຂະນະທີ່ມັນມົນຕີຕົວຊີ້ B-tree ທີ່ເສຍຫາຍ),.recover(ສ້າງຂຶ້ນໃນsqlite3ເວີຊັ່ນ 3.29.0+) ຂ້າມຕົວຊີ້ B-tree ພາຍໃນທີ່ເສຍຫາຍທັງໝົດ, ສະແກນທຸກໜ້າໃບດິບ 4 ກິໂລໄບຂອງໄຟລ໌ຕາມລຳດັບຈາກ byte 0 ຫາ EOF, ສ້າງທຸກແຖວທີ່ສາມາດອ່ານໄດ້, ແລະວາງບັນທຶກເດັກນ້ອຍກຳພ້າເຂົ້າໄປໃນlost_and_foundຕາຕະລາງ: - ກວດສອບຖານຂໍ້ມູນທີ່ສ້າງຂຶ້ນໃໝ່:
ກວດເບິ່ງວ່າ ກ
lost_and_foundຕາຕະລາງໄດ້ຖືກສ້າງຕັ້ງຂຶ້ນ (sqlite3 /mnt/external_usb/repaired_app.db ".tables") ເພື່ອກວດກາເບິ່ງແຖວເດັກກຳພ້າທີ່ກູ້ມາຈາກໜ້າໃບທີ່ບໍ່ໄດ້ເຊື່ອມຕໍ່. ສໍາລັບຖານຂໍ້ມູນ SQLCipher ທີ່ເຂົ້າລະຫັດໄວ້ (ເຊັ່ນ: Signal ຫຼື WhatsApp backup), ເບິ່ງຄູ່ມືສະເພາະຂອງພວກເຮົາກ່ຽວກັບ ການເຂົ້າລະຫັດ SQLite, Signal, ແລະ WhatsApp chat backup ສໍ້ລາດບັງຫຼວງແລະການສະກັດເອົາລະຫັດທ້ອງຖິ່ນ.
ໄລຍະທີ 6: ເຫດການສຸກເສີນ "Tripwire Ballast File" ແລະລາຍການກວດກາການປ້ອງກັນ¶
ເມື່ອເຄື່ອງແມ່ຂ່າຍແລະຖານຂໍ້ມູນຂອງທ່ານກັບມາອອນໄລນ໌, ປະຕິບັດການປົກປ້ອງສີ່ຢ່າງນີ້ທັນທີເພື່ອວ່າທ່ານຈະບໍ່ຕິດຢູ່ 0 bytes ຟຣີອີກເທື່ອຫນຶ່ງ:
- ** ສ້າງ 1 gigabyte (
1,073,741,824byte) Emergency Ballast File on every database partition**: Runsudo fallocate -l 1G /var/lib/EMERGENCY_DELETE_ME.ballast. ຖ້າເຄື່ອງແມ່ຂ່າຍເຄີຍ hits100%disk ເຕັມ, ແລ່ນsudo rm /var/lib/EMERGENCY_DELETE_ME.ballastປົດປ່ອຍ 1 gigabyte ຂອງຕັນຕິດກັນໃນ 1 millisecond. - ຫລວງ
systemd-journaldແລະບັນທຶກ Docker container ຢ່າງຖາວອນ: ຕັ້ງSystemMaxUse=200Mໃນ/etc/systemd/journald.confແລະ configure/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_slotslag**: ຕັ້ງຄ່າການຕິດຕາມ (node_filesystem_avail_bytesແລະnode_filesystem_files_free) ເພື່ອເຕືອນກ່ອນທີ່ຈະນໍາໃຊ້ຂ້າມ 85 ເປີເຊັນ.
ໝາຍເລກສຸກເສີນລະດັບພາກພື້ນ ແລະພິທີການຂອງອົງການ¶
ໃນຂະນະທີ່ດິສເຊີບເວີເຕັມທີ່ປົກກະຕິແມ່ນເປັນການສຸກເສີນໃນການດໍາເນີນງານ IT ພາຍໃນ, ການ outage ຜົນກະທົບຕໍ່ສຸຂະພາບ Electronic Health Record (EHR) ຖານຂໍ້ມູນ, ການສົ່ງສຸກເສີນ (CAD), ການວັດແທກນ້ຳ/ພະລັງງານຂອງເທດສະບານ, ຫຼືການມີຂໍ້ມູນສ່ວນຕົວຕາມກົດໝາຍອາດຈະຮຽກຮ້ອງໃຫ້ມີການເລັ່ງສຸກເສີນຢ່າງເປັນທາງການ:
- ** ສະຫະລັດແລະການາດາ **: ໂທ
911ຖ້າເຊີບເວີເກີດອຸບັດເຫດປິດການຕິດຕາມກວດກາທາງຄລີນິກ ຫຼືການຈັດສົ່ງ, ແລະກະຕຸ້ນຂັ້ນຕອນການຢຸດເຊົາງານ. ລາຍງານການສູນເສຍຊັບພະຍາກອນພື້ນຖານໂຄງລ່າງທີ່ສໍາຄັນຫຼືການໂຈມຕີ ransomware ກັບ CISA (1-844-Say-CISA/cisa.gov/report) ຫຼື ສູນການາດາສໍາລັບຄວາມປອດໄພ Cyber (1-833-CYBER-88). - ** ສະຫະລາດຊະອານາຈັກ **: ໂທ
999ສໍາລັບໄພຂົ່ມຂູ່ຕໍ່ຊີວິດຫຼືລະບົບ NHS ທີ່ສໍາຄັນ. ພາຍໃຕ້ກົດລະບຽບຂອງ GDPR ແລະ NIS ຂອງອັງກິດ, ປະເມີນວ່າການສູນເສຍຄວາມພ້ອມຂອງຖານຂໍ້ມູນແບບຖາວອນຕ້ອງການແຈ້ງການເຖິງ ICO (0303 123 1113) ພາຍໃນ 72 ຊົ່ວໂມງ. - ** ສະຫະພາບເອີຣົບ **: ໂທ
112ໃນທົ່ວປະເທດສະມາຊິກ EU ທັງຫມົດ. ໜ່ວຍງານທີ່ຈຳເປັນພາຍໃຕ້ NIS2 Directive ຈະຕ້ອງແຈ້ງ CSIRT ແຫ່ງຊາດຂອງເຂົາເຈົ້າພາຍໃນ 24 ຊົ່ວໂມງຫຼັງຈາກເກີດການຢຸດຢ່າງໃຫຍ່ຫຼວງ, ແລະການສູນເສຍຂໍ້ມູນສ່ວນຕົວແບບຖາວອນໂດຍບໍ່ມີການຟື້ນຟູຂໍ້ມູນສຳຮອງຈະເຮັດໃຫ້ເກີດ GDPR ມາດຕາ 33 ລາຍງານພາຍໃນ 72 ຊົ່ວໂມງ. - ** ອົດສະຕາລີແລະນິວຊີແລນ **: ໂທ
000ໃນອົດສະຕາລີຫຼື111ໃນນິວຊີແລນ; ຕິດຕໍ່ ACSC (1300 CYBER1) ສໍາລັບເຫດການພື້ນຖານໂຄງລ່າງ. - ** ອິນເດຍແລະອາຊີປາຊີຟິກ **: ໂທ
112ສໍາລັບການຕອບສະຫນອງສຸກເສີນ; ລາຍງານການຢຸດເຊົາທີ່ເກີດຈາກອິນເຕີເນັດກັບ CERT-In (incident@cert-in.org.in) ພາຍໃນປ່ອງຢ້ຽມ 6 ຊົ່ວໂມງບັງຄັບ.
ຄຳຖາມທີ່ມັກຖາມເລື້ອຍໆ¶
ເປັນຫຍັງ df -h ຢູ່ທີ່ 100% (0 Avail) ເຖິງແມ່ນວ່າຫຼັງຈາກຂ້າພະເຈົ້າລຶບໄຟລ໌ບັນທຶກ 50 GB ກັບ rm?¶
ໃນລະບົບໄຟລ໌ Linux, rm ໂທເທົ່ານັ້ນ ຍົກເລີກການເຊື່ອມຕໍ່(), ການຖອນຊື່ໄຟລ໌ອອກຈາກໄດເລກະທໍລີໃນຂະນະທີ່ kernel ຮັກສາການຈັດສັນແຜ່ນດິດຈົນກ່ວາທຸກຂະບວນການທີ່ຖືໄຟລ໌ນັ້ນເປີດປິດຕົວອະທິບາຍໄຟລ໌ຂອງມັນ (i_count == 0). ແລ່ນ sudo lsof +L1 ເພື່ອຊອກຫາ ID ຂະບວນການ (PID) ແລະຕົວອະທິບາຍໄຟລ໌ (FD) ຂອງ (ລຶບແລ້ວ) ໄຟລ໌, ຫຼັງຈາກນັ້ນດໍາເນີນການ sudo sh -c ': > /proc/PID/fd/FD' ໃຫ້ສູນຕັນຢູ່ໃນສະຖານທີ່ທັນທີໂດຍບໍ່ມີການ restart ການບໍລິການ.
ຈະເປັນແນວໃດຖ້າຂ້ອຍບໍ່ສາມາດ SSH ເຂົ້າໄປໃນເຄື່ອງແມ່ຂ່າຍເພາະວ່າ /tmp ຫຼື /var/run ແມ່ນ 100% ເຕັມແລະ sshd ປະຕິເສດການຈັດສັນເຊດຊັນບໍ?¶
ທໍາອິດໃຫ້ລອງປະຕິບັດຄໍາສັ່ງໂດຍກົງທີ່ບໍ່ແມ່ນ PTY ຜ່ານ SSH ໂດຍບໍ່ມີການຈັດສັນ pseudo-terminal ແບບໂຕ້ຕອບ: ssh -T root@server "sh -c ': > /var/log/syslog'". ຖ້າ ຮາກ ການເຂົ້າສູ່ລະບົບຖືກປິດໄວ້, ໃຊ້ console serial serial ຂອງຜູ້ໃຫ້ບໍລິການຄລາວຂອງທ່ານ (AWS EC2 Serial Console, DigitalOcean Console, Linode Lish, ຫຼື Proxmox/VMware VNC) ເພື່ອເຂົ້າສູ່ລະບົບໂດຍກົງໃນ ttyS0 ຫຼືບູດເຂົ້າໄປໃນຮູບແບບການຟື້ນຕົວຜູ້ໃຊ້ດຽວ.
ບາງຄົນໄດ້ລຶບໄຟລ໌ພາຍໃນ PostgreSQL ແລ້ວ pg_wal ໄດເລກະທໍລີກ່ອນທີ່ຈະອ່ານຄູ່ມືນີ້, ແລະໃນປັດຈຸບັນ PostgreSQL ປະຕິເສດທີ່ຈະເລີ່ມຕົ້ນດ້ວຍ PANIC: could not locate a valid checkpoint record. ຂໍ້ມູນທັງໝົດເສຍບໍ?¶
ບໍ່, ແຖວຕາຕະລາງສ່ວນຫຼາຍແມ່ນຍັງຢູ່ພາຍໃນ $PGDATA/ຖານ/, ເຖິງແມ່ນວ່າການເຮັດທຸລະກໍາໃນການບິນພາຍໃນໄຟລ໌ 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 hangs ຫຼືລົ້ມເຫຼວໃນ inode-ຫມົດ (df -i 100%) ເຊີບເວີ?¶
ເມື່ອໄດເລກະທໍລີມີເຊດຊັນນ້ອຍໆຫຼາຍລ້ານຄັ້ງ ຫຼືໄຟລ໌ cache, ດັດຊະນີໄດເລກະທໍລີຂອງມັນ (ຮຕ) ການຂະຫຍາຍຕົວຂະຫນາດໃຫຍ່, ເຊິ່ງກໍ່ໃຫ້ເກີດ 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 ຢ່າງໄວວາ.
ເປັນຫຍັງ Docker ຈຶ່ງຕື່ມຂໍ້ມູນໃສ່ແຜ່ນເຊີບເວີທັງໝົດຂອງຂ້ອຍເມື່ອກ່ອງບັນຈຸຂອງຂ້ອຍນ້ອຍໆ, ແລະຂ້ອຍຈະເຮັດຄວາມສະອາດໄດ້ແນວໃດ /var/lib/docker ປອດໄພບໍ?¶
Docker ສະສົມພື້ນທີ່ດິສກ໌ຢູ່ໃນບັນທຶກ JSON stdout ທີ່ບໍ່ໄດ້ຫມຸນ (/var/lib/docker/containers/*/*-json.log), dangling ວາງຊ້ອນ2 ຊັ້ນຮູບພາບ, ແລະ cache buildkit. ບໍ່ເຄີຍດ້ວຍຕົນເອງ rm -rf ໂຟນເດີພາຍໃນ /var/lib/docker/overlay2/. ທໍາອິດຕັດບັນທຶກ JSON (sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log) ດັ່ງນັ້ນ daemon ມີຫ້ອງຫາຍໃຈ, ຫຼັງຈາກນັ້ນແລ່ນ sudo docker ລະບົບ prune -a -f (ຍົກເວັ້ນ --ປະລິມານ ດັ່ງນັ້ນປະລິມານຖານຂໍ້ມູນຍັງຄົງ untouched).
ຂ້ອຍສາມາດຂະຫຍາຍ cloud EBS / persistent disk volume ດໍາລົງຊີວິດໃນຂະນະທີ່ເຄື່ອງແມ່ຂ່າຍຢູ່ທີ່ 100% disk utilization?¶
ແມ່ນແລ້ວ, ການຂະຫຍາຍປະລິມານອອນໄລນ໌ເຮັດວຽກໂດຍບໍ່ມີການ rebooting, ມີຫນຶ່ງຈັບ: script ຜູ້ຊ່ວຍ growpart /dev/nvme0n1 1 ພະຍາຍາມສ້າງໄຟລ໌ຊົ່ວຄາວໃນ /tmp ການນໍາໃຊ້ mktemp ແລະລົ້ມເຫລວຢູ່ທີ່ 0 bytes ຟຣີ. ຂ້າມຄວາມລົ້ມເຫລວນັ້ນໂດຍການແລ່ນ sudo TMPDIR=/dev/shm growpart /dev/nvme0n1 1 (ໃຊ້ RAM-backed /dev/shm mount) ຕາມດ້ວຍ sudo resize2fs /dev/nvme0n1p1 (ext4) ຫຼື sudo xfs_growfs / (XFS).
ຄູ່ມືທີ່ກ່ຽວຂ້ອງ¶
- ອຸບັດຕິເຫດ
rm -rfຫຼືShift+Deleteໃນ Linux, macOS, ຫຼື Windows: ເຊື່ອມຕໍ່ແບບອ່ານເທົ່ານັ້ນທັນທີ. - ການເຂົ້າລະຫັດ SQLite, Signal, ແລະ WhatsApp chat backup ສໍ້ລາດບັງຫຼວງແລະການສະກັດເອົາລະຫັດທ້ອງຖິ່ນ
- ໄຟລ໌ Word, Excel, PDF ແລະຖານຂໍ້ມູນເສຍຫາຍແລະການຟື້ນຕົວເອກະສານທີ່ບໍ່ໄດ້ບັນທຶກໄວ້
- ໂໝດອ່ານເທົ່ານັ້ນແບບກະທັນຫັນ SSD ແລະ NVMe, 0% ບລັອກສຳຮອງ, ແລະ TRIM ປິດໃຊ້ງານການກູ້ຂໍ້ມູນ
- ວິກິດການໂຮດເວັບ, ການເຄື່ອນຍ້າຍ, ແລະການຟື້ນຟູການສໍາຮອງຂໍ້ມູນ
- ຕົວເລກສຸກເສີນຕາມປະເທດ
ແຫຼ່ງຂໍ້ມູນແລະຄໍາແນະນໍາຢ່າງເປັນທາງການ¶
- PostgreSQL Global Development Group: PostgreSQL 16 ເອກະສານທີ່ເປັນທາງການ - ບົດທີ 30: ຄວາມໜ້າເຊື່ອຖື ແລະບັນທຶກການຂຽນລ່ວງໜ້າ (WAL Configuration, Replication Slots, and Recovery from Disk Full Failures).
- ສະມາຄົມ SQLite (
sqlite.org): ວິທີການເສຍຫາຍໄຟລ໌ຖານຂໍ້ມູນ SQLite (ການລັອກໄຟລ໌, ໄຟລ໌ວາລະສານທີ່ບໍ່ໄດ້ເຊື່ອມຕໍ່/ໄຟລ໌ WAL, ແລະ.recoverການຂະຫຍາຍ CLI). - Oracle Corporation / MySQL Documentation & MariaDB Foundation: *InnoDB Crash Recovery, Binary Log Purge Procedures (
PURGE BINARY LOGS), ແລະພື້ນທີ່ຕາຕະລາງຊົ່ວຄາວ (ibtmp1) ການຄຸ້ມຄອງ *. - ອົງການ Linux Kernel (
kernel.org): Ext4 ບໍລິຫານລະບົບໄຟລ໌ (tune2fsReserved Blocks, Inode Tables, ແລະ/proc/<pid>/fd/ການຕັດຕົວອະທິບາຍໄຟລ໌). - ສະຖາບັນມາດຕະຖານ ແລະ ເຕັກໂນໂລຊີແຫ່ງຊາດ (
NIST) (ສະຫະລັດ): ສິ່ງພິມພິເສດ 800-123: ຄູ່ມືກ່ຽວກັບຄວາມປອດໄພຂອງເຊີບເວີທົ່ວໄປ ແລະການຄຸ້ມຄອງການມີໃຫ້.