четверг, 14 января 2010 г.

Восстановление удаленных файлов в Linux ext3

И все таки это случилось.
rm -rf там где этого ни в коем случае не надо делать. Все, данных больше нет, и назад пути тоже нет. Потому что файловая система ext3
In order to ensure that ext3 can safely resume an unlink after a crash, it actually zeros out the block pointers in the inode, whereas ext2 just marks these blocks as unused in the block bitmaps and marks the inode as "deleted" and leaves the block pointers alone.

Чтобы ext3 могла надежно восстановится после сбоя, она обнуляет указатели блоков в инод, в то время как ext2 просто помечает эти блоки как не используемые в индексе блоков, инод как "стертый" и оставляет указатели блоков как есть.

На практике это означает, что разработчики файловой системы ext3 в целях повышения надежности сделали невозможным восстановление стертых файлов. Однако, поскольку ext3 журналируемая файловая система. Когда Вы стираете файл, копия указателя блока записывается в журнал. То есть, найти этот указатель блока все таки можно. Значит можно восстановить данные. Все зависит от скорости с которой вы отключите жесткий диск.
Программу для восстановления данных с ext3 написал Carlo Wood. И она есть в репозитории AltLinux. Установите пакет ext3grep.

Как действовать:
Отмонтировать жесткий диск, на котором была выполнена команда rm и примонтировать его в режиме только "чтение". Важно! Программа восстанавливает данные стертые до последнего отключения диска. То есть шансы восстановить данные резко падают, если вы монтировали диск (перезагружали компьютер) несколько раз.
Данные восстанавливаются по команде:
ext3grep /dev/sdb1 --restore-file home/my-file
Здесь /dev/sdb1 имя жесткого диска, а home/my-file - путь к файлу, который вы хотите восстановить. Обратите внимание, что путь не начинается с /. То есть если вы монтируете диск с корневой файловой системой, то путь к папке /home/ivan/ будет home/ivan/. Восстановленные файлы находятся в папке RESTORED_FILES в текущем каталоге.
При первом вызове программа сканирует жесткий диск и составляет индекс. Это долго. Зато последующие вызовы работают очень быстро. Чтобы восстановить все что возможно:
ext3grep /dev/sdb1 --restore-all

пятница, 8 января 2010 г.

nfs сервер и клиент в Altlinux 5.0

В AltLinux пятой платформы все нужное уже есть. Остались кой-какие настройки и небольшой трюк для автоматического монтирования каталогов на клиентских машинах. (У Вас должны быть права root)
Настройка сервера:
В файле /etc/exports в первом столбце перечисляются экспортируемые каталоги (эти каталоги должны существовать). Во вотором столбце перечислены опции для этих каталогов, а в третьем указано, кто имеет к ним доступ. По умолчанию в exports прописаны два каталога public и share:
/srv/public -ro,insecure,no_subtree_check *
/srv/share -rw,insecure,fsid=0,sec=krb5 *
Параметры: ro - только для чтения, rw - чтение и запись.
insecure не значит "небезопасно". insecure обозначает, что nfs может использовать любой номер порта. При использовании secure, nfs ограничена номерами меньшими 1024.
Параметр no_subtree_check означает, что система не будет каждый раз перепроверять путь к файлу. Важный параметр fsid=0. Он обозначает что данный каталог (в нашем случае /srv/share) будет корневым для всех остальных экспортируемых каталогов. То есть нужно чтобы все остальные каталоги, которые Вы экспортируете, в том числе и public, были внутри этого share. Файл по умолчанию, тем не менее, работает. На всякий случай лучше перепишем файл exports так:
/srv/ -ro,insecure,fsid=0,sec=krb5 *
/srv/home -rw,insecure,no_subtree_check *
/srv/public -ro,insecure,no_subtree_check *
/srv/share -rw,insecure,no_subtree_check *
Здесь мы заодно экспортируем каталог home. В AltLinux 5.0 server домашние каталоги пользователей создаются в папке /srv/home/.
Настройка клиентов:
В файле /etc/fstab для каждого монтируемого каталога добавить строчку вида.
192.168.1.1:/srv/share /file_server nfs
Здесь в начале указывается имя или ip адрес сервера и экспортируемый каталог, затем папка в которую нужно этот каталог монтировать на локальном компьютере. Далее указывается тип файловой системы и за ней опции. Опции могут, например, улучшить быстродействие. Читайте man nfs.
Теперь, все указанные в fstab файловые системы можно примонтировать командой mount -a от лица root. Вообще говоря запись в fstab указывает, что эти системы должны монтироваться при загрузке. На практике этого не происходит и вот почему.
Автоматическое монтирование
Несколько лет назад для загрузки сетевых интерфейсов в linux стал использоваться network manager. При включении компьютера сначала стартует этот network manager и загружает сеть, а уже затем монтируются сетевые файловые системы. Логично. Однако, программа которая монтирует сетевые файловые системы начинает работать, когда network manager уже закончил работу, но сеть еще не успела загрузиться. Получается сбой. И Вам приходится монтировать системы nfs вручную, уже после загрузки компьютера.
Что бы этого не происходило надо добавить в строчку sleep 5 в начало файла (сразу после строчек комментариев в начале файла) /etc/init.d/netfs.
netfs это скрипт, который монтирует сетевые файловые системы, sleep 5 обозначает - ждать пять секунд. Можно попробовать и три секунды :)

четверг, 7 января 2010 г.

Подключение клиента AltLinux 5.0 школьный к серверу LDAP

Свежеустановленный AltLinux 5.0 школьный уже включает (в отличие от ubuntu) все необходимые библиотеки. Ничего устанавливать не надо. Нужно настроить модули nss и pam. В AltLinux настройки ldap для nss и pam разнесены в два файла, nss_ldap.conf и pam_ldap.conf в дирректории /etc:
$su
#cd /etc
Для подключения нового компьютера к серверу LDAP надо в обоих файлах указать:

#имя хоста или ip адрес вашего сервера LDAP:
host 192.168.2.1
#корневую директорию сервера LDAP
base dc=example,dc=organisation,dc=ru
#учетную запись администратора LDAP
rootbinddn cn=admin,dc=example,dc=organisation,dc=ru

При таком способе связи с сервером LDAP необходимо хранить пароль администратора LDAP на локальном компьютере. Пароль хранится в файле /etc/ldap.secret, принадлежит пользователю root и имеет права 600. (Доступен для чтения и записи только пользователю root). Поэтому от лица пользователя root надо выполнить команду.
#echo ваш_пароль > /etc/ldap.secret
#chmod 600 /etc/ldap.secret
Чтобы никто не смог узнать пароль, прочитав файл истории ваших команд, лучше очистить историю команд.
#history -c
Теперь нужно указать системе, что Вы хотите использовать LDAP для аутентификации. В AltLinux возможные сценарии аутентификации уже прописаны в /etc/pam.d/
Переключение между ними осуществляется с помощью команды control (находится в /usr/sbin/)
#control system-auth ldap
Все. Теперь можно проверять.

среда, 6 января 2010 г.

Смена hostname в Alt Linux 5.0

В Alt Linux нет обычного файла /etc/hostname. Есть файл /etc/HOSTNAME, который на самом деле является ссылкой на /proc/sys/kernel/hostname. Чтобы изменить имя хоста нужно редактировать файл /etc/sysconfig/network.

вторник, 5 января 2010 г.

Определение IC50 в R

IC50 - при проверке токсичности какого-либо вещества in vitro это концентрация вещества при которой 50% клеток погибают. Большинство исследователей находят IC50 графическим способом. Это не точно и не дает возможности корректно сравнивать результаты разных экспериментов. Мы будем рассчитывать IC50 как положено.
Данные по токсичности как правило не линейные, поэтому сначала необходимо их аппроксимировать подходящей нелинейной функцией и затем по этой функции найти значение IC50. Наиболее часто для аппроксимации используется логарифмическая функция вида:

Здесь 4 параметра - b, c, d, e. e - это как раз IC50, d и с - наибольшее и наименьшее значение, а b - наклон прямой, касательной в точке IC50. Все коэффициенты вычисляются методом наименьших квадратов.
Всего этого можно и не знать если использовать функцию drm в R (функция доступна в пакете drc). Все не просто, а очень просто:
>results<-drm(yx,fct=LL.4())

Здесь yx исходный данные. При этом в первом столбце сигнал (процент выживших клеток, например), в во втором - концентрация. fct - (function type) - тип аппроксимирующей функции. LL.4 - логарифмическая функция с четырьмя параметрами. Переменная results теперь содержит значения b,c,d,e и их стандартные отклонения. Теперь не трудно узнать IC50.
Саму функцию можно построить на графике и увидеть насколько хорошо она описывает
экспериментальные данные.


Все подробности о пакете drc описаны его авторами в статье: Ritz, C. & Streibig, J. C. (2005) Bioassay Analysis using R. J. Statist. Software, Vol 12, Issue 5.

понедельник, 4 января 2010 г.

Графики с планками погрешностей в R


Хороший способ предлагается пакетом gplots. В стандартной поставке его нет, нужно устанавливать дополнительно. После команды
>install.packages("gplots")

R попросит выбрать зеркало и затем сама все скачает и установит.
Загружаем новый пакет:
>library(gplots)

Теперь в R доступна команда plotCI, которая как раз и строит графики "с усами".
>plotCI(x,mean(y), uiw=sd(y), ylim=yy, xlab= (expression("C, "*mu*"M")), ylab="Cell growth, % of control", log="x", bty="l")

По оси X - концентрация в мкМ. Для каждой точки Y есть несколько измерений, поэтому используется среднее - mean(y). uiw это размер усов, т.е. стандартное отклонение sd(y). ylim=yy - жестко задает диапазон значений для шкалы Y (здесь yy вектор 0;120). log(x) указывает, что шкала X - логарифмическая. xlab и ylab подписи осей. bty=l задает тип рамки. L (прямо по форме буквы) обозначает, что рамки будут слева и внизу графика.
Команда построила только точки с усами, если нужно соединить их линией, то достраиваем еще один график, но уже с типом "line":
>plotCI(x,mean(y), ylim=yy, type="line", xlab="", ylab="", log="x", axes=F)

На одном графике можно изобразить множество рядов данных. На рисунке вверху их два.