Disk Server 100% Penuh (0 Byte Gratis): Ngawaliang Basis Data Sane Rusak Rikala rm miwah apt Gagal santukan kirangnyane inode/ruang¶
Nomor darurat matiosan manut panegara. Laman puniki nganggen 911, nomor sane kaanggen ring Amerika Serikat lan Kanada. Akeh panegara sane lianan nganggen 112, 999, utawi angka sane lianan. Rereh nomor negara Sametoné.
Manggihin indik server Linux produksi sampun keni 100% kawigunan disk (0 bytes free) utawi 100% kawigunan inode (df -i) ritatkala ngamargiang basis data PostgreSQL, MySQL/InnoDB, MariaDB, utawi SQLite sane aktif inggih punika silih sinunggil mode kegagalan sane pinih mabaya ring administrasi sistem. Ring nol byte utawi nol inode bebas, krisis punika gelis mamargi: kernel sistem operasi nenten malih prasida ngaryanin soket domain Unix ring /tmp utawi /var/run, bash gagal tab-lengkap santukan nenten prasida nyurat pipa cangkang sementara, apt utawi dnf nénten prasida mamargi anggén ngresikin paket santukan manajer paket merluang file kunci sementara, lan mesin basis data Sametoné ngadat ring tengahing Log Write-Ahead (WAL) pos pemeriksaan utawi nolak mati bersih santukan nenten prasida ngalokasiang blok 4 kilobyte (0,004 megabyte) tunggal antuk . .pid utawi ngunci berkas. Sane pinih kaon, administrator sane panik sering mamargi rm -rf /var/log/*.log ring file log multi-gigabyte lan nonton antuk rasa jejeh sakadi df -h kantun nglaporang 100% Use% (0 Avail), utawi ipun ngicalang pg_wal (pg_xlog) utawi ib_logfile0 mangda bebas genah, permanen ngrusak basis data sane nglintangin pemulihan transaksi. Yéning Sameton nénten sengaja ngicalang berkas basis data sané mabuat ritatkala jagi ngresikin, digelis mararian lan ngalih ka rm -rf sané nénten kasengaja utawi Shift-Icalang pasang malih sané wantah kawacén miwah ukiran inode; yéning piranti keras penyimpanan dasar Sametoné ngamedalang kaiwangan I/O utawi sampun ngunci raga nglawan nulis, konsultasiang SSD lan NVMe mode wantah kawacen nadak lan TRIM ngaonang penyelamatan utawi pemulihan berkas Word, Excel, PDF, miwah basis data sané rusak. Yéning matilar puniki ngranayang sistem keselamatan hidup rumah sakit, pengiriman darurat, utawi utilitas umum sané mabuat, hubungi nomer darurat lokal Sametoné (911 ring Amerika Serikat miwah Kanada, 112 ring sajebag Uni Eropa, 999 ring Inggris) utawi cingakin ring direktori global titiang saking nomer darurat.
Laksanayang niki mangkin¶
- Sampunang ngicalang
pg_wal/,pg_xlog/,pg_multixact/,ib_logfile*,undo_*, utawi-wal/-shmfile mangda ngawetuang ruang: Ngicalang file log Write-Ahead utawi InnoDB redo/undo ritatkala basis data kaon utawi nenten kacentang ngusak-asik wantah asiki rekaman halaman sane nenten komitmen lan ring penerbangan. Database sane madue disk sane jangkep 100 persen prasida kawaliang yening ruang sampun kabebasang; basis data sané berkas WALnyané kaicalang manual nganggénrmpacang keni B-tree sane nenten prasida kabalikang lan tumpukan korupsi. - Diagnosis ring 5 detik napiké Sameton sampun metu saking blok disk (
df -h), saking inode sistem berkas (df -i), utawi nahan berkas sané nénten mapaiketan (lsof +L1): - Jalanang
df -hmangda prasida nyelehin kapasitas blok miwahdf -imangda prasida nyelehin kapasitas inode. Server sane madue 50 gigabyte (53,6 miliar byte) ruang disk bebas tetep pacang ngentungangNo space left on device (ENOSPC)lamundf -inyinahangIUse% = 100%(ketahnyane kaawinang olih yutaan file sesi, cache, utawi spool mail sane alit). - Yéning
df -hnyinahang100%lad manggo (0 Avail) yadiastun sesampun ragane malaibrmring berkas log sané ageng, jalanangsudo lsof +L1. Berkas napi manten sané kaicalang nganggénrmsambilanganginx,rsyslog,docker,postgres, utawimysqldkari ngambel deskriptor file terbuka terus ngajeng 100 persen blok disk nyane ngantos proses restart utawi semeton ngetepang deskriptor langsung. - Bebasang gigabyte ruang ring 1 detik tanpa ngawitin malih daemon antuk ngetepang file sane kabukak ring genahnyane (
: > /path/to/logfileutawi: > /proc/<pid>/fd/<n>): - Daripada
rm /var/log/syslog(sane ngawinang blok kakunci olih logger sane mamargi), nol file ring genahnyane nganggen pengalihan nol cangkang:sudo sh -c ': > /var/log/syslog'utawisudo truncate -s 0 /var/log/syslog. - Yéning Sameton sampun malaib
rmring berkas log sané ageng miwahdf -hnénten tedun, rereh ID prosesnyané (PID) miwah deskriptor berkas (FD) ringsudo lsof +L1lan ngetepang langsung liwat antarmuka kernel procfs:sudo sh -c ': > /proc/<PID>/fd/<FD>'. Space pacang mawali kadf -hdigelis. - Bukak kunci ruang pernapasan darurat instan ring
ext4/ext3antuk nedunang persentase blok akar sane kacadangan (tune2fs -m 1: Manut default,ext4cadangan 5 persen saking makasami partisi (25 gigabytesring500 gigabytedisk) eksklusif anggénUID 0(root), tegesnyane layanan non-root sakadi .postgres(UID 109),mysql, miwahwww-datamukulNo space left on devicering 95 persen pemanfaatannyane. Reklamasi 80 persen cadangan punika online ring 1 detik antuk nol downtime antuk ngamargiangsudo tune2fs -m 1 /dev/sda1(utawi piranti blok akar Sametoné sakingfindmnt /). - Pakum
systemd-journaldlog biner lan tembolok paket sané sampun sue antuk aman: Jalanangsudo journalctl --vacuum-size=50M(sane aman maputaran lan ngresikin biner/var/log/journalarsip tedun ngantos 50 megabyte) miwahsudo apt-get clean(utawisudo dnf clean all), sané ngicalang sané sampun kaunduh.deb/.rpmarsip ring/var/cache/apt/archives/tanpa perlu nyurat ring database dpkg. - Sampun paling kidik 1 gigabyte ngantos 5 gigabyte (1,07 miliar ngantos 5,36 miliar byte) ruang bebas, bakta basis data munggah ring mode pangguna tunggal utawi pemulihan mangda muputang pos pemeriksaan WAL-nyane sadurung ngicenin lalu lintas klien: Ngiring PostgreSQL, MySQL / InnoDB, utawi SQLtehead iplajahin malih
WAL), siram halaman sane kotor ka file data utama, lan daur ulang segmen WAL sane kembungnyane mangda bersih sadurung mukak malih firewall aplikasi utawi server web ragane.
Danger
Sampunang naenin malaib pg_resetwal (utawi pg_resetxlog) ring PostgreSQL utawi innodb_force_recovery = 6 ring MySQL wantah santukan disk punika sampun madaging: Mamargi pg_resetwal ngusap pointer log transaksi lan maksa PostgreSQL ngawitin antuk halaman data sane kasurat setengah, nyamin ilang baris bisu, kunci utama duplikat, lan pohon B kunci asing sane pegat. Ring 99,9 persen basis data sane bek disk punika ngadat, wantah nglepasin 2 gigabyte ngantos 10 gigabyte (2,1 miliar ngantos 10,7 miliar byte) ruang ring partisi lan ngawitin daemon basis data biasane ngawinang pemulihan ngadat otomatis (REDO fase) mangda puput bersih antuk nol data sane ical.
Pohon kaputusan: server ruang nol miwah triage basis data sané runtuh¶
Anggén wit pamutus puniki anggén ngidentifikasi napi mawinan sistem operasi punika nglaporang ENOSPC (No space left on device) lan pilih jalur pemulihan sane nenten destruktif sane tepat:
flowchart TD
Start["Server utawi Basis Data sané Kacabut: Nénten wénten genah sané kantun ring piranti (ENOSPC)"] --> CheckDF["Jalanang: df -h LAN df -i"]
CheckDF --> DiagType{"Napi sané kalaporang olih df?"}
DiagType -->|"df -h Nyihnayang 100% Kawigunan (0 Manfaat) LAN df -i < 95%"| BlockFull["Blok Kehabisan: Priksa yening du -shx / Cocok df -h"]
DiagType -->|"df -h Nyihnayang GB Gratis NANGING df -i Nyihnayang 100% IUse"| InodeFull["Kehabisan Inode: Yutaan Berkas Alit 0-kantos-4KB"]
DiagType -->|"Makakalih df -h miwah df -i Tampilang < 90% Kaanggén"| RamOrQuota["Wates sané kaengkebang: Priksa df -h / tmp (RAM tmpfs bek), Lapisan Docker2, utawi Kuota Disk XFS / ext4"]
BlockFull --> GhostCheck{"Napike Sameton Sampun Ngamargiang rm ring File Ageng Tanpa df Dropping?"}
GhostCheck -->|"Inggih: du punika Joh Lebih Alit Tekening df"| UnlinkedFD["Jalanang: sudo lsof +L1 -> Getep Berkas Hantu liwat : > /proc/PID/fd/FD"]
GhostCheck -->|"Nénten: Berkas Asli Sedek Ngisi Disk"| EmergencySpace["Ngaryanin Ruang Pernapasan Langsung (1 GB ngantos 5 GB)"]
EmergencySpace --> Ext4Check{"Napiké Sistem Berkas punika ext4 / ext3?"}
Ext4Check -->|"Inggih"| Tune2fs["Jalankan: sudo tune2fs -m 1 /dev/akar_dev (Langsung Mebebaskan 4% Disk antuk Panganggen DB Non-Akar)"]
Ext4Check -->|"Nénten (XFS / Btrfs / ZFS)"| TruncLogs["Getep Log ring Genah (: > /var/log/syslog) lan Jalanang jurnalctl --ukuran-vakum=50M"]
InodeFull --> InodeClean["Rereh Direktori sane madaging Yutaan Berkas Nganggen rereh / -xdev -printf '%h\n' | nyorohang | unik -c | ngurutang -k 1 -r | sirah -20 -> Icalang antuk rereh -icalang"]
UnlinkedFD --> DBRecover["Lanturang ka Mesin Basis Data WAL & Pemulihan Pohon B"]
Tune2fs --> DBRecover
TruncLogs --> DBRecover
InodeClean --> DBRecover
RamOrQuota --> DBRecover
DBRecover --> WhichDB{"Mesin Database sané encen sané runtuh?"}
WhichDB -->|"PascagrebSQL"| PGFlow["Tetep pg_wal Utuh -> Ngawitin Postgres antuk Muter Ulang WAL -> Jalanang TITIK PEMERIKSAAN; -> Tedunang Slot Replikasi Basi"]
WhichDB -->|"SQL tiangé / MariaDB (InnoDB)"| MyFlow["Tetep ib_logfile* Utuh -> Ngawitin mysqld -> Bersihin Log Biner liwat BERSIHAN LOG BINER -> Optimalkan Tabel"]
WhichDB -->|"SQLite3"| SqFlow["-> Jalanang PRAGMA pos_pemeriksaan wal (TRUNCATE) utawi sqlite3 rusak.db '.pulih'"]
Tahap 1: Napi mawinan komando standar (rm, apt, tab-completion) gagal ring 0 byte gratis¶
Ritatkala partisi Linux keni 100 persen blok utawi inode sane telas, komando remediasi standar gagal antuk cara sane nenten kajangka:
- Néken Tab ring bash ngentungang cannot create temp file for here-document: No space left on device: Modéren bash-completion skrip ngaryanin berkas sementara ring /tmp. Lamun /tmp magenah ring akah / partisi gumanti tmpfs RAM mount, puput cangkang miwah heredocs (<<EOF) ten berasil. Gelis mecikang puniki antuk nunjuk TMPDIR ring RAM memori sané kaanggen sareng-sareng:
apt-get autoremove utawi dpkg --configure -a gagal sareng No space left on device: Pidan /boot utawi / sampun 100 persen bek, apt nénten prasida ngicalang kernel sané sampun sue santukan dpkg patut dumun nyurat status update ring /var/lib/dpkg/updates/. Tiosan punika, jalanang sudo apt-get clean (sané ngicalang paiketan cache .deb arsip ring /var/cache/apt/archives/ langsung), utawi ngetepang siki gambar kernel sané nénten kaanggén ring /boot (sudo sh -c ': > /boot/initrd.img-<old-unused-version>') anggén ngicénin dpkg megabyte (52,4 yuta byte) sane kabuatang mangda prasida mamargi sudo dpkg --purge linux-image-<old-unused-version>.
- rm /path/to/dir/* gagal sareng Argument list too long: Pidan df -i punika ring 100 persen santukan direktori sakadi . /var/lib/php/sessions madaging yutaan berkas alit, globbing wildcard (*) nglimpahin kernel ARG_MAX penyangga (2 megabytes) sadurung rm kakawitin. Anggén find sareng -delete sebalikné:
sane mabinayan sane ngawinang No space left on device (ENOSPC)¶
Sadurung ngusud file basis data napi manten, bandingang limang skenario puniki mangda prasida mastikayang sumber daya napi sané sujatinnyané sampun telas:
| Parintah Diagnostik | Gejala sané kaselehin | Akar Penyebab | Gelis mecikang 10 Detik |
|---|---|---|---|
df -h lawan sudo du -shx / |
df -h nyinahang 100% lad manggo (0 Avail), nanging du -shx / ngawewehin ngantos wantah 60% saking ukuran disk. |
Bukak Berkas sané nénten mapaiketan ("Berkas Hantu"): Wénten sané malaib rm ring log utawi file temp sané ageng rikala proses (nginx, java, postgres, docker) kari sampun mabuka. |
Jalanang sudo lsof +L1, rereh PID miwah FD saking (deleted) berkas, lan jalanang sudo sh -c ': > /proc/<PID>/fd/<FD>'. |
df -h nyinahang 95% sampun kaanggén, 0 Avail |
Used + Avail nénten pateh Size; root prasida nyurat berkas, nanging postgres utawi mysql polih ENOSPC. |
ext4 Blok Akar sané sampun kacadangan (5% default): ext4 nahan 5 persen blok saking panganggé sané nénten root (UID > 0) mangda nenten wenten lockout akar lan fragmentasi. |
Jalanang sudo tune2fs -m 1 /dev/<partition> mangda cadangan punika tedun saking 5 persen dados 1 persen digelis online. |
df -i |
df -h nyinahang genah kosong gigabyte, nanging df -i nyinahang IUse% = 100% (IFree = 0). |
Kecapetan Inode: ext4 madue jumlah inode sane tetep sane kakaryanin ring . mkfs dina; yutaan file sane alit sane kaajeng sabilang slot inode. |
Rereh folder sané iwang (sudo rereh / -xdev -printf '%h\n' \ | nyortir \ | unik -c \ | urutang -k 1 -r \ | sirah -10) and run sudo ngrereh /pelaku/dir -ketik f -hapus. |
sudo gunung \ | grep /margi |
du -sh /var/log punika alit, durung / madue 40 gigabyte genah sane kirang. |
Berkas sane kaengkebang ring sor Titik Gunung: Proses sane nyurat 40 gigabyte dados /mnt/backup sedeng drive eksternal punika kapasang, lan salanturnyane wenten sane masang disk ring duur saking /mnt/backup, mengkeb berkas sané dados dasar saking du. |
Iket-pasang sistem berkas akar ka tampilan sementara (sudo mkdir /dev/shm/rootview && sudo mount --bind / /dev/shm/rootview), meriksa du -sh /dev/shm/rootview/mnt/*, lan ngicalang berkas sané kaengkebang. |
btrfs filesystem df / |
df -h nyinahang 20 gigabyte gratis ring a Btrfs volume, durung nyurat gagal sareng ENOSPC. |
Btrfs Potongan Metadata sané sampun telas: Btrfs ngalokasiang genah dados potongan Data lan Metadata sane mabinayan; yening makasami ruang mentah sane nenten kaalokasiang kakunci dados potongan Data sane jarang, potongan Metadata keni 100 persen. |
Sementara nambahin piranti loop berkas 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 /), melaib sudo btrfs balance start -dusage=10 /, terus sudo btrfs device remove /dev/shm/btrfs_ram /. |
Fase 2: Ngambil malih genah disk antuk aman ring sor 60 detik¶
Sarengin pidabdab sané patut puniki mangda prasida ngambil malih pantaraning 500 megabyte miwah 50 gigabyte (0,53 miliar ngantos 53,6 miliar byte) ruang tanpa ngrusak proses aktif:
Langkah 1: Getep berkas sané sampun kaicalang ("hantu") saking /proc/<pid>/fd/¶
Yéning Sameton utawi skrip logrotate otomatis sampun ngicalang berkas ageng nanging genah disk nénten kawaliang, turéksain tabel berkas terbuka kernel sané nénten mapaiketan:
Cingakin ringSIZE/OFF kolom (kaukur antuk byte). Yéning Sameton nyingakin entri sakadi:
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, deskriptor berkas 7w -> 7) punika ngambel file log sane sampun kaicalang 18,2 gigabyte sane kabukak. Sampunang kill -9 proses basis data (mysqld utawi postgres) mangda bebas /tmp file yening prasida ngluputang genah ring genah tiosan dumun. Tiosan punika, nol deskriptor berkas log (PID 612, FD 7) langsung ring memori kernel:
Jalanang df -h digelis: samian 18,2 gigabyte kabebasang ring genah tanpa ngawitin malih layanan asiki.
Langkah 2: Reklamasi ext4 blok sané sampun kacadangan online nganggén tune2fs¶
Ring napi manten ext4 utawi ext3 sistem berkas, turéksain jumlah blok sané sampun kacadangan mangkin:
postgres),SQL Tiang (mysql), Redis (redis), miwah apl wéb SQLite (www-data, node) mamargi pinaka panganggen non-root sane nenten madue hak istimewa, kernel Linux ngablok ipun nganggen 5 persen sane kaping untat saking disk. Nedunang rasio blok sane kacadangan saking 5% ka 1% (utawi 0% rikala darurat aktif) mamargi langsung ring sistem berkas sané kapasang langsung:
Ring volume basis data 1 terabyte (1.000 gigabyte), komando tunggal puniki langsung nyerahang 40 gigabyte (42,9 miliar byte) ruang sane dados kasurat ring mesin basis data druene mawinan prasida muputang pos pemeriksaan WAL nyane. Sasampun krisis punika kapuputang lan data sane sampun sue kabersihin, waliang cadangan punika ka . 2% utawi 5% (sudo tune2fs -m 2 /dev/nvme0n1p1).
Langkah 3: Getep log teks aktif ring genah lan vakum journald¶
Rereh berkas sané pinih ageng ring sistem berkas root (tetep ring sistem berkas sané pateh sareng -xdev mangda semeton nenten nelasang galah scanning /proc utawi pasang ring jaba):
/var/log/nginx/access.log, /var/log/syslog, /var/log/postgresql/*.log, Doker *-json.log):
Sampunang pisan malaib rm ring berkas log sané aktif. Getep dados nol byte ring genahnyané mangda deskriptor berkas daemon tetep valid lan penunjuk offset kaatur malih antuk bersih:
sudo truncate -s 0 /var/log/nginx/error.log
sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log
systemd-journald log biner (/var/log/journal/):
Fase 3: Ngawaliang PostgreSQL sesampun 100% disk sane bek (pg_wal kembung)¶
Ritatkala server PostgreSQL telas genah ring disk, ipun ngrekam PANIC: could not write to file "pg_wal/xlogtemp.1234": No space left on device, digelis ngutang proses anak posmaster, lan nolak ngawitin.
Napi mawinan pg_wal (pg_xlog ring PostgreSQL 9.6 miwah sané dumunan) nagingin makasami disk¶
Ring operasi normal, PostgreSQL nyurat sabilang perubahan dados 16 megabyte (16,7 yuta byte) file segmen ring jero . $PGDATA/pg_wal/ tur daur ulang ipun sesampun soang-soang . CHECKPOINT apisan nglintangin max_wal_size. Nanging, PostgreSQL kalarang ngicalang utawi daur ulang sane sampun sue pg_wal berkas ring sor tigang syarat:
1. Slot Replikasi Fisik/Logis sane yatim piatu utawi katinggalan: Server replika (standby), penghubung Debezium/Kafka, utawi pg_receivewal klien sampun putus sambungan makudang-kudang rahina sané sampun lintang, nanging slot replikasinyané (pg_replication_slots) kantun active = false ring utama, nuntun PostgreSQL mangda ngukuhang sabilang segmen WAL sane kapolihang ngawit saking putus sambungan.
2. Gagal archive_command: archive_mode = on sampun kaaktipang ring postgresql.conf, miwah skrip cadangan (pgBackRest, WAL-G, Barman, utawi aws s3 cp) inggih punika ngewaliang kode pemargi sane nenten nol (contonyane, kunci S3 sane sampun kadaluwarsa utawi host cadangan sane nenten prasida kajangkau). PostgreSQL nyimpen sabilang segmen WAL sane nenten kaarsip ring pg_wal/ ngantos archive_command ngawaliang 0.
3. Buntu sané bek ring disk: pg_wal tumbuh ngantos 0 bytes tetep ring /var/lib/postgresql, lan mangkin PostgreSQL taler nenten prasida ngawitin ngelepasin slot replikasi utawi muputang pos pemeriksaan santukan pemulihan startup punika ngamerluang makudang-kudang megabyte ruang disk bebas anggen nyurat file negara sementara.
Langkah-langkah Penyelamatan ruang nol PostgreSQL (Nol Kerugian Data)¶
- Ngaryanin 1 gigabyte ngantos 5 gigabyte (1,07 miliar ngantos 5,36 miliar byte) ruang sementara ring jaba
pg_wal/: - Kapertama kaanggén
sudo tune2fs -m 0 /dev/<partition>miwah log teks sistem/PostgreSQL sane kagetep (sudo truncate -s 0 /var/lib/postgresql/*/main/log/*.logutawi/var/log/postgresql/*.log). - Sapunapi yening database punika madue partisi khusus soang-soang antuk log teks nol lan XFS (dadosnyane
tune2fsnénten wénten)? Pindahang 10 ka 20 saking sané pinih tua.readyutawi berkas sané nénten aktif saking direktori sané nénten WAL, utawi ngingsirangpg_waldirektori sementara ke partisi sane lianan antuk ruang kosong nganggen tautan simbolis:# 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 - Yéning
archive_commandsampun gagal lan ngablok daur ulang WAL, sementara ngelintangin punika ringpostgresql.conf: Yening target S3/cadangan semetone tedun lanpg_wal/archive_status/madaging panyiuan.readyberkas, éditpostgresql.conf(archive_command = '/bin/true') wantah pinaka pidabdab darurat sane kaping untat mangda disk punika nenten padem, uning semeton pastika ngambil sane segerpg_basebackupdigelis sesampun seger santukan rantai arsip WAL pacang madue celah. - Ngawitin PostgreSQL lan langsung nureksain slot replikasi:
Ngawitin PostgreSQL (
sudo systemctl start postgresql) lan nyambungang liwatsudo -u postgres psql: - Lempas slot replikasi mati/nenten aktif sane ngumpulang gigabyte WAL:
Yéning Sameton nyingakin slot sané nénten aktif (
active = f) sane ngambel 80 gigabyte saking .retained_wal: - Paksa mangda gelis
CHECKPOINTmangda prasida daur ulang sané kembungpg_walsegmen: Momen punikaCHECKPOINT;puput sesampun ngelepasin slot mati, PostgreSQL otomatis pacang ngicalang paiketan utawi daur ulang gigabyte file segmen 16 megabyte sane sampun sue ring warsa 2019.pg_wal/, ngawaliang panganggén disk Sametoné dados normal. - Cegah mati disk slot replikasi ring masa sane jagi rauh: Atur
max_slot_wal_keep_sizeringpostgresql.conf(wenten ring PostgreSQL 13+) ka topi sane aman (sakadimax_slot_wal_keep_size = 20GB) dadosnyane PostgreSQL ngaonang slot replika sane sampun padem bandingang ngaonang basis data utama ring 0 byte bebas.
Tahap 4: Ngawaliang MySQL / MariaDB (InnoDB) ring 0 byte gratis¶
Rikala MySQL utawi MariaDB keni 100% kawigunan disk (/var/lib/mysql), InnoDB warung samian nulis utawi ngadat antuk . [ERROR] [MY-012640] [InnoDB] Error number 28 means 'No space left on device'.
Nyelehin napi sané kadagingin /var/lib/mysql¶
Jalanang sudo du -sh /var/lib/mysql/* | sort -hr | head -n 15 mangda uning sira saking petang diri pelaku punika sane ngajeng piringan punika:
1. Log Biner sané nénten kawatesin (binlog.000001, mysql-bin.000042): Manut default ring MySQL 8.0+, pencatatan biner kaaktifang antuk retensi 30 rahina (binlog_expire_logs_seconds = 2592000), sane prasida dangan ngasilang ratusan gigabyte acara baris rikala impor massal.
2. Kuéri sané malaib nyurat tabel sementara raksasa (#sql* utawi ibtmp1): Sane masif GROUP BY utawi ORDER BY kuéri sampun kadagingin ibtmp1 utawi /tmp/#sql_* ngantos disk punika keni 0 byte.
3. Monolitik ibdata1 kembung ruang tabel sistem: Yéning innodb_file_per_table sampun nénten kaanggén utawi transaksi sané sampun sué mamargi ngawinang daftar riwayat InnoDB nénten kaanggén (undo log ring jero ibdata1 utawi undo_001) saking ngresikin.
4. Log kuéri alon utawi log kaiwangan MySQL (/var/log/mysql/mysql-slow.log).
Langkah-langkah penyelamatan ruang nol MySQL / MariaDB¶
- Sampunang pisan ngicalang
ibdata1,ib_logfile0,ib_logfile1,#innodb_redo/*, utawiundo_001sarengrm: Ngicalang file puniki ngawinang sabilang.ibdberkas tabel ring basis data Sametoné nénten prasida kawacén. - Ruang pangawit sané gratis (500 megabyte ngantos 2 gigabyte):
- Getep
/var/log/mysql/error.logmiwahmysql-slow.logliwatsudo truncate -s 0 /var/log/mysql/*.log. - Ring
ext4, melaibsudo tune2fs -m 1 /dev/<partition>. - Yéning
mysqldsane mangkin sampun kagentosin lan/var/lib/mysql/ibtmp1(ruang meja sementara tabel sane nenten kakompresi) punika ageng pisan,ibtmp1otomatis kakaryanin malih ritatkala ngawitin, utawi Sameton prasida ngingsirang kalih utawi tiga log biner sané pinih tua (binlog.000001,binlog.000002- nenten naenin binlog aktif sane nomornyane pinih tegeh) ka/dev/shmsementara punikamysqldprasida boot. - Ngawitin MySQL lan ngresikin log biner antuk aman nganggen SQL (
PURGE BINARY LOGS): Napi mawinan semeton patut nganggen SQL gumantirm /var/lib/mysql/binlog.*? Santukan MySQL nglacak sabilang wastan berkas log biner ringbinlog.index. Yéning Sameton ngicalang log biner nganggénrmtan nganyarangbinlog.index, MySQL pacang nulak ngawitin utawi replikasi pacang pegat. Apisanmysqldngawitin, ngranjing (sudo mysql) lan jalanang: (Utawi bersihin samian ngantos file log aktif sane mangkin kasinahang ring sorSHOW BINARY LOGS;nganggénPURGE BINARY LOGS TO 'binlog.000085';) - Atur ukuran log biner permanen lan topi retensi ring
/etc/mysql/mysql.conf.d/mysqld.cnf:Caping[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:5Gibtmp1ringmax:5Gmastikayang yéning rogue nénten kaindeksJOINutawiORDER BYkuéri gagal nganggéntable is fullkaiwangan gumanti nglimbakangibtmp1ngantos makasami server Linux padem ring 0 byte bebas.
Tahap 5: Ngawaliang basis data SQLite3 sane rusak (database or disk is full / SQLITE_FULL / malformed)¶
Aplikasi sané tertanam, wadah Docker (Nextcloud, Vaultwarden, Home Assistant, Plex, Grafana, Gitea), miwah layanan seluler/desktop ngandelang SQLite3. Rikala disk neked ring 0 byte bebas rikala SQLite wenten ring tengahing rollback jurnal utawi Log Tulis-Ahead (-wal) pos pemeriksaan, ragane pacang matemu sareng silih sinunggil saking kalih darurat:
1. Masif .db-wal berkas kembung (sane .db-wal berkas sampun tumbuh dados 10 gigabyte sedengkan .db file punika wantah 200 megabyte, santukan pangwacen sane sampun sue ngalanglangin pos pemeriksaan WAL pasif, lan mangkin disk punika sampun 100 persen bek).
2. RuntimeError: database disk image is malformed (SQLITE_CORRUPT) kaawinang olih piranti keras sané rusak fsync(), wadah sané kapademang ring tengahing rollback ring 0 byte bebas, utawi wénten sané ngicalang -wal utawi -journal berkas antuk tangan.
Warning
Sampunang pisan ngingsirang, ganti wastan, utawi nyalin .db berkas antuk ragannyane sinambi ninggalin .db-wal (Log Tulis-Maju) utawi .db-journal (Jurnal Mundur) berkas ring ungkur: Yéning app.db-wal utawi app.db-journal wenten ring samping app.db, file pendamping punika madaging transaksi sane sampun kajanjiang lan halaman B-tree asli sane kabuatang anggen ngaryanin . app.db ring sajeroning struktur sane sampun ajeg. Setata salin tetiga berkas punika (app.db, app.db-wal, app.db-shm) sareng-sareng sadurung ngamargiang komando napi manten.
Langkah 1: Nyusut sane kembung .db-wal file lan ngevakum SQLite ritatkala ruang disk nampek ring nol¶
- Mararian wadah aplikasi utawi layanan sane nahan basis data SQLite kabukak (
sudo systemctl stop apputawidocker stop container_name). - Salin
app.db,app.db-wal, miwahapp.db-shmka partisi utawi drive eksternal sane akeh madue genah kosong (utawi kosong 2x ukurannyaneapp.dbring disk lokal dumun). - Bukak basis data nganggén
sqlite3CLI lan maksa pos pemeriksaan WAL sane memotong, sane ngelipet makasami bingkai sane komitmen sakingapp.db-walke tengahapp.dbmiwah nyusutapp.db-walka 0 bait: - Verifikasi integritas struktural pohon B miwah daftar bebas:
Yéning sampun nyetak
ok, basis data semetone sampun 100 persen seger. - Cara
VACUUMbasis data SQLite sane ageng ritatkala disk lokal nenten madue ruang kosong sane cukup: StandarVACUUM;ngamerluang ngantos 2x ukuran basis data ring ruang disk bebas ring partisi sane pateh lan/var/tmp. Tiosan punika, anggénVACUUM INTO(kasobyahang ring SQLite 3.27.0) antuk nyurat salinan sane anyar sane sampun kapadat, defragmentasi langsung ring disk sane kapasang utawi saham jaringan sane mabinayan:
Langkah 2: Nyelametang B-tree sane rusak (database disk image is malformed) sareng .recover¶
Yéning PRAGMA integrity_check; laporan row 412 missing from index, btreeInitPage() returns error code 11, utawi database disk image is malformed:
- Kapertama indayang ngwangun malih indeks sekunder sane rusak (
REINDEX): Sering pisan data tabel sane sujati (table B-trees) sampun 100 persen utuh lan wantah indeks sekunder B-tree sane rusak ritatkala disk punika kadagingin. Melaib:Yéningsqlite3 /mnt/external_usb/copy_of_app.db "REINDEX;" sqlite3 /mnt/external_usb/copy_of_app.db "PRAGMA integrity_check;"PRAGMA integrity_check;mangkin mawaliok, Sameton sampun ngamolihang 100 persen basis data Sameton antuk baris sané ilang nol. - Yéning
REINDEXgagal, jalanang pemindai pohon B forensik (.recover): Nénten sakadi sané lingsiran.dumpkomando (sane ngreredang ngekspor tabel ritatkala ipun keni pointer B-tree sane rusak),.recover(kawangun dadossqlite3versi 3.29.0+) ngelintangin penunjuk B-tree interior sane rusak makasami, memindai sabilang halaman daun mentah 4 kilobyte file manut urutan saking byte 0 ngantos EOF, marekonstruksi sabilang baris sane prasida kawacen, lan ngenahang rekaman yatim piatu napi manten dadoslost_and_foundmeja: - Vérifikasi basis data sané anyar karekonstruksi:
Priksa yéning a
lost_and_foundtabel sampun kakaryanin (sqlite3 /mnt/external_usb/repaired_app.db ".tables") jagi nureksain barisan yatim piatu napi manten sane kapolihang saking halaman don sane nenten mapaiketan. Antuk basis data SQLCipher sane kaenkripsi (sakadi cadangan Signal utawi WhatsApp), cingakin panduan khusus titiang ring SQLite sane kaenkripsi, Sinyal, lan korupsi cadangan obrolan WhatsApp lan ekstraksi kunci lokal.
Tahap 6: Darurat "Berkas Balast Tripwire" & daftar periksa pencegahan monitoring¶
Sesampun server lan basis data semetone mawali online, laksanayang petang pengamanan puniki digelis mangda semeton nenten naenin terjebak ring 0 byte gratis malih:
- Ngaryanin 1 gigabait (
1,073,741,824byte) Berkas Balast Darurat ring sabilang partisi basis data: Jalankansudo fallocate -l 1G /var/lib/EMERGENCY_DELETE_ME.ballast. Yéning server punika naenin keni100%disk bek, sedek mamargisudo rm /var/lib/EMERGENCY_DELETE_ME.ballastnglepasin 1 gigabyte blok sane mapaiketan ring 1 milidetik. - Topi
systemd-journaldlan log wadah Docker permanen: AturSystemMaxUse=200Mring/etc/systemd/journald.confmiwah ngatur/etc/docker/daemon.jsonsareng"log-opts": {"max-size": "20m", "max-file": "3"}. - Isolasi
/var/log,/tmp, miwah/var/lib/postgresqlring volume LVM sané mabinayan: Nyimpen/var/logmiwah/tmpmapasahan sareng volume basis data mastikayang log web sane lari nenten naenin ngaonang basis data utawi ngunci login SSH. - Painget ring KALIH
df -h(> 80%) MIWAHdf -i(> 80%) tambahpg_replication_slotslag: Konfigurasiang pengawasan (node_filesystem_avail_bytesmiwahnode_filesystem_files_free) mangda waspada sadurung pemanfaatan nglintangin 85 persen.
Nomor darurat daerah miwah protokol lembaga¶
Sedek disk server sane jangkep biasane darurat operasi IT internal, pemadaman sane mapangaruh ring perawatan kesehatan Catatan Kesehatan Elektronik (EHR) basis data, pengiriman darurat (CAD), telemetri toya/daya kota, utawi ketersediaan data pribadi sane manut hukum minab ngamerluang eskalasi darurat formal:
- Amerika Serikat miwah Kanada: Telpon
911yening wenten server sane ngadat ngaonang monitoring utawi pengiriman klinis, lan ngaktifang prosedur downtime. Laporang sumber daya infrastruktur kritis sane sampun telas utawi serangan ransomware ring CISA (1-844-Say-CISA/cisa.gov/report) utawi Pusat Keamanan Siber Kanada (1-833-CYBER-88). - Inggris Raya: Telpon
999antuk ancaman ring kahuripan utawi sistem NHS sane kritis. Ring sor Peraturan GDPR lan NIS Inggris, ngukur napike ketersediaan basis data permanen sane ical ngamerluang pawarah-warah majeng ring ICO (0303 123 1113) ring sajeroning 72 jam. - Uni Eropa: Telpon
112ring makasami negara anggota UE. Entitas esensial ring sor NIS2 Direktif mangda nguningayang ring CSIRT nasionalnyane ring 24 jam saking pemadaman sane signifikan, lan ilangnyane data pribadi permanen tanpa pemulihan cadangan memicu pelaporan GDPR Pasal 33 ring 72 jam. - Australia miwah Selandia Baru: Telpon
000ring Australia utawi111ring Selandia Baru; hubungi ACSC (1300 CYBER1) antuk kejadian infrastruktur sane wenten. - India miwah Asia-Pasifik: Telpon
112anggen tanggap darurat; nglaporang indik matilar saking siber ring CERT-In (incident@cert-in.org.in) ring jendela wajib 6 jam.
Pitakén sané sering katakénang¶
Napi mawinan df -h tetep ring 100% (0 Avail) yadiastun sampun tiang ngicalang file log 50 GB antuk . rm?¶
Ring sistem berkas Linux, rm wantah nelpon ngilangang tautan(), ngicalang wastan berkas saking direktori rikala kernel nyimpen blok disk sane kaalokasiang ngantos sabilang proses sane nahan berkas punika kabukak nutup deskriptor berkasnyane (tiang_ngitung == 0). Jalanang sudo lsof +L1. anggén ngrereh ID Proses (PID) miwah Deskriptor Berkas (FD) saking (kaicalang) berkas, raris jalanang sudo sh -c ': > /proc/pid/fd/fd' mangda nol blok ring genahnyane digelis tanpa ngawitin malih layanan.
Sapunapi yening tiang nenten prasida malah SSH ke server santukan . /tmp utawi /var/run sampun 100% jangkep miwah sshd nolak ngalokasiang sesi?¶
Kapertama indayang laksanayang komando langsung non-PTY ring SSH tanpa ngalokasiang pseudo-terminal interaktif: ssh -T akar@pelayanan "sh -c ': > /var/log/syslog'". Lamun akah login nénten kaanggén, anggén konsol serial ring jaba pita panyedia awan Sametoné (Konsol Serial AWS EC2, Konsol DigitalOcean, Linode Lish, utawi Proxmox/VMware VNC) anggén ngranjing langsung ring TtyS0 utawi boot ka mode pemulihan panganggé tunggal.
Wénten sané sampun ngicalang berkas ring jeroning PostgreSQL pg_wal direktori sadurung ngwacen panduan puniki, lan mangkin PostgreSQL nolak ngawitin antuk . PANIC: could not locate a valid checkpoint record. Napiké data makasami ical?¶
Nénten, akéhan baris tabel kantun wénten ring tengah $Data PG/dasar/, yadiastun transaksi ring penerbangan ring jero file WAL sane kaicalang ical lan makudang-kudang halaman minab sobek. Kapertama makarya salinan sane jangkep saking makasami . $DataPG direktori (cp -a / var / lib / pasca progresql / 16 / utama / mnt / cadangan / pgdata_mentah). Raris malaib sudo -u pascapangkesan /usr/lib/pascapangkesan/16/bin/pg_resetwal -f /var/lib/pascapengembangan/16/utama, ngawitin PostgreSQL ring mode panganggé tunggal, lan langsung jalanang pg_tembok dados inisialisasi sané anyar (initdb) klaster; sampunang naenin nglanturang ngamargiang lalu lintas produksi ring kluster sesampun pg_ngatur malih.
Sapunapi carane ngicalang yutaan berkas alit ritatkala rm -rf gantung utawi gagal ring inode-telas (df -i 100%) server?¶
Ritatkala direktori madaging yutaan file sesi utawi cache sané alit, indeks direktorinyané (hpohon) mentik ageng, ngawinang . ls miwah rm -rf mangda prasida ngrereh wastan berkas ring RAM. Tiosan punika, jalanang sudo rereh /jalan/ka/juta_berkas -dalem pikayunan 1 -hapus, utawi ngaryanin direktori RAM sané kosong (mkdir /panglimbak/shm/kosong) lan jalanin sudo rsync -a -- ngicalang / dev / shm / kosong / / jalur / ka / yutaan_berkas / mangda prasida gelis nglepasin inodes.
Napi mawinan Docker ngebekin makasami disk server tiange rikala wadah tiange padidi alit, lan sapunapi carane tiang ngresikin . /var/lib/docker rahayu?¶
Docker mupulang genah disk ring log stdout JSON sané nénten kagilir (/var/lib/doker/wadah/*/*-json.log), menjuntai lapisan2 lapisan gambar, miwah tembolok buildkit. Nénten ja manual rm -rf map ring tengah /var/lib/doker/tumpukan2/. Kapertama getep log JSON (/var/lib/dokker/wadah/*/*-json.log) dadosne daemon punika madue ruang napas, lantas lari . sistem docker sudo ngraut -a -f (ngilangang --jilid dadosnyane volume basis data tetep nenten kagentosin).
Punapike titiang prasida nglimbakang EBS awan/volume disk sane tetep langsung rikala server wenten ring 100% pemanfaatan disk?¶
Inggih, ekspansi volume online mamargi tanpa reboot, antuk asiki tangkapan: naskah panulung bagian tumbuh /panglimbakan/nvme0n1 1 nyobak ngaryanin berkas sementara ring /tmp nganggén mktemp lan gagal ring 0 byte bebas. Lintangin kegagalan punika antuk ngamargiang sudo TMPDIR = / panglimbak / shm bagian tumbuh / panglimbak / nvme0n1 1 (nganggé sané kadukung olih RAM /panglimbak/shm gunung) kasarengin antuk sudo ngubah ukuran2fs / panglimbakan / nvme0n1p1 (ext4) utawi sudo xfs_tumbuh / (XFS).
Panuntun sané mapaiketan¶
- Tan kasengaja
rm -rfutawiGeser+Icalangring Linux, macOS, utawi Windows: langsung pasang malih wantah kawacén - Korupsi cadangan obrolan SQLite, Sinyal, miwah WhatsApp sané kaenkripsi miwah ekstraksi kunci lokal
- Berkas Word, Excel, PDF, miwah basis data sané rusak miwah pamulihan dokumen sané durung kasimpen
- SSD lan NVMe mode wantah kawacen nadak, 0% blok cadangan, lan TRIM menonaktifkan penyelamatan
- Krisis hosting wéb, migrasi, miwah pamulihan cadangan
- Nomor darurat manut panegara
Sumber miwah tuntunan resmi¶
- Kelompok Pengembangan Global PostgreSQL: Dokumentasi Resmi PostgreSQL 16 - Bab 30: Keandalan lan Log Tulis-Ahead (Konfigurasi WAL, Slot Replikasi, lan Pemulihan Saking Kegagalan Penuh Disk).
- Konsorsium SQLite (
sqlite.org): Cara Ngrusak Berkas Database SQLite (Penguncian Berkas, Berkas Jurnal/WAL Sane Tan Kahubungan, lan.recoverEkstensi CLI). - Perusahaan Oracle / Dokumentasi MySQL & Yayasan MariaDB: Pemulihan Kecelakaan InnoDB, Prosedur Pembersihan Log Biner (
PURGE BINARY LOGS), miwah Ruang Meja Sementara (ibtmp1) Pangelolaan. - Organisasi Kernel Linux (
kernel.org): Administrasi Sistem Berkas Ext4 (tune2fsBlok sané sampun kacawis, Tabel Inode, miwah/proc/<pid>/fd/Pemotongan Deskriptor Berkas). - Lembaga Standar lan Teknologi Nasional (
NIST) (Amerika Serikat): Publikasi Khusus 800-123: Panuntun Keamanan Server Umum lan Manajemen Ketersediaan.