Thursday, April 14th, 2005 05:41 pm

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

Решившие задачу безработные (или желающие сменить место работы) сисадмины могут присылать резюме.
Page 1 of 3 << [1] [2] [3] >>
Thursday, April 14th, 2005 01:51 pm (UTC)
Черт, почему я не безработный сисадмин?...
Thursday, April 14th, 2005 02:05 pm (UTC)
совсем навскидку - в /proc//fd перечислены все дескрипторы, открытые процессом. Можно жрать оттуда.

- пид писающего демона.
Thursday, April 14th, 2005 02:06 pm (UTC)
/proc/pid/fd, естественно.
Thursday, April 14th, 2005 02:07 pm (UTC)
я вот еще как вариант подумал, посмотреть node через lsof и залезть через debugfs
Thursday, April 14th, 2005 02:11 pm (UTC)
ну, это общие рассуждения, точного ответа всё равно никто не дал.

ДИЛ! Скринь комменты, блин!
И не облажайся со второй задачкой
Thursday, April 14th, 2005 02:25 pm (UTC)
Точный - это написать команду, которая восстановит файл? :)

В норме таких ситуаций возникать не должно. Если она возникла - админу будет не влом посмотреть пид процесса, зайти ручками в /proc/pid/fd, сказать там ls, увидеть соответствующий линк и выжрать из него данные в интересующем количестве.

Это работает, проверял.
Thursday, April 14th, 2005 02:34 pm (UTC)
выжрать из него данные - как?
Thursday, April 14th, 2005 02:35 pm (UTC)
Вторую я не буду задавать, мы ее прибережем на потом
Thursday, April 14th, 2005 02:58 pm (UTC)
Копирайты! Копирайты!
(Anonymous)
Thursday, April 14th, 2005 03:16 pm (UTC)
если много времени - идем сюда и читаем http://www.tldp.org/HOWTO/Ext2fs-Undeletion.html
если мало времени - то сюда http://recover.sourceforge.net/linux/recover/
удачи
Thursday, April 14th, 2005 03:20 pm (UTC)
Ну вот так:
lsofом найду inode, потом:
debugfs /dev/hda3
debugfs: cat <196511>
Thursday, April 14th, 2005 03:21 pm (UTC)
тьфу
debugfs: cat <196511>

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

Thursday, April 14th, 2005 03:26 pm (UTC)
Я дал ответ, который работает у меня на машине. Теперь домой!
Thursday, April 14th, 2005 03:29 pm (UTC)
а пока безработные или желающие сменить работу амины будут рещать задачу, вы бите следить, чтоб демон не помер и продолжал писать тот самый лог? :)))
Thursday, April 14th, 2005 04:14 pm (UTC)
Просто lsof'ом посмотреть какой inode использует демон для этого файла и по нему к файлу обратиться. Да хотя б линк на него кинуть.
Thursday, April 14th, 2005 04:25 pm (UTC)
Я не админ и совершенно ничего не понимаю в администрировании Linux.
Но случайно его нельзя прочитать из /proc/[pid]/fd ?
Thursday, April 14th, 2005 04:55 pm (UTC)
тоже мне, Бином Ньютона ;)
по шагам для 2.6 (на другом лень проверять):
1) находим pid процесса. Далее pid
2) cd /proc//task//fd
3) ls -l | grep deleted. Пусть выдало n
4) cat n >>/path/to/real/file
Thursday, April 14th, 2005 04:58 pm (UTC)
2) похоже побился. Следует читать:
cd /proc/pid/task/pid/fd
Thursday, April 14th, 2005 05:21 pm (UTC)
а что рассматривается в качестве подручных средств?
debugfs и -d? или там gdb и вставление в демона кода типа seek 0; read src; write dst? или стоит какая-нибудь экзотика типа http://amadeus.uprm.edu/~undelete/ ?
Thursday, April 14th, 2005 05:47 pm (UTC)
Как я ненавижу линукс, а?!

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

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

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

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

После чего спасаемся бегством.
Thursday, April 14th, 2005 06:18 pm (UTC)
А я знаю!
Проверил... действительно, блин, читается!
Thursday, April 14th, 2005 06:37 pm (UTC)
Так тоже можно, но есть горазздо более простой способ
Thursday, April 14th, 2005 06:37 pm (UTC)
Огласите весь спсок вакансий пжалссста! ;)
Thursday, April 14th, 2005 06:38 pm (UTC)
Не, мы её уже решили :)
Thursday, April 14th, 2005 06:39 pm (UTC)
это работающий, но длинный способ. есть гораздо более простой.
Page 1 of 3 << [1] [2] [3] >>