niedziela, 17 lutego, 2008 - 16:26

Tydzień exchanga

Autor: daro | Kategorie: article, exchange, server

Przed wami kolejna wstrząsająca relacja z awarii…

Średnia firma. Mieszcząca się w willi. Poważna awaria prądu wykańcza UPS’y. Padają serwery. Administrator podnosi to wszystko w nocy.
Rano pracując zdalnie administrator nie może dostać się do exchanga - restartuje go. System
wciąż jest niedostępny. Na miejscu okazuje się że:
CPQ ML530, 3 zasilacze, 6U w szafie, jego kontroler smart array 5300 zgubił informacje o dyskach logicznych. (Były dwie partycje logiczne: RAID1 na system i RAID5 na dane). Popularnie mówiąc - nie ma niczego. Procedura recovery nie przewidziała takiego psikusa ze strony kontrolera RAID. Wszystko wskazuje na to, że dyski i kontroler działają, ale nie mają informacji o dyskach logicznych. Skanowanie ACU, przekładanie dysków pomiędzy slotami i do innych serwerów nie pomaga.
Przybyły na miejsce tragedii technik rozkłada bezradnie ręce. Infolinia HP, jak zawsze profesjonalnie i lakonicznie stwierdza, że serwer już po gwarancji i wizyta odpłatna, owszem, ale o niższym priorytecie, – czyli realnie za dwa tygodnie albo dwa lata – dla nas nie ma różnicy.
Cóż – jedziemy z pełnym odzyskiwaniem serwera. Nowy serwer, w2k sp + exchange + Backup exec i odzyskujemy. Niestety nie było to wystarczająco dobrze przećwiczone. Administrator po kilku godzinach poddaje się. Ściągamy meksykańska specgrupe od rozwałki.
Spec nr 1 ds. systemów windows przybywa na miejsce tragedii o godzinie 16:00. Stawianie serwera od początku, exchange, backup exec – i znów odbijamy sie od ściany. Kolejny telefon – chwila napięcia i okazuje się, ze spec nr 2 ds. backup exec’a jest dostępny i przyjedzie.
Dociera na miejsce ok 19: 30. Godzina wytężonej walki z backup execkiem przynosi rezultaty. Rusza odzyskiwanie z backupu – później okazuje się, że 25 GB storów i folerów publicznych zostanie odciągnięte z streamera LTO3 w rekordowym kurwa mać czasie 2 godziny 40 minut.
Spędziliśmy go omawiając obecną sytuacje gospodarczą, polityczną i techniczną wszystkich znanych krajów, nie oszczędzając filmików z YouTub’a.
Gdy po 23:00 mózgi powoli zaczynały kąpać nam na klawiaturę backup radośnie kończy się pełnym sukcesem i równie radośnie, zgodnie z terminarzem backupu, a przy naszym pełnym zaskoczeniu rusza standardowy backup Overwrite ustawiony na godzinie 23:00, który znów zgodnie z planem i przy naszym już absolutnie pełnym zaskoczeniu nadpisuje taśmę, z której właśnie skończyliśmy odzyskiwać dane. Dobrze, że nie w odwrotnej kolejności.
Niezrażeni tą porażką sprawdzamy konsystencje storów, która odbiega trochę od ideału, i wymaga naprawy. Przed naprawą obowiązkowy backup jedynej kopi storów, która ostała się w organizacji. Niestety przy naszym kolejnym zaskoczeniu 25GB baz kopiuje się z partycji na partycje serwera klasy HP DL380 G6 (dyski SAS) w kolejnym rekordowym czasie 40 minut (ma sterowniki! Stawiany ze smartstartu). Mózg z klawiatur zaczyna skapywać na podłogę, ale dajemy rade.
Naprawa storów zakończona sukcesem. Maile działają. Ludzie mają do nich dostep, dochodzi 02:00. Jeszcze kilkanaście minut walki z backup execkiem i jego nienormalną konfiguracją użytkownika, który ma prawo odzyskiwać skrzynki trybie brick level. Pakujemy plecaczki i nieco wykończona specgrupa od rozwałki opuszcza miejsce zdarzenia.
Straty:
• maile organizacji z jednego dnia (backup nie wykonał się z środy na czwartek, – bo padł prąd)
Wnioski:
• Rekonfiguracja backup execka wymagana, w szczególności ochrony mediów przed nadpisaniem.
• Rekonfiguracja procedur backupu również.
• Regularne ćwiczenie scenariusza pełnego recovery excheng’a – obowiązkowe.
• Dla dociekliwych: co zrobił ten pieprzony kontroler, że zgubił te dyski oraz dlaczego nowy serwer z pełnym zestawem sterowników tak zajebiście szybko kopiuje pliki?

