dil: (Default)
dil ([personal profile] dil) wrote2005-04-14 05:41 pm

Задача для линуксовых сисадминов


Дано: обычный линукс. На нем работает демон и пишет логи в файл. По несчастливой случайности ротирующий скрипт стёр запись о файле из директории. Но демона не перезапустил, поэтому демон продолжает писать в тот же файл.
Задача: прочитать данные из этого файла.

Решившие задачу безработные (или желающие сменить место работы) сисадмины могут присылать резюме.
tobotras: (Default)

[personal profile] tobotras 2005-04-14 01:51 pm (UTC)(link)
Черт, почему я не безработный сисадмин?...

[identity profile] scarabeus.livejournal.com 2005-04-14 02:05 pm (UTC)(link)
совсем навскидку - в /proc//fd перечислены все дескрипторы, открытые процессом. Можно жрать оттуда.

- пид писающего демона.

[identity profile] scarabeus.livejournal.com 2005-04-14 02:06 pm (UTC)(link)
/proc/pid/fd, естественно.

(no subject)

[identity profile] sha90w.livejournal.com - 2005-04-14 14:07 (UTC) - Expand

(no subject)

[identity profile] motto.livejournal.com - 2005-04-14 14:11 (UTC) - Expand

(no subject)

[identity profile] scarabeus.livejournal.com - 2005-04-14 14:25 (UTC) - Expand

(no subject)

[identity profile] dil.livejournal.com - 2005-04-14 14:34 (UTC) - Expand

(no subject)

[identity profile] dil.livejournal.com - 2005-04-14 14:35 (UTC) - Expand

(no subject)

[identity profile] jerom.livejournal.com - 2005-04-14 15:26 (UTC) - Expand

(no subject)

[identity profile] jerom.livejournal.com - 2005-04-14 19:26 (UTC) - Expand

[identity profile] bobuk.livejournal.com 2005-04-14 02:58 pm (UTC)(link)
Копирайты! Копирайты!

(Anonymous) 2005-04-14 03:16 pm (UTC)(link)
если много времени - идем сюда и читаем http://www.tldp.org/HOWTO/Ext2fs-Undeletion.html
если мало времени - то сюда http://recover.sourceforge.net/linux/recover/
удачи

[identity profile] jerom.livejournal.com 2005-04-14 03:20 pm (UTC)(link)
Ну вот так:
lsofом найду inode, потом:
debugfs /dev/hda3
debugfs: cat <196511>

[identity profile] jerom.livejournal.com 2005-04-14 03:21 pm (UTC)(link)
тьфу
debugfs: cat <196511>

Ну cat не обязательно, есть другие команды в man debugfs.

[identity profile] dil.livejournal.com 2005-04-14 06:37 pm (UTC)(link)
Так тоже можно, но есть горазздо более простой способ

хы

[identity profile] bormotov.livejournal.com 2005-04-14 03:29 pm (UTC)(link)
а пока безработные или желающие сменить работу амины будут рещать задачу, вы бите следить, чтоб демон не помер и продолжал писать тот самый лог? :)))

Re: хы

[identity profile] dil.livejournal.com 2005-04-14 06:38 pm (UTC)(link)
Не, мы её уже решили :)

[identity profile] webushka.livejournal.com 2005-04-14 04:14 pm (UTC)(link)
Просто lsof'ом посмотреть какой inode использует демон для этого файла и по нему к файлу обратиться. Да хотя б линк на него кинуть.

[identity profile] dil.livejournal.com 2005-04-14 06:39 pm (UTC)(link)
это работающий, но длинный способ. есть гораздо более простой.

[identity profile] anatolix.livejournal.com 2005-04-14 04:25 pm (UTC)(link)
Я не админ и совершенно ничего не понимаю в администрировании Linux.
Но случайно его нельзя прочитать из /proc/[pid]/fd ?

[identity profile] dil.livejournal.com 2005-04-14 06:47 pm (UTC)(link)
Ага, ответ правильный :)

[identity profile] sigterm.livejournal.com 2005-04-14 04:55 pm (UTC)(link)
тоже мне, Бином Ньютона ;)
по шагам для 2.6 (на другом лень проверять):
1) находим pid процесса. Далее pid
2) cd /proc//task//fd
3) ls -l | grep deleted. Пусть выдало n
4) cat n >>/path/to/real/file

[identity profile] sigterm.livejournal.com 2005-04-14 04:58 pm (UTC)(link)
2) похоже побился. Следует читать:
cd /proc/pid/task/pid/fd

[identity profile] http://users.livejournal.com/mak_/ 2005-04-14 05:21 pm (UTC)(link)
а что рассматривается в качестве подручных средств?
debugfs и -d? или там gdb и вставление в демона кода типа seek 0; read src; write dst? или стоит какая-нибудь экзотика типа http://amadeus.uprm.edu/~undelete/ ?

[identity profile] dil.livejournal.com 2005-04-14 06:46 pm (UTC)(link)
есть гораздо более простой способ

разве сложно?

[identity profile] gong.livejournal.com 2005-04-14 05:47 pm (UTC)(link)
Как я ненавижу линукс, а?!

Варианты для извращенцев (кодеров) и для тупых людей (админов): через gdb и через файловую систему.

(Типа задачи про место и время умерщвления мухи и двух поездов.)

Первых я ненавижу, поэтому этот шаг опустим.

Второй, для тупых. Вызнаём lsof-ом по имени процесса $pid и открытый номер $fd, лезем тупо в норку /proc/$pid/fd/$fd и шарим там кочергой.

После чего спасаемся бегством.

[identity profile] algm.livejournal.com 2005-04-14 06:18 pm (UTC)(link)
А я знаю!
Проверил... действительно, блин, читается!

[identity profile] alz421.livejournal.com 2005-04-14 06:37 pm (UTC)(link)
Огласите весь спсок вакансий пжалссста! ;)

[identity profile] dil.livejournal.com 2005-04-14 06:48 pm (UTC)(link)
http://company.yandex.ru/inside/job/index.xml

[identity profile] int21h.livejournal.com 2005-04-14 06:59 pm (UTC)(link)
Разрешите присоединиться к вашему компетишену:

Решившие эту задачу под фрибзд 4-х программисты, могут присылать резюме нам (http://mail.ru) ;)

[identity profile] dil.livejournal.com 2005-04-14 07:40 pm (UTC)(link)
Не, вы себе сами задачки придумывайте :)
Хотя в общих чертах я себе этот процесс представляю, надо будет попробовать вживую.
А сколько у вас денег дают?

(no subject)

[identity profile] int21h.livejournal.com - 2005-04-14 20:14 (UTC) - Expand

(no subject)

[identity profile] sigterm.livejournal.com - 2005-04-15 05:13 (UTC) - Expand

(no subject)

[identity profile] bobuk.livejournal.com - 2005-04-14 20:29 (UTC) - Expand

(no subject)

[identity profile] dil.livejournal.com - 2005-04-15 04:00 (UTC) - Expand

(no subject)

[identity profile] icelord.livejournal.com - 2005-04-15 07:33 (UTC) - Expand

(no subject)

[identity profile] bobuk.livejournal.com - 2005-04-15 08:34 (UTC) - Expand

(no subject)

[identity profile] dil.livejournal.com - 2005-04-15 09:00 (UTC) - Expand

(no subject)

[identity profile] lazyreader.livejournal.com - 2005-04-15 09:50 (UTC) - Expand

(no subject)

[identity profile] dil.livejournal.com - 2005-04-15 20:16 (UTC) - Expand

(no subject)

[identity profile] lazyreader.livejournal.com - 2005-04-17 20:19 (UTC) - Expand

(no subject)

[identity profile] int21h.livejournal.com - 2005-04-15 05:03 (UTC) - Expand

(no subject)

[identity profile] bobuk.livejournal.com - 2005-04-15 08:34 (UTC) - Expand

[identity profile] webushka.livejournal.com 2005-04-14 07:28 pm (UTC)(link)
Что-то мне в голову никаких больше более-менее файлосистемнонезависимых способов не приходит. Ну разве только mc уже научился делать undelete на любых файловых системах :)

[identity profile] dil.livejournal.com 2005-04-14 07:42 pm (UTC)(link)
Хинт: существенно, что это линукс.
Насчет любых fs я не знаю, подразумеваются систмы с юниксовой логикой работы, в частности, родные ext2/ext3, когда удаленный из директории файл не удаляется с диска физически, пока его не закроет последний процесс.

[identity profile] webushka.livejournal.com 2005-04-14 07:50 pm (UTC)(link)
О, боги, какой я тормоз :))) Действительно, очень простой способ.
Например cat /proc//fd/ ?

[identity profile] dil.livejournal.com 2005-04-14 07:58 pm (UTC)(link)
Во-о-от!

[identity profile] alexkuklin.livejournal.com 2005-04-14 09:16 pm (UTC)(link)
/proc/$pid/fd/что-то
как-то я оттуда инфу доставал...

[identity profile] dil.livejournal.com 2005-04-15 04:02 am (UTC)(link)
Ага :)

[identity profile] ex-sighup150.livejournal.com 2005-04-14 09:20 pm (UTC)(link)
Ну, к примеру -- посмотреть lsof'ом номер открытой inode'ы и debugfs'ом (если дело на ext2/3) либо сдампить её, либо сделать еще один линк.
Приходят в голову также и экзотические решения, включающие аттач к демону ptrace()'ом с помощью gdb и вызовы read() :)

[identity profile] dil.livejournal.com 2005-04-15 04:01 am (UTC)(link)
Это сложный способ. А есть простой.

[identity profile] ex-sighup150.livejournal.com 2005-04-15 07:09 am (UTC)(link)
Зануда :)
Ну, можно посмотреть в /proc/
[Error: Irreparable invalid markup ('<pid демона>') in entry. Owner must fix manually. Raw contents below.]

Зануда :)
Ну, можно посмотреть в /proc/<pid демона>/fd/<какой там у него fd для этого файла>
Но это совершенно неспортивно :)

[identity profile] dil.livejournal.com 2005-04-15 08:01 am (UTC)(link)
Ну. А дальше?

[identity profile] alexkuklin.livejournal.com 2005-04-15 07:53 am (UTC)(link)
(заинтересованно) таки что вы можете предложить? :)))))

[identity profile] int21h.livejournal.com 2005-04-15 08:53 am (UTC)(link)
Таки где ж решение, а то прямо и не знаю чего предлагать :)

(no subject)

[identity profile] alexkuklin.livejournal.com - 2005-04-15 09:03 (UTC) - Expand

(no subject)

[identity profile] dil.livejournal.com - 2005-04-15 09:13 (UTC) - Expand

(no subject)

[identity profile] aklyachkin.livejournal.com - 2005-04-15 11:17 (UTC) - Expand

(no subject)

[identity profile] jerom.livejournal.com - 2005-04-15 11:57 (UTC) - Expand

(Anonymous) 2005-04-15 09:17 am (UTC)(link)
cd /proc/`pidof daemon/fd/;
cat `ls -l | grep deleted | awk '{print $9}'`

// Mon :-)

[identity profile] icelord.livejournal.com 2005-04-15 09:40 am (UTC)(link)
хм, на заскриненое на дает ответить, а ты ответ хочешь... в общем
lsof.../proc/NNN ... дальше рассказывать?

Page 1 of 2