пятница, 31 декабря 2010 г.

Компиляция кода C++ в Linux

Если при компиляции с помощью gcc возникает следующаяя ошибка, нужно воспользоваться компилятором g++ так как он автоматически линкует.
http://stackoverflow.com/questions/329059/what-is-gxx-personality-v0-for
vitaliy@fox:~$ gcc test123.cpp
/tmp/cc4kLu28.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
vitaliy@fox:~$ g++ test123.cpp

воскресенье, 19 декабря 2010 г.

net2ftp увеличить размер передоваемого файла.

Правим:


hosting:~# nano /var/www/ispcp/gui/tools/filemanager/settings.inc.php 
$net2ftp_settings["max_filesize"]  = "50000000";  // in Bytes, default 10 MB



Правим параметры: 
upload_max_filesize, post_max_size, max_execution_time, memory_limit


hosting:~# nano /etc/php5/cgi/php.ini 


; Maximum allowed size for uploaded files.
upload_max_filesize =50M


; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20



hosting:~# nano /var/www/fcgi/master/php5/php.ini

; Maximum allowed size for uploaded files.
upload_max_filesize =50M




; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20




Ограниччить размер в .htaccess:
http://joomlaforum.ru/index.php?topic=76068.0 

sudo

 настроим права пользователей для sudo
#apt-get install mc sudo
#echo "%sudoer ALL=(ALL) ALL" >>/etc/sudoers
#addgroup sudoer
#usermod -G sudoer user1
user1 - может теперь использовать комманду sudo

суббота, 18 декабря 2010 г.

Включение статистики Awstats в хостинг-панели ispCP

Если при установки хостинг-панели вы не указали активацию демона статистики Awstats и хотите активировать её сейчас, то вам нужно запастись терпения и приготовиться выполнять шаманские танцы с бубном.

И так, поехали!

Первым делом активируем awstats в конфигурационный файле ispCP выполнив следующие команды:

hosting:~# cat /etc/ispcp/ispcp.conf 

AWSTATS_ACTIVE = yes


# could be 'dynamic' = 0 or 'static' = 1
AWSTATS_MODE = 0


AWSTATS_CACHE_DIR = /var/cache/awstats


AWSTATS_CONFIG_DIR = /etc/awstats


AWSTATS_ENGINE_DIR = /usr/lib/cgi-bin


AWSTATS_WEB_DIR = /usr/share/awstats


AWSTATS_ROOT_DIR = /var/www/ispcp/engine/awstats


AWSTATS_GROUP_AUTH = statistics

Разкоментируем в cron'e  вторую строку в секции AWStats: 
hosting:~# nano /etc/cron.d/ispcp 
# AWStats
15      */6     *       *       *       root /var/www/ispcp/engine/awstats/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl >/dev/null 2>&1

# AWStats
   15      */6     *       *       *       root /var/www/ispcp/engine/awstats/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl >/dev/null 2>&1


Перезагрузим апач и увидем что из этого получиться:
hosting:~# /etc/init.d/apache2 restart
Restarting web server: apache2Syntax error on line 196 of /etc/apache2/sites-enabled/ispcp.conf:
Invalid command 'ProxyRequests', perhaps misspelled or defined by a module not included in the server configuration
 failed!

Ошибка из-за отсутствующего модуля. Открыв /etc/apache2/sites-enabled/ispcp.conf на 196 строке увидим секцию Proxy и отсутствующий модуль. Дабы исправить ошибку установим необходимые модули libapache2-mod-proxy-html:

hosting:~# apt-get install libapache2-mod-proxy-html
Чтение списков пакетов... Готово
Построение дерева зависимостей       
Чтение информации о состоянии... Готово
НОВЫЕ пакеты, которые будут установлены:
  libapache2-mod-proxy-html
обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 25,4kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 143kB.
Получено:1 http://ftp.ua.debian.org lenny/main libapache2-mod-proxy-html 3.0.0-1 [25,4kB]
Получено 25,4kБ за 0s (28,2kБ/c)               
Выбор ранее не выбранного пакета libapache2-mod-proxy-html.
(Чтение базы данных... на данный момент установлено 30498 файлов и каталогов.)
Распаковывается пакет libapache2-mod-proxy-html (из файла .../libapache2-mod-proxy-html_3.0.0-1_i386.deb)...
Настраивается пакет libapache2-mod-proxy-html (3.0.0-1) ...
Your apache2 configuration is broken, so we're not restarting it for you.


Добавим модули в апач и перезапустим его:
hosting:~# a2enmod proxy
Enabling module proxy.
Run '/etc/init.d/apache2 restart' to activate new configuration!

hosting:~# a2enmod proxy_http
Considering dependency proxy for proxy_http:
Module proxy already enabled
Enabling module proxy_http.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Теперь отредактируем proxy.conf добавив  "Allow from 127.0.0.1"

hosting:~# cat /etc/apache2/mods-available/proxy.conf 

        #turning ProxyRequests on and allowing proxying from all may allow
        #spammers to use your proxy to send email.


        ProxyRequests Off


        
                AddDefaultCharset off
                Order deny,allow
                Deny from all
                Allow from 127.0.0.1
                #Allow from e.example.com
        


        # Enable/disable the handling of HTTP/1.1 "Via:" headers.
        # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
        # Set to one of: Off | On | Full | Block


        ProxyVia On






hosting:~# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting ..


Теперь скопируем конфиг сайта awststs 01_awstats.conf в папку с конфигами сайтов апача:
hosting:~# cp /etc/ispcp/apache/01_awstats.conf /etc/apache2/sites-available/

Создадим символическую ссылку в /etc/apache2/sites-enable/ воспользовавшись командой a2ensite:
hosting:~# a2ensite 01_awstats.conf
Enabling site 01_awstats.conf.
Run '/etc/init.d/apache2 reload' to activate new configuration!

Перезагрузим папч:
hosting:~# /etc/init.d/apache2 reload
Reloading web server config: apache2.

Создадми недастающую папку /var/cache/awstats:
hosting:~# mkdir /var/cache/awstats

Теперь срегенерируем конфигорационные файлы icpCP:


hosting:~# /etc/init.d/ispcp_daemon stop
Stopping ispCP GUI-Backend communication Daemon: ispcp_daemon.

hosting:~# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 70
Server version: 5.0.51a-24+lenny4 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> USE ispcp;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

mysql> UPDATE `domain` SET `domain_status` = 'change' WHERE `domain_status` = 'ok';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> UPDATE `subdomain` SET `subdomain_status` = 'change' WHERE `subdomain_status` = 'ok';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> UPDATE `domain_aliasses` SET `alias_status` = 'change' WHERE `alias_status` = 'ok';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> quit
Bye

hosting:~# /var/www/ispcp/engine/ispcp-rqst-mngr

hosting:~# /etc/init.d/ispcp_daemon start

Перезагрузим апач:
hosting:~# /etc/init.d/apache2 restart

Теперь запустим скрипт сбора статистики, первый раз его нужно ввести вручную, т.к. cron'e еще не отработал скрипт:
hosting:~# /var/www/ispcp/engine/awstats/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl

Отредактируем файл сайта:
hosting:~# nano /etc/apache2/sites-available/01_awstats.conf
#Alias /awstatsicons "{AWSTATS_WEB_DIR}/icon/"
Alias /awstatsicons "/usr/share/awstats/icon/"