środa, 24 października, 2007 - 14:40

exchange mixed to native button grayed out

Autor: nExoR | Kategorie: exchange

czyli wyszazony guzik podczas proby zupgradeowania exchange z trybu mixed to native. mialem tak aqrat w srodowisq, ktore przygotowujemy do migracji do ex2k7 a tryb native jest dla tego systemu wymaganiem. wymagany skill:
- umiejetnosc poslugiwania sie ldp.exe
- znajomosc adsiedit.msc
- znajomosc wpisow exchange na partycji konfiguracji.
…lub po prostu SbS z kb260781

jest nawet jak jak recznie przestawic tryb mixed na native - banal (:

wtorek, 23 października, 2007 - 13:24

Active Directory i Smartphony

Autor: cabi | Kategorie: exchange

Właśnie przeczytałem o integracji smartphonów z AD w przyszłej wersji serwera M$.Bardzo fajnie!

Produkt będzie się nazywał System Centre Mobile Device Manager 2008 (MDM) i pozwoli na pełną integracje i zarządzanie z poziomu AD korporacyjnymi komórkami, zarządzanie VPNami i dostępem do zasobów informatycznych firmy.


Wreszcie będziemy wiedzieli gdzie i kiedy dzwonią, o czym SMS-ują nasi współpracownicy ;-) hehe

piątek, 31 sierpnia, 2007 - 17:02

NoMas tool

Autor: nExoR | Kategorie: exchange, tools

u jednego z klientow jest bardzo dziwny objaw z exchange+antigen - w pewnym momencie system zaczyna generowac tysiace bledow EventID 9548 - no external associate account. o ile blad jest dosc standardowy [i nigdy nie zrozumiem czemu tego nie poprawia] o tyle nigdy w tych ilosciach!
nie udalo mi sie poki co znalesc procesu, ktory go az tam mnozy, za to udalo mi sie znalesc ‘zywy link’ do nomas tool, ktory ‘naprawia’ konta (zeby nie trzeba bylo recznie wyklikiwac i szukac):
NoMas Tool

piątek, 9 marca, 2007 - 17:45

SMTP isAlive timeout

Autor: nExoR | Kategorie: HOWTO, exchange

“SMTP Virtual Server Instance 1 (EVS1): The IsAlive check for this resource failed.”
o dziwo informacji wygooglac mozna malo, a wszystkie, na ktore trafilem byly nietrafne. nikt, ale to zupelnie nikt nie podal najprostrzego z mozliwych scenariuszy - a jak wiadomo najciemniej jest pod latarnia.
scenariusz:
- rozgrzebany cluster
- czerwony event log
- po 3h walki eventlog zrobil sie bialy poza tym jednym wpisem - SMTP isAlive check failed.

rozwiazanie: okazalo sie, ze ktos w ustawieniach protokolu SMTP ustawil opcje ‘deny all except list below’ a lista zostala pusta. no i cluster myslal, ze smtp jest martwe.

wtorek, 9 stycznia, 2007 - 13:23

x64 - dzien w plecy

Autor: nExoR | Kategorie: exchange, news

stracilem calutki dzien -w zasadzie poltora, bo zachcialo mi sie stawiac w2k3 r2 x64.
serwer byl przeznaczony dla exchange, az w koncu znalazlem taka notke

poniedziałek, 8 stycznia, 2007 - 14:03

export kontaktow outlook express do AD

trafil sie ostatnio taki problem - wdrozylismy AD+EX i klient poprosil o pomoc przy przeniesieniu kontatkow z outlook do AD. generalnie nic trudnego - mozna zalatwic to prostym skryptem, jest jednak pewien myk. oto kilka uwag dotyczacych takiej operacji:

najpierw sam skrypt. przy pelnym exportcie kontatow z outlooka dostaje sie plik excelowy z gigantyczna iloscia kolumn. najpier wiec definicja pol:

const X_SALUTATION=1
const X_GN=2
const X_SN=4
CONST X_COMPANY=6
CONST X_DEPT=7
CONST X_TITLE=8
CONST X_ADDR=9
CONST X_CITY=12
CONST X_STATE=13
CONST X_ZIP=14
CONST X_COUNTRY=15
CONST X_ASSISTANT=30
const X_FAX=31
CONST X_TEL=32
CONST X_TEL2=33
CONST X_MOBILE=41
CONST X_TEL3=43
CONST X_PAGER=44
CONST X_EMAIL=49
CONST X_ENAME=51
CONST X_NOTES=73
CONST X_WEBPAGE=85

skrypt jest dosc prymitywny - na szybko - zalozeniem jest wiec, ze jedno z pol - tu ‘nazwisko’ - jest zawsze niepuste. skrypt bedzie przetwarzal arqsz excela az trafi na wiersz z pusta kolumna ‘nazwisko’. przed przypisaniem kazdej wartosci do AD trzeba sprawdzic czy nie jest ona przypadkiem pusta:


Set objRoot = GetObject(”LDAP://rootDSE”)
strDNS = objRoot.Get(”defaultNamingContext”)
Set objDomain = GetObject(”LDAP://” & strDNS)
Set objOU = GetObject(”LDAP://OU=contacts,” & strDNS)
set oExcel=createobject(”Excel.Application”)
oExcel.workbooks.open(left( WScript.ScriptFullname, instrRev(WScript.ScriptFullname,”\”) )&”kontakty-import.xls”)

i=2
with oExcel.ActiveSheet
While .Cells(i,X_SN) <> “”
wscript.echo vbcrlf&”przetwazam wiersz: “&cstr(i)

tu jeszcze informacja - podczas importu kontaktow, trzeba pamietac o tym, ze aby pojawily sie one w ksiazce adresowej, musza byc uzupelnione wszystkie pola wymagane przez exchange - inaczej utworzonego contactu nie bedzie w GALach. czesc z atrybutow uzupelnia sie sama, ale czesc trzeba przypisac recznie - to jest glownie cn oraz mailnickname:


surname=.cells(i,X_SN).Value
givenname=.cells(i,X_GN).value
if not isNull(givenname) and not isEmpty(givenname) then
contactname=givenname&” “&surname
else
contactname=surname
end if
wscript.echo contactname

Set objContact = objOU.Create(”contact”, “cn=”&contactname)

wscript.echo “nazwisko: “&.cells(i,X_SN).Value
objContact.put “sn”,.cells(i,X_SN).Value
objContact.put “mailNickName”, contactname
if not isNull(.cells(i,X_GN).Value) and not isEmpty(.cells(i,X_GN).Value) then
wscript.echo “imie: “&.cells(i,X_GN).Value
objContact.put “givenName”,.cells(i,X_GN).Value
end if
if not isNull(.cells(i,X_SALUTATION).Value) and not isEmpty(.cells(i,X_SALUTATION).Value) then
wscript.echo “salut/desc: “&.cells(i,X_SALUTATION).Value
objContact.put “description”,.cells(i,X_SALUTATION).Value
end if
if not isNull(.cells(i,X_COMPANY).Value) and not isEmpty(.cells(i,X_COMPANY).Value) then
wscript.echo “company: “&.cells(i,X_COMPANY).Value
objContact.put “company”, .cells(i,X_COMPANY).Value
end if
if not isNull(.cells(i,X_DEPT).Value) and not isEmpty(.cells(i,X_DEPT).Value) then
wscript.echo “department: “&.cells(i,X_DEPT).Value
objContact.put “department”, .cells(i,X_DEPT).Value
end if
if not isNull(.cells(i,X_TITLE).Value) and not isEmpty(.cells(i,X_TITLE).Value) then
wscript.echo “title: “&.cells(i,X_TITLE).Value
objContact.put “title”, .cells(i,X_TITLE).Value
end if
if not isNull(.cells(i,X_ADDR).Value ) and not isEmpty(.cells(i,X_ADDR).Value ) then
wscript.echo “street: “&.cells(i,X_ADDR).Value
objContact.put “street”,.cells(i,X_ADDR).Value
end if
if not isNull(.cells(i,X_CITY).Value ) and not isEmpty(.cells(i,X_CITY).Value ) then
wscript.echo “city: “&.cells(i,X_CITY).Value
objContact.put “l”,.cells(i,X_CITY).Value
end if
if not isNull(.cells(i,X_STATE).Value ) and not isEmpty(.cells(i,X_STATE).Value ) then
wscript.echo “state: “&.cells(i,X_STATE).Value
objContact.put “st”,.cells(i,X_STATE).Value
end if
if not isNull(.cells(i,X_ZIP).Value) and not isEmpty(.cells(i,X_ZIP).Value) then
wscript.echo “postal: “&.cells(i,X_ZIP).Value
objContact.put “postalCode”,.cells(i,X_ZIP).Value
end if
‘if not isNull(.cells(i,X_COUNTRY).Value) and not isEmpty(.cells(i,X_COUNTRY).Value) then
‘ wscript.echo .cells(i,X_COUNTRY).Value
‘ objContact.put “”,
‘end if
if not isNull(.cells(i,X_ASSISTANT).Value ) and not isEmpty(.cells(i,X_ASSISTANT).Value ) then
wscript.echo “asist/info: “&.cells(i,X_ASSISTANT).Value
info=”telefon do asystenta: “&.cells(i,X_ASSISTANT).Value
end if
if not isNull(.cells(i,X_FAX).Value) and not isEmpty(.cells(i,X_FAX).Value) then
wscript.echo “fax: “&.cells(i,X_FAX).Value
objContact.put “facsimileTelephoneNumber”,.cells(i,X_FAX).Value
end if
if not isNull(.cells(i,X_TEL).Value ) and not isEmpty(.cells(i,X_TEL).Value ) then
wscript.echo “telefon: “&.cells(i,X_TEL).Value
objContact.put “telephoneNumber”,.cells(i,X_TEL).Value
end if
if not isNull(.cells(i,X_TEL2).Value) and not isEmpty(.cells(i,X_TEL2).Value) then
wscript.echo “othertel1: “&.cells(i,X_TEL2).Value
othel=.cells(i,X_TEL2).Value
end if
if not isNull(.cells(i,X_MOBILE).Value) and not isEmpty(.cells(i,X_MOBILE).Value) then
wscript.echo “mobile: “&.cells(i,X_MOBILE).Value
objContact.put “mobile”,.cells(i,X_MOBILE).Value
end if
if not isNull(.cells(i,X_TEL3).Value) and not isEmpty(.cells(i,X_TEL3).Value) then
wscript.echo “othertel2: “&.cells(i,X_TEL3).Value
if isNull(othel) or isEmpty(othel) then
othel=.cells(i,X_TEL3).Value
else
othel=othel&”,”&.cells(i,X_TEL3).Value
end if
end if
if not isNull(.cells(i,X_PAGER).Value) and not isEmpty(.cells(i,X_PAGER).Value) then
wscript.echo “pager: “&.cells(i,X_PAGER).Value
objContact.put “pager”,.cells(i,X_PAGER).Value
end if
if not isNull(.cells(i,X_EMAIL).Value) and not isEmpty(.cells(i,X_EMAIL).Value) and instr(.cells(i,X_EMAIL).Value,”@”)>1 then
wscript.echo “email: “&.cells(i,X_EMAIL).Value
objContact.put “mail”,.cells(i,X_EMAIL).Value
end if
if not isNull(.cells(i,X_ENAME).Value) and not isEmpty(.cells(i,X_ENAME).Value) then
wscript.echo “enote: “&.cells(i,X_ENAME).Value
‘objContact.put “”,
end if
if not isNull(.cells(i,X_NOTES).Value ) and not isEmpty(.cells(i,X_NOTES).Value ) then
wscript.echo “notes: “&.cells(i,X_NOTES).Value
info=info & vbCrLf & .cells(i,X_NOTES).Value
end if
if not isNull(.cells(i,X_WEBPAGE).Value) and not isEmpty(.cells(i,X_WEBPAGE).Value) then
wscript.echo “www: “&.cells(i,X_WEBPAGE).Value
objContact.put “wwwHomePage”,.cells(i,X_WEBPAGE).Value
end if

if not isNull(info) and not isEmpty(info) then
objContact.put “info”, info
end if
if not isNull(othel) and not isEmpty(othel) then
objContact.putex 2,”otherTelephone”,split(othel,”,”)
end if
on error resume next
objContact.setInfo
if err.number<>0 then
wscript.echo “blad zakladania usera: “&contactname&” “&err.description
err.clear
else
wscript.echo “DONE.”
end if
i=i+1
wend
end with

oExcel.Quit

czesc dotyczaca kraju zostala wyremowana, poniewaz kraj opisuje sie w AD countrycode wg numerkow ISO 3166 wiec trzba by stworzyc tabele realicji. nie przy tak prywmitywnym skrypciq.

to nie jest jednak koniec problemow - podczas importu kontaktow, RUS [recipient update service], automatycznie zaktualizajuje wszystkie kontakty. w rezultacie swierzo zaimportowane kontakty beda mialy maile.. firmowe. aby RUS nie podmienil kontkaktow mozna skorzystac z tego opisu lub z narzedzia admodify w zakladce ‘email addr’ zaznaczajac jeden z dwoch checkboxow przy ‘update recipient policy ….’. mozna tez, korzystajac z artykulu z ms dodac do skryptu update dodatkowego pola w AD:


objContact.put “msExchPoliciesExcluded”,”{3B6813EC-CE89-42BA-9442-D87D4AA30DBC}”

tego jednak nie testowalem, a w innym artykule podana jest nieco inna wartosc: “{26491CFC-9E50-4857-861B-0CB8DF22B5D7}” - taka tez wartosc znalazlem w AD po skorzystaniu z ADModify.

jesli zdarzy sie koniecznosc ponownego importu, na pewno to przetestuje q: