Образ Windows из Linux

Часто ли у вас «падала» винда? Не надоедает ли ее переустанавливать раз в год? Знаю 100% что некоторые студенты из моей группы в институте специально ставят перед сессией «свеженькую» Windows и послее ее окончания — переустанавливают снова (на сесии идет нехилый документооборот — и вирусооборот тоже 🙂 ). Рано или поздно, но это надоедает. Неработает то, неработает это … система стала жестко тупить, некоторые программы стали вести себя неадекватно либо сломались вообще — картина знакомая многим! «Переустановить винду!» скажет любой, но какже это влом … ну что? Опять? И так из раза в раз.

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

Пути оптимизации сего процесса возможны разные:

  1. сделать инсталяционный диск с WinXP «под себя»
  2. создать образ установленной и настроенной винды и спрятать его подальше от вирусов и шаловливых рученок пользователей на пыльную полку.

Конечно же плюсы есть и в первом и во втором методе — я испробовал их оба. Могу сказать в итоге, что  мне удалось собрать инсталяционный диск WinXP SP3 с необходимым набором софта, настроенный процентов на 90 под стандартные пользовательские нужны среднестатистического офисного работника. Но это заняло у меня порядочно времени. Возможно когдато расскажу об этом процессе, но в этот раз о варианте №2.

Итак, образ винды! Основная идея основана на желании както красиво завернуть готовую к работе на 100% систему в некий архив. Ну и конечно с возможностью этот архив развернуть в случае краха системы 🙂  Набор софта для этого дела впечетляет! Тут готовы помочь многие софтварные продукты. Из наиболее именитых и 100% работоспособных пожалуй назову Acronis и Ghost. Но к сожелению все это небесплатно 🙁 Например, Acronis для домашних пользователей предлагает продукт  Acronis True Image Home 2009 всегото по цене около 100 грн. Как не крути — а не бесплатно! Вертя в руках старенькую флешку на 1GB из которой когдато еще давно успешно сделал себе LiveUSB, подумал: «А как же Linux?» Ведь удобно иметь такой инструмент под рукой (а флешку то я всегда с собой таскаю). Покопавшись немного в google по этому вопросу, выяснил что и Linux в этом деле мне тоже вполне помощник. Теперь я знаю покрайней мере 2 инструмента для клонирования:

  1. dd — можно создать как образ диска целиком, так и отдельно взятого раздела. Работает исключительно с разделами поэтому побарабану какая там FS. Для особо изощренных — можно сохранить только таблицу разделов или загрузчик (или и то и другое одним файлом) для востановления в будущем. Но есть недостаток — dd копирует информацию побайтово! Тоесть даже если у вас есть раздел на 10G и занято там всего 2 — то образ получим всеравно 10G. Печально но факт!
  2. ntfsclone — утилита для клонирования/разворачивания образов файловой системы NTFS. Вот это уже ближе к тому что мне было нужно! Работает исключительно с файловой системой — поэтому при разворачивании ей нужен раздел! Получить возможность сделать BackUP можно загрузившись в Linux любым из доступных способов (с помощью LiveCD, LiveUSB, HDD).

Почитав чуток документации остановился на таком варианте (все делаю из под root):

sda1 — виндовый раздел «Диск C». На нем установлена и настроена WinXP — ее мы хотим забекапить 🙂

sda2 — виндовый раздел «Диск D». Раздел на котором обычно в винде хранится всякий хлам

  • Создать образ виндового диска С:

Монтируем виндовый «Диск D» (на него будем сохранять образ созданный с помощью ntfsclone)

# mkdir /mnt/win_d
# mount.ntfs-3g /dev/sda2 /mnt/win_d -o force
# ntfsclone --save-image -o - /dev/sda1 | gzip -c > /mnt/win_d/win_image_backup_`date +%F`.img.gz

В результате на виндовом «диске D» появится файлик с названием в духе win_image_backup_2009-11-13.img.gz Посути это обычный файл, поэтому с ним можно делать все что угодно для обеспечения еще большей безопасности — записать на CD/DVD диск, закинуть в сетку на другой комп, положить в инет на файлообменник 🙂 etc …

  • Розвернуть винду из такого образа можно используя такие действия:

Монтируем виндовый «Диск D» (нам же надо взять сохраненный ранее образ):

# mount /dev/sda2 /mnt/win_d

Разворачиваем винду из образа командой:

# gunzip -c /mnt/win_d/win_image_backup_2009-11-13.img.gz |ntfsclone --restore-image --overwrite /dev/sda1 -

Ну все! После отработки команды у нас будет винда в таком же виде как на момент бэкапа!

Хочу также добавить что лично создал/развернул таким образом десятки образов — все вполне успешно. И главное — быстро. Создание образа для раздела 20G (занято 5G) занимает примерно 25 минут, разворачивание — около 10. Впечетляет!

Настройка bash

Так уж получилось что первый дистрибутив из мира Open Source который довелось мне использовать был Ubuntu Linux 6.06 Собственно я и рад что так получилось, могло же быть и хуже … например, я бы совсем не познакомился с Linux. Ну неважно, дело не в этом, а в том, что так или иначе пришлось осваивать консоль. Командной оболочкой по-умолчанию в Ubuntu (как и в подавляющем большинстве других Linux) есть bash. К чему это я? Да к тому, что даже ставя себе OS из семейства BSD, я всеравно сразу собираю bash. Ну привычен он мне … гораздо более превычен нежели csh или ksh.

Собственно про настойку этой прекрасной оболочки и хотел сказать несколько фраз, а точнее сделать небольшую шпаргалку себе на будущее. Главный конфиг bash-а называется bashrc и располагаться он может, в зависимости от дистрибутива Linux, в /etc или в /etc/bash. Незнаю как кто, но я там ничего не трогаю — использую умолчательные настройки. Но есть еще и доступный для правки «под себя» конфиг в домашней директории каждого пользователя. Найти его можно тут $HOME/.bashrc Как видите — он скрытый. Также bash-ем используются файлы $HOME/.bash_profile и $HOME/.bash_history С .bash_history все есно — тут хранятся выполненные команды командной оболочки bash. А вот что такое .bashrc и .bash_profile — требует пояснений. Назначение этих файлов согласно документации (приведу только нужную часть):

# man bash

INVOCATION
A login shell is one whose first character of argument zero is a -, or one started with the --login option.

An  interactive  shell is one started without non-option arguments and without the -c option whose standard input and error are both
connected to terminals (as determined by isatty(3)), or one started with the -i option.  PS1 is set and $- includes  i  if  bash  is
interactive, allowing a shell script or a startup file to test this state.

The  following  paragraphs describe how bash executes its startup files.  If any of the files exist but cannot be read, bash reports
an error.  Tildes are expanded in file names as described below under Tilde Expansion in the EXPANSION section.

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads  and  exe
cutes  commands  from  the  file  /etc/profile,  if  that  file  exists.   After  reading  that  file, it looks for ~/.bash_profile,
~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is  readable.   The
--noprofile option may be used when the shell is started to inhibit this behavior.

When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.

When  an  interactive  shell  that  is  not  a login shell is started, bash reads and executes commands from ~/.bashrc, if that file
exists.  This may be inhibited by using the --norc option.  The --rcfile file option will force bash to read  and  execute  commands
from file instead of ~/.bashrc.

Чтоже получается? А то что .bash_profile отрабатывает когда дело касается авторизиции (вход по ssh например), а .bashrc когда авторизированный пользователь открывает командную оболочку. Поэтому я делаю так, чтобы даже зайдя по ssh у меня подгружался .bashrc

root@gw:~# cat .bash_profile
# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
PATH=~/bin:"${PATH}"
fi

# only for OpenBSD
export PATH="/usr/local/sbin/:${PATH}"
export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/`machine -a`/
export TERM="wsvt25m"

Это для OpenBSD. Для Linux можно выкинуть последние 4 строчки 🙂

Ну и, собственно, .bashrc

root@gw:~# cat .bashrc
# don't put duplicate lines in the history. See bash(1) for more options
export HISTCONTROL=ignoredups
export HISTCONTROL=ignorespace
#Если нужно - Proxy Servers
#export http_proxy="http://my.proxy:3128"
#export ftp_proxy=${http_proxy}

## Одна из главных вкусностей - aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias lt='ls -lt'

## Colour Prompt
COLOR_RED="\[\033[1;31m\]"
COLOR_WHITE="\[\033[0;00m\]"
COLOR_GREEN="\[\033[0;32m\]"

export PS1="${COLOR_RED}\u${COLOR_WHITE}@${COLOR_RED}\h:${COLOR_WHITE}\w# "

root@gw:~#

Это для пользователя root — у него красное приглашение. Для рядового пользователя она зеленая. Вот конфиг:

root@gw:~# cat /home/radmin/.bashrc
## aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias lt='ls -lt'
## Colour Prompt
COLOR_RED="\[\033[1;31m\]"
COLOR_WHITE="\[\033[0;37m\]"
COLOR_GREEN="\[\033[0;32m\]"

export PS1="${COLOR_GREEN}\u${COLOR_WHITE}@${COLOR_GREEN}\h:${COLOR_WHITE}\w$ "

root@gw:~#

Выглядит это примерно так:

Чтобы показывать нужный вам цвет PS1 можно использовать в том же .bashrc проверку юзера в духе if $USER = root тогда PS1 с красным приглашением else PS1 — зеленый. Но мне чегото неохота чтобы каждый раз при открытии терминала система это проверяла — один раз написал и все 🙂

В данном случае я задавался целью немного розукрасить bash и придать ему более userfriendly качества. Конечно, это далеко не все что можно настроить через bashrc, поэтому за дополнительной информацией обращайтесь к документации. Удачи! И красочных всем консолей!

Переезд Win2k3 на новое железо

Неочень то я люблю Windows — но временами приходится иметь с ним дело … особенно на работе. Вот и в этот раз пришлось потрудиться чтобы заставить его работать на благо человечества!

Пожалуй начать стоит сначала 🙂 Жил-был сервер. Был он неособо могуч в плане железа, зато работал безглючно и спокойно. Управлялся он небезизвестной Win2k3. Но вот беда — начальство получило в разпоряжение новый сервер …. новее, мощнее — что тут скажеш? созрел момент когда переезд уже стал неизбежен!

Итак, что же мы имеем вначале:

  • Старый «сервер» (пишу в кавычках потому что сервером его можно назвать только по функционалу, но никак по железу) под управлением Windows Server 2003, вполне работающий, с кучей настроек которые очень уж нехотелось делать с нуля. Железо — обычный по нынешним временам офисный десктоп: какойто SATA винт, какойто неособо мощный процессор и 1GB памяти — вот и все что можно про него сказать. Используется как MsSQL сервер и Liga Server.
  • Новый сервер: HP ProLiant ML150 G2. Машинка вполне так ничего. 5 винтов Ultra 320 SCSI по 33 Гига собранные в RAID 5.0, 1x2GB мозгов, один проц Intel Xeon 3.0 GHz (пустой слот под второй, если надо будет — докупим!)

Задача: культурно переехать со старого «сервера» на HP Proliant ML150 G2 и при этом не потерять функционал и настройки. В дальнейшем на новом сервере буду разворачивать еще и  Symantec AntiVirus Sever.

К данному вопросу я морально готовился довольно долго. И дело скорее в географии нежели в фобии предстоящего процесса — эта задача стояла на второй работе, куда я попадаю в лучшем случае 1 раз в неделю. Собственно первая мысль была такая: «Почему бы просто не создать образ винды на старом серваке с помощью, например, Ghost и потом розвернуть этот образ на новом?». Но было сомнение что винда после такого радикального изменения железа вообще подымится. Опасения, восновном, основывались на смене дисковой подсистемы. Поэтому был и «план Б» — после разворачивания образа на новом серваке сделать Recovery для Windows диском с которого она в свое время ставилась. Когда же вчера, наконец, пришло «всемя Ч» и я взялся за дело — все мои догадки и опасения оправдались. Итак, алгоритм проделанной вчера работы:

На старом «сервере»:

  1. грузимся с HBCD и с помощью Ghost создаем образ винды full_c_image.GHO, который укладываем на диск D старого «сервера»
  2. грузимся назад в винду и убеждаемся что она в сети (ip address/mask 10.0.0.1/24 ) и что диск D доступен как шара $D

На новом сервере:

  1. Загрузился с Elive (Линуксовый LiveCD на базе Debian с WM E17). Adaptec-овский SCSI-RAID контроллер он разпознал наура! И также нормально разпозналась сетевая карточка (что тоже важно было для меня)
  2. С помощью GParted сделал NTFS раздел в конце диска размером 20Гиг (лиш бы образ винды со старого «сервера» поместился)
  3. Примонтировал только что созданный раздел, предварительно создав для него директорию /mnt/new_d
    # mkdir /mnt/new_d
    # mount.ntfs-3g /dev/sda1 /mnt/new_d -o force
  4. Настроил сетевую карточку:
    # ifconfig eth0 10.0.0.2/24 up

    и убедился что старый сервер видится нормально с помощью команды ping 10.0.0.1

  5. Примонтировал диск D старого сервера в созданную для этого директорию /mnt/old_d
    # mkdir /mnt/old_d
    # mount.cifs //10.0.0.1/D$ /mnt/old_d -o user=Administrator,iocharset=utf8

    Последняя команда спросит пароль пользователя Administrator на старом «сервере» — нужно его ввести, иначе не подмонтирует!

  6. Ну и копируем образ со старого «сервера» на новый такой вот командой:
    # cp -v /mnt/old_d/full_c_image.GHO /mnt/new_d/

    Отработка этой команды заняла некоторое время (образ то весил около 6 Гиг) — всетаки сетка 100Mb 🙁

  7. После того как образ скопировался — отмнонтируем оба раздела:
    # umount /mnt/{old,new}_d
  8. И перегружаемся:
    # reboot

Что теперь имеем: образ диска С со старого «сервера» лежит на диске D нового сервера 🙂 Этого я и добивался. Теперь надо его розвернуть:

Новый сервер:

  1. Грузимся с HBCD и с помощью Ghost разворачиваем образ винды.
  2. После этого — reboot

И что же мы видим теперь? Пробуем грузиться с жесткого на новом сервере. Винда пытается дернуться … даже показывает картинку типа windows 2003 но потом мелькает BlueDesk и самостоятельная перегрузка. Ну чтож — этого следовало ожидать! Посути у нас уже есть винда — которая нехочет грузиться, и это гораздо лучше чем ничего! Достаем из полки установочный диск нашей доблесной Win2k3 и грузимся с него. Сначала я загрузился просто, без каких-либо дополнительных телодвижений в плане поддержки SCSI — не прокатило, не видит винчестер! Ну чтож … со старого сервера топаем на сайт http://hp.com и загружаем все доступные драйвера мало-мальски касающиеся SCSI. Таковых я скачал 3 штуки вот тут. Эти дрова даются hp в виде exe архивов, при запуске которых можно сделать либо extract либо install — мне подходил extract с указанием дискеты как места назначения для извлеченных файлов. Потом эту дискетку вставил в новый сервер и загрузился снова с установочного диска Win2k3, но уже с нажиманием F6 на этапе загрузки драйверов, после чего виндовый инсталлер дал возможность добавить драйвер для моего SCSI контроллера. Досих пор немогу понять почему при добавлении драйверов подписанных как для Adaptec — винда невидит HDD но зато когда подсунул драйвера SATA — винт увидился и я смог сделать Recovery Windows. Дело, видать, в работе самого SCSI-RAID контроллера … надо будет почитать/подумать.

После этого — винда завелась без проблем. Установил скачанные с офсайта дрова (перед этим удалил все устройства в диспетчере устройств и перегрузился). Почемуто не подошли дрова для сетевой карты скачанные с офсайса. Печально. Хорошо хоть с DriverPack_LAN v.9 был под рукой, поставил его — драйвера подошли.

В конфигурации системы пришлось поправить некоторые настройки ставшие неактуальными для нового сервера. Например скрипт бекапов MSSQL который раньше делался на диск X, которого в новой конфигурации просто небыло. Несколько неактуальных шар удалил, ну и так далее…. Почему то незахотела стартовать служба LigaServer. Как результат, при старте винды вываливалось окошко что не все сервисы, которые должны стартовать автоматически, стартонули. Посмотрел лог в папке C:\ProgramFiles\Liga70\log\ и увидел что Лиговский сервак вполне адекватно ругался на отсутствие LPT ключа защиты — он досих пор торчал в старом сервере 🙂 Переткнул — непомогло! Дальше пришлось доставать бубен. Ругался уже на чтото другое … но такое я уже гдето видел ( параноидальное предположение — возможно изза того что изменилась сетевая карточка). Запустил LigaServer ярлычком с Desktop (в трее появился значек), на значке в трее правой кнопкой -> Конфигурация -> В настройках старта сервера выбрал «Запуск как приложение» -> Сохранил. После этого Правой кнопкой на значке в трее -> Запуск -> Запустился! Вернулся послднюю настройку назад и перегрузился — Стартонуло нормально! Гдето я такое уже видел … что ему ненравится  — непонятно, главное что работает!

Переезд считаю успешным … все сервисы что работали раньше — работают на новом сервере так же безпроблемно. Старый пока не сносил — пусть поработает недельку на новом — если никакие бока не вылезут, то снесу старый сервак 🙂 Ну вроде все!

Ну неужели работает?

Кажется удалось! Оказывается установить свой блог — дело пяти минут! Вот уж действительно … движок удивительно простой и в тоже время впечетляет отличным функционалом. Вобщем пробуем. играемся, тестим. Скоро, очень скоро, начну постить сюда важные для меня настройки моей любимой ос — Linux 🙂

Ну чтож? Как говорится во всех букварях:

 # echo 'Hello World!'