System z pliku VHD

vhd

Słowem wstępu

W systemach operacyjnych Windows Vista / Server 2008 i nowszych, Microsoft wprowadził nowy sposób bootowania systemów operacyjnych. Pliki typu boot.ini oraz win.com, które służyły do ładowania systemu operacyjnego odeszły w niepamięć. Zastąpił je program BCD (Boot Configuration Data) jest to swego rodzaju baza danych która zawiera informacje o systemach jakie mogą zostać załadowane. W pierwszej wersji, jak to zwykle bywa z Microsoft program miał ograniczoną funkcjonalność, jednak od systemu Windows 7 /Server 2008 R2 oferuje bardzo ciekawą funkcję, a mianowicie możliwość ładowania systemów operacyjnych bezpośrednio z plików VHD.

Czym są pliki VHD i jak z nich korzystać?

Cytując Wikipedię:

Virtual Hard Disk (VHD) – format pliku wirtualnego dysku twardego. Może zawierać dokładnie to samo, co znajduje się na partycjach fizycznych dysków, czyli pliki, foldery, system plików czy partycje. Najczęściej używany jest jako dysk maszyn wirtualnych.

Tak więc, skoro w pliku VHD możemy zawrzeć całe partycje to możemy w nim także zainstalować cały system operacyjny i korzystać z niego tak jak z systemu który znajduje się na osobnej partycji. Jest to genialne rozwiązanie dla osób które z różnych powodów nie chcą partycjonować swojego dysku twardego.

Utworzenie dysku i instalacja systemu

Metoda zaprezentowana poniżej jest metodą zdecydowanie najprostszą – wszystkie czynności (wraz z instalacją systemu) zostaną wykonane z poziomu systemu Windows.  Cała operacja nie powinna zająć więcej niż 20-25 min.

Najprostrzą metoda utworzenia dysku vhd, jest wykonanie tego przy użyciu wbudowanego w Windows narzedzia Zarządzanie dyskami. Aby je uruchomić wystarczy wpisać w pole wyszukiwania windows w menu stary wyrażenie diskmgmt.msc można też kliknąć prawym przypiskiem myszy na ikonę Komputer i wybrać pozycję Zarządzaj.

W narzędziu Zarządzanie dyskami wybieramy z menu Akcja pozycję Utwórz dysk VHD:

2

 

Następnie określamy parametry tworzonego dysku twardego. Określamy lokalizację pliku z dyskiem. Możemy wybrać dysk o stałym rozmiarze lub dysk dynamicznie rozszerzany, tego typu dysk będzie „rósł” wraz ze wzrostem danych na nim zawartych. Jednak w przypadku systemów operacyjnych warto wybrać stały rozmiar pliku z dyskiem VHD, zwłaszcza gdy nie posiadamy zbyt dużo wolnego miejsca – wówczas podczas pracy takiego systemu mogą wystąpić błędy.

Tworzenie dysku VHD
Tworzenie dysku VHD

W przypadku wybrania dysku o stałym rozmiarze proces jego tworzenie może potrać kilka minut, ze względu na konieczność alokacji wolnego miejsca pod przyszły dysk.

 

Teraz musimy zainicjować dysk. Jeżeli robimy to po praz pierwszy w naszym systemie, może pojawić się dymek informujący o automatycznej instalacji sterowników pod dysk VHD.

Inicjacja dysku

 

Dodatkowo zostaniemy poproszeni o wybór stylu partycji jaka będzie zastosowana na nowym dysku. Wybieramy tryb partycji z zastosowaniem rekordu MBR.

wybór stylu partycji

 

W następnej kolejności na dysku tworzymy nową partycję. Wybieramy odpowiednią literę dla nowego woluminu (w moim przypadku Y) oraz formatujemy dysk z użyciem systemu plików NTFS. Opcjonalnie możemy też nadać etykietę dla tego woluminu.

7 8

Nowy wolumin powinien się nam pojawić w systemie i być widoczny po wejściu do Eksploratora Windows.

 

Kiedy dysk jest już utworzony, partycja sformatowana i widoczna w systemie plików możemy przejść do instalowania, a w zasadzie kopiowania systemu plików. Wkładamy oryginalny nośnik z systemem do czytnika DVD. Będziemy potrzebowali drobnego narzędzia, które niestety nie jest standardowym składnikiem systemu Windows – chodzi o program ImageX, który służy m.in do Tworzenia obrazów WIM systemów operacyjnych. Nam jednak posłuży do zaimportowania systemu bezpośrednio na partycję dysku VHD. Program imagex.exe jest składnikiem Microsoft Windows Automated Instalation Kit (WAIK). Możemy oczywiście ściągnąc cały ten pakiet warzący ok 1,2 GB tylko po to aby posiadać pliczek imageX.exe zajmujący kilkaset kilobajtów jednak lepiej jest skorzystać z poniższego linku: http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=2525084&kbln=en-us. Na stronie podajemy adres email na który przychodzi email z poprawką.

Po jej ściągnięciu i zainstalowaniu wykonujemy poniższe:

Uruchamiamy Wiersz poleceń z podwyższonymi uprawnieniami (jako administrator)

CMD_administrator

w wierszu poleceń, przechodzimy do katalogu z programem imagex i wydajemy polecenie:

imagex.exe /apply E:sourcesinstall.wim 4 Y:

gdzie: E: to litera napędu z płytą instalacyjną Windows, 4 to numer indeksu o którym poniżej, a Y: to litera partycji pod jaką mamy podmontowany nasz wolumin VHD.

ImageX apply

W jednym pliku WIM (Windows IMage) możemy zapisać kilka systemów operacyjnych. W powyższym poleceniu został podany numer indeksu identyfikujący konkretny obraz systemu w pliku WIM. Poniżej znajduje się tabela zawierająca numery indeksów oraz wersje systemów operacyjnych:

 

Nr indeksu Wersja systemu
Windows 7 32bit
1 Starter
2 Home Basic
3 Home Premium
4 Professional
5 Ultimate
Windows 7 64bit
1 Home Basic
2 Home Premium
3 Professional
4 Ultimate
Windows Server 2008 R2
1 Standard
2 Standard Server Core
3 Enterprise
4 Enterprise Server Core
5 Data Center
6 Data Center Server Core
7 Web Server
8 Web Server Core

Efektem wydania polecenia wskazanego powyżej, jest start procesu implementacji systemu.

ImageX work

 

Po ukończeniu na partycji VHD możemy zaobserwować standardowy układ katalogów systemowych:

13

Edycja bazy BCD

Skoro system jest już postawiony, pozostaje utworzyć wpis w bazie BCD aby można było się do niego zalogować. Baza BCD posiada wiele parametrów konfiguracyjnych jednak aby w najszybszy i najprostszy sposób utworzyć nowy wpis wystarczy skopiować wpis istniejącego już systemu i edytować odpowiednie parametry. Tak więc do dzieła!

Korzystamy z otwartego już okna Wiersza poleceń systemu Windows lub jeżeli zostało ono zamknięte to uruchamiamy je ponownie z podwyższonymi przywilejami. Wydajemy następujące polecenia:

bcdedit /copy {current} /d “Nazwa wpisu”

oczywiście podając swoją nazwę wpisu. Parametr {current} jest tzw znanym identyfikatorem, który wskazuje na aktualnie uruchomiony system operacyjny. Efektem wydania polecenia jest utworzenie kopii wpisu w bazie BCD, która będzie posiadała swój unikatowy GUID, który należy skopiować, ponieważ będzie potrzebny w poniższych poleceniach. Następnie wpisujemy:

bcdedit /set <guid> device vhd=[litera:]<sciezka>
bcdedit /set <guid> osdevice vhd=[litera:]<sciezka>
bcdedit /set <guid> detecthal on

podając w odpowiednich miejscach ścieżkę do pliku VHD, litera dysku powinna znajdować się w nawiasach kwadratowych (np [D:] czy [E:]).

bcd dodanie wpisu

Po wydaniu tych wpisów możemy sprawdzić czy nasz wpis został poprawnie dodany do bazy bcdedit, wywołując program bcdedit bez żadnych dodatkowych parametrów.

bcd lista wpisów

 

Jeżeli w przyszłości będziemy chcieli usunąć system z pliku VHD wystarczy usunąć sam plik VHD z dysku twardego oraz usunąć wpis w bazie BCD wydając jedno proste polecenie:

bcdedit /delete {guid} /cleanup

 

 

Active Directory: Wyświetlanie listy aktualnie zablokowanych użytkowników

logo_active_directory

Podczas pracy Administratora / ServiceDesk-owca bardzo często zgłaszają się do nas użytkownicy którzy zablokowali sobie konto w Active Directory poprzez kilkukrotne wpisanie błędnego hasła. Spora część instytucji które mają wdrożone AD oraz odpowiednie polityki ma ustawiony czas po jakim ta blokada jest automatycznie zdejmowana (np 30 min). Jednak Użytkownicy są z natury bardzo niecierpliwi i już by chcieli aby im odblokować konto. Możemy to zrobić znajdując konto takiego delikwenta przy użyciu przystawki Active Directorty Users and Computers i odznaczyć odpowiednie pole w preferencjach takiego obiektu. Fajnie byłoby mieć listę aktualnie zablokowanych kont użytkowników.

 

Jeżeli posiadamy Windows 2003 Server lub nowszy to możemy wykorzystać tzw „Saved Queries”  czyli wcześniej zdefiniowane zapytania do LDAP. Wykorzystamy tą funkcję do napisania prostego zapytania wyszukującego konta aktualnie zablokowanych użytkowników.

 

Trochę teorii

Każdy obiekt użytkownika znajdującego się w bazie LDAP posiada atrybut LockedTime. Obiekt ten mówi o czasie jaki pozostał do automatycznego odblokowania użytkownika. Jeżeli użytkownik nigdy nie był zablokowany to atrybut ten posiada pustą wartość. Jeżeli użytkownik jest zablokowany to jest tam wstawiona odpowiednia wartość czasowa w postaci tzw TimeStamp’u. Wartość ta wraz upływem czasu zmierza do zera. Odblokowując ręcznie użytkownika ustawiamy wartość na 0. Wystarczy więc wyszukać użytkowników, którzy posiadają wartość atrybutu LockedTime większa od 0.

 

Do dzieła

Tworzymy własną konsolke mmc. Wystarczy, że wpiszemy w pasek „Uruchom” polecenie mmc.

 

Okno konsoli MMC
Okno konsoli MMC

Do konsolki należy dodać przystawkę Active Directory Users and Computers. Aby to zrobić należy wybrać menu File a następnie Add/Remove Snap-in oraz wybrać odpowiednia pozycję:

 

Dodawanie przystawki w MMC
Dodawanie przystawki w MMC

 

Kiedy już mamy dodaną przystawkę w MMC rozwijamy drzewo główne,  klikamy prawym przyciskiem myszy na Saved Queries i Wybieramy New -> Query.

W nowo-otwartym oknie definiujemy nazwę dla naszego zapytania, a następnie klikamy na Define Query.

Okno New Query
Okno New Query

 

 

Z menu rozwijanego Find wybieramy: Custom Search, przechodzimy na zakładkę Advanced i wpisujemy poniższe zapytanie LDAP:

(&(&(&(ObjectCategory=user)(ObjectClass=user)(lockoutTime>=0)(!lockoutTime=0))))

Odwolujemy się do obiektu „user” oraz klasy „user”. Zapytanie jest tak skonstruowane, ponieważ LDAP nie obsługuje operatora mniejszości „>” a jedynie ‚mniejsze lub równe’. Musimy wiec dodatkowo dołożyć zaprzeczenie „równości” zera.  Więcej o operatorach zapytań LDAP można przeczytać na stronie technetu: http://social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters.aspx

Gotowe zapytanie powinno wygladać tak jak poniżej:

Zapytanie znajdujące zablokowanych użytkowników
Zapytanie znajdujące zablokowanych użytkowników

 

 

Po odświerzeniu zapytania powinniśmy zobaczyć listę aktualnie zablokowanych kont w Active Directory:

Wynik stworzonego zapytania
Wynik stworzonego zapytania

 

Na koniec warto zapisać stworzoną konsolkę MMC.

 

 

Novatel Merlin XU870 – zdejmowanie blokady SIMLOCK oraz konfiguracja połączenia w systemie Windows 7

XU870

Ostatnio w moje ręce trafił modem oparty na złączu ExpressCard, Merlin XU870 firmy Novatel. Jes to to dość popularne urządzenie oferowane chyba przez wszystkich dostawców Internetu GSM w Polsce. Niestety w moim przypadku modem ten był w pełni funkcjonalny jedynie w Erze, a ja uparłem się, że będę z niego korzystał w Orange. W poniższym artykule opiszę procedurę zdejmowania blokady SIMLOCK oraz pokażę przykładową konfigurację tego urządzenia na przykładzie programu top_netinfo pobranego ze strony http://bez-kabli.pl Czytaj dalej Novatel Merlin XU870 – zdejmowanie blokady SIMLOCK oraz konfiguracja połączenia w systemie Windows 7

SSHFS czyli cała sieć pod ręką

Dysk

Kilka słów wstępu

Wyobraźmy sobie następującą sytuację: Włączamy komputer, a  zaraz po uruchomieniu w naszym katalogu domowym mamy dostępne pliki naszej strony WWW znajduje się u naszego dostawcy hostingowego, obok znajdują się nasze pliki mp3 zgromadzone na naszym serwerze który stoi w drugim pokoju i możemy z nich korzystać jak z zasobów lokalnych (tworzyć z nich playlisty bez kopiowania), kolejny katalog to filmy znajdujące się na zewnętrznym urządzeniu podpiętym pod telewizor…. I to wszystko na naszym Linuksie. Brzmi nieźle i wydaję się być przejawem zaawansowanej wiedzy dostępnej tylko dla [i]weteranów[/i] informatycznych? To wszystko zrealizujesz za pomocą jednego programu: sshfs zainstalowanego na dowolnej platformie z rodziny Linux. Ja będę wykonywał wszystko na systemie Debian.

Czym jest SSHFS?

sshfs jest to aplikacja pisana przez autora modułu fuse czyli modułu jądra systemu wykorzystywanego do programowania logiki systemu plików. Dzięki sshfs możemy montować zdalne systemy plików nie posiadając uprawnień root’a oraz korzystać z nich prawie tak samo jak gdyby był to katalog lokalny. Jak by tego było mało, to wszystkie przesyłane siecią dane są szyfrowane tak samo jak przy użyciu ssh.

Przygotowania

Pierwsze co musimy zrobić to sprawdzenie czy nasze jądro Linuksa posiada zainstalowany już moduł fuse. Jest on dołączony do jądra od wersji 2.6.xx. wystarczy go tylko załadować. Aby sprawdzić wersję naszego jądra wydajemy polecenie

uname -a

Powinniśmy dostać wynik podobny do tego:
Linux Debian 2.6.26-2-686 #1 SMP Tue Mar 9 17:35:51 UTC 2010 i686 GNU/Linux

możemy też bezpośrednio sprawdzić czy załadowany jest moduł jądra wydając polecenie(będąc zalogowanym jako administrator):
modprobe -l
powinniśmy zobaczyć:
/lib/modules/2.6.26-2-686/kernel/fs/fuse/fuse.ko

jeżeli go nie posiadamy to wpisujemy:
sudo apt-get install fuse

następnie należy załadować moduł, wpisując:
modprobe fuse

Kolejne co musimy zrobić to zainstalować program sshfs
sudo apt-get install sshfs

Ostatnim krokiem konfiguracyjnym jest dodanie siebie do grupy fuse. Można to zrobić na dwa sposoby:
usermod -a -G fuse nazwa_uzytkownika

lub edytując plik /etc/group

Montowanie zdalnego katalogu:

Dla przykładu zamontuję pliki muzyczne znajdujące się na zdalnym serwerze w swoim katalogu domowym.
Tworzymy katalog mp3 w naszym katalogu domowym
mkdir ~/mp3
i podmontowujemy znalny katalog.
sshfs uzytkownik@serwer:/sciezka_do_muzyki ~/mp3

Czyli w moim przypadku w celu podmontowania katalogu Muzyka znajdującego się na serwerze o adresie IP 10.33.13.252 wpisuję:
sshfs kyo@s10.33.13.252:/media/dane/muzyka ~/mp3

Odmontowywanie

Aby odmontować zdalny katalog wpisujemy polecenie fusermount -u [punkt_pontowania] czyli w naszym wypadku
fusermount ~/mp3

logowanie bez hasła

Bardzo ciekawą opcją którą możemy wykorzystać jest możliwość logowania się na zdalny komputer bez podania hasła. Dzięki operacji, którą zaraz opiszę, nie tylko będziemy mogli montować katalogi bez podania hasła, ale też logować się na nasz host bez hasła za pomocą ssh.
Całość polega na tym, że na lokalnym komputerze tworzymy klucz RSA, który potem wysyłamy na serwer jako nasze „uwierzytelnienie”. Ok, tak więc do dzieła ;)
Na naszym komputerze do którego będziemy podpinać zewnętrzne katalogi wpisujemy:
ssh-keygen
W między czasie 3 razy wciskamy enter (klucz zostanie zapisany w domyślnej lokalizacji w naszym katalogu domowym)
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kyo/.ssh/id_rsa):[Enter]
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
Your identification has been saved in /home/kyo/.ssh/id_rsa.
Your public key has been saved in /home/kyo/.ssh/id_rsa.pub.
The key fingerprint is:
24:b7:fe:af:95:95:18:11:31:d5:df:96:2f:c2:35:a9 kyo@debian

Następnie należy wysłać klucz na nasz serwer (ten, którego zasoby będziemy podpinać)

kyo@debian: ssh-copy-id -i ~/.ssh/id_rsa.pub ip_serwera
Powinno nam się wyświetlić pytanie o hasło, wpisujemy takie hasło, jakie mamy na serwerze.

Jeżeli wszystko przebiegnie bez problemów to powinniśmy dostać komunikat:

Now try logging into the machine, with "ssh 'remote-host'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

Automatyczne montowanie

Można również zrobić tak, że zdalny zasób będzie montowany wraz ze startem systemu. Na wielu forach jest napisane, że wystarczy dodać odpowiedni wpis do /etc/fstab i już wszystko działa. Ale tak nie jest z prostego powodu. w Większości Linuksów wpisy w fstab są wykonywane wcześniej niż zostanie skonfigurowana sieć, przez co zasób nie może być poprawnie podmontowany. Rozwiązanie jest następujące, należy dodać wpis do fstaba ale nie montować go a potem jak jest już skonfigurowana sieć zamontować zasób tak jak lokalny dysk. Oto jak należy to zrobić.

Najpierw faktycznie edytujemy (będąc zalogowanym jako root) wpis w pliku /etc/fstab, dodając na końcu linię:

sshfs#użytkownik@zdalny_serwer:/tmp   /home/użytkownik/katalog_montowania/    fuse    users,noauto    0 0

na początku tej linii podajemy mówimy, że będzie dodawany zasób sshfs oraz podajemy jego adres, potem podajemy miejsce gdzie ma zostać zamontowany zasób, następnie definiujemy, że ma być użyte fuse. Kolejne dwa parametry są bardzo ważne. Pierwszy z nich(users) mówi, że użytkownicy nie będący rootem mogą montować ten zasób, a drugi znich zabrania faktycznego montowania podczas startu sytemu (noauto).

Następnie należy zdefiniować samo montowanie zasobu, ale w momencie jak jest już skonfigurowana sieć. Dobrym miejscem jest dodanie tego wpisu do pliku bashrc, który zostaje wykonany gdy poprawnie się zalogujemy do systemu(po wprowadzeniu hasła).
Edytujemy plik: ~/.bashrc  (znak ~ oznacza nasz katalog domowy) i wpisujemy:
mount /punkt_montowania
czyli dla przykładu gdy w pliku sftab mamy wpis:
sshfs#kyo@s10.33.13.252:/media/dane/muzyka   /home/kyo/mp3/    fuse    users,noauto    0 0

to wpisujemy:
mount ~/mp3/

Czasami zdarza się, że odchodząc od komputera wylogowujemy się, wtedy gdy będziemy się ponownie logować, skrypt ponownie się wykona i będzie chciał zamontować zasób. Dostaniemy błąd, ponieważ zasób jest już zamontowany. Pewnym rozwiązaniem jest odmontowywanie zasobu podczas wylogowywania się. Aby to zrobić należy do pliku ~/.bash_logout dodać wpis:
fusermount ~/mp3

Mam nadzieję, że dzięki temu poradnikowi sshfs stanie się dla każdego bardzo przydatnym narzędziem.