Бэкапы виртуальных машин в VMWare ESXi

Проблема резервного копирования виртуальных машин в VMWare ESXi встает очень остро, так как нет нормально инструмента для этих целей. Многие в интернете рекомендуют скрипт ghettoVCB. Я считаю этот скрипт слишком замудренным с избыточным кодом. Все можно было бы сделать проще, вот пример:

#!/bin/sh

sourcedir=/vmfs/volumes/datastore1
backupdir=/vmfs/volumes/nfs-backup

for i in `vim-cmd vmsvc/getallvms|awk '{print($1 "-" $2)}'`; do
        if [ $i != "Vmid-Name" ]; then
                vmid=${i%%-*}
                vmfs=${i#*-}
       
                mkdir $backupdir/$vmfs.`date +%d.%m.%Y`
                vim-cmd vmsvc/snapshot.create $vmid $vmfs@snap $vmfs@snap includeMemory 0
                for j in `ls $sourcedir/$vmfs`; do
                           cat $sourcedir/$vmfs/$j | gzip > $backupdir/$vmfs.`date +%d.%m.%Y`/$j.gz
                done
                vim-cmd vmsvc/snapshot.removeall $vmid
        fi
done

cd $backupdir; find . -type d -mtime +5 -exec rm -rf {} \;

/vmfs/volumes/nfs-backup — соответственно nfs диск где будут лежать бэкапы
/vmfs/volumes/datastore1 — хранилище виртуальных машин

бэкапы старше 5 дней удаляются.

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Windows XP без антивирусов

«Белый список»

Основываясь на «белом списке», можно сделать не плохую защиту от малвари. Чтобы его создать нужно выполнить, как минимум, два шага:

В ветке реестра HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVerson\Policies\Explorer нужно создать параметр RestrictRun типа DWORD (REG_DWORD) со значением 1.
В ветке HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\ создать ключ RestrictRun, а в нем параметр 01 типа STRING (REG_SZ) со значением regedit.exe.

Чтобы изменения вступили в силу, нужно перезагрузить компьютер.
ВАЖНО! Если выполнить пункт 1, но НЕ выполнить пункт 2, то после перезагрузки вы не сможете запустить никакую программу. Чтобы это исправить, вам нужно будет войти под другим пользователем с админскими правами, открыть редактор реестра, найти в ветку HKEY_USERS, выделить ее, выбрать меню Файл -> Загрузить куст…, в диалоге открытия файла найти файл NTUSER.DATв каталоге юзера, под именем которого был сделан этот косяк, и нажать кнопку «Открыть». После чего найти и удалить параметр RestrictRun либо присвоить ему значение 0, а потом перезагрузиться.

В дальнейшем можно добавлять программы в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun аналогично пункту 2. При этом перезагрузка уже не нужна, изменения вступают в силу сразу.
Чтобы не лезть в редактор реестра каждый раз, я создал reg-файл, в который занес список программ и в дальнейшем, по мере необходимости, подправлял его, а после правки запускал.

Ниже приведу небольшой кусочек этого файла:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"RestrictRun"=dword:00000001
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun]
"0"="regedit.exe"
"1"="notepad.exe"
"2"="wupdmgr.exe"
"3"="cleanmgr.exe"
"4"="wordpad.exe"
"5"="calc.exe"
"6"="mstsc.exe"
"7"="taskmgr.exe"
"8"="7zFM.exe"
"9"="7zG.exe"
"10"="7z.exe"
"11"="firefox.exe"
"12"="java.exe"
"13"="FlashUtil10d.exe"
"14"="NPSWF32_FlashUtil.exe"
"15"="thunderbird.exe"
"16"="soffice.exe"
"17"="soffice.bin"
"18"="python.exe"
"19"="sbase.exe"
"20"="scalc.exe"
"21"="sdraw.exe"
"22"="simpress.exe"
"23"="smath.exe"
"24"="swriter.exe"
Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Как проверить запущен ли perl скрипт?

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

