<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Блог Александра Руденко aka ras. &#187; Администрирование</title>
	<atom:link href="http://ras.pl.ua/category/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/feed/" rel="self" type="application/rss+xml" />
	<link>http://ras.pl.ua</link>
	<description>Заметки о себе, семье, городе, профессиональной деятельности...</description>
	<lastBuildDate>Sun, 15 Aug 2010 19:29:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ограничение доступа при помощи mod_auth_mysql</title>
		<link>http://ras.pl.ua/mod_auth_mysql/</link>
		<comments>http://ras.pl.ua/mod_auth_mysql/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 12:06:01 +0000</pubDate>
		<dc:creator>ras</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mod_auth_mysql]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://ras.pl.ua/?p=206</guid>
		<description><![CDATA[Если нужно ограничить доступ к определённому каталогу web-сайта по логину и паролю, причём эти данные нужно хранить в базе данных MySQL, можно использовать модуль web-сервера Apache mod_auth_mysql. В этой статье я покажу простой пример настройки данного модуля, но, я решил немного улучшить защиту, добавив дополнительно к логину и паролю ограничение доступа по IP-адресу, диапазону IP-адресов, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Если нужно ограничить доступ к определённому каталогу web-сайта по логину и паролю, причём эти данные нужно хранить в базе данных <b>MySQL</b>, можно использовать модуль web-сервера <b>Apache</b> <b>mod_auth_mysql</b>. В этой статье я покажу простой пример настройки данного модуля, но, я решил немного улучшить защиту, добавив дополнительно к логину и паролю ограничение доступа по IP-адресу, диапазону IP-адресов, а также будет осуществляться проверка на активность/заблокированность пользователя.<span id="more-206"></span></p>
<p><u>Создание таблицы пользователей, добавление функции:</u></p>
<p style="text-align: justify;">Для начала нужно создать базу данных ползователей (или использовать существующую, в примере используется база test). Я не буду подробно описывать работу с базой данных MySQL, думаю, те кому нужен данный модуль авторизации &#8211; способны изучить документацию к базе данных. Итак, создаём таблицу с пользователями, ввести в консоли базы MySQL (mysql test):</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> accounts <span style="color: #66cc66;">&#40;</span><br />
&nbsp; login VARCHAR<span style="color: #66cc66;">&#40;</span>16<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span><br />
&nbsp; password VARCHAR<span style="color: #66cc66;">&#40;</span>64<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span><br />
&nbsp; active TINYINT<span style="color: #66cc66;">&#40;</span>1<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> 1<span style="color: #66cc66;">,</span><br />
&nbsp; ip_range TEXT<span style="color: #66cc66;">,</span><br />
&nbsp; <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>login<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#41;</span>;</div></div>
<p style="text-align: justify;">Пароль будет храниться в зашифрованном виде. Я использовал функцию unix_md5_crypt() из модуля Crypt::PasswdMD5, язык программирования Perl. Структура таблицы простая: имя пользователя, пароль в зашифрованном виде, признак активности (1 или 0), неактивных аторизировать не будем, и ограничение по IP. Если поле ip_range будет пустым, то проверка IP-адреса не будет осуществляться. Ограничения по IP записываются в следующем формате: если ограничений несколько, они разделяются запятой (без пробелов), если нужно ограничить доступ с диапазона IP-адресов, то диапазон записывается через чёрточку (без пробелов). Пример: &#8220;192.168.0.1,10.0.0.0-10.255.255.255,172.16.0.1&#8243;. Проверить валидность данного поля можно следующим регулярным выражением:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(-((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))?(,((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(-((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))?)*$</div></div>
<p style="text-align: justify;">Ограничения по IP осуществляются написанной мной хранимой функцией MySQL, ввести с консоли MySQL (mysql test):</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:300px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">DROP</span> <span style="color: #993333; font-weight: bold;">FUNCTION</span> <span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #993333; font-weight: bold;">EXISTS</span> ip_in_range;<br />
DELIMITER <span style="color: #66cc66;">//</span><br />
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">FUNCTION</span> ip_in_range <span style="color: #66cc66;">&#40;</span>test_ip VARCHAR<span style="color: #66cc66;">&#40;</span>15<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> ip_range TEXT<span style="color: #66cc66;">&#41;</span><br />
RETURNS TINYINT<span style="color: #66cc66;">&#40;</span>1<span style="color: #66cc66;">&#41;</span><br />
BEGIN<br />
&nbsp; DECLARE temp TEXT;<br />
&nbsp; DECLARE coma INT<span style="color: #66cc66;">&#40;</span>10<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; DECLARE ip BIGINT<span style="color: #66cc66;">&#40;</span>10<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; <span style="color: #993333; font-weight: bold;">IF</span> ip_range <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">OR</span> ip_range <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">''</span> THEN<br />
&nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">RETURN</span> <span style="color: #cc66cc;">1</span>;<br />
&nbsp; END <span style="color: #993333; font-weight: bold;">IF</span>;<br />
&nbsp; <span style="color: #993333; font-weight: bold;">SET</span> ip <span style="color: #66cc66;">=</span> INET_ATON<span style="color: #66cc66;">&#40;</span>test_ip<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; REPEAT<br />
&nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">SET</span> coma <span style="color: #66cc66;">=</span> LOCATE<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">','</span><span style="color: #66cc66;">,</span> ip_range<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">IF</span> coma <span style="color: #66cc66;">=</span> 0 THEN<br />
&nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">SET</span> temp <span style="color: #66cc66;">=</span> ip_range;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">SET</span> ip_range <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">''</span>;<br />
&nbsp; &nbsp; ELSE<br />
&nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">SET</span> temp <span style="color: #66cc66;">=</span> <span style="color: #993333; font-weight: bold;">LEFT</span><span style="color: #66cc66;">&#40;</span>ip_range<span style="color: #66cc66;">,</span> coma <span style="color: #66cc66;">-</span> 1<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">SET</span> ip_range <span style="color: #66cc66;">=</span> <span style="color: #993333; font-weight: bold;">RIGHT</span><span style="color: #66cc66;">&#40;</span>ip_range<span style="color: #66cc66;">,</span> LENGTH<span style="color: #66cc66;">&#40;</span>ip_range<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">-</span> coma<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; END <span style="color: #993333; font-weight: bold;">IF</span>;<br />
&nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">SET</span> coma <span style="color: #66cc66;">=</span> LOCATE<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'-'</span><span style="color: #66cc66;">,</span> temp<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">IF</span> coma <span style="color: #66cc66;">=</span> 0 THEN<br />
&nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">IF</span> ip <span style="color: #66cc66;">=</span> INET_ATON<span style="color: #66cc66;">&#40;</span>temp<span style="color: #66cc66;">&#41;</span> THEN<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">RETURN</span> <span style="color: #cc66cc;">1</span>;<br />
&nbsp; &nbsp; &nbsp; END <span style="color: #993333; font-weight: bold;">IF</span>;<br />
&nbsp; &nbsp; ELSE<br />
&nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">IF</span> ip <span style="color: #66cc66;">&gt;=</span> INET_ATON<span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">LEFT</span><span style="color: #66cc66;">&#40;</span>temp<span style="color: #66cc66;">,</span> coma <span style="color: #66cc66;">-</span> 1<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AND</span> ip <span style="color: #66cc66;">&lt;=</span> INET_ATON<span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">RIGHT</span><span style="color: #66cc66;">&#40;</span>temp<span style="color: #66cc66;">,</span> LENGTH<span style="color: #66cc66;">&#40;</span>temp<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">-</span> coma<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> THEN<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">RETURN</span> <span style="color: #cc66cc;">1</span>;<br />
&nbsp; &nbsp; &nbsp; END <span style="color: #993333; font-weight: bold;">IF</span>;<br />
&nbsp; &nbsp; END <span style="color: #993333; font-weight: bold;">IF</span>;<br />
&nbsp; UNTIL ip_range <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">''</span> END REPEAT;<br />
&nbsp; <span style="color: #993333; font-weight: bold;">RETURN</span> <span style="color: #cc66cc;">0</span>;<br />
END;<br />
<span style="color: #66cc66;">//</span><br />
DELIMITER ;</div></div>
<p><u>Настройка web-сервера:</u></p>
<p style="text-align: justify;">Настраиваем httpd.conf, нужно добавить модуль и ограничить доступ к каталогу (в случае с тестируемой системой, Fedora 13, был установлен пакет mod_auth_mysql, и модуль автоматически прописался файлом конфигурации /etc/httpd/conf.d/auth_mysql.conf):</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">LoadModule mysql_auth_module modules/mod_auth_mysql.so<br />
<br />
&lt;Directory &quot;/home/user/www&quot;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; Options FollowSymLinks<br />
&nbsp; AllowOverride All<br />
&nbsp; AuthBasicAuthoritative Off<br />
&nbsp; AuthName &quot;Authentication&quot;<br />
&nbsp; AuthType Basic<br />
&nbsp; AuthMySQLEnable On<br />
&nbsp; AuthMySQLHost localhost<br />
&nbsp; AuthMySQLUser user<br />
&nbsp; AuthMySQLPassword password<br />
&nbsp; AuthMySQLDB test<br />
&nbsp; AuthMySQLUserTable accounts<br />
&nbsp; AuthMySQlNameField login<br />
&nbsp; AuthMySQLPasswordField password<br />
&nbsp; AuthMySQLUserCondition &quot;active AND ip_in_range('%a', ip_range)&quot;<br />
&nbsp; AuthMySQLPwEncryption crypt<br />
&nbsp; AuthUserFile /dev/null<br />
&nbsp; Require valid-user<br />
&lt;/Directory&gt;</div></div>
<p style="text-align: justify;">Тут нужно скорректировать базу данных, если нужно (используется test), ну и ввести нужные имя пользователя с паролем (используется user и password).</p>
<p><u>Заключение:</u></p>
<p style="text-align: justify;">Как видно из статьи, всё просто настраивается, даёт возможность гибко ограничивать доступ пользователей, изменяя данные в базе данных. Плюс мы получаем ограничение доступа блокированных пользователей, а так же получаем защиту от подбора паролей, открывая доступ только с определённых хостов.</p>
]]></content:encoded>
			<wfw:commentRss>http://ras.pl.ua/mod_auth_mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Резервирование жёсткого диска при помощи dd поверх ssh</title>
		<link>http://ras.pl.ua/backup_with_dd_over_ssh/</link>
		<comments>http://ras.pl.ua/backup_with_dd_over_ssh/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 07:33:03 +0000</pubDate>
		<dc:creator>ras</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[bzip2]]></category>
		<category><![CDATA[dd]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[резервирование]]></category>

		<guid isPermaLink="false">http://ras.pl.ua/?p=195</guid>
		<description><![CDATA[Появилась задача &#8211; снять образ с диска ноутбука, залить его на другой компьютер, чтобы переставить систему на ноутбуке, провести определённые тесты, а затем полностью восстановить жёсткий диск ноутбука в состояние до тестов.
Для проведения данной операции, была произведена загрузка на ноутбуке с CD-привода в Fedora Linux 13 rescue, настроена сеть, диски не монтировались. Компьютер, на который [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Появилась задача &#8211; снять образ с диска ноутбука, залить его на другой компьютер, чтобы переставить систему на ноутбуке, провести определённые тесты, а затем полностью восстановить жёсткий диск ноутбука в состояние до тестов.<span id="more-195"></span></p>
<p style="text-align: justify;">Для проведения данной операции, была произведена загрузка на ноутбуке с CD-привода в Fedora Linux 13 rescue, настроена сеть, диски не монтировались. Компьютер, на который будет сбрасываться образ диска ноутбука находится в одной сети с ноутбуком, на нём установлен и настроен демон sshd.</p>
<p><u>Резервирование данных:</u></p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">dd</span> <span style="color: #000000; font-weight: bold;">if</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">ssh</span> ras<span style="color: #000000; font-weight: bold;">@</span>backup-host <span style="color: #ff0000;">&quot;dd of=book/sda&quot;</span></div></div>
<p><u>Восстановление данных:</u></p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">ssh</span> ras<span style="color: #000000; font-weight: bold;">@</span>backup-host <span style="color: #ff0000;">&quot;dd if=book/sda&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">dd</span> <span style="color: #007800;">of</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda</div></div>
<p style="text-align: justify;">Здесь backup-host &#8211; компьютер, на который сохраняется образ, ras &#8211; имя пользователя, book/sda &#8211; каталог и название файла бэкапа, /dev/sda &#8211; устройство-жёсткий диск ноутбука. В моей ситуации был не очень быстрый ноутбук, а компьютер, на который осуществлялось резервирование, обладал объёмным жёстким диском. При резервировании можно применять сжатие, тогда получим меньший образ, меньше трафика передачи по сети, если диск или сеть будут узким местом, но возрастёт нагрузка на процессор резервируемой системы, соответственно увеличится время резервирования. Вариации на эту тему:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">dd</span> <span style="color: #000000; font-weight: bold;">if</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">gzip</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">ssh</span> ras<span style="color: #000000; font-weight: bold;">@</span>backup-host <span style="color: #ff0000;">&quot;dd of=book/sda.gz&quot;</span><br />
<span style="color: #c20cb9; font-weight: bold;">ssh</span> ras<span style="color: #000000; font-weight: bold;">@</span>backup-host <span style="color: #ff0000;">&quot;dd if=book/sda.gz&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">gzip</span> <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">dd</span> <span style="color: #007800;">of</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda</div></div>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">dd</span> <span style="color: #000000; font-weight: bold;">if</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">bzip2</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">ssh</span> ras<span style="color: #000000; font-weight: bold;">@</span>backup-host <span style="color: #ff0000;">&quot;dd of=book/sda.bz2&quot;</span><br />
<span style="color: #c20cb9; font-weight: bold;">ssh</span> ras<span style="color: #000000; font-weight: bold;">@</span>backup-host <span style="color: #ff0000;">&quot;dd if=book/sda.bz2&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">bzip2</span> <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">dd</span> <span style="color: #007800;">of</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda</div></div>
]]></content:encoded>
			<wfw:commentRss>http://ras.pl.ua/backup_with_dd_over_ssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Перевод дисков после инсталляции Proxmox в RAID1 (mirror)</title>
		<link>http://ras.pl.ua/proxmox_raid1_howto/</link>
		<comments>http://ras.pl.ua/proxmox_raid1_howto/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 12:25:40 +0000</pubDate>
		<dc:creator>ras</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[mirror]]></category>
		<category><![CDATA[proxmox]]></category>
		<category><![CDATA[raid]]></category>
		<category><![CDATA[raid1]]></category>
		<category><![CDATA[зеркало]]></category>

		<guid isPermaLink="false">http://ras.pl.ua/?p=184</guid>
		<description><![CDATA[В повседневной работе появилась привычка резервировать данные. Обязательно RAID 1 (зеркало), резервное копирование. После установки Proxmox VE в дефолтном режиме, но с двумя дисками &#8211; было обнаружено что система разметила и использует только один диск, что неприемлемо. Ниже приведёно краткое руководство по переводу разделов диска в режим RAID 1. Итак, приступим (данное руководство делалось для [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">В повседневной работе появилась привычка резервировать данные. Обязательно RAID 1 (зеркало), резервное копирование. После установки <strong>Proxmox VE</strong> в дефолтном режиме, но с двумя дисками &#8211; было обнаружено что система разметила и использует только один диск, что неприемлемо. Ниже приведёно краткое руководство по переводу разделов диска в режим RAID 1.<span id="more-184"></span> Итак, приступим (данное руководство делалось для версии 1.5 со стандартным ядром).</p>
<p style="text-align: justify;">Установить <strong>Proxmox</strong> только на один первый диск (/dev/sda).</p>
<p style="text-align: justify;">Доустановить необходимые пакеты для работы с RAID, создания рамдиска с драйверами:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">aptitude</span> <span style="color: #c20cb9; font-weight: bold;">install</span> mdadm initramfs-tools</div></div>
<p style="text-align: justify;">Загрузить модуль raid1:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">modprobe raid1</div></div>
<p style="text-align: justify;">Записать необходимые модули в /etc/modprobe.conf, пересоздать initrd:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #7a0874; font-weight: bold;">alias</span> md-personality-3 raid1 <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>modprobe.conf<br />
mkinitramfs <span style="color: #660033;">-o</span> <span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/</span>initrd.img-<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">uname</span> -r<span style="color: #000000; font-weight: bold;">`</span>-raid1 <span style="color: #660033;">-r</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>pve-root</div></div>
<p style="text-align: justify;">Отредактировать GRUB, чтобы загрузка производилась с новым initrd:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">title &nbsp;Proxmox Virtual Environment, kernel 2.6.18-2-pve on RAID1<br />
root &nbsp; (hd0,0)<br />
kernel /vmlinuz-2.6.18-2-pve root=/dev/mapper/pve-root ro.<br />
initrd /initrd.img-2.6.18-2-pve-raid1</div></div>
<p style="text-align: justify;">Разметить второй диск (/dev/sdb) примерно так:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp;Device Boot &nbsp; &nbsp; &nbsp;Start &nbsp; &nbsp; &nbsp; &nbsp; End &nbsp; &nbsp; &nbsp;Blocks &nbsp; Id &nbsp;System<br />
/dev/sdb1 &nbsp; * &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;63 &nbsp; &nbsp; &nbsp;506016 &nbsp; fd &nbsp;Linux raid autodetect<br />
/dev/sdb2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;64 &nbsp; &nbsp; &nbsp; 60801 &nbsp; 487877985 &nbsp; fd &nbsp;Linux raid autodetect</div></div>
<p style="text-align: justify;">Т. е. первый раздел под /boot &#8211; 512 Mb, остальное под второй раздел для LVM (данный раздел не должен быть меньше используемого на первом диске).</p>
<p style="text-align: justify;">Далее создаются RAID-разделы с использованием пока только второго диска:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mdadm <span style="color: #660033;">--create</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>md0 <span style="color: #660033;">--level</span>=1 <span style="color: #660033;">--raid-devices</span>=2 missing <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb1<br />
mdadm <span style="color: #660033;">--create</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>md1 <span style="color: #660033;">--level</span>=1 <span style="color: #660033;">--raid-devices</span>=2 missing <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb2<br />
mdadm <span style="color: #660033;">--detail</span> <span style="color: #660033;">--scan</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>mdadm<span style="color: #000000; font-weight: bold;">/</span>mdadm.conf</div></div>
<p style="text-align: justify;">Теперь нужно создать LVM-раздел на втором диске, добавить его в группу pve, переместить данные с LVM-раздела первого диска, на RAID-LVM-раздел второго диска, убрать из LVM первый диск:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">pvcreate <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>md1<br />
vgextend pve <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>md1<br />
pvmove <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda2 <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>md1<br />
vgreduce pve <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda2</div></div>
<p style="text-align: justify;">Теперь нужно подготовить RAID-раздел второго диска, скопировать на него /boot:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mkfs.ext3 <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>md0<br />
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>md0<br />
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>md0 <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>md0<br />
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-ax</span> <span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>md0<br />
<span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>md0<br />
<span style="color: #c20cb9; font-weight: bold;">rmdir</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>md0</div></div>
<p style="text-align: justify;">Исправить /etc/fstab, поменять запись о /boot так, чтобы она указывала на RAID-раздел:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/dev/md0 /boot ext3 defaults 0 1</div></div>
<p style="text-align: justify;">Можно перемонтировать /boot:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>boot<br />
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>boot</div></div>
<p style="text-align: justify;">Переразметить первый диск в соответствии со вторым (у меня так почему-то не получилось, переразмечал вручную):</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sfdsk -d /dev/sdb | sfdisk /dev/sda</div></div>
<p style="text-align: justify;">Теперь можно добавлять в RAID-массивы разделы первого диска:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mdadm <span style="color: #660033;">--add</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>md0 <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda1<br />
mdadm <span style="color: #660033;">--add</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>md1 <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda2</div></div>
<p style="text-align: justify;">Нужно подождать пока RAID синхронизируется, контролировать процесс можно при помощи такой команды:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">watch <span style="color: #660033;">-n</span> <span style="color: #000000;">1</span> <span style="color: #ff0000;">&quot;cat /proc/mdstat&quot;</span></div></div>
<p style="text-align: justify;">Теперь нужно переинсталировать загрузчик (GRUB) на обоих дисках:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">grub<br />
&gt; find /grub/stage1<br />
find /grub/stage1<br />
(hd0,0)<br />
(hd1,0)<br />
&gt; root (hd0,0)<br />
&gt; setup (hd0)<br />
&gt; root (hd1,0)<br />
&gt; setup (hd1)<br />
&gt; quit</div></div>
<p style="text-align: justify;">Или такой вариант (не проверял лично):</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">grub-install <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda<br />
grub-install <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb</div></div>
<p style="text-align: justify;">Всё, система работает на RAID1 (зеркале).</p>
<p><strong>Ссылки:</strong></p>
<ul>
<li><a href="http://pve.proxmox.com/wiki/Downloads" target="_blank">pve.proxmox.com/wiki/Downloads</a> &#8211; сайт загрузки Proxmox</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ras.pl.ua/proxmox_raid1_howto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Перевод серверов с KOI8-R на UTF-8</title>
		<link>http://ras.pl.ua/koi8-r_to_utf-8/</link>
		<comments>http://ras.pl.ua/koi8-r_to_utf-8/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 08:11:33 +0000</pubDate>
		<dc:creator>ras</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[iconv]]></category>
		<category><![CDATA[KOI8-R]]></category>
		<category><![CDATA[UTF-8]]></category>
		<category><![CDATA[перекодировка]]></category>

		<guid isPermaLink="false">http://ras.pl.ua/?p=135</guid>
		<description><![CDATA[Лучше поздно чем никогда, решил перевести пару серверов на UTF-8, в связи с чем возникла проблема перекодировки русских имён файлов и текстовых файлов. Решил поделиться скриптами. Итак, для перекодировки имён файлов с KOI8-R в UTF-8, вот такой скрипт, который перекодирует файлы в текущем каталоге.
convert_filenames_from_koi8-r_to_utf-8.sh:
#!/bin/bash

ls -1 &#124; while read name ; do
newname=`echo $name &#124; iconv -f [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Лучше поздно чем никогда, решил перевести пару серверов на UTF-8, в связи с чем возникла проблема перекодировки русских имён файлов и текстовых файлов. Решил поделиться скриптами. Итак, для перекодировки имён файлов с KOI8-R в UTF-8, вот такой скрипт, который перекодирует файлы в текущем каталоге.<span id="more-135"></span></p>
<p><span style="text-decoration: underline;">convert_filenames_from_koi8-r_to_utf-8.sh:</span></p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<br />
<span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-1</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> name ; <span style="color: #000000; font-weight: bold;">do</span><br />
<span style="color: #007800;">newname</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$name</span> <span style="color: #000000; font-weight: bold;">|</span> iconv <span style="color: #660033;">-f</span> KOI8-R <span style="color: #660033;">-t</span> UTF-8<span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$name</span>&quot;</span> <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #ff0000;">&quot;<span style="color: #007800;">$newname</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$name</span> =&gt; <span style="color: #007800;">$newname</span>&quot;</span><br />
&nbsp; <span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$name</span>&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$newname</span>&quot;</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<span style="color: #000000; font-weight: bold;">done</span></div></div>
<p style="text-align: justify;">Для перекодировки файлов решено было расширить меню Midnight Commander-а (mc) соответствующим пунктом. Т. е. выбираются файлы, которые нужно перекодировать, нажимается кнопка F2, выбирается последний пункт. Для внесения изменений в меню Midnight Commander-а, необходимо добавить в конец файла <span style="text-decoration: underline;">/etc/mc/mc.menu</span> следующие строки:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">= t r<br />
+ ! t t<br />
i       Convert from KOI8-R to UTF-8 current file<br />
&nbsp; &nbsp; &nbsp; &nbsp; cp %f %f.KOI8-R<br />
&nbsp; &nbsp; &nbsp; &nbsp; iconv -f KOI8-R -t UTF-8 &lt; %f.KOI8-R &gt; %f<br />
&nbsp; &nbsp; &nbsp; &nbsp; rm -f %f.KOI8-R<br />
<br />
+ t t<br />
I       Convert from KOI8-R to UTF-8 tagged files<br />
&nbsp; &nbsp; &nbsp; &nbsp; for i in %t<br />
&nbsp; &nbsp; &nbsp; &nbsp; do<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cp $i $i.KOI8-R<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iconv -f KOI8-R -t UTF-8 &lt; $i.KOI8-R &gt; $i<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rm -f $i.KOI8-R<br />
&nbsp; &nbsp; &nbsp; &nbsp; done</div></div>
]]></content:encoded>
			<wfw:commentRss>http://ras.pl.ua/koi8-r_to_utf-8/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