NameVirtualHost 127.0.0.1:80
<VirtualHost 127.0.0.1:80>

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule ^/stats/(.+)/$ http://localhost/awstats/?config=$1 [P]
        RewriteRule ^/stats/(.+)/awstats.pl(.*)$ http://localhost/awstats/$1 [P]
        RewriteRule ^/stats/(.*)$ http://localhost/stats/$1/ [R]
    IfModule>

   #ScriptAlias /awstats "{AWSTATS_ENGINE_DIR}/awstats.pl"
    ScriptAlias /awstats "/usr/lib/cgi-bin/awstats.pl"
   #<Directory {AWSTATS_ENGINE_DIR}>
    <Directory /usr/lib/cgi-bin>
       AllowOverride none
        Options +ExecCGI
        DirectoryIndex awstats.pl
        Order allow,deny
        Allow from all
    Directory>
VirtualHost>

Ну и напоследок запустим апач:
hosting:~# /etc/init.d/apache2 restart

Вуаля! Есть статистика: 

Для того что бы зайти в статистику необходимо будет ввести логин и пароль хронящийся в файле /var/www/virtual/example.com/.htpasswd. Это собственно и есть тот логин под которым вы заходите в панель управления ispCP. 
Также необходимо состоять в группе статистика /var/www/virtual/example.com/.htgroup/
Полезные ссылки: http://isp-control.net/forum/showthread.php?tid=4663&highlight=awstats 
http://isp-control.net/forum/thread-10880-page-2.html
http://isp-control.net/forum/thread-1922-page-2.html


aka_delix

Awstats Статистика для сайтов

hosting:~# cp /etc/awstats/awstats.conf /etc/awstats/awstats.example.com.conf


hosting:~# ls -l /var/log/apache2/users/
итого 1321
-rw-r----- 1 root root 1343523 Дек 18 16:11 admin.hosting.example.com-access.log
-rw-r----- 1 root root     831 Дек 18 15:55 admin.hosting.example.com-error.log

Полный путь к файлу будет /var/log/apache2/users/admin.hosting.example.com-access.log

Правим строки в файле:
hosting:~# nano  /etc/awstats/awstats.example.com.conf


LogFile="/var/log/apache2/users/admin.hosting.example.com-access.log"  //полный путь к лог-файлу доступа
LogType=W
LogFormat=1
LogSeparator=" "
SiteDomain="example.com"
HostAliases="example.com"
[...]
остальные настройки по умолчанию.

hosting:~# nano /etc/apache2/conf.d/awstats
Alias /awstatsclasses "/usr/share/awstats/lib/"
Alias /awstats-icon/ "/usr/share/awstats/icon/"
Alias /awstatscss "/usr/share/doc/awstats/examples/css"
ScriptAlias /stats/ /usr/lib/cgi-bin/
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch



hosting:~# /usr/lib/cgi-bin/awstats.pl -config=example.com -update
Create/Update database for config "/etc/awstats/awstats.example.com.conf" by AWStats version 6.7 (build 1.892)
From data in log file "/var/log/apache2/users/admin.hosting.example.com-access.log"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 4340
 Found 1 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 4339 new qualified records.

Теперь заходим по адрессу http://example.com/stats/awstats.pl


четверг, 16 декабря 2010 г.

ispCP Omega 1.0.7. Установка хостинг-панели. Решение проблем.

Была установленна свежая система из дестрибутива Debian GNU/Linux 5.0.7, из стабильной на тот момент ветки lenny. Ядро 2.6.26-2-686. Дата 16.12.2010
Выполнять по мануалам:

Перед установкой привести в порядок доменные записи FQHN  "fully qualified hostname". 
В моём случае записью FQHN являеться hosting.domain.org.ua

hosting:~# /etc/hosts
127.0.0.1            localhost
195.234.200.130 hosting.domain.org.ua    hosting

hosting:~# /etc/hostname
hosting.domain.org.ua 

hosting:~# /etc/mailname
hosting.domain.org.ua 

hosting:~# cat /etc/resolv.conf
domain domain.org.ua
#search simfi.net
nameserver 127.0.0.1
nameserver 195.234.200.253

ШАГ 5 
Рекомендуетсья сделать бэкапы для этого копируем папки /usr /etc /var в домашний коталог
hosting:~# cp -dpRx /etc /home/user1/backup
hosting:~# cp -dpRx /usr /home/user1/backup
hosting:~# cp -dpRx /var /home/user1/backup

А после этого уже выполняем как положенно ШАГ5:

cp -R /tmp/ispcp/* /

ШАГ 6

# mysql_secure_installation
Выполнить команду выще не получилось т.к. небыл создан при установен пользователь root во время выполнения ШАГ 3.

Проблему с отстутсвующей записью для root в базе, я разобрал в этом руководстве Создание пользователя root в MySQL


ШАГ 7
Переходим в папку:

# cd /var/www/ispcp/engine/setup
Выполняем скрипт:

# perl ./ispcp-setup
Выбираем предложенные по умолчание варианты в скобках т.е. просто жмем Enter, за исключениме выделенных чернымцветом, ну а также паролей:


                                                                                                         
Welcome to ispCP '1.0.7 OMEGA' Setup Dialog.
        This program will set up ispCP OMEGA system on your server.
        Next you are asked to enter a "fully qualified hostname" (FQHN).
        For more infos read http://en.wikipedia.org/wiki/FQDN.
        Please enter a fully qualified hostname [host-200-130.simfi.net]: hosting.domain.org.ua
        Please enter the system network address [195.234.200.130]:                
        Please enter the domain name where ispCP OMEGA will be
        reachable on [admin.host-200-130.simfi.net]: admin.hosting.domain.org.ua
lease enter SQL server hostname [localhost]: 
        Please enter ispCP OMEGA SQL database name [ispcp]: 
        Please enter ispCP OMEGA SQL user name [root]: 
        Please enter ispCP OMEGA SQL password [none]: password
        Please repeat ispCP OMEGA SQL password: password
        Please enter ispCP FTP SQL user [vftp]:
      Please enter ispCP OMEGA FTP SQL user password [auto generate]: 
        [NOTICE] ispCP ftp SQL user password set to: Cp45454545?IlF545}
        Please enter ispCP OMEGA PMA control user [pma]: 
        Please enter ispCP OMEGA PMA control user password [auto
        generate]: 
        [NOTICE] PMA control user password set to: =XDF,PDFSDFJj&3455
  Please enter administrator login name [admin]: 
        Please enter administrator password: password
      Please repeat administrator password: password
        Please enter administrator e-mail address: yourbox@mail.com
дальше 3 пункта  также жмём по умолчанию...
  Starting ispCP installation
         * Stopping all services: ..........                                                                         [ Done ]
        Pre-installation tasks for Debian
         * Postgrey configuration (Updating listening port):                                           [ Done ]
        System checks
         * Mysql server connection:                                                                             [ Done ]
        Services setup
         * ispCP users and groups:                                                                              [ Done ]
         * ispCP directories:                                                                                        [ Done ]
         * ispCP main configuration file:                                                                       [ Done ]
         * ispCP database:                                                                                          [ Done ]
         * ispCP default language table:                                                                       [ Done ]
         * ispCP default SQL data:                                                                             [ Done ]
         * ispCP system hosts file:                                                                               [ Done ]
         * ispCP system resolver:                                                                                [ Done ]
         * ispCP crontab file:                                                                                      [ Done ]
         * ispCP Bind9 main configuration file:                                                            [ Done ]
         * ispCP Apache fastCGI modules configuration:                                            [ Done ]
         * ispCP Apache main vhost file:                                                                     [ Done ]
         * ispCP Apache AWStats vhost file:                                                              [ Done ]
         * ispCP Postfix configuration files:                                                                 [ Done ]
         * ispCP Courier-Authentication:                                                                    [ Done ]
         * ispCP ProFTPd configuration file:                                                               [ Done ]
         * ispCP init scripts:                                                                                        [ Done ]
        GUI setup
         * ispCP GUI Bind9 configuration:                                                                 [ Done ]
         * ispCP GUI fastCGI/PHP configuration:                                                      [ Done ]
         * ispCP GUI vhost file:                                                                                 [ Done ]
         * ispCP PMA configuration file:                                                                    [ Done ]
        Permissions setup
         * Set engine permissions:                                                                              [ Done ]
         * Set gui permissions:                                                                                   [ Done ]
        Finishing installation
         * Starting all services: ..........                                                                        [ Done ]
        Additional tasks
         * ispCP Rkhunter configuration:                                                                    [ Done ]
         * ispCP System cleanup:                                                                              [ Done ]
        Congratulations you installed ispCP '1.0.7 OMEGA' successfully!
        Please type http://admin.hosting.domain.org.ua in your browser and
        log in with your Administrator Account to use ispCP.


ШАГ 8

# rm -fR /tmp/ispcp

После установки панели в базе при выполнении команда или селектов в некоторых таблицах могут появляеться ошибки:

mysql> SHOW FULL FIELDS FROM  `admin` ;
ERROR 1 (HY000): Can't create/write to file '/tmp/#sql_1252_0.MYI' (Errcode: 13)

Эта же ошибка в phpmyadmin



Для разрешения проблемы нада разрешить полный доступ для всех пользователей к катологу /tmp. Причем необходиму поставить sticky bit в 1 для того чтоб фалы магли изменять только владельцы. Выполняем от рута:

Смотрим права на /tmp

hosting:~# ls -l / |grep tmp
drwxr-xr-x   8 root root  1752 Дек 17 00:00 tmp

Меняем права на /tmp
hosting:~# chmod 1777 /tmp

Проверяем 
hosting:~# ls -l / |grep tmp
drwxrwxrwt   8 root root  1752 Дек 17 01:36 tmp


Бесплатно зарегистрировать домен в зоне org.ua - shram.kiev.ua

Бесплатно зарегистрировать домен в зоне org.ua - shram.kiev.ua

среда, 15 декабря 2010 г.

Создание пользователя root в MySQL

Ставил ispCP Omega. При установке была бага с преднастройщиком Postfix

hosting:/usr/local/src/ispcp/ispcp-omega-1.0.7# aptitude install $(cat ./docs/Debian/debian-packages-`lsb_release -cs`)





    ┌──────────────────────────────────┤ Postfix Configuration ├──────────────────
    │                                                                                 
    │                                  Bad recipient delimiter                        
    │                                                                                 
The recipient delimiter must be a single character. 'question skipped' is        
what you entered.  
    │                                         OK                                      │                                                                                 │ 
    └─────────────────────────────────────────────────────────────────────────────




Вообщем я много раз жал ентер, и одноременно Ctrl+С, таким образом остановил установку, далее забутался. Потом анологично повтрил усаановку, и когда меня преднастройщи Postfix спрашивал о hostname FQDN,  на повторный вопрос я ответил нет. Устанока продолжилась...
Далее када все поставилось я перешел к этапу конифигурирования базы. Вот тут и вылезла проблема с отсутствием пользователя root.


debconf-show postfix



Есть база данных. Не заходит под root. Что делать?
Идем в  /etc/mysql/debian.cnf и видим что при устаноки базы по умолчанию создался логин и пароль. Заходим. 
hosting:/usr/local/src/ispcp/ispcp-omega-1.0.7# cat /etc/mysql/debian.cnf
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = CGsdvZpFplfMHq9R
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user     = debian-sys-maint
password = CGsdvZpFplfMHq9R
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

hosting:~# mysql -u debian-sys-maint -p
Enter password: CGsdvZpFplfMHq9R
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 34
Server version: 5.0.51a-24+lenny4 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

Выбираем бузу mysql
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

Смотрим таблицу user
mysql> select * from user;
+-----------+------------------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+
| Host      | User             | Password                                  | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections |
+-----------+------------------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+
| localhost | debian-sys-maint | *B0EB27A689F6C17DCA846AEA8DF794B21493B4A3 | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | N                | N              | N                   | N                  | N                |          |            |             |              |             0 |           0 |               0 |                    0 | 


Как видно пользователя root нет. При установке система по каим-то причинам его не создала, поэтому его нада создать вручную, чем мы сейчас и займемся. 
Стандартным методом GRANT ALL PRIVILEGES создать не получиться:

mysql> GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY '123' WITH GRANT OPTION;
ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

Повидемому нашему, по умолчанию, созданному ситемой пользователю debian-sys-maint не хватает прав на команду GRANT ALL PRIVILEGES.
Мы видем что почти под всеми привелегиями стоит Y а под некоторыми N
 Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv 
N                              N                                    N                              N                          N

Под параметром Create_user_priv  стоит N, поэтому мы и не можем создать для root'а, либо любого другого пользователя привелегии с помощью команды GRANT. Однако разрешенная привелегия Insert_priv позволяет нам вставить привелегии. Поэтому прибегним к хитрости. Создадим пользователя другой командой:

INSERT INTO user (Host,User,Password,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Reload_priv,Shutdown_priv, Process_priv,File_priv,Grant_priv,References_priv,Index_priv,Alter_priv,Show_db_priv,Super_priv,Create_tmp_table_priv,Lock_tables_priv, Execute_priv,Repl_slave_priv,Repl_client_priv,Create_view_priv,Show_view_priv,Create_routine_priv,Alter_routine_priv,Create_user_priv,max_questions,max_updates,max_connections,max_user_connections) VALUES ('localhost','root',PASSWORD('123'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','0','0','0','0');

Это все одна команда в одну строчку! на конце на забываем знак ;

Итак, мы добавляем в базе mysql в таблицу user суперпользователя root
Всего в таблице user 37 столбцов:
№1-3. Первые три это как видно Host- это домен откуда разрешаем заходить,его значение localhost. User это root. Потом идет пароль 123. 
№ 4-29. Далее идут привелегии я насчитал 26 шт. Select_priv,Insert_priv и т.д. из которых пользователю debian-sys-maint по умалчанию созданому системой разрешены только  21, кроме последних 5 помеченных N. Мы же в свою очередь создаем все привелегии со значением  
№ 30-33. Далее пропускаем 4 значения для  ssl_type | ssl_cipher | x509_issuer | x509_subject  (видно пустые солбцы)
№ 34-37. Для последних четырех столбцов указываем четыре нуля.

Затем чтобы привилегии вступили в силу выполняем команду:
mysql> FLUSH PRIVILEGES;

Позже паролшь можно будет сменить камандами:
mysql> UPDATE user SET Password=PASSWORD('123') WHERE User='root' and Host='localhost';
mysql> FLUSH PRIVILEGES;

И перезапускаем базу:
hosting:~# /etc/init.d/mysql restart
Stopping MySQL database server: mysqld.                                                                                      
Starting MySQL database server: mysqld.                                                                                      
Checking for corrupt, not cleanly closed and upgrade needing tables..

Проверив таиблицу user увидем что во всех столбцах с привелегиями стоят Y:
mysql> select * from user;
| localhost | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                |          |            |             |              |             0 |           0 |               0 |                    0 | 

Поздровляю root создан!
Надеюсь Вам поможет. Сам не один час бился вот по этим ссылкам:


aka_delix

воскресенье, 12 декабря 2010 г.

Настройка программного RAID1 на первичных и логических разделах на работающей системе Linux Debian Lenny

Содержание:


Источники
Введение
1. О системе
2. Просмотр дисков
3. Установка пакетов
4. Подготовка второго диска /dev/sdb
5. Создание RAID-массива
6. Подготовка и перенос данных
7. Настройка Grub (часть 1)
8. Подготовка первого диска /dev/sda
9. Настройка Grub (часть 2)
10. Тестирование и решение возможных проблем
11. Восстонавление(копирование) данных новый винчестер, в случае выходно из строя одного из двух работающех дисков массива. [пункт в процессе написания]


Источники:
Руководство Falko Timme и его перевод Андрей Синицын aka boombick . 

Введение

Целью данной статьи являеться практический разбор руководства Falko Timme. Я хотел показать читателю что комманды в руковдсте всё ещё актуальны на 12 декобря 2010 года. Главным отличием являеться разница в разбиение дисков. В отличии от руководства Falko Timme, мы будем строить массиы не только на первычных(Primary) разделах, но также и на логических(Logical) разделах. Также будем использовать файловаю систему reiserfs для разделов /tmp и /var/log.
В конце статьи в разделе "Тестирование" я привел решение проблемы, когда после аварийного выключания питания при загрузке не все массивы строяться верно, т.е. некоторые массивы строяться из одного диска, вместо как положенно двух.

Итак, мы имеем два SATA-диска одного объема, одинаковой модели и из одной партии. Диск sda уже стоиn на машине и работает. Выключаем компьютер и устонавливаем второй винчестер(sdb).


1. О системе

Настройка и испытания проводились 12.12.2010 на тестовой площадке:

Материнская плата:  ASRock, ALiveNF4G-DVI
Процессор:                AMD Sempron(tm) Processor 2800+
Память:                      TakeMS, DDR2 1024 2шт.
Винчестеры:             SAMSUNG, SATA HD080HJ 2шт. (из одной партии, серийные номера отличаются на несколько цифр)

Была установленна свежая система из дестрибутива Debian GNU/Linux 5.0.7, из стабильной на тот момент ветки lenny. Ядро 2.6.26-2-686.

Система Debian 5 stable/lenny:

leopard:~# cat /etc/debian_version                                                                                                           
5.0.7       
leopard:~# uname -a                                                                                                          
Linux leopard 2.6.26-2-686 #1 SMP Thu Nov 25 01:53:57 UTC 2010 i686 GNU/Linux


2. Просмотр дисков 


Просмотрем состояние наших дисков:

leopard:~# df -h


leopard:~# fdisk -l
leopard:~# cat /etc/mtab 




3. Установка пакетов

Теперь устоновим необходимые пакеты.
Установим initramfs-tools для работы с образом ядра (у меня уже был установлен этот пакет):
leopard:~# apt-get install initramfs-tools

Установим пакет mdadm для настройки программного RAID-1. В процессе установки выбираем "all" и жмём OK.


leopard:~# apt-get install mdadm
Чтение списков пакетов... Готово
Построение дерева зависимостей       
Чтение информации о состоянии... Готово
НОВЫЕ пакеты, которые будут установлены:
  mdadm
обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 275kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 799kB.
Получено:1 http://ftp.ua.debian.org lenny/main mdadm 2.6.7.2-3 [275kB]
Получено 275kБ за 0s (381kБ/c)
Предварительная настройка пакетов ...
Выбор ранее не выбранного пакета mdadm.
(Чтение базы данных... на данный момент установлено 22001 файлов и каталогов.)
Распаковывается пакет mdadm (из файла .../mdadm_2.6.7.2-3_i386.deb)...
Обрабатываются триггеры для man-db ...
Настраивается пакет mdadm (2.6.7.2-3) ...
Generating array device nodes... done.
Generating mdadm.conf... done.
update-initramfs: deferring update (trigger activated)
Starting MD monitoring service: mdadm --monitor.                                                
Assembling MD arrays...done (no arrays found in config file or automatically).
Обрабатываются триггеры для initramfs-tools ...                                                    
update-initramfs: Generating /boot/initrd.img-2.6.26-2-686
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
W: mdadm: no arrays defined in configuration file



Далее подгрузим модули:
leopard:~# modprobe md
leopard:~# modprobe linear
leopard:~# modprobe multipath
leopard:~# modprobe raid0
leopard:~# modprobe raid1
leopard:~# modprobe raid5
leopard:~# modprobe raid6
leopard:~# modprobe raid10

Проверим подгрузились ли модули:
leopard:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices: 


4. Подготовка второго диска /dev/sdb

Оба диска должни иметь одинаковыю таблицу разделов. Для этого скопируем таблицу разделов с диска sda на диск sdb:

leopard:~# sfdisk -d /dev/sda | sfdisk /dev/sdb





























Проверим что имеем одинаковые таблицы разделов на обоих дисках:

leopard:~# sfdisk -d /dev/sda | sfdisk /dev/sdb


На втором диске sdb изменяем тип разделов на Linux raid auto (код fd). Для этого указываем ключи t-type, цифры 1-7 номера разделов, L-list of types, fd-код, w-wright partitions changes.
Красным цветом подсвеченны варианты ответов.

leopard:~# fdisk /dev/sdb

The number of cylinders for this disk is set to 9729.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): t
Partition number (1-7): 1
Hex code (type L to list codes): L

 0  Empty           1e  Hidden W95 FAT1 80  Old Minix       be  Solaris boot   
 1  FAT12           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 2  XENIX root      39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 5  Extended        41  PPC PReP Boot   85  Linux extended  c7  Syrinx         
 6  FAT16           42  SFS             86  NTFS volume set da  Non-FS data    
 7  HPFS/NTFS       4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 8  AIX             4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 9  AIX bootable    4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 a  OS/2 Boot Manag 50  OnTrack DM      93  Amoeba          e1  DOS access     
 b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          e4  SpeedStor      
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  EFI GPT        
10  OPUS            55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
11  Hidden FAT12    56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
12  Compaq diagnost 5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
16  Hidden FAT16    63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fd  Linux raid auto
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fe  LANstep        
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid ff  BBT            
1c  Hidden W95 FAT3 75  PC/IX          
                                 fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): t
Partition number (1-7): 2
Hex code (type L to list codes): fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): t
Partition number (1-7): 3
Hex code (type L to list codes): fd
Changed system type of partition 3 to fd (Linux raid autodetect)

Command (m for help): t
Partition number (1-7): 4
Hex code (type L to list codes): fd
You cannot change a partition into an extended one or vice versa
Delete it first.

Command (m for help): t
Partition number (1-7): 5
Hex code (type L to list codes): fd
Changed system type of partition 5 to fd (Linux raid autodetect)

Command (m for help): t
Partition number (1-7): 6
Hex code (type L to list codes): fd
Changed system type of partition 6 to fd (Linux raid autodetect)

Command (m for help): t
Partition number (1-7): 7
Hex code (type L to list codes): fd
Changed system type of partition 7 to fd (Linux raid autodetect)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Обратите внимание на ошибку при попытке изменить тип раздела 4. Это произошло т.к. раздел 4 расширенный. В расширеном (Extanded) нельзя менять тип файловой системы, поэтому программа fdisk пропустиа этот раздел.

Что бы удостовериться что на диске sdb не было никаких ранее установленных RAID-массивов
выполним команду mdadm --zero-superblock /dev/sdb1:

leopard:~# mdadm --zero-superblock /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1  
Строка выше говорит о том что на этом диске на было ранее RAID-массивов. Проделать эту операцию для каждого раздела (от 1-7 в моём случае, раздел 4 можно пропустить так как он расширенный)

5. Создание RAID-массива

Будем создавать массивы от /dev/md0 до /dev/md6. Нумерация начинается с цифры 0.
Раздел /dev/sdb1 добавим в массив /dev/md0,  /dev/sdb2 -->  /dev/md1 и так далее, расширенный раздел (4) пропускаем,либо можем попробовать, но mdadm выдаст ошибку. Разделы на первом диске мы пока не трогаем, т.к. с него загружена система. Поэтому при создании массива на месте первого диска sda мы будем использовать указатель missing.

Схема:
/dev/md0       -> /dev/sdb1    /boot      Primary     ext3
/dev/md1       -> /dev/sdb2    swap      Primary      swap
/dev/md2       -> /dev/sdb3    /             Primary      ext3
пропускаем      /dev/sdb4                   Extendet      
/dev/md3       -> /dev/sdb5    /var         Logical      ext3
/dev/md4       -> /dev/sdb6    /var/log    Logical     reiserfs
/dev/md5       -> /dev/sdb7    /tmp        Logical      reiserfs



Создаём массивы:


leopard:~# mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm: /dev/sdb1 appears to contain an ext2fs file system
    size=979932K  mtime=Fri Nov 12 10:27:13 2010
Continue creating array? yes  
mdadm: array /dev/md0 started.
(Система предупреждает что диск не пуст и на нём обнаруженна файловая система, пишем "yes")
leopard:~# mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2
mdadm: array /dev/md1 started.
leopard:~# mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb3
mdadm: array /dev/md2 started.
leopard:~# mdadm --create /dev/md3 --level=1 --raid-disks=2 missing /dev/sdb5
mdadm: array /dev/md3 started.
leopard:~# mdadm --create /dev/md4 --level=1 --raid-disks=2 missing /dev/sdb6
mdadm: array /dev/md4 started.
leopard:~# mdadm --create /dev/md5 --level=1 --raid-disks=2 missing /dev/sdb7
mdadm: array /dev/md5 started.



Проверяем состояние массива. Мы видим что у нас 6 поврежденных массивов. Символы [_U] говорят о том что первое устройство повреждено. Когда массив исправен то символ [UU].

leopard:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md5 : active (auto-read-only) raid1 sdb7[1]
      3927744 blocks [2/1] [_U]
      
md4 : active (auto-read-only) raid1 sdb6[1]
      4883648 blocks [2/1] [_U]
      
md3 : active (auto-read-only) raid1 sdb5[1]
      55568704 blocks [2/1] [_U]
      
md2 : active (auto-read-only) raid1 sdb3[1]
      9767424 blocks [2/1] [_U]
      
md1 : active (auto-read-only) raid1 sdb2[1]
      3903680 blocks [2/1] [_U]
      
md0 : active (auto-read-only) raid1 sdb1[1]
      96256 blocks [2/1] [_U]
      
unused devices:



Запись (auto-read-only) говорит о том что на это устройство пока ничего не писалось, при следующей перезагрузке когда на него начнет писаться информация, массив автоматически перейдет в состояние right-wright. По видимому это особенность ядра 2.6 так что нечего бояться. Ссылке по этому вопросу приведены ниже:
http://realtechtalk.com/mdadm_autoreadonly_Linux_Software_RAID_solution-1010-articles


Создаём файловые системы на массивах:

/dev/md0           ext3          /boot
/dev/md1           swap        подкачка
/dev/md2           ext3          /
/dev/md3           ext3          /var
/dev/md4           reiserfs     /var/log
/dev/md5           reiserfs     /tmp

Для раздела /boot используем ext3:


leopard:~# mkfs.ext3 /dev/md0
mke2fs 1.41.3 (12-Oct-2008)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
24096 inodes, 96256 blocks
4812 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
12 block groups
8192 blocks per group, 8192 fragments per group
2008 inodes per group
Superblock backups stored on blocks: 
        8193, 24577, 40961, 57345, 73729
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


Подкачка swap:


leopard:~# mkswap /dev/md1
Setting up swapspace version 1, size = 3997364 kB
no label, UUID=cf645ecb-76b6-4ba9-9de6-81171fd1097d


Корневая файловая система /, также используем ext3: 


leopard:~# mkfs.ext3 /dev/md2
mke2fs 1.41.3 (12-Oct-2008)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
610800 inodes, 2441856 blocks
122092 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2503999488
75 block groups
32768 blocks per group, 32768 fragments per group
8144 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


Раздел /var, используем ext3:



leopard:~# mkfs.ext3 /dev/md3
mke2fs 1.41.3 (12-Oct-2008) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 3473408 inodes, 13892176 blocks 694608 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=0 424 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 38 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.


Раздел /var/log используем reiserfs:


leopard:~# mkfs.reiserfs /dev/md4
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)
Guessing about desired format.. Kernel 2.6.26-2-686 is running. Format 3.6 with standard journal Count of blocks on the device: 1220912 Number of blocks consumed by mkreiserfs formatting process: 8249 Blocksize: 4096 Hash function used to sort names: "r5" Journal Size 8193 blocks (first block 18) Journal Max transaction length 1024 inode generation number: 0 UUID: 7cd70dc6-fc16-431b-832f-e94dffd57078 ATTENTION: YOU SHOULD REBOOT AFTER FDISK! ALL DATA WILL BE LOST ON '/dev/md4'! Continue (y/n):y Initializing journal - 0%....20%....40%....60%....80%....100% Syncing..ok Tell your friends to use a kernel based on 2.4.18 or later, and especially not a kernel based on 2.4.9, when you use reiserFS. Have fun. ReiserFS is successfully created on /dev/md4.



Раздел /tmp используем reiserfs:


leopard:~# mkfs.reiserfs /dev/md5 mkfs.reiserfs 3.6.19 (2003 www.namesys.com) Guessing about desired format.. Kernel 2.6.26-2-686 is running. Format 3.6 with standard journal Count of blocks on the device: 981936 Number of blocks consumed by mkreiserfs formatting process: 8241 Blocksize: 4096 Hash function used to sort names: "r5" Journal Size 8193 blocks (first block 18) Journal Max transaction length 1024 inode generation number: 0 UUID: 02c2e0cb-3b83-44e0-aa1d-a31a9b290558 ATTENTION: YOU SHOULD REBOOT AFTER FDISK! ALL DATA WILL BE LOST ON '/dev/md5'! Continue (y/n):y Initializing journal - 0%....20%....40%....60%....80%....100% Syncing..ok Tell your friends to use a kernel based on 2.4.18 or later, and especially not a kernel based on 2.4.9, when you use reiserFS. Have fun. ReiserFS is successfully created on /dev/md5.



Теперь отредактируем конфигурационный файл /etc/mdadm/mdadm.conf, предварительно его сохранив. Внизу в строках указанна информация о наших массивах.

leopard:~# cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig leopard:~# mdadm --examine --scan >> /etc/mdadm/mdadm.conf leopard:~# cat /etc/mdadm/mdadm.conf # mdadm.conf # # Please refer to mdadm.conf(5) for information about this file. # # by default, scan all partitions (/proc/partitions) for MD superblocks. # alternatively, specify devices to scan, using wildcards if desired. DEVICE partitions # auto-create devices with Debian standard permissions CREATE owner=root group=disk mode=0660 auto=yes # automatically tag new arrays as belonging to the local system HOMEHOST # instruct the monitoring daemon where to send mail alerts MAILADDR root # definitions of existing MD arrays # This file was auto-generated on Sun, 12 Dec 2010 19:33:21 +0200 # by mkconf $Id$ ARRAY /dev/md0 level=raid1 num-devices=2 UUID=be541299:39e2f0d2:84d43804:33b41315 ARRAY /dev/md1 level=raid1 num-devices=2 UUID=94343e1b:0072922f:84d43804:33b41315 ARRAY /dev/md2 level=raid1 num-devices=2 UUID=1e718bdf:ee27bf42:84d43804:33b41315 ARRAY /dev/md3 level=raid1 num-devices=2 UUID=7f519a51:9491b619:84d43804:33b41315 ARRAY /dev/md4 level=raid1 num-devices=2 UUID=d6317c02:6e989277:84d43804:33b41315 ARRAY /dev/md5 level=raid1 num-devices=2 UUID=63c93027:f0b5b493:84d43804:33b41315



6. Подготовка и перенос данных

Смонтируем наши массивы, все кроме swap, предворительно создав точки монтирования:

leopard:~# mkdir /mnt/md0
leopard:~# mkdir /mnt/md2
leopard:~# mkdir /mnt/md3
leopard:~# mkdir /mnt/md4
leopard:~# mkdir /mnt/md5
leopard:~# mount /dev/md0 /mnt/md0
leopard:~# mount /dev/md2 /mnt/md2
leopard:~# mount /dev/md3 /mnt/md3
leopard:~# mount /dev/md4 /mnt/md4
leopard:~# mount /dev/md5 /mnt/md5

Проверим:

leopard:~# cat /etc/mtab 
/dev/sda3 / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
procbususb /proc/bus/usb usbfs rw 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
/dev/sda1 /boot ext3 rw 0 0
/dev/sda7 /tmp reiserfs rw,nosuid,nodev 0 0
/dev/sda5 /var ext3 rw 0 0
/dev/sda6 /var/log reiserfs rw,noexec,nosuid,nodev 0 0
/dev/md0 /mnt/md0 ext3 rw 0 0
/dev/md3 /mnt/md3 ext3 rw 0 0
/dev/md4 /mnt/md4 reiserfs rw 0 0
/dev/md2 /mnt/md2 ext3 rw 0 0
/dev/md5 /mnt/md5 reiserfs rw 0 0

Теперь необходимо отредактировать файлы /etc/fstab и /etc/mtab заменив в них /dev/sda1  на /dev/md0 по схеме:

/dev/md0      ->  /dev/sda1      /boot
/dev/md1      ->  /dev/sda2      подкачка
/dev/md2      ->  /dev/sda3      /   
/dev/md3      ->  /dev/sda5      /var
/dev/md4      ->  /dev/sda6      /var/log
/dev/md5      ->  /dev/sda7      /tmp


Файлы должны быть приведены к следующему виду, красным выделены изменения:



leopard:~# cat /etc/fstab                                                                                                
# /etc/fstab: static file system information.                                                                                
#                                                                                                                            
                                                                  
proc            /proc           proc    defaults        0       0                                                            
/dev/md2       /               ext3    errors=remount-ro 0       1                                                           
/dev/md0       /boot           ext3    defaults        0       2
/dev/md5       /tmp            reiserfs nodev,nosuid    0       2
/dev/md3       /var            ext3    defaults        0       2
/dev/md4       /var/log        reiserfs nodev,nosuid,noexec 0       2
/dev/md1       none            swap    sw              0       0
/dev/hdd        /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0
leopard:~# cat /etc/mtab
/dev/md2 / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
procbususb /proc/bus/usb usbfs rw 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
/dev/md0 /boot ext3 rw 0 0
/dev/md5 /tmp reiserfs rw,nosuid,nodev 0 0
/dev/md3 /var ext3 rw 0 0
/dev/md4 /var/log reiserfs rw,noexec,nosuid,nodev 0 0




Откройте файл /boot/grub/menu.lst и добавьте опцию fallback сразу после default
[...]
default         0
fallback        1
[...]
Это значит, что если первое ядро (нумерация начинается с нуля) не сможет загрузиться, то будет загружено следующее в списке.
В конце этого файла расположены блоки, описывающие параметры ядер для загрузки. Скопируйте первый блок, замените в копии root=/dev/sda3 на root=/dev/md2 и root (hd0,0) на root (hd1,0), после чего поставьте полученный блок первым в списке. 

В первом блоке в строке title в конце строки допишите RAID (hd1). 
После редактирования файл должен выглядеть примерно так:


leopard:~# nano /boot/grub/menu.lst
[...]
## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
#
# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.
# WARNING: If you are using dmraid do not change this entry to 'saved' or your
# array will desync and will not let you boot your system.
default         0
#### fallback has been added by me
fallback        1
[...]
[...]
## ## End Default Options ##
title           Debian GNU/Linux, kernel 2.6.26-2-686 RAID (hd1) 
root            (hd1,0)
kernel          /vmlinuz-2.6.26-2-686 root=/dev/md2 ro quiet
initrd          /initrd.img-2.6.26-2-686
title           Debian GNU/Linux, kernel 2.6.26-2-686
root            (hd0,0)
kernel          /vmlinuz-2.6.26-2-686 root=/dev/sda3 ro quiet
initrd          /initrd.img-2.6.26-2-686
title           Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode)
root            (hd0,0)
kernel          /vmlinuz-2.6.26-2-686 root=/dev/sda3 ro single
initrd          /initrd.img-2.6.26-2-686
### END DEBIAN AUTOMAGIC KERNELS LIST




Обновим RAM-диск:
leopard:~# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-2.6.26-2-686

Копируем данные с sda на sdb:

Сначала проверим перед копированием что у нас есть на /mnt/md2/
leopard:~# ls -l /mnt/md2/
итого 16
drwx------ 2 root root 16384 Дек 12 22:21 lost+found

Теперь копируем из корня /  диска sda в котором щас находимся на массив /mnt/md2:
leopard:~# cp -dpRx / /mnt/md2

Проверяем что у нас появилось в /mnt/md2, можем также сравнить что у нас в родном / на sda:
leopard:~# ls -l /mnt/md2/
итого 88

По аналогии поступаем с остальными массивами, копируем и проверяем содержимое:
leopard:~# cd /boot
leopard:/boot# cp -dpRx . /mnt/md0
leopard:/boot# ls -l /mnt/md0


leopard:~# cd /var
leopard:/var# cp -dpRx . /mnt/md3
leopard:/var# ls -l /mnt/md3


leopard:~# cd /var/log
leopard:/var/log# cp -dpRx . /mnt/md4
leopard:/var/log# ls -l /mnt/md4

Если папка /tmp пуста, можно из неё ничего не копировать.



7. Настройка Grub (часть 1)

Устанавливаем загрузчик на второй диск. Запускаем grub и выполняем команды в его оболочке:

leopard:/tmp# grub
Probing devices to guess BIOS drives. This may take a long time.
    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)
       [ Minimal BASH-like line editing is supported.   For
         the   first   word,  TAB  lists  possible  command
         completions.  Anywhere else TAB lists the possible
         completions of a device/filename. ]
grub> root (hd0,0)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd0)"...  17 sectors are embedded.
succeeded
 Running "install /grub/stage1 (hd0) (hd0)1+17 p (hd0,0)/grub/stage2 /grub/menu.lst"... succeeded
Done.
grub> root (hd1,0)
 Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd1)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd1)"...  17 sectors are embedded.
succeeded
 Running "install /grub/stage1 (hd1) (hd1)1+17 p (hd1,0)/grub/stage2 /grub/menu.lst"... succeeded
Done.
grub> quit


Перезагружаем систему:
leopard:~# reboot


Теперь система должна загрузиться с нашего RAID-массива. При перезагрузки в меню grub будут предложенны  три варианта загрузки. Выбираем 1-ый, с массива md2, т.е. со второго винчестера, что нам и нужно. Остальные нам не интересны 2-ой с диска sda, и 3-ий с диска sda в singl mode.


8. Подготовка первого диска /dev/sda

Проверяем с какого диска  загрузились, если все прошло удачно тот видим /dev/md2 и т.д.:
leopard:~# df -h
Файловая система      Разм  Исп  Дост  Исп% смонтированна на
/dev/md2              9,2G  492M  8,3G   6% /
tmpfs                 982M     0  982M   0% /lib/init/rw
udev                   10M  688K  9,4M   7% /dev
tmpfs                 982M     0  982M   0% /dev/shm
/dev/md0               92M   21M   67M  24% /boot
/dev/md5              3,8G   33M  3,8G   1% /tmp
/dev/md3               53G  340M   50G   1% /var
/dev/md4              4,7G   35M  4,7G   1% /var/log

Проверим статистику состояния массивов:


leopard:~# cat /proc/mdstat                                                                                   
Personalities : [raid1] 
md5 : active raid1 sdb7[1]
      3927744 blocks [2/1] [_U]
      
md4 : active raid1 sdb6[1]
      4883648 blocks [2/1] [_U]
      
md3 : active raid1 sdb5[1]
      55568704 blocks [2/1] [_U]
      
md2 : active raid1 sdb3[1]
      9767424 blocks [2/1] [_U]
      
md1 : active (auto-read-only) raid1 sdb2[1]
      3903680 blocks [2/1] [_U]
      
md0 : active raid1 sdb1[1]
      96256 blocks [2/1] [_U]
      
unused devices:

Теперь необходимо поменять тип разделов на диске /dev/sda на Linux raid autodetect таким же образом, как мы это делали ранее с диском /dev/sdb:

leopard:/home/vitaliy# fdisk /dev/sda
Command (m for help): t
Partition number (1-7): 1
      Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-7): 2
Hex code (type L to list codes): fd
Changed system type of partition 2 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-7): 3
Hex code (type L to list codes): fd
Changed system type of partition 3 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-7): 4
Hex code (type L to list codes): fd
You cannot change a partition into an extended one or vice versa
Delete it first.
Command (m for help): t   
Partition number (1-7): 5
Hex code (type L to list codes): fd
Changed system type of partition 5 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-7): 6
Hex code (type L to list codes): fd
Changed system type of partition 6 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-7): 7
Hex code (type L to list codes): fd
Changed system type of partition 7 to fd (Linux raid autodetect)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Устройство или ресурс занято.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.


Теперь добавим  /dev/sda1/dev/sda2 ... и /dev/sda7 в RAID-массив:


leopard:/home/vitaliy# mdadm --add /dev/md0 /dev/sda1
mdadm: added /dev/sda1
leopard:/home/vitaliy# mdadm --add /dev/md1 /dev/sda2
mdadm: added /dev/sda2
leopard:/home/vitaliy# mdadm --add /dev/md2 /dev/sda3
mdadm: added /dev/sda3
leopard:/home/vitaliy# mdadm --add /dev/md3 /dev/sda5
mdadm: added /dev/sda5
leopard:/home/vitaliy# mdadm --add /dev/md4 /dev/sda6
mdadm: added /dev/sda6
leopard:/home/vitaliy# mdadm --add /dev/md5 /dev/sda7
mdadm: added /dev/sda7


Проверяем состояние массива. Видим что идет процесс синхронизации:

leopard:/home/vitaliy# cat /proc/mdstat
Personalities : [raid1] md5 : active raid1 sda7[2] sdb7[1] 3927744 blocks [2/1] [_U] resync=DELAYED md4 : active raid1 sda6[2] sdb6[1] 4883648 blocks [2/1] [_U] resync=DELAYED md3 : active raid1 sda5[2] sdb5[1] 55568704 blocks [2/1] [_U] [===>.................] recovery = 18.0% (10035072/55568704) finish=13.4min speed=56366K/sec md2 : active raid1 sda3[2] sdb3[1] 9767424 blocks [2/1] [_U] resync=DELAYED md1 : active raid1 sda2[0] sdb2[1] 3903680 blocks [2/2] [UU] md0 : active raid1 sda1[0] sdb1[1] 96256 blocks [2/2] [UU] unused devices:


Коммандой watch cat /proc/mdstat можно смотреть в реальном времени. Обязательно дождитесь завершения процесса синхронизации. 

После синхронизации файл /proc/mdstat будет выгледить следующим образом:

leopard:/home/vitaliy# cat /proc/mdstat                                                                                               
Personalities : [raid1] 
md5 : active raid1 sda7[0] sdb7[1]
      3927744 blocks [2/2] [UU]
      
md4 : active raid1 sda6[0] sdb6[1]
      4883648 blocks [2/2] [UU]
      
md3 : active raid1 sda5[0] sdb5[1]
      55568704 blocks [2/2] [UU]
      
md2 : active raid1 sda3[0] sdb3[1]
      9767424 blocks [2/2] [UU]
      
md1 : active raid1 sda2[0] sdb2[1]
      3903680 blocks [2/2] [UU]
      
md0 : active raid1 sda1[0] sdb1[1]
      96256 blocks [2/2] [UU]
      
unused devices:




Отредактируем /etc/mdadm/mdadm.conf, так что бы учесть теперешнюю ситуацию с массивами:

leopard:/home/vitaliy# cp /etc/mdadm/mdadm.conf_orig /etc/mdadm/mdadm.conf                           
leopard:/home/vitaliy# mdadm --examine --scan >> /etc/mdadm/mdadm.conf
leopard:/home/vitaliy# cat /etc/mdadm/mdadm.conf
# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#
# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions
# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes
# automatically tag new arrays as belonging to the local system
HOMEHOST
# instruct the monitoring daemon where to send mail alerts
MAILADDR root
# definitions of existing MD arrays
# This file was auto-generated on Sun, 12 Dec 2010 19:33:21 +0200
# by mkconf $Id$
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=be541299:39e2f0d2:84d43804:33b41315
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=94343e1b:0072922f:84d43804:33b41315
ARRAY /dev/md2 level=raid1 num-devices=2 UUID=1e718bdf:ee27bf42:84d43804:33b41315
ARRAY /dev/md3 level=raid1 num-devices=2 UUID=7f519a51:9491b619:84d43804:33b41315
ARRAY /dev/md4 level=raid1 num-devices=2 UUID=d6317c02:6e989277:84d43804:33b41315
ARRAY /dev/md5 level=raid1 num-devices=2 UUID=63c93027:f0b5b493:84d43804:33b41315



9. Настройка Grub (часть 2)

Почти всё готово. Теперь отредактируем /boot/grub/menu.lst. На данный момент Grub настроен на загрузку с /dev/sdb (hd1,0). Конечно же, мы все еще хотим, чтобы система грузилась, если /dev/sdb содержит какие-то ошибки. Создадаим копию первого блока с описанием параметров загрузки (в котором описан hd1), вставим ее ниже и заменим в этом блоке hd1 на hd0. Остальные блоки закомментируем. Теперь конфиг загрузчика должен выглядеть примерно так:


leopard:/home/vitaliy# nano /boot/grub/menu.lst                                                                                  
[...]
# kopt=root=/dev/md2 ro
[...]
[...]
## ## End Default Options ##
title           Debian GNU/Linux, kernel 2.6.26-2-686 RAID (hd1)
root            (hd1,0)
kernel          /vmlinuz-2.6.26-2-686 root=/dev/md2 ro quiet
initrd          /initrd.img-2.6.26-2-686
title           Debian GNU/Linux, kernel 2.6.26-2-686 RAID (hd0)
root            (hd0,0)
kernel          /vmlinuz-2.6.26-2-686 root=/dev/md2 ro quiet
initrd          /initrd.img-2.6.26-2-686
#title          Debian GNU/Linux, kernel 2.6.26-2-686
#root           (hd0,0)
#kernel         /vmlinuz-2.6.26-2-686 root=/dev/sda3 ro quiet
#initrd         /initrd.img-2.6.26-2-686
#title          Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode)
#root           (hd0,0)
#kernel         /vmlinuz-2.6.26-2-686 root=/dev/sda3 ro single
#initrd         /initrd.img-2.6.26-2-686
### END DEBIAN AUTOMAGIC KERNELS LIST




Обновляем RAM-диск и перезагружаем систему:
leopard:/home/vitaliy# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-2.6.26-2-686
leopard:~# reboot

При перезагрузки видим два варианта загрузки в меню Grub.



Поздравляю! Вы только что настроили RAID-1 массив в системе Debian Lenny (stable 5.0.7)


10. Тестирование и решение возможных проблем


Для тестирования выключите компьютор, отключите любой из двух винчестеров, и включите компьютер. Система должна загрузиться без проблем.


Если после нескольких экспериментов с отключением/включением дисков во время загрузке вы видите что некоторые массивы поднимаються с 1 диском а не с двумя, необходимо будет выполнить действия кторые преведены ниже.

Вот так выглядит правильная загрузка массива:
[    6.794486] md: md0 stopped.
[    6.807811] md: bind
[    6.808026] md: bind
[    6.821761] raid1: raid set md0 active with 2 out of 2 mirrors


А вот так неправильная:

[    6.901313] md: md2 stopped.
[    6.933030] md: bind
[    6.933224] md: bind
[    6.933246] md: kicking non-fresh sdb3 from array!
[    6.933251] md: unbind
[    6.933259] md: export_rdev(sdb3)
[    6.946926] raid1: raid set md2 active with 1 out of 2 mirrors

Посмотрим ошибки загрузки ядра командой dmesg:


leopard:~# dmesg
[...]
[    6.785280] md: raid1 personality registered for level 1
[...] [    6.794486] md: md0 stopped.
[    6.807811] md: bind
[    6.808026] md: bind [    6.821761] raid1: raid set md0 active with 2 out of 2 mirrors
[...] [    6.822465] md: md1 stopped.
[    6.885858] md: bind
[    6.886056] md: bind
[    6.900995] raid1: raid set md1 active with 2 out of 2 mirrors
[...] [    6.901313] md: md2 stopped. [    6.933030] md: bind
[    6.933224] md: bind
[    6.933246] md: kicking non-fresh sdb3 from array!
[    6.933251] md: unbind
[    6.933259] md: export_rdev(sdb3)
[    6.946926] raid1: raid set md2 active with 1 out of 2 mirrors
[...] [    6.947240] md: md3 stopped.
[    6.958693] md: bind
[    6.958897] md: bind
[    6.958932] md: kicking non-fresh sdb5 from array!
[    6.958937] md: unbind
[    6.958944] md: export_rdev(sdb5)
[    6.975326] raid1: raid set md3 active with 1 out of 2 mirrors
[...] [    6.975642] md: md4 stopped.
[    6.986263] md: bind
[    6.986473] md: bind
[    6.986498] md: kicking non-fresh sdb6 from array!
[    6.986504] md: unbind
[    6.986511] md: export_rdev(sdb6)
[    7.009305] raid1: raid set md4 active with 1 out of 2 mirrors
[...] [    7.009620] md: md5 stopped.
[    7.075068] md: bind
[    7.075359] md: bind
[    7.089303] raid1: raid set md5 active with 2 out of 2 mirrors
[...]

Мы видим что при загрузки модуль madm в процессе сборки каждего массива не включил в них некоторые  диски. Например в массив md2 небыл включен диск sdb3, причины могут быть разные. Возможно проблемы с питанием, например при аварийном выключении.

Для решения проблеммы нада вручную включить каждый диск в соответствующие массивы:
leopard:~# mdadm /dev/md2  --add /dev/sdb3
leopard:~# mdadm /dev/md3  --add /dev/sdb5
leopard:~# mdadm /dev/md4  --add /dev/sdb6

Проверим:
leopard:~# cat /proc/mdstat
Personalities : [raid1] 
md5 : active raid1 sda7[0] sdb7[1]
      3927744 blocks [2/2] [UU]
      
md4 : active raid1 sda6[0]
      4883648 blocks [2/1] [U_]
      
md3 : active raid1 sdb5[2] sda5[0]
      55568704 blocks [2/1] [U_]
      [=>...................]  recovery =  5.9% (3317568/55568704) finish=15.4min speed=56273K/sec
      
md2 : active raid1 sdb3[1] sda3[0]
      9767424 blocks [2/2] [UU]
      
md1 : active (auto-read-only) raid1 sda2[0] sdb2[1]
      3903680 blocks [2/2] [UU]
      
md0 : active raid1 sda1[0] sdb1[1]
      96256 blocks [2/2] [UU]
      
unused devices:


Если команды mdadm --add не сработают, то возможно понадобиться предварительно выполнить команду mdadm с ключами --fail  и -- remove. (в моём случае команда mdadm с ключами --fail  и -- remove не понадобилась):
leopard:~# mdadm /dev/md2  --fail  /dev/sdb3 --remove  /dev/sdb3
leopard:~# mdadm /dev/md2  --add /dev/sdb3

Перезагрузим систему и проверим.