Рекомендую давно проверенную функцию для unix систем.

Функция требует модуля: File::IO; (входит в стандартный дистриб). Вызывать функцию необходимо в самом начале скрипта (сразу после загрузки модулей), так:

use IO::File;
openPidFile('.mypid');
sub openPidFile {
my $file=shift;# имя pid файла
return 0 if $^O eq 'MSWin32';# не создаем на win машинах
if(-e $file) {# файл существует, пытаемся прочитать
my $fh=IO::File->new($file) || return;
my $pid=<$fh>;
# скрипт уже работает, если kill 0 возвращает true
# при этом по kill (0,pid) процессор не убивается, а проверяется
# на наличие в таб.процессов
die "Script already running with PID $pid" if (kill (0,$pid));
# если на предыдущей строке не "умерли", значит выводим сообщени
# что проц. "зомби", и удаляем pid-файл
warn "Removing PID file for defunct script process $pid.\n";
die "Can't unlink PID file $file" unless -w $file && unlink $file;
}

# если досюда дошли, значит либо новый запуск, либо убрали "зомбака".

my $fh=IO::File-&gt;new($file,O_WRONLY|O_CREAT|O_EXCL,0644)
or die "Can't create $file: $!\n";
# вносим в pid файл id текущего процесса
print $fh $$;
}

Я бы еще рекомендовал вставлять в блок END (в конце программы), следующий код:
END {unlink «.mypid» if $pid==$$;};# при этом $pid определять после вызова процедуры openPidFile!

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Двухнодовый кластер MySQL на FreeBSD

Минимальные требования для кластера mysql это два сервера для данных и один сервер для управления. Сервер управления нужен лишь во время запуска кластера, но желательно держать его постоянно включенным. Итого требуется 3 физических компьютера, либо 3 виртуальные машины на двух физических серверах.

Пусть ноды с данными будут node1.host.ru и node2.host.ru, а управляющая нода mgmt.host.ru. DNS настроен, все ноды видят друг друга как по IP так и по FQDN. Так же необходимо чтобы на нодах данных был открыт порт 3306 для всех нод-участников кластера, а на ноде управления открыт порт 1186.

More →

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

WP Group Access

Палагин для ограничений доступа в категории по группам пользователей.

Скачать можно тут

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

DMZ на CISCO ACL

ACL (англ. Access Control List — список контроля доступа, по-английски произносится «эй-си-эл») — определяет, кто или что может получать доступ к конкретному объекту, и какие именно операции разрешено или запрещено этому субъекту проводить над объектом.

Все действия проводились на cisco catalyst 3560.

Часть первая. Входящий трафик.

В этом примере у меня есть частная сеть 192.168.32.x и сеть DMZ 192.168.30.x.

Заблокируем весь для группы 100.

access-list 100 deny ip 192.168.30.0 0.0.0.255 any
access-list 100 deny ip 192.168.32.0 0.0.0.255 any
access-list 100 permit ip any any

Применим группу 100 для serial0/0.

interface serial0/0
ip access-group 100 in

Разрешим трафик с DMZ сети на DMZ интерфейс.

access-list 101 permit ip 192.168.30.0 0.0.0.255 any
interface ethernet0/0
ip access-group 101 in

Разрешим трафик с приватной сети на приватный интерфейс.

access-list 102 permit ip 192.168.32.0 0.0.0.255 any
interface ethernet0/1
ip access-group 102 in

Первая часть установки сделана. Мы разрешил трафик в нашей сети на интерфейсы cisco, но мы еще не сказали, что трафик может покидать их. Теперь нужно разрешить определнный вохдящий трафик в DMZ с приватных сетей.

Часть вторая. Исходящий трафик.

Разрешим выход в интернет из сети DMZ, например, для доступа к внешним серверам DNS.
Правило для TCP-handshake:
access-list 103 permit tcp any host 192.168.30.0 0.0.0.255 established

Правила для DNS и ICMP.

access-list 103 permit udp host 192.168.30.3 eq domain any eq domain
access-list 103 permit udp host 192.168.30.3 gt 1023 any eq domain
access-list 103 permit udp host 192.168.30.3 eq domain any gt 1023
access-list 103 permit tcp host 192.168.30.3 any eq domain
access-list 103 permit icmp 192.168.30.0 0.0.0.255 any echo-reply
access-list 103 permit tcp host 192.168.30.1 any
access-list 103 permit tcp host 192.168.30.4 any eq smtp

Теперь разрешим доступ из локальной сети в DMZ.

Правило для TCP-handshake.

access-list 104 permit tcp any host 192.168.30.0 0.0.0.255 established

Правила для DNS,FTP,HTTP,ICMP,TELNET,SMTP.

access-list 104 permit udp any eq domain host 192.168.30.3 eq domain
access-list 104 permit udp any eq domain host 192.168.30.3 gt 1023
access-list 104 permit udp any gt 1023 host 192.168.30.3 eq domain
access-list 104 permit icmp any 192.168.30.0 0.0.0.255 echo
access-list 104 permit tcp any host 192.168.30.2 eq www
access-list 104 permit tcp 192.168.32.0 0.0.0.255 host 192.168.30.1 range ftp-data ftp
access-list 104 permit tcp 192.168.32.0 0.0.0.255 host 192.168.30.1 eq telnet
access-list 104 permit tcp 192.168.32.0 0.0.0.255 host 192.168.30.1 eq 8080
access-list 104 permit tcp any eq ftp-data host 192.168.30.1 gt 1023
access-list 104 permit tcp any host 192.168.30.4 eq smtp
access-list 104 permit tcp host 172.16.1.2 host 192.168.30.3 eq domain
access-list 104 permit tcp host 172.16.1.4 host 192.168.30.3 eq domain

Наконец мы разрешим трафик из DMZ сети для установки соединения (TCP-handshake,FTP-active mode,ICMP echo ответ) из LAN в DMZ.

access-list 105 permit tcp 192.168.30.0 0.0.0.255 192.168.32.0 0.0.0.255 established
access-list 105 permit icmp 192.168.30.0 0.0.0.255 192.168.32.0 0.0.0.255 echo-reply
access-list 105 permit tcp host 192.168.30.1 eq ftp-data 192.168.32.0 0.0.0.255 gt 1023
access-list 105 permit tcp host 192.168.30.4 192.168.32.0 0.0.0.255 eq smtp

Применим группы.

interface serial0/0
ip access-group 100 in
ip access-group 103 out

interface ethernet0/0
ip access-group 101 in
ip access-group 104 out

interface ethernet0/1
ip access-group 102 in
ip access-group 105 out
Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Backup MSSQL

Полный бэкап раз в сутки.

@echo off
rem База которую бэкапим
set DB=UPP
rem Куда бэкапим
set bkdir=C:

set bkpath=%bkdir%\%date%

if not exist "%bkpath%" mkdir "%bkpath%"

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S .\SQLEXPRESS -q "BACKUP DATABASE %DB% TO DISK='%bkpath%\backup_%DB%.bak';RESTORE VERIFYONLY FROM DISK='%bkpath%\backup_%DB%.bak'" -o %bkpath%\backup_%DB%.log

Разностный бэкап через каждые 4 часа

@echo off
rem База которую бэкапим
set DB=UPP
rem Куда бэкапим
set bkdir=C:
set bkpath=%bkdir%\%date%

if not exist "%bkpath%" mkdir "%bkpath%"

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S .\SQLEXPRESS -q "BACKUP DATABASE %DB% TO DISK='%bkpath%\backup_%DB%.bak' WITH DIFFERENTIAL;RESTORE VERIFYONLY FROM DISK='%bkpath%\backup_%DB%.bak'" -o %bkpath%\backup_%DB%.log

Одним скриптом

@echo off

set db=%1
set bkdir=%2
set type=%3

if "%db%" == "" (

    echo "usage: %0 <dbname> <path> <diff|full>"
        exit /b 1

) else (
    if "%bkdir%" == "" (

        echo "usage: %0 %db% <path> <diff|full>"
            exit /b 1

    ) else (

        if "%type%" == "full" (

            set bkpath=%bkdir%\%date%
            if not exist "%bkpath%" mkdir "%bkpath%"
            "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S .\SQLEXPRESS -q "BACKUP DATABASE %db% TO DISK='%bkpath%\backup_%db%.bak';RESTORE VERIFYONLY FROM DISK='%bkpath%\backup_%db%.bak'" -o %bkpath%\backup_%db%.log

        ) else (

            if "%type%" == "diff" (

                if not exist "%bkdir%" (

                    echo First run full backup.
                    exit /b 1

                ) else (
                    set bkpath=%bkdir%\%date%
                    "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S .\SQLEXPRESS -q "BACKUP DATABASE %db% TO DISK='%bkpath%\backup_%db%.bak' WITH DIFFERENTIAL;RESTORE VERIFYONLY FROM DISK='%bkpath%\backup_%db%.bak'" -o %bkpath%\backup_%db%.log
   
                )

            ) else (

                echo "usage: %0 %db% %bkpath% <diff|full>"
                    exit /b 1
            )
        )  
    )
)
Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Утилиты мониторинга в OS FreeBSD

Есть большое количество ПО для мониторинга типа monit, zabbix, cacti. Они собирают статистику и строят графики. Но дело в том, что не всегда есть возможность открыть браузер и посмотреть те самые графики. Для таких случаев есть консоль. Вот не большой список команд для мониторинга FreeBSD:

mount – показывает смонтированные подразделы и флаги из монтирования

df – показывает смонтированные подразделы, их размер и свободное место на нихfdisk /dev/ad0 – показывает информацию о диске ad0 и разделах на нем

disklabel /dev/ad0s1 – показывает список подразделов в первом разделе диска ad0

swapinfo – показывает список подразделов свопинга на дисках и их использование

fstat – показывает список открытых файлов (имена файлов не выводятся)

pstat -f – выводит список открытых файлов (имена файлов не выводятся)

systat -vmstat n – каждые n секунд выводит количество транзакций с диском в секунду, объем записанных/считанных данных на диск в секунду, средний размер транзакции и процент времени в течение которого диск был занят работой)

iostat – выводит информацию, аналогичную systat -vmstat, но не выводит занятости диска по времени и может выводить среднюю статистику с момента загрузки.

vmstat – выводит количество операций на диске в секунду

/stand/sysinstall – можно посмотреть и изменить разметку диска и монтирование

less /etc/fstab – таблица монтирования при загрузке

systat -vmstat n – вывод показателей загрузки (number of jobs in the run queue averaged over 1, 5 and 15 min), состояния памяти (в страницах), количества процессов в группах, количество вызовов специальных функций ядра (traps, interrupts, system calls, network software interrupts), использование процессора, трансляции имен, активность свопа, прерывания, а также информацию по использованию диска (см)

top – аналогичная информация в сокращенном виде + использование памяти и свопа в мегабайтах, список процессов, отсортированных по использованию процессора.

ps afx – список запущенных процессов и время процессора на каждый

ifconfig – список сетевых интерфейсов с ip-адресами, масками, mac-адресами, типами карт и их статусами (названия карточек можно посмотреть в файле конфигурации ядра)

systat -ifstat n – объем трафика за n секунд на всех сетевых интерфейсах

netstat – вывод активных сетевых соединений (сокетов)

systat -netstat n – аналог netstat в реальном времени

systat -ip n – таблица IP-пакетов и ошибок по типам за n секунд

systat -tcp n – таблица TCP-пакетов и ошибок по типам за n секунд

systat -icmp n – таблица ICMP-пакетов и ошибок по типам за n секунд

netstat -ibt – список интерфейсов, разбитых по ip-адресам (!) с объемом трафика на каждом, количеством ошибок, коллизий, значением watchdog-таймера

netstat -r – таблица маршрутизации

arp -a – таблица ARP

tcpdump -i rl0 host 192.168.1.2 and port 21 – сниффер пакетов на интерфейсе rl0, фильтрующий пакеты, содержащие адрес 192.168.1.2 и порт 21

trafshow -i rl0 – программа для сортировки и вывода сетевых потоков (устанавливается дополнительно пакетом или из портов)

date – текущее время и дата

w – выводит, сколько времени назад система загрузилась и залогиненных пользователей

last – выводит историю перезагрузок и входов пользователей

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Репликация дисков между двумя серверами на FreeBSD+HASTD

2 сервера под управлением FreeBSD 8.1-RELEASE:

host1 (192.168.1.2) и host2 (192.168.1.1)
На каждом сервере диски: ad0 с системой, ad1 — неразмеченный.

ad1 будет под контролем HASTd и ZFS, на которой будет работать JAIL.
Сервера скоммутированы на свиче в одну подсеть (мой случай — 192.168.1.0/24), 1 Gbit/s интерфейс.
Между серверами будет поднят виртуальный (carp) IP 192.168.1.5, принадлежащий jail-у.

Пишем /etc/rc.conf.

На host1:

zfs_enable="YES"
hostname="host1"
ifconfig_em0="192.168.1.2/24"
defaultrouter="192.168.1.1"
hastd_enable="YES"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 advskew 100 pass password 192.168.1.5/24"
ezjail_enable="YES"

На host2:

zfs_enable="YES"
ifconfig_em0="192.168.1.1/24"
defaultrouter="192.168.1.1"
hastd_enable="YES"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 advskew 100 pass password 192.168.1.5/24"
ezjail_enable="YES"

Пишем конфиг ядра GENERIC-CARP для поддержки carp(4) ( есть впрочем вариант userland-ового net/ucarp ).

На обеих нодах:
Архитектура i386, соотв. /sys/i386/conf/GENERIC-CARP:

device carp

Компилируем и перезагружаемся, на обеих машинах.

make buildkernel KERNCONF=GENERIC-CARP;make installkernel KERNCONF=GENERIC-CARP;reboot

Пишем на обеих машинах одинаковый /etc/hast.conf:

on host1
{
      listen 192.168.1.2
}

on host2
{
      listen 192.168.1.1
}
resource shared
{
      on host1
      {
            local /dev/ad1
            remote 192.168.1.1
      }
      on host2
      {
            local /dev/ad1
            remote 192.168.1.2  
      }
}

Запускаем hastd (на обеих машинах):

/etc/rc.d/hastd restart

Создаем файловую систему для Jail/HASTd (делается только на одной машине, вторая получит все это добро через реплику) и сообщаем HAST-у, что он у нас будет мастером.

gpart create -s GPT ad1
gpart add -b 34 -s 4194230 -t freebsd-zfs ad1
hastctl create shared
hastctl role primary shared
zpool create jails hast/shared

Настроил ezjail на обеих машинах:

cat > "/usr/local/etc/ezjail.conf"
ezjail_jaildir=/jails
ezjail_jailtemplate=${ezjail_jaildir}/newjail
#ezjail_jailbase=${ezjail_jaildir}/basejail
ezjail_sourcetree=/usr/src
ezjail_ftphost=ftp.freebsd.org
ezjail_default_execute="/usr/bin/login -f root"
ezjail_default_flavour=""
ezjail_archivedir=`pwd -P`
ezjail_uglyperlhack="YES"
ezjail_devfs_enable="YES"
ezjail_procfs_enable="YES"
ezjail_mount_enable="YES"
ezjail_use_zfs="YES"
ezjail_jailzfs="jails"

Добавим новый джэйл на host1:

ezjail-admin create -s 10G -c zfs vm1 192.168.1.5
скопируем конфиг /usr/local/etc/ezjail/vm1 на host2.

Содержимое /root/carp_sw скрипта, ответственный за переключение (не забыть chmod +x /root/carp_sw):

#!/bin/sh
pool="shared"
case "$1" in
master)
        logger "carp_sw.sh: Switching to primary provider ${pool}."
        hastctl create ${pool}
        hastctl role primary ${pool}
        logger "zpool import: "
        sleep 10
        zpool import -f -d /dev/hast jails
        /etc/rc.d/jail onestart
        ;;
slave)
        logger "carp_sw.sh: Switching to slave profider for ${pool}."
        hastctl create ${pool}
        hastctl role secondary ${pool}
        ;;
esac

Также, чтобы упавшая и поднявшаяся машина не пыталась запускать jail, скажем ей что она теперь Slave. Содержимое /etc/rc.local на обеих машинах:

#!/bin/sh
sh /root/carp_sw slave

Остается все это позапускать (на обеих нодах):

/etc/rc.d/routing restart
/etc/rc.d/hastd restart

На host1:

sh /root/carp_sw master

На host2:

sh /root/carp_sw slave

Что получили в результате этой работы:

На carp-овом IP работает JAIL, который может содержать все что душе угодно — почтовый сервис, WEB приложение и пр. Как только обслуживающая этот jail физическая машина падает, работу на себя автоматически подхватывает второй сервер, который запускает JAIL на состояние максимально близкое к времени падени ноды. При этом HAST конфигурируется как MASTER. Когда-нибудь возвратившаяся упавшая машина становится SLAVE-ом, подхватывает реплику и готовится подстраховать MASTER-а

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

RAID1 под FreeBSD на живой системе с помощью atacontrol

Сначала создаем зеркальный массив RAID1:

 # atacontrol create RAID1 ad0 ad1

система создаcт raid1 массив но на него пока ничего не бдует писаться.

Но статус у него READY:

    # atacontrol status ar0
     ar0: ATA RAID1 subdisks: ad4 ad6 status: READY

Система считает что после создания raid, на нем будут созданы слайсы,
и разделы, после чего на них будут записаны данные.(что и происходит когда мы ставим систему на ar0),при этом данные не будут нарушать целостность рэйд.

Попробуем обмануть систему.

   # atacontrol list
   ATA channel 0:
       Master:  ad0 <ST380011A/3.06> ATA/ATAPI revision 6 //живая система
       Slave:       no device present
   ATA channel 1:
       Master:  ad1 <ST380011A/3.06> ATA/ATAPI revision 6 //новый диск
       Slave:       no device present
   # atacontrol detach 1

Теперь у нас есть целостный RAID1 который состоит из одного диска с системой.

   # atacontrol status ar0
      ar0: ATA RAID1 subdisks: ad0 DOWN status: DEGRADED

Теперь нужно прописать ar0 в fstab

   # Device         Mountpoint FStype Options Dump Pass#
   /dev/ar0s1b none swap       sw             0       0
   /dev/ar0s1a      /          ufs     rw     1       1
   /dev/ar0s1e      /tmp       ufs     rw     2       2
   /dev/ar0s1f      /usr       ufs     rw     2       2
   /dev/ar0s1d      /var       ufs     rw     2       2

перезагружаемся, должны смонтироваться все файловые системы,смотрите логи загрузки системы.
после перезагрузки:

   # atacontrol status ar0
      ar0: ATA RAID1 subdisks: ad0 DOWN status: DEGRADED
   # atacontrol addspare ar0 ad1
   # atacontrol rebuild ar0
   # atacontrol status ar0
      ar0: ATA RAID1 subdisks: ad0 ad1 status: REBUILDING 1% completed

После окончания пересборки(rebuild) система готова к использованию.

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong