Koudink
Dalsi
Seznam
Predchozi
Autor: Tuttle (...) on 'Koudink'
Cas: So 7.2.2015 12:29.40
Titulek: UNIX tip: Smazane, ale stale pouzivane soubory

                                                                                 
Chtel bych se s vami podelit o ponekud neprijemna zjisteni a jak jsem
se s nimi vyrovnal. :-) 
 
Mel jsem nejaky ten rok zato, ze prikaz
 
     lsof +L1
 
vypise vsechny soubory, ktere jsou na UNIX/Linuxovem systemu smazane, 
ale stale zustavaji otevrene. Ke skutecnemu uvolneni diskovych bloku po 
poslednim unlinku dochazi az po zavreni souboru. Proces muze pouzivat smazanou 
verzi souboru jak dlouho chce. Pomoci symlinku v /proc/PID/fd se jde k obsahu 
smazaneho, ale neuvolneneho souboru dostat. Po zavreni toho handlu uz tezko... 
 
Nedavno jsem prekvapene zjistil, ze lsof klame telem... Jeste totiz muzou byt 
soubory otevrene mapovanim. A ty jsou mnohem zaludnejsi, protoze se tak 
"oteviraji" sdilene knihovny, ktere mohou zustat stare i po bezpecnostnich 
aktualizacich systemu, pokud se pouzivajici procesy nerestartuji!
 
lsof je vypisuje take, ale jinak: Ve sloupci FD je, jak zjistuju, slovo DEL. 
Nebo je mozne porovnat cislo ve sloupci NODE s i-nodem aktualniho souboru
v te ceste. Dalsi moznosti je pouzit tento prikaz:
 
     egrep -l '\(deleted\)$' /proc/*/maps | tr -cd 0-9\\n | xargs -r ps uw
 
Ten pekne vypise vsechny procesy s mapovanymi zastaralymi soubory. Vsimnete si 
tez hezkeho triku s tr. Pro standardne otevrene soubory lze pouzit toto:
 
     find -L /proc/[0-9]*/fd -maxdepth 1 -links -1 -printf "%h\n" 2>/dev/null \
     | tr -cd 0-9\\n | xargs -r ps uw
 
Zkombinovani obou kolon do jedne ponechme jako domaci cviceni. :-)
 
Sam vsak pouzivam v cronu toto:
 
     lsof | egrep ' DEL |\(deleted\)$' \
     | egrep -v -f /etc/allowed_deleted_but_used_files \
     | sed -e 's/^/DELETED-USED-FILE: /' 
 
V souboru /etc/allowed_deleted_but_used_files mam vzorky toho, o cem nechci 
byt informovan. Varovani: Tento soubor regularnich vyrazu nesmi obsahovat 
prazdny radek! Pro INSPIRACI nektere vzorky (ale radeji si vytvorte svuj 
soubor): 
 
^apache2 .* /var/run/apache2/(ssl_mutex|wsgi\.[0-9.]+\.lock) \(deleted\)$
^mysqld .* /var/tmp/ib...... \(deleted\)$
^imap .* /var/home/[^ ]+/dovecot(\.index|-uidlist) \(deleted\)$
^(apache2|sshd) .* /dev/zero$
 /SYSV[0-9a-f]{8}$
^(cron|sh|run-parts|curl|sh|gpg) .* (/var)?/tmp/tmpf...... \(deleted\)$
 
Muzete pouzit prepinac lsof -s pro vypsani sloupce s velikosti smazaneho 
souboru. Pokud pouzivate Linuxovou verzi lsof, optimalizujte jeho beh 
vynechanim sitovych spojeni (-X). Prepinac -R pro vypis PID rodicovskych 
procesu se taky muze hodit. 
 
Dosti se to hodilo dnes. Na stale podporovanem Debianu Squeeze LTS jsem 
nainstalovalaktualizace: 
 
[UPGRADE] libgssapi-krb5-2 1.8.3+dfsg-4squeeze8 -> 1.8.3+dfsg-4squeeze9
[UPGRADE] libgssrpc4 1.8.3+dfsg-4squeeze8 -> 1.8.3+dfsg-4squeeze9
[UPGRADE] libk5crypto3 1.8.3+dfsg-4squeeze8 -> 1.8.3+dfsg-4squeeze9
[UPGRADE] libkadm5clnt-mit7 1.8.3+dfsg-4squeeze8 -> 1.8.3+dfsg-4squeeze9
[UPGRADE] libkadm5srv-mit7 1.8.3+dfsg-4squeeze8 -> 1.8.3+dfsg-4squeeze9
[UPGRADE] libkdb5-4 1.8.3+dfsg-4squeeze8 -> 1.8.3+dfsg-4squeeze9
[UPGRADE] libkrb5-3 1.8.3+dfsg-4squeeze8 -> 1.8.3+dfsg-4squeeze9
[UPGRADE] libkrb5support0 1.8.3+dfsg-4squeeze8 -> 1.8.3+dfsg-4squeeze9
 
Mel jsem zato, ze aktualizacni proces restartuje procesy, ktere .so knihovny 
pouzivaji. Drive se to tak delavalo. Ale dnes tomu tedy tak nebylo... apache2, 
sshd, dovecot, kvm, ... vsechny takoveto nevinne procesy i po security 
aktualizaci (urgency=high) stale pouzivaly stare verze...
 
---
 
Tez jsem nasel, ze v Debianu/Ubuntu je balik debian-goodies, ktery mj. 
obsahuje skript checkrestart. Na Fedore je podobny: needs-restarting. Detekuje 
prave procesy se startymi knihovnami a pise doporuceni, co delat. Pridam si ho 
nyni to postupu updatovani baliku na svych serverech, abych se mi jeho cenne
informace aktivne cpaly. 
 
Mimochodem, zajimavost: lsof -P je sikovny prepinac pro vypis sitovych spojeni 
(-i). Dlouho jsem ho chtel: Vypne preklad cisel portu na nazvy, lepe se v tom 
pak hleda. Prepinac -n snad zna kazdy casty uzivatel lsof ci netstatu.
A posledni zajimavost, vedeli jste, ze uz par let existuje protokol c. 136
s nazvem UDPLITE? :-) 
 
Dekuji za pozornost, snad vam to k necemu bude.
Uvitam prispevky k tomuto tematu. :-)
 
Tuttle

Dalsi Seznam Predchozi


[ Domu | Prstik | O Piskovisti | Deticky | Nastenky | Koutky ]